jueves, 16 de septiembre de 2010

PRUEBA UNITARIA

una prueba unitaria es una forma de probar el correcto funcionamiento de un módulo de código. Esto sirve para asegurar que cada uno de los módulos funcione correctamente por separado. Luego, con las Pruebas de Integración, se podrá asegurar el correcto funcionamiento del sistema o subsistema en cuestión.
La idea es escribir casos de prueba para cada función no trivial o método en el módulo de forma que cada caso sea independiente del resto.
CARACTERISTICAS
Para que una prueba unitaria sea buena se deben cumplir los siguientes requisitos:
  • Automatizable: no debería requerirse una intervención manual. Esto es especialmente útil para integración continua.
  • Completas: deben cubrir la mayor cantidad de código.
  • Repetibles o Reutilizables: no se deben crear pruebas que sólo puedan ser ejecutadas una sola vez. También es útil para integración continua.
  • Independientes: la ejecución de una prueba no debe afectar a la ejecución de otra.
  • Profesionales: las pruebas deben ser consideradas igual que el código, con la misma profesionalidad, documentación, etc.
Aunque estos requisitos no tienen que ser cumplidos al pie de la letra, se recomienda seguirlos o de lo contrario las pruebas pierden parte de su función.

VENTAJAS
El objetivo de las pruebas unitarias es aislar cada parte del programa y mostrar que las partes individuales son correctas. Proporcionan un contrato escrito que el trozo de código debe satisfacer. Estas pruebas aisladas proporcionan cinco ventajas básicas:

  1. Fomentan el cambio: Las pruebas unitarias facilitan que el programador cambie el código para mejorar su estructura (lo que se ha dado en llamar refactorización), puesto que permiten hacer pruebas sobre los cambios y así asegurarse de que los nuevos cambios no han introducido errores.
  2. Simplifica la integración: Puesto que permiten llegar a la fase de integración con un grado alto de seguridad de que el código está funcionando correctamente. De esta manera se facilitan laspruebas de integración.
  3. Documenta el código: Las propias pruebas son documentación del código puesto que ahí se puede ver cómo utilizarlo.
  4. Separación de la interfaz y la implementación: Dado que la única interacción entre los casos de prueba y las unidades bajo prueba son las interfaces de estas últimas, se puede cambiar cualquiera de los dos sin afectar al otro, a veces usando objetos mock (mock object) para simular el comportamiento de objetos complejos.
  5. Los errores están más acotados y son más fáciles de localizar: dado que tenemos pruebas unitarias que pueden desenmascararlos.

TIPOS DE PRUEBAS


Las pruebas de software, en inglés testing son los procesos que permiten verificar y revelar la calidad de un producto software. Son utilizadas para identificar posibles fallos de implementación, calidad, o usabilidad de un programa de ordenador o videojuego. Básicamente es una fase en el desarrollo de software consistente en probar las aplicaciones construidas.
Las pruebas de software se integran dentro de las diferentes fases del ciclo del software dentro de la Ingeniería de software. Así se ejecuta un programa y mediante técnicas experimentales se trata de descubrir que errores tiene.
Para determinar el nivel de calidad se deben efectuar unas medidas o pruebas que permitan comprobar el grado de cumplimiento respecto de las especificaciones iniciales del sistema.
El testing puede probar la presencia de errores pero no la ausencia de ellos.

El proceso de prueba es un proceso técnico especializado de investigación que requiere de profesionales altamente capacitados en lenguajes de desarrollo, métodos y técnicas de pruebas y herramientas especializadas. El conocimiento que debe manejar un ingeniero de prueba es muchas veces superior al del desarrollador de software.




Tipos de pruebas

 



anterior texto ha sido extraido de

