domingo, 26 de agosto de 2012

¿Qué es un requerimiento?

Un requerimiento es una descripción de una condición o capacidad que debe cumplir un sistema, ya sea derivada de una necesidad de usuario identificada anteriormente, o bien, estipulada en un contrato, estándar, especificación u otro documento formalmente impuesto al inicio del proceso. Entonces bien, un requerimiento puede definirse como un atributo necesario dentro de un sistema, que puede representar una capacidad, una característica o un factor de calidad del sistema de tal manera que le sea útil a los clientes o a los usuarios finales. En términos generales, un requerimiento es una necesidad o cualidad que un cliente necesita cubrir para poder resolver un problema o lograr un objetivo, y que debe exhibir o poseer un sistema, forma o funcionalidad de un producto o servicio para satisfacer esas necesidades.


  • Un requerimiento funcional puede ser una descripción de lo que un sistema debe hacer. Este tipo de requerimiento específica algo que el sistema entregado debe ser capaz de realizar.
  • Un requerimiento no funcional o de rendimiento o de calidad, especifica algo sobre el propio sistema, y cómo debe realizar sus funciones. Algunos ejemplos de estos aspectos mencionados antes son la disponibilidad, el testeo, el mantenimiento o la facilidad de uso.

Una colección de requerimientos describe las características o atributos del sistema deseado. Se omite el cómo debe lograrse su implementación, ya que esto debe ser decidido en la etapa de diseño por los diseñadores.

Lo importante de los requerimientos al transmitirlos es que sean claros, únicos (no redundantes o que se tengan conflictos con otros), que sean concretos y que ante todo se alineen al objetivo o visión inicial.

Cada metodología tiene formas diferentes para expresarlos, lo común de todas ellas es que coinciden en la importancia del requerimiento, siendo fundamental para las demás actividades del equipo de trabajo, los requerimientos deben de ayudar a establecer el plan de trabajo (esfuerzos, tiempos y costo) incluyendo la manera en que se va a probar y validar.

Bibliografía

  • Ingeniería de Software: un enfoque práctico
    • Roger S. Pressman, McGraw-Hill
  • Ingeniería de Software
    • Ian Sommerville, Pearson
  • Ingeniería de Software
    • Benet Campderrich Falgueras, Editorial OUC
  • Técnicas Cuantitativas para la Gestión en la Ingeniería del Software
    • Isabel Ramos Román, José Javier Dolado Cosín, Netbiblo
  • Introducción Al Análisis de Sistemas Y la Ingeniería de Software
    • Roberto Cortés Morales, EUNED
  • Ingeniería de Software
    • Alfredo Weitzenfeld, Cengage Learning

Descarga documentación

lunes, 20 de agosto de 2012

Tablas de multiplicar con rango

Objetivo:

El objetivo de este programa radica en la producción de ‘n’ tablas en cierto rango determinado por el usuario, de tal forma que sea este quien decida qué resultados brindará el programa, ya que el determinará los datos.

Algoritmo:

  1. Inicializar la variable ‘resultado’ igual a cero.
  2. Inicializar la variable ‘numero’.
  3. Inicializar la variable ‘inicio’.
  4. Inicializar la variable ‘fin’.
  5. Inicializar la variable ‘rinicio’.
  6. Inicializar la variable ‘nfin’.
  7. Pedir al usuario la tabla desde la cual quiere comenzar.
  8. Aceptar en ‘inicio’.
  9. Pedir al usuario la tabla hasta la cual quiere terminar.
  10. Aceptar en ‘fin’.
  11. Pedir al usuario el rango con el que quiere comenzar.
  12. Aceptar en ‘rinicio’.
  13. Pedir al usuario el rango con el que quiere terminar.
  14. Aceptar en ‘rfin’.
  15. Asigno ‘inicio’ a la variable ‘numero’ para empezar a contar desde ahí.
  16. Realizo el primer ciclo por un ‘for’, el número de tablas que quiero.
  17. Multiplico 'numero' desde el rango inicial hasta el rango final.
  18. Determino si se ha llegado al rango final para pasar al siguiente ciclo.
  19. Imprimo mis resultados.

Diagrama de Flujo:

Pseudocódigo:

  1. Resultado = 0
  2. Numero = 0
  3. Inicio = 0
  4. Fin = 0
  5. Rinicio = 0
  6. Rfin = 0
  7. Desplegar “¿Tabla desde la cual quieres comenzar?”
  8. Aceptar en ‘inicio’
  9. Desplegar: “¿Tabla hasta la cual quieres terminar?”
  10. Aceptar en ‘fin’
  11. Desplegar:” ¿Rango con el que quieres comenzar?”
  12. Aceptar en ‘rinicio’
  13. Desplegar:” ¿Rango con el que quieres terminar?”
  14. Aceptar en ‘rfin’
  15. numero = inicio
  16. int rep=inicio
  17. While(rep<=fin) Do
        int num2=rinicio
        While(num2 <=rfin) Do
           resultado=numero * num2
           imprimir ‘resultado’
           num2++
        End_While
        numero++
        rep++
    End_While

