Ingeniería de Software - Análisis y Diseño

Ingeniería de Software es una disciplina o área de las ciencias de la computación que ofrece métodos y técnicas para desarrollar y mantener software de calidad que resuelve problemas de todo tipo. Un aspecto muy importante de Ingeniería de Software es que proporciona parámetros formales para lo que se conoce como Gestión (o Administración) de Proyectos de Software. La Ingeniería de Software proporciona diversas métricas y metodologías que pueden usarse como especificaciones para todo lo referente a la administración del personal involucrado en proyectos de software, ciclos de vida de un proyecto de software, costos de un proyecto, y en si todo el aspecto administrativo que implica el desarrollar software. Ingeniería en general es el análisis, diseño, construcción, verificación y gestión de entidades técnicas.
                                   
De acuerdo con Pressman, el modelo lineal secuencial, también conocido como modelo en cascada, contempla seis actividades que deben llevarse a cabo, y
se basa en un enfoque sistemático y secuencial del desarrollo del software que comienza en un nivel de sistemas y progresa con el análisis, diseño, codificación, pruebas, y mantenimiento.

  1. Ingeniería y modelado de Sistemas. El software siempre forma parte de un contexto más grande, que puede ir desde una empresa hasta un sistema. El trabajo comienza estableciendo requisitos de todos los elementos del sistema, y asignando al software algún subgrupo de estos requisitos
  2. Análisis de los requisitos del software. El proceso de reunión de requisitos se intensifica y se centra especialmente en el software. Dentro del proceso de análisis es fundamental que a través de una colección de requerimientos funcionales y no funcionales, el desarrollador o desarrolladores del software comprendan completamente la naturaleza de los programas que deben construirse para desarrollar la aplicación, la función requerida, comportamiento, rendimiento e interconexión.
  3. Diseño. En general, la actividad del diseño se refiere al establecimiento de las estructuras de datos, la arquitectura general del software, representaciones de interfaz y algoritmos. El proceso de diseño traduce requisitos en una representación de software.
  4. Generación de Código. Esta actividad consiste en traducir el diseño en una forma legible por la máquina.
  5. Pruebas. Una vez que se ha generado código, comienzan las pruebas del software o sistema que se ha desarrollado. De acuerdo con Pressman, el proceso de pruebas se centra en los procesos lógicos internos del software, asegurando que todas las sentencias se han comprobado, y en los procesos externos funcionales, es decir, la realización de las prueba para la detección de errores.
  6. Mantenimiento. El software indudablemente sufrirá cambios, y habrá que hacer algunas modificaciones a su funcionalidad. Es de suma importancia que el software de calidad pueda adaptarse con fines de acoplarse a los cambios de su entorno externo.


Análisis

Pressman establece que la tarea del análisis de requisitos es un proceso de descubrimiento, refinamiento, modelado y especificación. Se refina en detalle el ámbito del software, y se crean modelos de los requisitos de datos, flujo de información y control, y del comportamiento operativo. Se analizan soluciones alternativas y se asignan a diferentes elementos del software. El análisis de requisitos del software puede dividirse en cinco áreas de esfuerzo:
           
  1. Reconocimiento del problema. Reconocer los elementos básicos del problema tal y como los perciben los usuarios finales.
  2. Evaluación y síntesis. Definir todos los objetos de datos observables externamente, evaluar el flujo y contenido de la información, definir y elaborar todas las funciones del software, entender el comportamiento del software en el contexto de acontecimientos que afectan al sistema.
  3. Modelado. Crear modelos del sistema con el fin de entender mejor el flujo de datos y control, el tratamiento funcional y el comportamiento operativo y el contenido de la información.
  4. Especificación. Realizar la especificación formal del software
  5. Revisión. Un último chequeo general de todo el proceso.

Los requerimientos de sistema que se definen en la etapa de análisis de un proceso de Ingeniería de Software generalmente se clasifican como requerimientos funcionales y requerimientos no funcionales.

Los requerimientos funcionales son los que se encargan de definir lo que la herramienta de software debe hacer. Definen los alcances del sistema en cuanto a las acciones que debe de realizar, y en cuanto a la transferencia de datos entre todas las diferentes funciones del sistema.

