En simple palabras y bsicamente, durante esta fase, se adquieren, renen y especifican las caractersticas funcionales y no funcionales que deber cumplir el futuro programa o sistema a desarrollar. El artefacto ms importante resultado de la culminacin de esta etapa es lo que se conoce como especificacin de requisitos software o simplemente documento ERS. La especificacin de requisitos de software (ERS) es una descripcin completa del comportamiento del sistema que se va a desarrollar. Incluye un conjunto de casos de uso que describe todas las interacciones que tendrn los usuarios con el software. Los casos de uso tambin son conocidos como requisitos funcionales. Adems de los casos de uso, la ERS tambin contiene requisitos no funcionales (o complementarios). Los requisitos no funcionales son requisitos que imponen restricciones en el diseo o la implementacin, como, por ejemplo, restricciones en el diseo o estndares de calidad. Las caractersticas de una buena ERS son definidas por el estndar IEEE 830-1998. Una buena ERS debe ser: Completa. Todos los requerimientos deben estar reflejados en ella y todas las referencias deben estar definidas. Consistente. Debe ser coherente con los propios requerimientos y tambin con otros documentos de especificacin. Inequvoca. La redaccin debe ser clara de modo que no se pueda mal interpretar. Correcta. El software debe cumplir con los requisitos de la especificacin. Trazable. Se refiere a la posibilidad de verificar la historia, ubicacin o aplicacin de un tem a travs de su identificacin almacenada y documentada. Priorizable. Los requisitos deben poder organizarse jerrquicamente segn su relevancia para el negocio y clasificndolos en esenciales, condicionales y opcionales. Modificable. Aunque todo requerimiento es modificable, se refiere a que debe ser fcilmente modificable. Verificable. Debe existir un mtodo finito sin costo para poder probarlo.
Desde un punto de vista conceptual, las actividades para definir requisitos son: Obtener requisitos: a travs de entrevistas o comunicacin con clientes o futuros usuarios, para saber cules son sus expectativas. Analizar requisitos: detectar y corregir las carencias o falencias comunicativas, transformando los requisitos obtenidos de entrevistas y requisitos, en condiciones apropiadas para ser tratados en el diseo. Documentar requisitos: igual que todas las etapas, los requisitos deben estar debidamente documentados. Verificar los requisitos: consiste en comprobar la implementacin de los requerimientos. Validar los requisitos: comprobar que los requisitos implementados sean funcionales para lo que inicialmente se construy el producto.
Existen varios tipos de requisitos como lo son: 1. Requisitos de Usuarios: Necesidades que los usuarios expresan verbalmente 2. Requisitos del Sistema: Son los componentes que el sistema debe tener para realizar determinadas tareas 3. Requisitos Funcionales: Servicios que el sistema debe proporcionar 4. Requisitos no funcionales: Restricciones que afectan al sistema
Un primer paso para realizar el relevamiento de informacin es el conocimiento y definicin acertada lo que se conoce como Universo de Discurso del problema, que se define y entiende por: Universo de Discurso (UdeD): es el contexto general en el cual el software deber ser desarrollado y deber operar. El UdeD incluye todas las fuentes de informacin y todas las personas relacionadas con el software. Esas personas son conocidas tambin como actores de ese universo. El UdeD es la realidad circunstanciada por el conjunto de objetivos definidos por quienes demandaron el software. A partir de la extraccin y anlisis de informacin en su mbito se obtienen todas las especificaciones necesarias y tipos de requisitos para el futuro producto software.
En la figura se muestra un esquema, ms o menos riguroso, aunque no detallado, de los pasos y tareas a seguir para realizar la captura, anlisis y especificacin de requisitos software. Tambin all se observa qu artefacto o documento se obtiene en cada etapa del proceso.
Una posible lista, general y ordenada, de tareas recomendadas para obtener la definicin de lo que se debe realizar, los productos a obtener y las tcnicas a emplear durante la actividad de elicitacin de requisitos, en fase de Especificacin de Requisitos Software es: 1. Obtener informacin sobre el dominio del problema y el sistema actual (UdeD). 2. Preparar y realizar las reuniones para elicitacin/negociacin. 3. Identificar/revisar los objetivos del usuario. 4. Identificar/revisar los objetivos del sistema. 5. Identificar/revisar los requisitos de informacin. 6. Identificar/revisar los requisitos funcionales. 7. Identificar/revisar los requisitos no funcionales. 8. Priorizar objetivos y requisitos. Algunos principios bsicos a tener en cuenta: Presentar y entender cabalmente el dominio de la informacin del problema. Definir correctamente las funciones que debe realizar el Software. Representar el comportamiento del software a consecuencias de acontecimientos externos, particulares, incluso inesperados. Reconocer requisitos incompletos, ambiguos o contradictorios. Dividir claramente los modelos que representan la informacin, las funciones y comportamiento y caractersticas no funcionales. Se pueden identificar dos formas de requisitos: Requisitos de usuario: Los requisitos de usuario son frases en lenguaje natural junto a diagramas con los servicios que el sistema debe proporcionar, as como las restricciones bajo las que debe operar. Requisitos de sistema: Los requisitos de sistema determinan los servicios del sistema y pero con las restricciones en detalle. Sirven como contrato. Es decir, ambos son lo mismo, pero con distinto nivel de detalle. Ejemplo de requisito de usuario: El sistema debe hacer prstamos Ejemplo de requisito de sistema: Funcin prstamo entrada: cdigo socio, cdigo ejemplar; salida: fecha devolucin; etc.
Se clasifican en tres los tipos de requisitos de sistema: Requisitos funcionales Los requisitos funcionales describen: Los servicios que proporciona el sistema (funciones). La respuesta del sistema ante determinadas entradas. El comportamiento del sistema en situaciones particulares.
Requisitos no funcionales Los requisitos no funcionales son restricciones de los servicios o funciones que ofrece el sistema (ej. cotas de tiempo, proceso de desarrollo, rendimiento, etc.) Ejemplo 1. La biblioteca Central debe ser capaz de atender simultneamente a todas las bibliotecas de la Universidad Ejemplo 2. El tiempo de respuesta a una consulta remota no debe ser superior a 1/2 s A su vez, hay tres tipos de requisitos no funcionales: Requisitos del producto. Especifican el comportamiento del producto (Ej. prestaciones, memoria, tasa de fallos, etc.) Requisitos organizativos. Se derivan de las polticas y procedimientos de las organizaciones de los clientes y desarrolladores (Ej. estndares de proceso, lenguajes de programacin, etc.) Requisitos externos. Se derivan de factores externos al sistema y al proceso de desarrollo (Ej. requisitos legislativos, ticos, etc.)
Requisitos del dominio. Los requisitos del dominio se derivan del dominio de la aplicacin y reflejan caractersticas de dicho dominio. Pueden ser funcionales o no funcionales. Ej. El sistema de biblioteca de la Universidad debe ser capaz de exportar datos mediante el Lenguaje de Intercomunicacin de Bibliotecas de Espaa (LIBE). Ej. El sistema de biblioteca no podr acceder a bibliotecas con material censurado. Diseo del sistema Se basa en la especificacin de requisitos producido por el anlisis de los requisitos (fase de anlisis), el diseo define cmo estos requisitos se cumplirn, la estructura que debe darse al sistema de software para que se haga realidad. El diseo, en particular, puede describir el funcionamiento interno de un sistema en diferentes niveles de detalle, cada una de ellos se coloca en una posicin intermedia entre el anlisis y codificacin. Normalmente se entiende por "diseo de la arquitectura" al diseo de "muy alto nivel", que slo define la estructura del sistema en trminos de la mdulos de software de que se compone y las relaciones macroscpicas entre ellos. A este nivel de diseo pertenecen frmulas como cliente- servidor o tres niveles, o, ms generalmente, las decisiones sobre el uso de la arquitectura de hardware especial que se utilice, el sistema operativo, DBMS, Protocolos de red, etc. Un nivel intermedio de detalle puede definir la descomposicin del sistema en mdulos, pero esta vez con una referencia ms o menos explcita al modo de descomposicin que ofrece el particular lenguaje de programacin con el que el desarrollo se va a implementar, por ejemplo, en un diseo realizado con la tecnologa de objetos, el proyecto podra describir al sistema en trminos de clases y sus interrelaciones. El diseo detallado, por ltimo, es una descripcin del sistema muy cercana a la codificacin (por ejemplo, describir no slo las clases en abstracto, sino tambin sus atributos y los mtodos con sus tipos).
Codificacin del software Durante esta etapa se realizan las tareas que comnmente se conocen como programacin; que consiste, esencialmente, en llevar a cdigo fuente, en el lenguaje de programacin elegido, todo lo diseado en la fase anterior. Mientras se programa la aplicacin, sistema, o software en general, se realizan tambin tareas de depuracin, esto es la labor de ir liberando al cdigo de los errores factibles de ser hallados en esta fase (de semntica, sintctica y lgica). Hay una suerte de solapamiento con la fase siguiente, ya que para depurar la lgica es necesario realizar pruebas unitarias, normalmente con datos de prueba; claro es que no todos los errores sern encontrados slo en la etapa de programacin, habrn otros que se encontrarn durante las etapas subsiguientes. La aparicin de algn error funcional (mala respuesta a los requisitos) eventualmente puede llevar a retornar a la fase de diseo antes de continuar la codificacin. Durante la fase de programacin, el cdigo puede adoptar varios estados, dependiendo de la forma de trabajo y del lenguaje elegido, a saber: Cdigo fuente: es el escrito directamente por los programadores en editores de texto, lo cual genera el programa. Contiene el conjunto de instrucciones codificadas en algn lenguaje de alto nivel. Puede estar distribuido en paquetes, procedimientos, bibliotecas fuente, etc. Cdigo objeto: es el cdigo binario o intermedio resultante de procesar con un compilador el cdigo fuente. Consiste en una traduccin completa y de una sola vez de ste ltimo. El cdigo objeto no es inteligible por el ser humano (normalmente es formato binario) pero tampoco es directamente ejecutable por la computadora. Se trata de una representacin intermedia entre el cdigo fuente y el cdigo ejecutable, a los fines de un enlace final con las rutinas de biblioteca y entre procedimientos o bien para su uso con un pequeo intrprete intermedio [a modo de distintos ejemplos vase EUPHORIA, (intrprete intermedio), FORTRAN (compilador puro) MSIL (Microsoft Intermediate Language) (intrprete) y BASIC (intrprete puro, intrprete intermedio, compilador intermedio o compilador puro, depende de la versin utilizada)]. Cdigo ejecutable: Es el cdigo binario resultado de enlazar uno o ms fragmentos de cdigo objeto con las rutinas y bibliotecas necesarias. Constituye uno o ms archivos binarios con un formato tal que el sistema operativo es capaz de cargarlo en la memoria RAM (eventualmente tambin parte en una memoria virtual), y proceder a su ejecucin directa. Por lo anterior se dice que el cdigo ejecutable es directamente inteligible por la computadora. El cdigo ejecutable, tambin conocido como cdigo mquina, no existe si se programa con modalidad de intrprete puro.
Pruebas (unitarias y de integracin) Entre las diversas pruebas que se le efectan al software se pueden distinguir principalmente: Prueba unitarias: Consisten en probar o testear piezas de software pequeas; a nivel de secciones, procedimientos, funciones y mdulos; aquellas que tengan funcionalidades especficas. Dichas pruebas se utilizan para asegurar el correcto funcionamiento de secciones de cdigo, mucho ms reducidas que el conjunto, y que tienen funciones concretas con cierto grado de independencia. Pruebas de integracin: Se realizan una vez que las pruebas unitarias fueron concluidas exitosamente; con stas se intenta asegurar que el sistema completo, incluso los subsistemas que componen las piezas individuales grandes del software funcionen correctamente al operar e inteoperar en conjunto. Las pruebas normalmente se efectan con los llamados datos de prueba, que es un conjunto seleccionado de datos tpicos a los que puede verse sometido el sistema, los mdulos o los bloques de cdigo. Tambin se escogen: Datos que llevan a condiciones lmites al software a fin de probar su tolerancia y robustez; datos de utilidad para mediciones de rendimiento; datos que provocan condiciones eventuales o particulares poco comunes y a las que el software normalmente no estar sometido pero pueden ocurrir; etc. Los datos de prueba no necesariamente son ficticios o creados, pero normalmente s lo son los de poca probabilidad de ocurrencia. Generalmente, existe un fase probatoria final y completa del software, llamada Beta Test, durante la cual el sistema instalado en condiciones normales de operacin y trabajo es probado exhaustivamente a fin de encontrar errores, inestabilidades, respuestas errneas, etc. que hayan pasado los previos controles. Estas son normalmente realizadas por personal idneo contratado o afectado especficamente a ello. Los posibles errores encontrados se transmiten a los desarrolladores para su depuracin. En el caso de software de desarrollo a pedido, el usuario final (cliente) es el que realiza el Beta Test, teniendo para ello un perodo de prueba pactado con el desarrollador. Mantenimiento El mantenimiento de software es el proceso de control, mejora y optimizacin del software ya desarrollado e instalado, que tambin incluye depuracin de errores y defectos que puedan haberse filtrado de la fase de pruebas de control y beta test. Esta fase es la ltima (antes de iterar, segn el modelo empleado) que se aplica al ciclo de vida del desarrollo de software. La fase de mantenimiento es la que viene despus de que el software est operativo y en produccin. De un buen diseo y documentacin del desarrollo depender cmo ser la fase de mantenimiento, tanto en costo temporal como monetario. Modificaciones realizadas a un software que fue elaborado con una documentacin indebida o pobre y mal diseo puede llegar a ser tanto o ms costosa que desarrollar el software desde el inicio. Por ello, es de fundamental importancia respetar debidamente todas las tareas de las fases del desarrollo y mantener adecuada y completa la documentacin. El perodo de la fase de mantenimiento es normalmente el mayor en todo el ciclo de vida. 7 Esta fase involucra tambin actualizaciones y evoluciones del software; no necesariamente implica que el sistema tuvo errores. Uno o ms cambios en el software, por ejemplo de adaptacin o evolutivos, puede llevar incluso a rever y adaptar desde parte de las primeras fases del desarrollo inicial, alterando todas las dems; dependiendo de cun profundos sean los cambios. El modelo cascada comn es particularmente costoso en mantenimiento, ya que su rigidez implica que cualquier cambio provoca regreso a fase inicial y fuertes alteraciones en las dems fases del ciclo de vida. Durante el perodo de mantenimiento, es comn que surjan nuevas revisiones y versiones del producto; que lo liberan ms depurado, con mayor y mejor funcionalidad, mejor rendimiento, etc. Varias son las facetas que pueden ser alteradas para provocar cambios deseables, evolutivos, adaptaciones o ampliaciones y mejoras. Bsicamente se tienen los siguientes tipos de cambios: Perfectivos: Aquellos que llevan a una mejora de la calidad interna del software en cualquier aspecto: Reestructuracin del cdigo, definicin ms clara del sistema y su documentacin; optimizacin del rendimiento y eficiencia. Evolutivos: Agregados, modificaciones, incluso eliminaciones, necesarias en el software para cubrir su expansin o cambio, segn las necesidades del usuario. Adaptivos: Modificaciones que afectan a los entornos en los que el sistema opera, tales como: Cambios de configuracin del hardware (por actualizacin o mejora de componentes electrnicos), cambios en el software de base, en gestores de base de datos, en comunicaciones, etc. Correctivos: Alteraciones necesarias para corregir errores de cualquier tipo en el producto software desarrollado.