Código:

Ejecución:

Descarga de código y documentación

domingo, 19 de agosto de 2012

Plan Estratégico

¿Quiénes somos?

NOMBRE DE LA EMPRESA

Orbitum

RAZÓN SOCIAL

Orbitum Software S.A. de C.V.

OBJETIVO DEL PROYECTO

Facilitar el proceso de servicio de importación y exportación en un entorno PC –Celular– Tablet para cualquier cliente que lo desee.


DEFINICIÓN DEL PROYECTO

Gracias a la necesidad de nuestro cliente al desear obtener un sistema distribuido para automatizar una empresa desde la nube sin necesidad de instalar software alguno, siendo compatible en cualquier sistema operativo que el cliente desee usar, Orbitum se dedicara al desarrollo total. Por tanto los sistemas distribuidos se implementarían en un ciclo de PC –Celular– Tablet ya que todos estarían sincronizados, facilitando un poco más la compartición de archivos de manera más extensa. De esta manera es más sencillo compartir todo lo que la empresa requiera y así brindar un servicio más rápido a cada cliente. 



LOGOTIPO



ESLOGAN

“Descubre lo que es posible”


MISIÓN


Somos una empresa compuesta por un grupo de jóvenes, que se ha dado a la tarea de desarrollar aplicaciones con calidad que faciliten y/o lleven a un rendimiento laboral o social excelente, logrando esto a través del constante aprendizaje y debates entre los miembros de la empresa, sin dejar de lado las opiniones de los clientes pasados y actuales sobre las tecnologías que deberían ser utilizadas, todo con el fin de satisfacer las necesidades de nuestros clientes. 



VISIÓN


Como empresa, buscamos ser reconocidos por ofrecer unas condiciones de uso del producto o servicio superiores a las que el cliente espera recibir y a un precio accesible,la calidad del producto y la interacción con nuestros clientes y el compromiso por parte de la empresa, con el fin de mejorar día a día y poder desarrollar proyectos capaces de competir con empresas que justo ahora ya laboran en el mercado, sin perder de vista la innovación y las necesidades del cliente. 


VALORES


  •  ConfianzaNuestra empresa siempre brindará a nuestros clientes la confiabilidad y la certeza de que nuestro servicio funciona de manera adecuada y exitosa (es decir, de forma práctica y utilitaria), siendo esta capaz de cumplir las más altas
  • Amabilidad: Nuestra empresa siempre tratará al cliente con gentileza, delicadeza y cordialidad, para que de esta forma el cliente se sienta a gusto con el servicio brindado y vuelva satisfactoriamente a utilizar el mismo.
  • Compromiso: Nos comprometeremos a ofrecer uno de los mejores servicios en comparación a otros, con altos estándares de excelencia, respetando y cumpliendo todas las normas establecidas dentro de la empresa, todo con el objetivo de brindar a nuestros clientes una atención sobresaliente.
  • Responsabilidad: Nuestra empresa siempre cumplirá lo acordado con el cliente en tiempo y forma, tanto en las entregas como en el servicio, siendo además responsables de brindarles a los clientes la mejor asistencia posible.
  •  Puntualidad: Todos los productos y servicios solicitados por los clientes se entregarán a tiempo, como se ha acordado previamente en la fecha que se solicitan, sin ninguna prorroga.
  • Comunicación: La comunicación en nuestra empresa es vital para su éxito, y en nuestra empresa esta no es la excepción, ya que trabajaremos con una comunicación constante y efectiva entre todos los miembros que formamos parte de la empresa, todo con el fin de brindar el mejor servicio.  
  • Cooperación: Todos los integrantes de la empresa trabajaran en equipo, olvidando las diferencias y conflictos entre los mismos, para satisfacer siempre las necesidades de nuestros clientes.

FILOSOFÍA


Nuestra empresa busca ser reconocida por su trato respetuoso y solidario hacia nuestros clientes, ofreciendo un servicio de alta funcionalidad y excelencia, responsabilizándonos día con día, para satisfacer las necesidades de los mismos. Además nosotros manejamos una frase que nos distingue: “El éxito no se logra sólo con cualidades especiales. Es sobre todo un trabajo de constancia, de método y de organización”. Esta frase es representativa de nuestra empresa, ya que solamente mediante el esfuerzo, la constancia y el trabajo arduo, es como se consiguen resultados productivos.