http://robertoyudice.com


    DISEÑO DE DATOS

    El diseño de datos transforma el modelo de campo de información,
    creado durante el análisis, en las estructuras de datos que se van a
    requerir para implementar el software.

    El diseño de datos es la primera de las tres actividades de diseño realizadas
    durante la ingeniería del software. El impacto de la estructura de datos sobre la
    estructura de programa y la complejidad procedimental, hace que el diseño de
    datos tenga una gran influencia en la calidad del software.
    Los conceptos de ocultamiento de información y de abstracción de datos
    conforman la base de los métodos de diseño de datos.
    Según Wasserman “La actividad principal durante la fase de diseño de datos es
    la selección de las representaciones lógicas de las estructuras de datos,
    identificados durante las fases de definición y especificación de requerimientos.
    Una actividad importante durante el diseño es la de identificar los módulos de
    programa que deben operar directamente sobre las estructuras de datos. De
    esta forma, puede restringirse el ámbito del efecto de las decisiones concretas
    de diseño de datos.

    Los datos bien diseñados conducen a:
    􀂃 Mejor estructura de programa
    􀂃 Modularidad efectiva
    􀂃 Complejidad procedimental reducida
     •Algunas recomendaciones para el diseño de datos son:
    Definir todas las posibles operaciones a realizar sobre los datos.
    Se deben refinar las estructuras de datos hasta tener representaciones de bajo nivel. 
    Se deben desarrollar bibliotecas útiles para la manipulación de datos.
    El lenguaje de implementación debe soportar tipos de datos abstractos.
    Se debe tener cuidado a la hora de diseñar diccionarios de datos, para que no se tengan “basureros de datos” en lugar de almacenes de datos.
     este articulo fue extraido de la siguiente pagina:     http   //indalog.ual.es/

    martes, 14 de septiembre de 2010

    DISEÑO DE INTERFAZ


    El diseño de interfaz de usuario o ingeniería de la interfaz es el diseño de computadoras, aplicaciones, máquinas, dispositivos de comunicación móvil, aplicaciones de software, y sitios web enfocado en la experiencia de usuario y la interacción.
    Normalmente es una actividad multidisciplinar que involucra a varias ramas del diseño y el conocimiento como el diseño gráfico, industrial, web, de software y la ergonomía; y está implicado en un amplio rango de proyectos, desde sistemas para computadoras, vehículos hasta aviones comerciales.
    Su objetivo es que las aplicaciones o los objetos sean más atractivos y además, hacer que la interacción con el usuario sea lo más intuitiva posible, conocido como el diseño centrado en el usuario. En este sentido las disciplinas del diseño industrial y gráfico se encargan de que la actividad a desarrollar se comunique y aprenda lo más rápidamente, a través de recursos como la gráfica, los pictogramas, los estereotipos y la simbología, todo sin afectar el funcionamiento técnico eficiente.

    Esta es la parte visual del programa y la que más aprecia el usuario final.

    El usuario final quiere algo agradable, amigable, fácil de usar, completo pero sencillo, estándar y personalizable. Los programas deben tener un diseño homogéneo.

    Se debe tener en cuenta el tamaño de las ventanas, de la fuente, los colores, los fondos, la usabilidad, la ergonomía, etc.

    También hacer parte de la interfaz los reportes, los archivos de salida y en general cualquier exposición del programa a nuestros sentidos.

    El ejemplo:  más simple es el de los botones de cerrar, maximizar etc. en una ventana. Debería ser sencillo el hacer click sobre ellos, para que sea fácil manejar las ventanas. Estos son los candidatos ideales para ser colocados en las esquinas. Pero hay muy pocos gestores de ventanas que hagan esto: la mayor parte de los temas para Metacity no lo hacen, XFCE4 tampoco. Solo es necesario mover los botones un pixel hacia arriba y a la derecha y el usuario podría cerrar la ventana sin siquiera tener que mirar.
    Distribución no adecuada para la barra de desplazamiento Figura 4: Barra de desplazamiento
    a un pixel del borde.
    Otro ejemplo son las barras de desplazamiento. En la mayor parte de las aplicaciones de mi escritorio el borde derecho de la barra de desplazamiento se encuentra a un pixel del borde de la pantalla cuando la ventana está maximizada, haciendo que el tamaño del control decrezca de una zona sencilla de pulsar de tamaño virtualmente infinito a una pequeña zona de 10 pixels de ancho con la que se necesitan unos pocos segundos extras para hacer click cada vez que quiero desplazar el contenido de la ventana.
    Para resumir este punto:
    1. Los controles más utilizados deben ser más grandes y ser distinguibles fácilmente
    2. Utiliza los bordes y esquinas de la pantalla para hacer que tus controles sean virtualmente infinitos
    3. Nunca, nunca coloques los controles a un pixel de distancia del borde de la pantalla o de una esquina
    elemento extraido de la siguiente pagina : .wwww.mundogeek.net

    DESCRIPCION DE LOS DISEÑOS

    DISEÑO ARQUITECTONICO:

    Corresponde al proceso de diseño que identifica a los subsitemas que conforman un sistema de infraestrutura de control y comunicacion la salida de este proceso de siseño es un descipcion de la arquitectura del software.  
    • El diseño arquitectonico es la etapa temprana del proceso  de diseño del sistema.
    • Representa el puente entre el proceso de especificacion y  diseño.
    • A menudo se ejecuta en paralelocon algunas actividades de especificacion
    • identifica la identificacion de los componentes principales del sistema y su especificacion.
    El objetivo principal de la Arquitectura del Software es aportar elementos que ayuden a la toma de decisiones y, al mismo tiempo, proporcionar conceptos y un lenguaje común que permitan la comunicación entre los equipos que participen en un proyecto. Para conseguirlo, la Arquitectura del Software construye abstracciones, materializándolas en forma de diagramas (blueprints) comentados. 

    No hay estándares en cuanto a la forma y lenguaje a utilizar en estos blueprints. De todas formas, existe consenso en cuanto a la necesidad de organizar dichas abstracciones en vistas, tal y como se hace al diseñar un edificio. La cantidad y tipos de vistas difiere en función de cada tendencia arquitectónica. 


    POR QUE ES IMPORTANTE LA ARQUITECTURA ?



    Facilitan la comunicación entre todas las partes interesadas en el desarrollo de un sistema basado en computadora.
    • Destaca decisiones tempranas de diseño que tendrán un profundo impacto en todo el trabajo de ingeniería del software.
    • Constituye un modelo relativamente pequeño e intelectualmente comprensible de cómo está estructurado el sistema y de cómo trabajan juntos sus componentes.

    Quizá uno de los modelos más conocidos es el “4+1” de Philippe Kruchten, vinculado al Rational Unified Process (RUP), que define cuatro vistas diferentes:

    • Vista lógica: describe el modelo de objetos.
    • Vista de proceso: muestra la concurrencia y sincronía de los procesos.
    • Vista física: muestra la ubicación del software en el hardware.
    • Vista de desarrollo: describe la organización del entorno de desarrollo.
    • Existe una quinta vista que consiste en una selección de casos de uso o de escenarios que los arquitectos pueden elaborar a partir de las cuatro vistas anteriores.
    Ejemplos de Arquitectura del Software: J2EE y MVC 

    Para ilustrar un poco lo que se ha explicado hasta ahora, a continuación se muestran dos diagramas de arquitectura en un entorno J2EE. Ambos diagramas están disponibles en Designing Enterprise Applications with the J2EE Platform, Second Edition.

    El primer diagrama consiste en una vista lógica que muestra los componentes y servicios típicos de un entorno J2EE. 




    El segundo diagrama es una vista de proceso que muestra las relaciones entre las capas model, view y controller de la arquitectura MVC bajo J2EE. 

    ¿CUAL ES LA IMPORTANCIA DE LA INGENIERIA DEL SOFTWARE?

    Los Ingenieros de Software adoptan un enfoque sistematico para llevar a cabo su trabajo y utilizan las herramientas y tecnicas necesarias para resolver el problema planteado, de acuerdo a las restricciones de desarrollo y recursos disponibles.
    la ingenieria del software es tan necesaria para crear software de calidad ademas de adquirir un software que sea fiable y funcione sobre maquinas reales.


    creemos que la postura ideal no es atacar a las demas areas llamense programacion, pruebas etc...lo adecuado es que actuemos en conjunto para alcanzar un solo objetvo el cual es crear software y servicios de calidad a nivel de software, tan importante es el lider del proyecto como el programador.   

    lunes, 13 de septiembre de 2010

    ¿QUE ES LA INGENIERIA DEL SOFTWARE?





    Según la definición del IEEE, citada por Lewis 1994 "software es la suma total de los programas de computadora, procedimientos, reglas, la documentación asociada y los datos que pertenecen a un sistema de cómputo". Según el mismo autor, "un producto de software es un producto diseñado para un usuario". En este contexto, la Ingeniería de Software (SE del inglés Software Engineering) es un enfoque sistemático del desarrollo, operación, mantenimiento y retiro del software", que en palabras más llanas, se considera que "la Ingeniería de Software es la rama de la ingeniería que aplica los principios de la ciencia de la computación y las matemáticas para lograr soluciones costo-efectivas (eficaces en costo o económicas) a los problemas de desarrollo de software", es decir, "permite elaborar consistentemente productos correctos, utilizables y costo-efectivos" Cota 1994.

    El proceso de ingeniería de software se define como "un conjunto de etapas parcialmente ordenadas con la intención de logra un objetivo, en este caso, la obtención de un producto de software de calidad"
    Jacobson 1998.El proceso de desarrollo de software "es aquel en que las necesidades del usuario son traducidas en requerimientos de software, estos requerimientos transformados en diseño y el diseño implementado en código, el código es probado, documentado y certificado para su uso operativo". Concretamente "define quién está haciendo qué, cuándo hacerlo y cómo alcanzar un cierto objetivo"Jacobson 1998.

    El proceso de desarrollo de software requiere por un lado un conjunto de conceptos, una metodología y un lenguaje propio. A este proceso también se le llama el ciclo de vida del software que comprende cuatro grandes fases: concepción, elaboración, construcción y transición. La concepción define le alcance del proyecto y desarrolla un caso de negocio. La elaboración define un plan del proyecto, especifica las características y fundamenta la arquitectura. La construcción crea el producto y la transición transfiere el producto a los usuarios.
    Actualmente se encuentra en una etapa de madurez el enfoque Orientado a Objetos (OO) como paradigma del desarrollo de sistemas de información. El Object Management Group (
    OMG) es un consorcio a nivel internacional que integra a los principales representantes de la industria de la tecnología de información OO. El OMG tiene como objetivo central la promoción, fortalecimiento e impulso de la industria OO. El OMG propone y adopta por consenso especificaciones entorno a la tecnología OO. Una de las especificaciones más importantes es la adopción en 1998 del Lenguaje de Modelado Unificado o UML (del inglés Unified Modeling Language) como un estándar, que junto con el Proceso Unificado están consolidando la tecnología OO.



    articulo extraido de la pagina :http://www.angelfire.com/scifi/jzavalar/apuntes/IngSoftware.html