Los requerimientos no funcionales son aquellos que definen lo que la herramienta de software debe tener en cuanto a apariencia, sensación, operabilidad, y mantenimiento.
Galvis establece que para recolectar requerimientos no funcionales hay que por lo menos tomar en cuenta la siguiente información:

  • Características de la población objetivo. Se refiere a cuestiones como la edad, características físicas y mentales, experiencias previas, expectativas, actitudes, aptitudes, o intereses.
  • Conducta de entrada y campo vital.
  • Problema o necesidad a atender. Es necesario ubicarse dentro del contexto del problema que pretende atacarse.
  • Justificación de los medios interactivos a utilizar. Galvis establece que el apoyo informático debe ser tomado en cuenta siempre y cuando no exista un mecanismo mejor para resolver el problema.
           
Diseño

El diseño es el primer paso en la fase de desarrollo de cualquier producto o sistema de ingeniería. De acuerdo con Pressman, el objetivo del diseño es producir un modelo o representación de una entidad que se va a construir posteriormente
De acuerdo con McGlaughlin, hay tres características que sirven como parámetros generales para la evaluación de un buen diseño.
                   
  1. El diseño debe implementar todos los requisitos explícitos obtenidos en la etapa de análisis.
  2. El diseño debe ser una guía que puedan leer y entender los que construyen el código y los que prueban y mantienen el software.
  3. El diseño debe proporcionar una idea completa de lo que es el software.

Diseño del Software

El diseño del software desarrolla un modelo de instrumentación o implantación basado en los modelos conceptuales desarrollados durante el análisis del sistema. Implica diseñar la decisión sobre la distribución de datos y procesos
El diseño es la primera de las tres actividades técnicas que implica un proceso de ingeniería de software (diseño, codificación y pruebas). Generalmente la fase de diseño produce un diseño de datos, un diseño arquitectónico, un diseño de interfaz, y un diseño procedimental. El diseño de datos esencialmente se encarga de transformar el modelo de dominio de la información creado durante el análisis. En el diseño arquitectónico se definen las relaciones entre los principales elementos estructurales del programa. El diseño de interfaz describe cómo se comunica el software consigo mismo, con los sistemas que operan con él, y con los operadores que lo emplean. De acuerdo con Pressman, el diseño procedural transforma elementos estructurales de la arquitectura del programa en una descripción procedural de los componentes del software.

Arquitectura del Software

El diseño de la arquitectura del software se refiere a la estructura global del software y las maneras en que esa estructura proporciona integridad conceptual a un sistema. De acuerdo con Pressman, en su forma más simple, la arquitectura es la estructura jerárquica de los módulos del programa, la manera de interactuar de estos componentes, y la estructura de los datos usados por estos módulos.
Shaw y Garlan describen tres aspectos que deben especificarse como partes de un buen diseño arquitectónico.
  • Propiedades Estructurales: Éste es el aspecto de la representación de software que define los componentes de un sistema, y la manera en que se empaquetan estos componentes e interactúan unos con los otros.
  • Propiedades Extra-funcionales. Ésta especificación se refiere al cómo consigue la arquitectura del diseño los requisitos de rendimiento, capacidad, fiabilidad, seguridad, adaptabilidad, y otras características de la herramienta de software.
  • Familias de Sistemas Relacionados. Éste aspecto se refiere a que el diseño debería tener la capacidad de utilizar bloques de construcción arquitectónica reutilizados.

Diseño de la Interfaz
Diseñar la interfaz de usuario es un proceso que empieza con la creación de diferentes modelos de función del sistema. De acuerdo con Rubbin, durante este proceso se crean:
                           
  • Un modelo del diseño del sistema, que incorpora representaciones de datos, arquitectónicos, de interfaces y procedimentales del software.
  • Un modelo de usuario que muestra el perfil de los usuarios finales del sistema.   

El proceso de diseño de la interfaz se basa entonces en tomar en cuenta cuidadosamente las características de la población objetivo, y en crear modelos preliminares que posteriormente son ajustados y modificados en base a las recomendaciones y observaciones que hagan los usuarios finales.



Bibliografía                               
           
  • Ingeniería del Software, Un Enfoque Práctico.
Pressman, Roger
Editorial McGraw-Hill, Cuarta edición (1998)

  • Some Notes on Program Design
McGlaughlin, R
Software Engineering Notes, vol. 16 no. 4, págs 53-54 (1991)

  • Métodos Orientados a Objetos: Consideraciones Prácticas.
Martin, James. Odell, James J.
Editorial Prentice Hall (1997)

  • Formulations and Formalisms in Software Architecture
Shaw, M. y D. Garlan. (1995)


Comentarios

Entradas populares de este blog

U3 - 5. Estrategia y técnicas de negociación integrativa

U3 - 1. Naturaleza de la negociación

U3 - Ensayo de la negociación