CALIDAD 


Dentro de nuestro sistema, mencionamos repetidas veces el concepto de calidad, el cual lo consideramos como un “plan de mejora continua”, sin en cambio, esto puede llegarse a considerarse como ambiguo, ya que no se describe el proceso por el cual nuestros servicios y sistemas habrán de pasar para ofrecer ese “nivel de excelencia”; por ello a continuación se mostrará el proceso que utilizaremos. 

Nuestro sistema utilizará el Circulo de Deming PHVA como una metodología aplicable que nos permitirá de una manera organizada, priorizar y planificar las acciones de mejora continua, esto con el objetivo de conseguir un salto cualitativo para el cumplimiento de nuestro principal objetivo “satisfacer al cliente”.

Las actividades las dividiremos en:
  • Planificar:
    •  Realizaremos un diagnostico de la situación actual en la que nos encontramos, identificando el proceso que se quiere mejorar.
    •  Estableceremos los objetivos y procesos necesarios para la obtención de resultados productivos.
    •  Definiremos los procesos necesarios para conseguir estos objetivos, esto es, el establecimiento de acciones de mejora continua (estrategias).
  • Hacer:
    •  Llevaremos a cabo lo planeado.
    •  Implementar los nuevos procesos establecidos.
  • Verificar:
    •  Corroboraremos si se cumplió o no lo planeado.
    •  Se recopilaran los datos de control, para analizarlos, compararlos con los objetivos y especificaciones, y evaluar si se cumplió la mejora.
  • Actuar:
    •  Tomaremos decisiones en base a los resultados.
    •  Si se detectaron errores parciales en el paso anterior, realizaremos un nuevo ciclo PDCA con nuevas mejoras.
    •  Si no se detectaron errores relevantes, aplicaremos a gran escala las modificaciones de los procesos.
Cada uno de los procesos que desarrollemos, los introduciremos a este plan de mejora continua, con el objetivo de evitar debilidades dentro del mismo sistema, incrementando la eficacia del funcionamiento y la gestión. 


POLÍTICAS DE LA EMPRESA

    • Nuestra empresa se compromete a trabajar con la excelencia que nuestros clientes se merecen, para satisfacer así, las necesidades de los mismos.
    • Nuestra empresa se compromete a entregar su trabajo con puntualidad, ya que está es una de las más importantes obligaciones.
    • Los integrantes de la empresa están siempre dispuestos a ofrecer el respeto que todo cliente se merece, además de un respeto mutuo entre los mismos integrantes, para así garantizar la mejor convivencia.
    • Nuestra empresa siempre será honesta con el cliente, para ofrecer un trato cordial y autentico, forjando así una confianza mutua entre empresa y cliente.
    • En la compañía se planeará todo el proceso de desarrollo, mediante técnicas de mejora continua y documentos desde el principio hasta el fin.
    • Nuestra empresa, los integrantes se apoyaran y compartirán sus propuestas para que los productos sean aptamente funcionales y al ocurrir esto se respetaran las propuestas aportadas por cada integrante.
    • Nuestra empresa ofrecerá una programación de alta eficacia (que sea funcional), de manera ordenada y correcta

    Excelencia: Cualidad de lo que es extraordinariamente bueno y también de lo que excede las normas ordinarias.
    Funcionalidad: Conjunto de características que hacen a algo práctico y utilitario.

      OBJETIVO GENERAL

      Desarrollar un software de calidad, el cual tiene por meta lograr la satisfacción total de nuestro cliente, ofreciendo el mejor de los servicios.
       

      OBJETIVO PARTICULAR

        • Desarrollar un software que cumpla con todos los requerimientos que hayan sido tomados del cliente y además cumpla con estándares de diseño y funcionalidad.
        • De la misma manera, deseamos cumplir con todas las expectativas de los clientes que requieran software.
        • Aplicar todos nuestros conocimientos nuevos y ya adquiridos, para lograr que nuestro software sea más complejo y completo.

            ESTRATEGIAS

            Corto plazo
            Buscar clientes potenciales para satisfacer sus necesidades y obtener recomendaciones y buenas expectativas, también automatizar nuestros procesos y alcanzar una estándar de calidad y certificarnos en una norma mediante la mejora continua de nuestros softwares.

            Mediano Plazo
            Buscar la incubación en el IPN o en cualquier incubadora de empresas, con el objetivo de recibir capacitación acerca del mercado.

            Largo Plazo
            Largo Plazo; Lanzarnos al mercado como una PyME o como una gran empresa, asistiendo a ferias y coloquios para ofrecer nuestros servicios a diversos clientes.
            Estrategias generales:
            • Diversificar los productos.
            • Diversificar los mercados. 
            • Competir en base a los costos. 
            • Competir en base a la diferenciación. 
            • Enfocarse en un segmento de mercado específico. 

            Estrategias específicas:

            • Aumentar el número de vendedores. 
            • Disminuir los precios. 
            • Elevar el gasto en publicidad. 
            • Agregar nuevas promociones de ventas. 

            MATRIZ FODA


            Descarga de Plan Estratégico

            viernes, 17 de agosto de 2012

            Recursividad

            El término recursividad se puede definir con una sencilla palabra: repetición, en java, siendo más específicos un método recursivo es aquel que llama a si mismo de manera directa o indirecta, también podemos definirla como una técnica de programación que permite que un bloque de instrucciones se ejecute n veces y en ocasiones remplaza a las estructuras repetitivas, y para ello podemos plantear tipos de recursividad.

            • Recursión lineal: Este se define como el método que tiene una llamada recursiva y su velocidad estará en función de la rapidez con la cual se acerque nuevamente hacia el caso base. Éste método esta dividido a su vez en:

            1. Recursión por llamada en cola: Es cuando la llamada recursiva se hace al final del método.
            2. Para ejemplificar esto tenemos:
              int mcd(a, b){
                  if( b==0)
                     return a;
                  else
                     return mcd( b, a/b);
              }

              Lo cual nos arrojará el Mínimo Común Divisor de 2 números.

            3. Recursión sin llamada en cola: Se da cuando después de ejecutar la llamada recursiva, el método debe realizar una operación pendiente para completar todo proceso.
            4. Para ejemplificar esto tenemos:
              int factorial(n){
                  if( n==1)
                     return 1;
                  else
                     return n * factorial(n-1);
              }

              Lo cual nos arrojará el resultado de la factorial de un número. Como podemos ver, después de haber ejecutado la llamadas recursiva debemos realizar la operación “multiplicación”, para este caso en especifico.

            • Recursión no lineal: Sí se da el caso de que haya más de una llamada recursiva por rama del condicional, entonces podemos decir que es un método recursivo es no lineal.

            1. Recursión en cascada: Esta se da cuando en cada rama hay más de una llamada a la función recursiva.
            2. Para ejemplificar esto tenemos:
              int fibonacci(n){
                  if( n<=1)
                     return 1;
                  else
                     return fibonacci(n-1) + fibonacci(n-2);
              }

              Lo cual nos arrojará el n-ésimo valor de la serie de Fibonacci.

            3. Recursión en anidada: Es cuando alguna llamada recursiva recibe como parámetro a una llamada recursiva.
            4. Para ejemplificar esto tenemos:
              int Ackerman(m, n){
                  if (m == 0)
                     return n+1;
                  else if (m > 0 and n == 0)
                     return ackermann(m-1, 1);
                  else if (m > 0 and n > 0):
                     return ackermann(m-1, ackermann(m, n-1));
              }

              Lo cual nos arrojará la función Ackerman.

            • Recursión mutua: Este método es cuando dos funciones son recurrentes entre sí.

            Para ejemplificar esto tenemos:
            int impar(n){
                if (n==0)
                   return false;
                else
                   return par(n-1);

            int par(n){
                if (n==0)
                   return true;
                else
                   return impar(n-1);
            }

            Lo cual nos arrojará si el parámetro que le enviamos al método es par o impar (donde n es un entero forzosamente).

            ¿Pero como funciona el método recursivo?

            Todos los algoritmos son recursivos cuando, estando encapsulados dentro de una función, son llamados desde ella misma una y otra vez. Por lo tanto podemos decir que algo es recursivo si se define en términos de sí mismo o en esencia cuando para definirse hace mención a sí mismo.

            La referencia a sí misma debe ser relativamente más sencilla que el caso considerado, todo lo anterior para que una llamada recursiva sea válida.

            Este proceso parece que es infinito, pero en términos generales, la clave está en que en cada llamada el problema se va “simplificando” de tal manera que llegará a cierto punto en el cual no hará falta llamar una vez más al método recursivo. Solo por mencionar un ejemplo, es necesario recordar que un árbol tiene ramas y que la rama tiene ramitas más pequeñas, que a su vez tiene más ramitas, pero tarde o temprano va llegar el momento en el cual se llegue a una rama que solo tiene hojas.

            Nosotros pensamos que recursividad es una herramienta con mucha importancia en la programación, ya que en todos los casos permite expresar algoritmos de forma más simple y con mayor legibilidad.

            jueves, 16 de agosto de 2012

            Factorial de un número

            Objetivo:

            Obtener el resultado del factorial de un número necesariamente entero positivo “z” mediante un algoritmo que permita disminuir el valor de Z de 1 en 1 hasta llegara uno, haciendo uso del método recursivo, y en el momento preciso retorne todas las llamadas realizadas anteriormente en el mismo proceso y finalizando con el desplegado del resultado en la pantalla.

            Algoritmo:

            1. Se elige un valor representado por la variable “z”.
            2. Se verifica que el valor elegido es igual a 0.
            3. Se realiza la operación con el valor.
            4. Es desplegado el resultado de la operación.

            Diagrama de Flujo:

            Pseudocódigo:

            1. Inicialización de la variable int z;
            2. z => 50;
            3. Comparación z != 0;
            4. Calculo la operación res=z*(z-1)!;
            5. Desplegar en pantalla: “El resultado de la operación es:";

            Código:

            Ejecución:

            Descarga de código y documentación con recursividad

            Multiplicación de dos numeros enteros con sumas

            Objetivo:

            Obtener el resultado del producto de dos números enteros “a” y “b” mediante un algoritmo que multiplique el primer valor por el segundo valor, haciendo uso del método recursivo, el cual permita sumar la variable “a” al valor de b disminuido en 1 y volver a realizar la operación principal y finalizando con el desplegado del resultado en la pantalla.

            Algoritmo:

            1. Se elige un valor representado por la variable “a”.
            2. Se escoge un segundo valor representado por la variable “b”.
            3. Se verifica que los valores sean iguales a 0 ó a 1.
            4. Se multiplican los valores de las variables.
            5. Es desplegado el resultado de la operación.

            Diagrama de Flujo:

            Pseudocódigo:

            1. Inicialización de las variables int a, b;
            2. a => 7 , b => 5;
            3. Comparación a != 0 && b != 0;
            4. Multiplico a + (b-1 * a);
            5. Desplegar en pantalla: “El resultado de la multiplicación es:";

            Código:

            Ejecución:

            Descarga de código y documentación con recursividad

            Suma de dos números enteros

            Objetivo:

            Obtener el resultado de la adición de dos números enteros “x” y “y” mediante un algoritmo que sume el primer valor con el segundo valor y finalizando con el desplegado del resultado en la pantalla.

            Algoritmo:

            1. Se elige un valor representado por la variable “x”.
            2. Se escoge un segundo valor representado por la variable “y”.
            3. Se verifica si alguno de los valores es igual a 0.
            4. Se suman los valores de las variables.
            5. Es desplegado el resultado de la operación.

            Diagrama de Flujo:

            Pseudocódigo:

            1. Inicialización de las variables int x, y;
            2. x => 14 , y => 8;
            3. Comparación x != 0 && y != 0;
            4. Sumo x + y;
            5. Desplegar en pantalla: “El resultado de la suma es:";

            Código:

            Ejecución:

            Descarga de código y documentación con recursividad

            Subir y bajar con métodos e iteraciones en Karel

            Utilizando la aplicación de Karel:

            • Sube y baja una escalera de 5 escalones.
            • Utiliza el lenguaje de ‘java’.
            • Utiliza solo los comandos básicos move() y turnleft().
            • Utiliza la sentencia de control ‘iterate()’.
            • El objetivo de este programa, es la práctica de sentencias de control en Karel, mediante un programa que suba y baje una escalera, con el principal propósito de reducir aún más el código.

            Mundo:

            Código:

            Ejecución:

            Descarga de código

            Descarga de Karel

            Subir y bajar con métodos en Karel

            Utilizando la aplicación de Karel:

            • Sube y baja una escalera de 5 escalones.
            • Utiliza el lenguaje de ‘java’.
            • Utiliza solo los comandos básicos move() y turnleft().
            • Utiliza ‘métodos’ para la reducción de código.
            • El objetivo de este programa, es la práctica de comandos básicos de Karel, mediante un programa que suba y baje una escalera, con el principal propósito de reducción de código.

            Mundo:

            Código:

            Ejecución:

            Descarga de código

            Descarga de Karel

            Subir y bajar con Karel

            Utilizando la aplicación de Karel:

            • Sube y baja una escalera de 5 escalones.
            • Utiliza el lenguaje de ‘java’.
            • Utiliza solo los comandos básicos move() y turnleft().
            • El objetivo de este programa, es la práctica de comandos básicos de Karel, mediante un programa que suba y baje una escalera.

            Mundo:

            Código:

            Ejecución:

            Descarga de código

            Descarga de Karel