Uploaded by Rómel Nelson Roy Melchor Rosas

SSDSSASDA (1)

advertisement
Machine Translated by Google
2
Procesos de software
Objetivos El
objetivo de este capítulo es presentarle la idea de un proceso de software:
un conjunto coherente de actividades para la producción de software.
Cuando haya leído este capítulo, usted:
ÿ comprender los conceptos de procesos de software y modelos de procesos de
software;
ÿ han sido introducidos a tres modelos generales de procesos de software y
cuándo podrían usarse;
ÿ conocer las actividades fundamentales del proceso de ingeniería de requisitos de software,
desarrollo, pruebas y evolución de software;
ÿ comprender por qué los procesos deben organizarse para hacer frente a los cambios
en los requisitos y diseño del software;
ÿ comprender la noción de mejora del proceso de software y la
factores que afectan la calidad del proceso de software.
Contenido
2.1 Modelos de proceso de software
2.2 Actividades de proceso
2.3 Hacer frente al cambio 2.4
Mejora de procesos
Machine Translated by Google
44 Capítulo 2 ÿ Procesos de software
Un proceso de software es un conjunto de actividades relacionadas que conducen a la producción de un sistema
de software. Como mencioné en el Capítulo 1, hay muchos tipos diferentes de sistemas de software y no existe un
método de ingeniería de software universal que sea aplicable a todos ellos. En consecuencia, no existe un proceso
de software de aplicación universal. El proceso utilizado en diferentes empresas depende del tipo de software que
se desarrolle, los requisitos del cliente del software y las habilidades de las personas que escriben el software.
Sin embargo, aunque hay muchos procesos de software diferentes, todos deben incluir, de alguna forma, las
cuatro actividades fundamentales de ingeniería de software que introduje en el Capítulo 1:
1. Especificación del software La funcionalidad del software y las limitaciones de su
la operación debe ser definida.
2. Desarrollo de software Se debe producir el software que cumpla con las especificaciones.
3. Validación del software El software debe validarse para garantizar que hace lo que
el cliente quiere.
4. Evolución del software El software debe evolucionar para satisfacer las necesidades cambiantes de los clientes.
Estas actividades son actividades complejas en sí mismas e incluyen subactividades como la validación de
requisitos, el diseño arquitectónico y las pruebas unitarias. Los procesos también incluyen otras actividades, como
la gestión de configuración de software y la planificación de proyectos que respaldan las actividades de producción.
Cuando describimos y discutimos procesos, generalmente hablamos sobre las actividades en estos procesos,
como especificar un modelo de datos y diseñar una interfaz de usuario, y el orden de estas actividades. Todos
podemos relacionarnos con lo que la gente hace para desarrollar software. Sin embargo, al describir procesos,
también es importante describir quién está involucrado, qué se produce y las condiciones que influyen en la
secuencia de actividades:
1. Los productos o entregables son los resultados de una actividad de proceso. Por ejemplo, el resultado de la
actividad de diseño arquitectónico puede ser un modelo de la arquitectura del software.
2. Los roles reflejan las responsabilidades de las personas involucradas en el proceso. Ejemplos
de los roles son gerente de proyecto, gerente de configuración y programador.
3. Las condiciones previas y posteriores son condiciones que deben cumplirse antes y después de que se haya
llevado a cabo una actividad de proceso o se haya producido un producto. Por ejemplo, antes de que
comience el diseño arquitectónico, una condición previa puede ser que el consumidor haya aprobado todos
los requisitos; una vez finalizada esta actividad, una condición posterior podría ser que se hayan revisado
los modelos UML que describen la arquitectura.
Los procesos de software son complejos y, como todos los procesos intelectuales y creativos, dependen de
personas que toman decisiones y juicios. Como no existe un proceso universal que sea adecuado para todo tipo
de software, la mayoría de las empresas de software han desarrollado su propio proceso.
Machine Translated by Google
2.1 ÿ Modelos de procesos de software 45
procesos de desarrollo. Los procesos han evolucionado para aprovechar las capacidades de los
desarrolladores de software en una organización y las características de los sistemas que se están
desarrollando. Para los sistemas críticos para la seguridad, se requiere un proceso de desarrollo
muy estructurado en el que se mantengan registros detallados. Para los sistemas comerciales, con
requisitos que cambian rápidamente, es probable que sea mejor un proceso más flexible y ágil.
Como mencioné en el Capítulo 1, el desarrollo profesional de software profesional es una
actividad administrada, por lo que la planificación es una parte inherente de todos los procesos. Los
procesos impulsados por planes son procesos en los que todas las actividades del proceso se
planifican por adelantado y el progreso se mide con respecto a este plan. En los procesos ágiles,
que analizo en el Capítulo 3, la planificación es incremental y continua a medida que se desarrolla
el software. Por lo tanto, es más fácil cambiar el proceso para reflejar los requisitos cambiantes del
cliente o del producto. Como explican Boehm y Turner (Boehm y Turner 2004), cada enfoque es
adecuado para diferentes tipos de software. En general, para sistemas grandes, debe encontrar un
equilibrio entre los procesos ágiles y los basados en planes.
Aunque no existe un proceso de software universal, existe margen para la mejora de procesos
en muchas organizaciones. Los procesos pueden incluir técnicas obsoletas o no aprovechar las
mejores prácticas en ingeniería de software industrial. De hecho, muchas organizaciones aún no
aprovechan los métodos de ingeniería de software en su desarrollo de software. Pueden mejorar
su proceso mediante la introducción de técnicas como el modelado UML y el desarrollo basado en
pruebas. Discuto brevemente la mejora del proceso de software más adelante en el texto de este
capítulo y con más detalle en el Capítulo 26 de la web.
2.1 Modelos de procesos de software
Como expliqué en el Capítulo 1, un modelo de proceso de software (a veces denominado Ciclo de
vida de desarrollo de software o modelo SDLC) es una representación simplificada de un proceso
de software. Cada modelo de proceso representa un proceso desde una perspectiva particular y,
por lo tanto, solo proporciona información parcial sobre ese proceso. Por ejemplo, un modelo de
actividad de proceso muestra las actividades y su secuencia, pero puede que no muestre los roles
de las personas involucradas en estas actividades. En esta sección, presento una serie de modelos
de procesos muy generales (a veces llamados paradigmas de procesos) y los presento desde una
perspectiva arquitectónica. Es decir, vemos el marco del proceso pero no los detalles de las
actividades del proceso.
Estos modelos genéricos son descripciones abstractas de alto nivel de procesos de software
que se pueden utilizar para explicar diferentes enfoques para el desarrollo de software. Puede
pensar en ellos como marcos de procesos que pueden extenderse y adaptarse para crear procesos
de ingeniería de software más específicos.
Los modelos generales de proceso que cubro aquí son:
1. El modelo en cascada Toma las actividades fundamentales del proceso de especificación,
desarrollo, validación y evolución y las representa como fases de proceso separadas, como
especificación de requisitos, diseño de software, implementación y prueba.
Machine Translated by Google
46 Capítulo 2 ÿ Procesos de software
El proceso unificado racional
El Rational Unified Process (RUP) reúne elementos de todos los modelos de procesos generales discutidos aquí y admite
la creación de prototipos y la entrega incremental de software (Krutchen 2003). El RUP normalmente se describe desde
tres perspectivas: una perspectiva dinámica que muestra las fases del modelo en el tiempo, una perspectiva estática que
muestra las actividades del proceso y una perspectiva práctica que sugiere buenas prácticas para ser utilizadas en el proceso.
Las fases de RUP son el inicio, donde se establece un caso de negocio para el sistema; elaboración, donde se desarrollan los
requisitos y la arquitectura; construcción donde se implementa el software; y transición, donde se implementa el sistema.
http://software-engineering-book.com/web/rup/
2. Desarrollo incremental Este enfoque intercala las actividades de especificación, desarrollo y
validación. El sistema se desarrolla como una serie de versiones (incrementos), y cada
versión agrega funcionalidad a la versión anterior.
3. Integración y configuración Este enfoque se basa en la disponibilidad de componentes o
sistemas reutilizables. El proceso de desarrollo del sistema se centra en configurar estos
componentes para su uso en un nuevo entorno e integrarlos en un sistema.
Como he dicho, no existe un modelo de proceso universal que sea adecuado para todo tipo
de desarrollo de software. El proceso adecuado depende del cliente y de los requisitos
reglamentarios, del entorno en el que se utilizará el software y del tipo de software que se
desarrolle. Por ejemplo, el software crítico para la seguridad generalmente se desarrolla utilizando
un proceso en cascada, ya que se requiere una gran cantidad de análisis y documentación antes
de que comience la implementación. Los productos de software ahora siempre se desarrollan
utilizando un modelo de proceso incremental. Los sistemas empresariales se desarrollan cada
vez más mediante la configuración de los sistemas existentes y su integración para crear un
nuevo sistema con la funcionalidad requerida.
La mayoría de los procesos prácticos de software se basan en un modelo general, pero a
menudo incorporan características de otros modelos. Esto es particularmente cierto para la
ingeniería de grandes sistemas. Para sistemas grandes, tiene sentido combinar algunas de las
mejores características de todos los procesos generales. Debe tener información sobre los
requisitos esenciales del sistema para diseñar una arquitectura de software que admita estos requisitos.
No se puede desarrollar esto de forma incremental. Los subsistemas dentro de un sistema más
grande pueden desarrollarse utilizando diferentes enfoques. Las partes del sistema que se
entienden bien se pueden especificar y desarrollar utilizando un proceso basado en cascada o se
pueden comprar como sistemas listos para usar para la configuración. Otras partes del sistema,
que son difíciles de especificar de antemano, siempre deben desarrollarse utilizando un enfoque
incremental. En ambos casos, es probable que los componentes de software se reutilicen.
Se han realizado varios intentos para desarrollar modelos de proceso "universales" que se
basen en todos estos modelos generales. Uno de los más conocidos de estos modelos universales
es el Proceso Unificado Racional (RUP) (Krutchen 2003), que fue desarrollado por Rational, una
compañía de ingeniería de software de EE.UU. El RUP es un modelo flexible que
Machine Translated by Google
2.1 ÿ Modelos de procesos de software 47
Definición de
requisitos
Diseño de
sistemas y software
Implementación y
pruebas unitarias
Integración y
pruebas del sistema.
Operación y
mantenimiento
Figura 2.1 El
modelo de cascada
se pueden instanciar de diferentes maneras para crear procesos que se asemejan a cualquiera de los
modelos de procesos generales discutidos aquí. El RUP ha sido adoptado por algunas grandes
empresas de software (en particular, IBM), pero no ha ganado una aceptación generalizada.
2.1.1 El modelo de cascada
El primer modelo publicado del proceso de desarrollo de software se derivó de los modelos de procesos
de ingeniería utilizados en la ingeniería de grandes sistemas militares (Royce 1970). Presenta el
proceso de desarrollo de software como una serie de etapas, como se muestra en la Figura 2.1.
Debido a la cascada de una fase a otra, este modelo se conoce como modelo en cascada o ciclo de
vida del software. El modelo de cascada es un ejemplo de un proceso impulsado por un plan. Al menos
en principio, usted planifica y programa todas las actividades del proceso antes de comenzar el
desarrollo de software.
Las etapas del modelo en cascada reflejan directamente las actividades fundamentales de
desarrollo de software:
1. Análisis y definición de requisitos Los servicios, restricciones y objetivos del sistema se establecen
mediante consultas con los usuarios del sistema. Luego se definen en detalle y sirven como
especificación del sistema.
2. Diseño de sistemas y software El proceso de diseño de sistemas asigna los requisitos a los
sistemas de hardware o software. Establece una arquitectura general del sistema. El diseño de
software implica identificar y describir las abstracciones fundamentales del sistema de software
y sus relaciones.
3. Implementación y pruebas unitarias Durante esta etapa, el diseño del software se realiza como un
conjunto de programas o unidades de programas. Las pruebas unitarias implican verificar que
cada unidad cumpla con su especificación.
Machine Translated by Google
48 Capítulo 2 ÿ Procesos de software
Modelo de proceso en espiral de Boehm
Barry Boehm, uno de los pioneros en ingeniería de software, propuso un modelo de proceso incremental basado en el riesgo. El proceso
se representa como una espiral más que como una secuencia de actividades (Boehm 1988).
Cada bucle en la espiral representa una fase del proceso de software. Por lo tanto, el bucle más interno podría estar relacionado con la
viabilidad del sistema, el siguiente bucle con la definición de requisitos, el siguiente bucle con el diseño del sistema, etc. El modelo en
espiral combina la evitación del cambio con la tolerancia al cambio. Asume que los cambios son el resultado de los riesgos del proyecto e
incluye actividades explícitas de gestión de riesgos para reducir estos riesgos.
http://software-engineering-book.com/web/spiral-model/
4. Integración y prueba del sistema Las unidades de programa individuales o los programas se
integran y prueban como un sistema completo para garantizar que se han cumplido los
requisitos del software. Después de la prueba, el sistema de software se entrega al cliente.
5. Operación y mantenimiento Normalmente, esta es la fase más larga del ciclo de vida. El sistema
está instalado y puesto en uso práctico. El mantenimiento implica corregir errores que no se
descubrieron en etapas anteriores del ciclo de vida, mejorar la implementación de las unidades
del sistema y mejorar los servicios del sistema a medida que se descubren nuevos requisitos.
En principio, el resultado de cada fase del modelo en cascada es uno o más documentos que
se aprueban (“firman”). La siguiente fase no debe comenzar hasta que la fase anterior haya
terminado. Para el desarrollo de hardware, donde se involucran altos costos de fabricación, esto
tiene sentido. Sin embargo, para el desarrollo de software, estas etapas se superponen y se
alimentan de información entre sí. Durante el diseño, se identifican problemas con los requisitos;
durante la codificación se encuentran problemas de diseño, y así sucesivamente.
El proceso de software, en la práctica, nunca es un modelo lineal simple, sino que implica
retroalimentación de una fase a otra.
A medida que surge nueva información en una etapa del proceso, los documentos producidos
en etapas anteriores deben modificarse para reflejar los cambios requeridos en el sistema. Por
ejemplo, si se descubre que un requisito es demasiado costoso para implementar, el documento de
requisitos debe cambiarse para eliminar ese requisito. Sin embargo, esto requiere la aprobación del
cliente y retrasa el proceso de desarrollo general.
Como resultado, tanto los clientes como los desarrolladores pueden congelar prematuramente la
especificación del software para que no se realicen más cambios. Desafortunadamente, esto significa
que los problemas se dejan para una resolución posterior, se ignoran o se programan. La congelación
prematura de requisitos puede significar que el sistema no hará lo que el usuario desea. También
puede dar lugar a sistemas mal estructurados, ya que los problemas de diseño se eluden mediante
trucos de implementación.
Durante la fase final del ciclo de vida (operación y mantenimiento), el software se pone en uso.
Se descubren errores y omisiones en los requisitos del software original.
Machine Translated by Google
2.1 ÿ Modelos de procesos de software 49
Surgen errores de programa y diseño, y se identifica la necesidad de una nueva funcionalidad.
Por lo tanto, el sistema debe evolucionar para seguir siendo útil. Hacer estos cambios
(mantenimiento de software) puede implicar repetir etapas de procesos anteriores.
En realidad, el software debe ser flexible y adaptarse a los cambios a medida que se
desarrolla. La necesidad de compromiso temprano y reelaboración del sistema cuando se realizan
cambios significa que el modelo en cascada solo es apropiado para algunos tipos de sistema:
1. Sistemas integrados en los que el software tiene que interactuar con los sistemas de hardware.
Debido a la inflexibilidad del hardware, normalmente no es posible retrasar las decisiones
sobre la funcionalidad del software hasta que se implemente.
2. Sistemas críticos donde existe la necesidad de un extenso análisis de seguridad y protección
de la especificación y el diseño del software. En estos sistemas, los documentos de
especificación y diseño deben estar completos para que este análisis sea posible. Los
problemas relacionados con la seguridad en la especificación y el diseño suelen ser muy
costosos de corregir en la etapa de implementación.
3. Grandes sistemas de software que forman parte de sistemas de ingeniería más amplios
desarrollados por varias empresas asociadas. El hardware de los sistemas puede
desarrollarse utilizando un modelo similar, y a las empresas les resulta más fácil utilizar un
modelo común para el hardware y el software. Además, cuando participen varias empresas,
es posible que se necesiten especificaciones completas para permitir el desarrollo
independiente de diferentes subsistemas.
El modelo de cascada no es el modelo de proceso adecuado en situaciones en las que es
posible la comunicación informal del equipo y los requisitos de software cambian rápidamente. El
desarrollo iterativo y los métodos ágiles son mejores para estos sistemas.
Una variante importante del modelo en cascada es el desarrollo de un sistema formal, donde
se crea un modelo matemático de la especificación de un sistema. Luego, este modelo se refina,
utilizando transformaciones matemáticas que preservan su consistencia, en código ejecutable.
Los procesos formales de desarrollo, como el basado en el método B (Abrial 2005, 2010), se
utilizan principalmente en el desarrollo de sistemas de software que tienen requisitos estrictos de
seguridad, confiabilidad o seguridad. El enfoque formal simplifica la producción de un caso de
seguridad o protección. Esto demuestra a los clientes o reguladores que el sistema realmente
cumple con sus requisitos de seguridad. Sin embargo, debido a los altos costos de desarrollar
una especificación formal, este modelo de desarrollo rara vez se usa, excepto para la ingeniería
de sistemas críticos.
2.1.2 Desarrollo incremental
El desarrollo incremental se basa en la idea de desarrollar una implementación inicial, obtener
retroalimentación de los usuarios y otros, y evolucionar el software a través de varias versiones
hasta que se haya desarrollado el sistema requerido (Figura 2.2).
Las actividades de especificación, desarrollo y validación están intercaladas en lugar de
separadas, con una rápida retroalimentación entre actividades.
Machine Translated by Google
50 Capítulo 2 ÿ Procesos de software
actividades
concurrentes
Especificación
Descripción
del esquema
Desarrollo
Validación
Versión
inicial
Versiones
intermedias
Versión final
Figura 2.2 Desarrollo
incremental
El desarrollo incremental de alguna forma es ahora el enfoque más común para el
desarrollo de sistemas de aplicaciones y productos de software. Este enfoque puede estar
basado en un plan, ágil o, más generalmente, una combinación de estos enfoques. En un
enfoque basado en un plan, los incrementos del sistema se identifican de antemano; si se
adopta un enfoque ágil, se identifican los primeros incrementos, pero el desarrollo de
incrementos posteriores depende del progreso y las prioridades del cliente.
El desarrollo de software incremental, que es una parte fundamental de los métodos
de desarrollo ágiles, es mejor que un enfoque en cascada para los sistemas cuyos
requisitos probablemente cambien durante el proceso de desarrollo. Este es el caso de la
mayoría de los sistemas comerciales y productos de software. El desarrollo incremental
refleja la forma en que resolvemos los problemas. Rara vez elaboramos una solución
completa del problema por adelantado, sino que avanzamos hacia una solución en una
serie de pasos, retrocediendo cuando nos damos cuenta de que hemos cometido un error.
Al desarrollar el software de forma incremental, es más barato y fácil realizar cambios en
el software a medida que se desarrolla.
Cada incremento o versión del sistema incorpora algunas de las funcionalidades que
necesita el cliente. Generalmente, los primeros incrementos del sistema incluyen la
funcionalidad más importante o requerida con mayor urgencia. Esto significa que el cliente
o usuario puede evaluar el sistema en una etapa relativamente temprana del desarrollo
para ver si ofrece lo que se requiere. De lo contrario, solo se debe cambiar el incremento
actual y, posiblemente, definir una nueva funcionalidad para incrementos posteriores.
El desarrollo incremental tiene tres ventajas principales sobre el modelo en cascada:
1. Se reduce el costo de implementar cambios en los requisitos. La cantidad de análisis y
documentación que se debe rehacer es significativamente menor que la requerida
con el modelo en cascada.
2. Es más fácil obtener comentarios de los clientes sobre el trabajo de desarrollo que se
ha realizado. Los clientes pueden comentar demostraciones del software y ver cómo
Machine Translated by Google
2.1 ÿ Modelos de procesos de software 51
Problemas con el desarrollo incremental
Aunque el desarrollo incremental tiene muchas ventajas, no está libre de problemas. La causa principal de la dificultad es el
hecho de que las grandes organizaciones tienen procedimientos burocráticos que han evolucionado con el tiempo y puede
haber una discrepancia entre estos procedimientos y un proceso iterativo o ágil más informal.
A veces, estos procedimientos están ahí por buenas razones. Por ejemplo, puede haber procedimientos para garantizar
que el software cumple adecuadamente implementa normativas externas (por ejemplo, en Estados Unidos, la normativa
contable Sarbanes Oxley). Es posible que no sea posible cambiar estos procedimientos, por lo que los conflictos de procesos
pueden ser inevitables.
http://software-engineering-book.com/web/incremental-development/
se ha implementado mucho. A los clientes les resulta difícil juzgar el progreso a partir de los documentos de
diseño de software.
3. Es posible la entrega temprana y la implementación de software útil para el cliente, incluso si no se ha incluido
toda la funcionalidad. Los clientes pueden usar y obtener valor del software antes de lo que es posible con
un proceso en cascada.
Desde una perspectiva de gestión, el enfoque incremental tiene dos problemas:
1. El proceso no es visible. Los gerentes necesitan entregables regulares para medir el progreso. Si los sistemas
se desarrollan rápidamente, no es rentable producir documentos que reflejen todas las versiones del
sistema.
2. La estructura del sistema tiende a degradarse a medida que se agregan nuevos incrementos. El cambio regular
conduce a un código desordenado a medida que se agregan nuevas funciones de cualquier manera posible.
Se vuelve cada vez más difícil y costoso agregar nuevas funciones a un sistema. Para reducir la degradación
estructural y el desorden general del código, los métodos ágiles sugieren que debe refactorizar (mejorar y
reestructurar) el software con regularidad.
Los problemas del desarrollo incremental se vuelven particularmente agudos para sistemas grandes, complejos
y de larga duración, donde diferentes equipos desarrollan diferentes partes del sistema. Los sistemas grandes
necesitan un marco o arquitectura estable, y las responsabilidades de los diferentes equipos que trabajan en
partes del sistema deben estar claramente definidas con respecto a esa arquitectura. Esto debe planificarse con
anticipación en lugar de desarrollarse gradualmente.
El desarrollo incremental no significa que tenga que entregar cada incremento al cliente del sistema. Puede
desarrollar un sistema de forma incremental y exponerlo a los clientes y otras partes interesadas para obtener
comentarios, sin necesariamente entregarlo e implementarlo en el entorno del cliente. La entrega incremental
(tratada en la Sección 2.3.2) significa que el software se usa en procesos operativos reales, por lo que es probable
que los comentarios de los usuarios sean realistas. Sin embargo, proporcionar comentarios no siempre es posible,
ya que experimentar con software nuevo puede interrumpir los procesos comerciales normales.
Machine Translated by Google
52 Capítulo 2 ÿ Procesos de software
Sistema de aplicación
disponible
Descubrimiento
Configurar el
sistema de
aplicaciones
de software
Refinamiento de
requisitos
Especificación de
requisitos
Adaptar
componentes
Evaluación
Integrar
de software
Componentes
disponibles
Figura 2.3 Ingeniería
de software orientada
sistema
Desarrollar nuevos
componentes
a la reutilización
2.1.3 Integración y configuración
En la mayoría de los proyectos de software, hay algo de reutilización de software. Esto sucede a menudo de
manera informal cuando las personas que trabajan en el proyecto conocen o buscan un código similar al que se
requiere. Los buscan, los modifican según sea necesario y los integran con el nuevo código que han desarrollado.
Esta reutilización informal tiene lugar independientemente del proceso de desarrollo que se utilice. Sin
embargo, desde el año 2000, los procesos de desarrollo de software que se centran en la reutilización del
software existente se han vuelto ampliamente utilizados. Los enfoques orientados a la reutilización se basan en
una base de componentes de software reutilizables y un marco integrador para la composición de estos
componentes.
Con frecuencia se reutilizan tres tipos de componentes de software:
1. Sistemas de aplicaciones independientes que están configurados para su uso en un entorno particular. Estos
sistemas son sistemas de propósito general que tienen muchas funciones, pero deben adaptarse para su
uso en una aplicación específica.
2. Colecciones de objetos que se desarrollan como un componente o como un paquete para integrarse con un
marco de componentes como el marco Java Spring (Wheeler y White 2013).
3. Servicios web que se desarrollan de acuerdo con estándares de servicio y que están disponibles para
invocación remota a través de Internet.
La Figura 2.3 muestra un modelo de proceso general para el desarrollo basado en la reutilización, basado en
integración y configuración. Las etapas en este proceso son:
1. Especificación de requisitos Se proponen los requisitos iniciales del sistema. Estos no tienen que ser
elaborados en detalle, pero deben incluir breves descripciones de los requisitos esenciales y las
características deseables del sistema.
2. Descubrimiento y evaluación del software Dado un esquema de los requisitos del software, se realiza una
búsqueda de componentes y sistemas que proporcionen la funcionalidad requerida. Los componentes y
sistemas candidatos se evalúan para ver si
Machine Translated by Google
2.1 ÿ Modelos de procesos de software 53
Herramientas de desarrollo de software
Las herramientas de desarrollo de software son programas que se utilizan para apoyar las actividades del proceso de ingeniería de software.
Estas herramientas incluyen herramientas de gestión de requisitos, editores de diseño, herramientas de soporte de refactorización, compiladores,
depuradores, rastreadores de errores y herramientas de creación de sistemas.
Las herramientas de software brindan soporte al proceso al automatizar algunas actividades del proceso y al proporcionar información sobre el software
que se está desarrollando. Por ejemplo:
ÿ El desarrollo de modelos de sistemas gráficos como parte de la especificación de requisitos o el software
diseño
ÿ La generación de código a partir de estos modelos gráficos.
ÿ La generación de interfaces de usuario a partir de una descripción de interfaz gráfica que el usuario crea de forma interactiva.
ÿ Depuración de programas mediante el suministro de información sobre un programa en ejecución
ÿ La traducción automática de programas escritos utilizando una versión antigua de un lenguaje de programación a una versión más
versión reciente
Las herramientas se pueden combinar dentro de un marco llamado Entorno de desarrollo interactivo o IDE. Esto proporciona un conjunto común de
facilidades que las herramientas pueden usar para que sea más fácil que las herramientas se comuniquen y operen de manera integrada.
http://software-engineering-book.com/web/software-tools/
cumplen los requisitos esenciales y si son generalmente adecuados para su uso en el
sistema.
3. Refinamiento de requisitos Durante esta etapa, los requisitos se refinan utilizando información
sobre los componentes y aplicaciones reutilizables que se han descubierto. Los requisitos
se modifican para reflejar los componentes disponibles y la especificación del sistema se
redefine. Cuando las modificaciones sean imposibles, se puede volver a ingresar a la
actividad de análisis de componentes para buscar soluciones alternativas.
4. Configuración del sistema de aplicación Si hay disponible un sistema de aplicación estándar
que cumple con los requisitos, puede configurarse para usarlo para crear el nuevo sistema.
5. Adaptación e integración de componentes Si no existe un sistema listo para usar, los
componentes reutilizables individuales pueden modificarse y desarrollarse nuevos componentes.
Luego se integran para crear el sistema.
La ingeniería de software orientada a la reutilización, basada en la configuración y la
integración, tiene la ventaja obvia de reducir la cantidad de software a desarrollar y, por lo tanto,
reducir los costos y los riesgos. Por lo general, también conduce a una entrega más rápida del software.
Sin embargo, los compromisos de requisitos son inevitables, y esto puede conducir a un sistema
Machine Translated by Google
54 Capítulo 2 ÿ Procesos de software
que no satisface las necesidades reales de los usuarios. Además, se pierde cierto control sobre la
evolución del sistema, ya que las nuevas versiones de los componentes reutilizables no están bajo el
control de la organización que los utiliza.
La reutilización del software es muy importante, por lo que varios capítulos del tercero he dedicado
varios capítulos de la tercera parte del libro a este tema. Los temas generales de reutilización de
software se tratan en el Capítulo 15, la ingeniería de software basada en componentes en los Capítulos
16 y 17 y los sistemas orientados a servicios en el Capítulo 18.
2.2 Actividades de proceso
Los procesos de software reales son secuencias intercaladas de actividades técnicas, colaborativas y
administrativas con el objetivo general de especificar, diseñar, implementar y probar un sistema de
software. En general, los procesos ahora son compatibles con herramientas. Esto significa que los
desarrolladores de software pueden usar una variedad de herramientas de software para ayudarlos,
como sistemas de gestión de requisitos, editores de modelos de diseño, editores de programas,
herramientas de prueba automatizadas y depuradores.
Las cuatro actividades básicas del proceso de especificación, desarrollo, validación y evolución se
organizan de manera diferente en diferentes procesos de desarrollo. En el modelo de caída de agua, se
organizan en secuencia, mientras que en el desarrollo incremental se intercalan. La forma en que se
llevan a cabo estas actividades depende del tipo de software que se desarrolle, la experiencia y
competencia de los desarrolladores y el tipo de organización que desarrolla el software.
2.2.1 Especificación del software
La especificación de software o la ingeniería de requisitos es el proceso de comprender y definir qué
servicios se requieren del sistema e identificar las restricciones en la operación y el desarrollo del
sistema. La ingeniería de requisitos es una etapa particularmente crítica del proceso de software, ya
que los errores cometidos en esta etapa conducen inevitablemente a problemas posteriores en el diseño
e implementación del sistema.
Antes de que comience el proceso de ingeniería de requisitos, una empresa puede llevar a cabo un
estudio de viabilidad o de marketing para evaluar si existe o no una necesidad o un mercado para el
software y si es o no técnica y financieramente realista desarrollar el software requerido. Los estudios
de factibilidad son estudios a corto plazo, relativamente baratos, que informan la decisión de continuar
o no con un análisis más detallado.
El proceso de ingeniería de requisitos (Figura 2.4) tiene como objetivo producir un documento de
requisitos acordado que especifique un sistema que satisfaga los requisitos de las partes interesadas.
Los requisitos generalmente se presentan en dos niveles de detalle. Los usuarios finales y los clientes
necesitan una declaración de requisitos de alto nivel; los desarrolladores de sistemas necesitan una
especificación de sistema más detallada.
Machine Translated by Google
2.2 ÿ Actividades del proceso 55
Obtención y
análisis de
requisitos
Especificación
de requisitos
Validación de
requisitos
Descripciones del sistema
Requisitos del
usuario y del sistema
Figura 2.4 El
Documento de
requisitos
proceso de
ingeniería de requisitos
Hay tres actividades principales en el proceso de ingeniería de requisitos:
1. Obtención y análisis de requisitos Este es el proceso de obtener los requisitos del sistema a
través de la observación de los sistemas existentes, conversaciones con usuarios y
compradores potenciales, análisis de tareas, etc. Esto puede implicar el desarrollo de uno o
más modelos y prototipos de sistemas. Estos le ayudan a comprender el sistema que se va a
especificar.
2. Especificación de requisitos La especificación de requisitos es la actividad de traducir la
información recopilada durante el análisis de requisitos en un documento que define un
conjunto de requisitos. En este documento se pueden incluir dos tipos de requisitos. Los
requisitos del usuario son declaraciones abstractas de los requisitos del sistema para el cliente
y el usuario final del sistema; Los requisitos del sistema son una descripción más detallada de
la funcionalidad que se proporcionará.
3. Validación de requisitos Esta actividad verifica los requisitos en cuanto a realismo, consistencia e
integridad. Durante este proceso, inevitablemente se descubren errores en el documento de
requisitos. Luego debe modificarse para corregir estos problemas.
El análisis de requisitos continúa durante la definición y especificación, y surgen nuevos
requisitos a lo largo del proceso. Por lo tanto, las actividades de análisis, definición y especificación
están intercaladas.
En los métodos ágiles, la especificación de requisitos no es una actividad separada, sino que se
considera parte del desarrollo del sistema. Los requisitos se especifican informalmente para cada
incremento del sistema justo antes de que se desarrolle ese incremento. Los requisitos se especifican
de acuerdo con las prioridades del usuario. La elicitación de requisitos proviene de los usuarios que
forman parte o trabajan en estrecha colaboración con el equipo de desarrollo.
Machine Translated by Google
56 Capítulo 2 ÿ Procesos de software
Entradas de diseño
Datos
Software
Información
de la plataforma
requisitos
descripciones
Actividades de diseño
Diseño
Diseño de
arquitectonico
Base de datos
diseño
interfaz
Selección y
diseño de
componentes.
Salidas de diseño
Diseño de
Figura 2.5 Un modelo general
del proceso de diseño
Arquitectura del sistema
base de datos
Especificación
de interfaz
Descripciones
de componentes
2.2.2 Diseño e implementación de software
La etapa de implementación del desarrollo de software es el proceso de desarrollar un sistema
ejecutable para entregarlo al cliente. A veces esto involucra actividades separadas de diseño y
programación de software. Sin embargo, si se utiliza un enfoque ágil para el desarrollo, el diseño
y la implementación se intercalan, sin que se produzcan documentos de diseño formales durante
el proceso. Por supuesto, el software todavía está diseñado, pero el diseño se registra
informalmente en pizarras y cuadernos de programadores.
Un diseño de software es una descripción de la estructura del software que se implementará,
los modelos de datos y las estructuras utilizadas por el sistema, las interfaces entre los
componentes del sistema y, a veces, los algoritmos utilizados. Los diseñadores no llegan a un
diseño terminado inmediatamente, sino que desarrollan el diseño por etapas. Agregan detalles
a medida que desarrollan su diseño, con un retroceso constante para modificar diseños anteriores.
La figura 2.5 es un modelo abstracto del proceso de diseño que muestra las entradas al
proceso de diseño, las actividades del proceso y las salidas del proceso. Las actividades del
proceso de diseño están entrelazadas y son interdependientes. Constantemente se genera
nueva información sobre el diseño, y esto afecta las decisiones de diseño anteriores. Por lo
tanto, la reelaboración del diseño es inevitable.
Machine Translated by Google
2.2 ÿ Actividades del proceso 57
La mayoría de las interfaces de software con otros sistemas de software. Estos otros sistemas incluyen
el sistema operativo, la base de datos, el middleware y otros sistemas de aplicación.
Estos conforman la "plataforma de software", el entorno en el que se ejecutará el software. La información
sobre esta plataforma es una entrada esencial para el proceso de diseño, ya que los diseñadores deben
decidir cómo integrarla mejor con su entorno. Si el sistema va a procesar datos existentes, entonces la
descripción de esos datos puede incluirse en la especificación de la plataforma. De lo contrario, la
descripción de los datos debe ser una entrada al proceso de diseño para que se pueda definir la organización
de los datos del sistema.
Las actividades en el proceso de diseño varían, dependiendo del tipo de sistema que se desarrolle. Por
ejemplo, los sistemas de tiempo real requieren una etapa adicional de diseño de temporización, pero es
posible que no incluyan una base de datos, por lo que no hay un diseño de base de datos involucrado. La
Figura 2.5 muestra cuatro actividades que pueden ser parte del proceso de diseño de sistemas de información:
1. Diseño arquitectónico, donde identifica la estructura general del sistema, los componentes principales (a
veces llamados subsistemas o módulos), sus relaciones y cómo se distribuyen.
2. Diseño de base de datos, donde se diseñan las estructuras de datos del sistema y cómo se representarán
en una base de datos. Una vez más, el trabajo aquí depende de si se va a reutilizar una base de datos
existente o se va a crear una nueva base de datos.
3. Diseño de interfaz, donde define las interfaces entre los componentes del sistema.
Esta especificación de interfaz debe ser inequívoca. Con una interfaz precisa, un componente puede
ser utilizado por otros componentes sin que estos tengan que saber cómo se implementa. Una vez
que se acuerdan las especificaciones de la interfaz, los componentes pueden diseñarse y desarrollarse
por separado.
4. Selección y diseño de componentes, donde busca componentes reutilizables y, si no hay componentes
adecuados disponibles, diseña nuevos componentes de software.
El diseño en esta etapa puede ser una simple descripción de componentes con los detalles de
implementación dejados al programador. Alternativamente, puede ser una lista de cambios a realizar
en un componente reutilizable o un modelo de diseño detallado expresado en UML. A continuación, el
modelo de diseño se puede utilizar para generar automáticamente una implementación.
Estas actividades conducen a los resultados del diseño, que también se muestran en la Figura 2.5.
Para los sistemas críticos, los resultados del proceso de diseño son documentos de diseño detallados que
establecen descripciones precisas y precisas del sistema. Si se utiliza un enfoque basado en modelos
(Capítulo 5), los resultados del diseño son diagramas de diseño. Cuando se utilizan métodos ágiles de
desarrollo, los resultados del proceso de diseño pueden no ser documentos de especificación separados,
sino que pueden estar representados en el código del programa.
El desarrollo de un programa para implementar un sistema se deriva naturalmente del diseño del
sistema. Aunque algunas clases de programas, como los sistemas críticos para la seguridad, generalmente
se diseñan en detalle antes de que comience cualquier implementación, es más común que el diseño y el
desarrollo del programa se intercalen. Las herramientas de desarrollo de software se pueden utilizar para
generar un programa esqueleto a partir de un diseño. Esto incluye código para
Machine Translated by Google
58 Capítulo 2 ÿ Procesos de software
Pruebas de
Prueba de
componentes
Pruebas del sistema
clientes
Figura 2.6 Etapas de la
prueba
definir e implementar interfaces y, en muchos casos, el desarrollador solo necesita agregar detalles de
la operación de cada componente del programa.
La programación es una actividad individual, y no hay un proceso general que se siga normalmente.
Algunos programadores comienzan con componentes que entienden, los desarrollan y luego pasan a
componentes menos entendidos. Otros adoptan el enfoque opuesto, dejando los componentes familiares
para el final porque saben cómo desarrollarlos. A algunos desarrolladores les gusta definir los datos al
principio del proceso y luego utilizarlos para impulsar el desarrollo del programa; otros dejan datos sin
especificar durante el mayor tiempo posible.
Normalmente, los programadores realizan algunas pruebas del código que han desarrollado.
Esto a menudo revela defectos del programa (errores) que deben eliminarse del programa.
Encontrar y corregir defectos del programa se denomina depuración. La prueba de defectos y la
depuración son procesos diferentes. Las pruebas establecen la existencia de defectos. La depuración
se ocupa de localizar y corregir estos defectos.
Cuando está depurando, debe generar hipótesis sobre el comportamiento observable del programa
y luego probar estas hipótesis con la esperanza de encontrar la falla que causó la anomalía de salida.
Probar las hipótesis puede implicar rastrear el código del programa manualmente. Puede requerir nuevos
casos de prueba para localizar el problema. Las herramientas de depuración interactivas, que muestran
los valores intermedios de las variables del programa y un seguimiento de las sentencias ejecutadas,
suelen utilizarse para respaldar el proceso de depuración.
2.2.3 Validación del software
La validación del software o, más generalmente, la verificación y validación (V & V) tiene como objetivo
mostrar que un sistema se ajusta a su especificación y cumple con las expectativas del cliente del
sistema. La prueba del programa, donde el sistema se ejecuta utilizando datos de prueba simulados, es
la principal técnica de validación. La validación también puede implicar procesos de verificación, como
inspecciones y revisiones, en cada etapa del proceso de software, desde la definición de los requisitos
del usuario hasta el desarrollo del programa.
Sin embargo, la mayor parte del tiempo y esfuerzo de V & V se dedica a la prueba del programa.
A excepción de los programas pequeños, los sistemas no deben probarse como una sola unidad
monolítica. La figura 2.6 muestra un proceso de prueba de tres etapas en el que los componentes del
sistema se prueban individualmente y luego se prueba el sistema integrado. Para el software
personalizado, las pruebas del cliente implican probar el sistema con datos reales del cliente. Para los
productos que se venden como aplicaciones, las pruebas de los clientes a veces se denominan pruebas
beta en las que los usuarios seleccionados prueban y comentan sobre el software.
Machine Translated by Google
2.2 ÿ Actividades del proceso 59
Las etapas en el proceso de prueba son:
1. Prueba de componentes Los componentes que forman el sistema son probados por las personas que desarrollan
el sistema. Cada componente se prueba de forma independiente, sin otros componentes del sistema. Los
componentes pueden ser entidades simples como funciones o clases de objetos o pueden ser agrupaciones
coherentes de estas entidades. Las herramientas de automatización de pruebas, como JUnit para Java, que
pueden volver a ejecutar las pruebas cuando se crean nuevas versiones del componente, se utilizan
comúnmente (Koskela 2013).
2. Pruebas del sistema Los componentes del sistema se integran para crear un sistema completo.
Este proceso se ocupa de encontrar errores que resultan de interacciones imprevistas entre componentes y
problemas de interfaz de componentes. También se ocupa de demostrar que el sistema cumple con sus
requisitos funcionales y no funcionales, y de probar las propiedades emergentes del sistema. Para sistemas
grandes, este puede ser un proceso de varias etapas donde los componentes se integran para formar
subsistemas que se prueban individualmente antes de que estos subsistemas se integren para formar el
sistema final.
3. Prueba del cliente Esta es la etapa final en el proceso de prueba antes de que el sistema sea aceptado para su
uso operativo. El sistema es probado por el cliente del sistema (o cliente potencial) en lugar de con datos de
prueba simulados. Para el software personalizado, las pruebas de los clientes pueden revelar errores y
omisiones en la definición de los requisitos del sistema, porque los datos reales ejercitan el sistema de manera
diferente a los datos de prueba. Las pruebas de los clientes también pueden revelar problemas de requisitos
en los que las instalaciones del sistema no satisfacen realmente las necesidades de los usuarios o el
rendimiento del sistema es inaceptable. Para los productos, las pruebas de los clientes muestran qué tan bien
el producto de software satisface las necesidades del cliente.
Idealmente, los defectos de los componentes se descubren temprano en el proceso de prueba y los problemas
de la interfaz se encuentran cuando el sistema está integrado. Sin embargo, a medida que se descubren defectos,
el programa debe ser depurado, y esto puede requerir que se repitan otras etapas en el proceso de prueba. Los
errores en los componentes del programa, por ejemplo, pueden salir a la luz durante las pruebas del sistema. Por lo
tanto, el proceso es iterativo con información que se retroalimenta de etapas posteriores a partes anteriores del
proceso.
Normalmente, la prueba de componentes es simplemente parte del proceso normal de desarrollo.
Los programadores crean sus propios datos de prueba y prueban progresivamente el código a medida que se
desarrolla. El programador conoce el componente y por lo tanto es la mejor persona para generar casos de prueba.
Si se utiliza un enfoque incremental para el desarrollo, cada incremento debe probarse a medida que se
desarrolla, con estas pruebas basadas en los requisitos para ese incremento. En el desarrollo basado en pruebas,
que es una parte normal de los procesos ágiles, las pruebas se desarrollan junto con los requisitos antes de que
comience el desarrollo. Esto ayuda a los evaluadores y desarrolladores a comprender los requisitos y garantiza que
no haya demoras a medida que se crean los casos de prueba.
Cuando se utiliza un proceso de software dirigido por un plan (por ejemplo, para el desarrollo de sistemas
críticos), las pruebas están dirigidas por un conjunto de planes de prueba. Un equipo independiente de probadores trabaja
Machine Translated by Google
60 Capítulo 2 ÿ Procesos de software
Especificación de
Diseño de
requisitos
Especificación del sistema
Cliente
Plan de prueba
diseño de
sistemas
componentes
Plan de
Plan de prueba
prueba de
de integración
integración del sistema
Prueba de
Servicio
cliente
Código de
componente y prueba
del subsistema
Prueba de
integración del sistema
Prueba de
integración del subsistema
Figura 2.7 Fases de prueba
en un proceso de software dirigido
por un plan
de estos planes de prueba, que se han desarrollado a partir de la especificación y el diseño del sistema. La
figura 2.7 ilustra cómo los planes de prueba son el vínculo entre las actividades de prueba y desarrollo. Esto
a veces se llama el modelo V de desarrollo (gírelo de lado para ver la V). El modelo V muestra las actividades
de validación del software que corresponden a cada etapa del modelo de proceso en cascada.
Cuando un sistema se va a comercializar como un producto de software, a menudo se utiliza un proceso
de prueba llamado prueba beta. La prueba beta implica entregar un sistema a una cantidad de clientes
potenciales que aceptan usar ese sistema. Informan de los problemas a los desarrolladores del sistema. Esto
expone el producto a un uso real y detecta errores que pueden no haber sido previstos por los desarrolladores
del producto. Después de esta retroalimentación, el producto de software puede modificarse y lanzarse para
pruebas beta adicionales o venta general.
2.2.4 Evolución del software
La flexibilidad del software es una de las principales razones por las que cada vez más software se incorpora
a sistemas grandes y complejos. Una vez que se ha tomado la decisión de fabricar el hardware, es muy
costoso realizar cambios en el diseño del hardware.
Sin embargo, se pueden realizar cambios en el software en cualquier momento durante o después del
desarrollo del sistema. Incluso los cambios extensos siguen siendo mucho más económicos que los cambios
correspondientes en el hardware del sistema.
Históricamente, siempre ha habido una división entre el proceso de desarrollo de software y el proceso de
evolución del software (mantenimiento de software). La gente piensa en el desarrollo de software como una
actividad creativa en la que se desarrolla un sistema de software desde un concepto inicial hasta un sistema
de trabajo. Sin embargo, a veces piensan que el mantenimiento del software es aburrido y poco interesante.
Piensan que el mantenimiento del software es menos interesante y desafiante que el desarrollo del software
original.
Esta distinción entre desarrollo y mantenimiento es cada vez más irrelevante.
Muy pocos sistemas de software son sistemas completamente nuevos, y hace mucho más
Machine Translated by Google
2.3 ÿ Hacer frente al cambio 61
Definir los requisitos
del sistema
Figura 2.8 Evolución del
Evaluar los sistemas
Proponer cambios en
existentes
el sistema
Modificar
sistemas
Sistemas
Nuevo
existentes
sistema
sistema de software
sentido ver el desarrollo y el mantenimiento como un continuo. En lugar de dos procesos separados, es más
realista pensar en la ingeniería de software como un proceso evolutivo (Figura 2.8) donde el software cambia
continuamente durante su vida útil en respuesta a los requisitos cambiantes y las necesidades del cliente.
2.3 Hacer frente al cambio
El cambio es inevitable en todos los grandes proyectos de software. Los requisitos del sistema cambian a
medida que las empresas responden a presiones externas, competencia y cambios en las prioridades de
gestión. A medida que se dispone de nuevas tecnologías, se hacen posibles nuevos enfoques para el diseño
y la implementación. Por lo tanto, cualquiera que sea el modelo de proceso de software que se utilice, es
esencial que pueda adaptarse a los cambios en el software que se está desarrollando.
El cambio se suma a los costos de desarrollo de software porque generalmente significa que el trabajo
que se ha completado debe rehacerse. Esto se llama reelaboración. Por ejemplo, si se han analizado las
relaciones entre los requisitos de un sistema y luego se identifican nuevos requisitos, se debe repetir parte o
la totalidad del análisis de requisitos. Entonces puede ser necesario rediseñar el sistema para cumplir con
los nuevos requisitos, cambiar cualquier programa que se haya desarrollado y volver a probar el sistema.
Se pueden utilizar dos enfoques relacionados para reducir los costos de reelaboración:
1. Anticipación de cambios, donde el proceso de software incluye actividades que pueden anticipar o
predecir posibles cambios antes de que se requiera una reelaboración significativa. Por ejemplo, se
puede desarrollar un sistema prototipo para mostrar algunas características clave del sistema a los
clientes. Pueden experimentar con el prototipo y refinar sus requisitos antes de comprometerse con
altos costos de producción de software.
2. Tolerancia al cambio, donde el proceso y el software están diseñados para que los cambios se puedan
realizar fácilmente en el sistema. Esto normalmente involucra alguna forma de desarrollo incremental.
Los cambios propuestos pueden implementarse en incrementos que aún no se han desarrollado. Si
esto es imposible, es posible que solo se deba modificar un único incremento (una pequeña parte del
sistema) para incorporar el cambio.
Machine Translated by Google
62 Capítulo 2 ÿ Procesos de software
En esta sección, analizo dos formas de hacer frente al cambio y a los requisitos cambiantes del
sistema:
1. Creación de prototipos del sistema, donde una versión del sistema o parte del sistema se desarrolla
rápidamente para comprobar los requisitos del cliente y la viabilidad de las decisiones de diseño.
Este es un método de anticipación de cambios, ya que permite a los usuarios experimentar con el
sistema antes de la entrega y así refinar sus requisitos.
Por lo tanto, es probable que se reduzca el número de propuestas de cambio de requisitos
realizadas después de la entrega.
2. Entrega incremental, donde los incrementos del sistema se entregan al cliente para comentarios y
experimentación. Esto admite tanto la evitación del cambio como la tolerancia al cambio. Evita el
compromiso prematuro con los requisitos para todo el sistema y permite incorporar cambios en
incrementos posteriores a un costo relativamente bajo.
La noción de refactorización, es decir, mejorar la estructura y organización de un programa, también
es un mecanismo importante que respalda la tolerancia al cambio. Hablo de esto en el Capítulo 3
(Métodos ágiles).
2.3.1 Prototipos
Un prototipo es una versión temprana de un sistema de software que se utiliza para demostrar
conceptos, probar opciones de diseño y obtener más información sobre el problema y sus posibles
soluciones. El desarrollo rápido e iterativo del prototipo es esencial para que los costos estén controlados
y las partes interesadas del sistema puedan experimentar con el prototipo en una etapa temprana del
proceso de software.
Un prototipo de software se puede utilizar en un proceso de desarrollo de software para ayudar
anticipar los cambios que puedan ser necesarios:
1. En el proceso de ingeniería de requisitos, un prototipo puede ayudar con la obtención
ción y validación de los requisitos del sistema.
2. En el proceso de diseño del sistema, se puede utilizar un prototipo para explorar soluciones de
software y en el desarrollo de una interfaz de usuario para el sistema.
Los prototipos del sistema permiten a los usuarios potenciales ver qué tan bien el sistema respalda
su trabajo. Pueden obtener nuevas ideas para los requisitos y encontrar áreas de fortaleza y debilidad
en el software. A continuación, pueden proponer nuevos requisitos del sistema. Además, a medida que
se desarrolla el prototipo, puede revelar errores y omisiones en los requisitos del sistema. Una
característica descrita en una especificación puede parecer clara y útil.
Sin embargo, cuando esa función se combina con otras funciones, los usuarios a menudo descubren
que su vista inicial era incorrecta o incompleta. La especificación del sistema puede entonces modificarse
para reflejar el cambio en la comprensión de los requisitos.
Machine Translated by Google
2.3 ÿ Hacer frente al cambio 63
Establecer
prototipo
de objetivos
plan de
Figura 2.9 Desarrollo de
prototipos
Definir
funcionalidad
prototipo
Definición
de esquema
Desarrollar
Evaluar
prototipo
prototipo
Prototipo
Reporte de
ejecutable
evaluacion
prototipos
Se puede usar un prototipo de sistema mientras se diseña el sistema para llevar a cabo experimentos
de diseño para comprobar la viabilidad de un diseño propuesto. Por ejemplo, el diseño de una base de
datos puede crearse un prototipo y probarse para verificar que admita un acceso eficiente a los datos
para las consultas de los usuarios más comunes. La creación rápida de prototipos con la participación
del usuario final es la única forma sensata de desarrollar interfaces de usuario. Debido a la naturaleza
dinámica de las interfaces de usuario, las descripciones textuales y los diagramas no son lo
suficientemente buenos para expresar los requisitos y el diseño de la interfaz de usuario.
En la figura 2.9 se muestra un modelo de proceso para el desarrollo de prototipos. Los objetivos de
la creación de prototipos deben ser explícitos desde el inicio del proceso. Estos pueden ser para
desarrollar la interfaz de usuario, desarrollar un sistema para validar los requisitos funcionales del sistema
o desarrollar un sistema para demostrar la aplicación a los gerentes. Un mismo prototipo normalmente
no puede cumplir todos los objetivos. Si los objetivos no se declaran, la gerencia o los usuarios finales
pueden malinterpretar la función del prototipo. En consecuencia, es posible que no obtengan los
beneficios que esperaban del desarrollo del prototipo.
La siguiente etapa en el proceso es decidir qué poner y, quizás más importante, qué dejar fuera del
sistema prototipo. Para reducir los costos de creación de prototipos y acelerar el cronograma de entrega,
puede dejar algunas funciones fuera del prototipo. Puede decidir relajar los requisitos no funcionales,
como el tiempo de respuesta y la utilización de la memoria. El manejo y la gestión de errores pueden
ignorarse a menos que el objetivo del prototipo sea establecer una interfaz de usuario. Los estándares
de confiabilidad y calidad del programa pueden verse reducidos.
La etapa final del proceso es la evaluación del prototipo. Durante esta etapa se debe prever la
capacitación de los usuarios, y los objetivos del prototipo se deben utilizar para derivar un plan de
evaluación. Los usuarios potenciales necesitan tiempo para sentirse cómodos con un nuevo sistema y
adaptarse a un patrón normal de uso. Una vez que utilizan el sistema con normalidad, descubren errores
y omisiones en los requisitos. Un problema general con la creación de prototipos es que los usuarios
pueden no usar el prototipo de la misma manera que usan el sistema final. Los probadores de prototipos
pueden no ser típicos de los usuarios del sistema. Es posible que no haya suficiente tiempo para capacitar
a los usuarios durante la evaluación del prototipo. Si el prototipo es lento, los evaluadores pueden ajustar
su forma de trabajar y evitar aquellas características del sistema que tienen tiempos de respuesta lentos.
Cuando se les proporcione una mejor respuesta en el sistema final, podrán utilizarlo de forma diferente.
Machine Translated by Google
64 Capítulo 2 ÿ Procesos de software
Definir los requisitos
del esquema
Asignar requisitos a
incrementos
Arquitectura del
sistema de diseño
Desarrollar incremento
del sistema
¿Sistema
incompleto?
Validar
incremento
Integrar
incremento
Validar
sistema
Implementar incremento
¿Sistema
completo?
Figura 2.10
Sistema final
Entrega incremental
2.3.2 Entrega incremental
La entrega incremental (Figura 2.10) es un enfoque para el desarrollo de software donde algunos
de los incrementos desarrollados se entregan al cliente y se implementan para su uso en su
entorno de trabajo. En un proceso de entrega incremental, los clientes definen cuáles de los
servicios son más importantes y cuáles son menos importantes para ellos. A continuación, se
define una serie de incrementos de entrega, y cada incremento proporciona un subconjunto de
la funcionalidad del sistema. La asignación de servicios a incrementos depende de la prioridad
del servicio, con los servicios de mayor prioridad implementados y entregados primero.
Una vez que se han identificado los incrementos del sistema, se definen en detalle los
requisitos para los servicios que se entregarán en el primer incremento y se desarrolla ese
incremento. Durante el desarrollo, se pueden realizar más análisis de requisitos para incrementos
posteriores, pero no se aceptan cambios de requisitos para el incremento actual.
Una vez que se completa y entrega un incremento, se instala en el entorno de trabajo normal
del cliente. Pueden experimentar con el sistema y esto les ayuda a aclarar sus requisitos para
posteriores incrementos del sistema. A medida que se completan nuevos incrementos, se
integran con los incrementos existentes para que la funcionalidad del sistema mejore con cada
incremento entregado.
La entrega incremental tiene una serie de ventajas:
1. Los clientes pueden usar los primeros incrementos como prototipos y adquirir experiencia que
informe sus requisitos para posteriores incrementos del sistema. A diferencia de los
prototipos, estos son parte del sistema real, por lo que no hay reaprendizaje cuando el
sistema completo está disponible.
2. Los clientes no tienen que esperar hasta que se entregue todo el sistema antes de que puedan
obtener valor de él. El primer incremento satisface sus requisitos más críticos, por lo que
pueden usar el software de inmediato.
3. El proceso mantiene los beneficios del desarrollo incremental en el sentido de que debería ser
relativamente fácil incorporar cambios al sistema.
Machine Translated by Google
2.4 ÿ Mejora de procesos 65
4. Dado que los servicios de mayor prioridad se entregan primero y luego se integran, los servicios del
sistema más importantes reciben la mayoría de las pruebas. Esto significa que es menos probable
que los clientes encuentren fallas de software en las partes más importantes del sistema.
Sin embargo, hay problemas con la entrega incremental. En la práctica, solo funciona en situaciones
en las que se está introduciendo un sistema completamente nuevo y los evaluadores del sistema tienen
tiempo para experimentar con el nuevo sistema. Los problemas clave con este enfoque son:
1. La entrega iterativa es problemática cuando el nuevo sistema pretende reemplazar un sistema existente.
Los usuarios necesitan toda la funcionalidad del sistema antiguo y, por lo general, no están dispuestos
a experimentar con un nuevo sistema incompleto. A menudo, no es práctico utilizar los sistemas
antiguo y nuevo juntos, ya que es probable que tengan diferentes bases de datos e interfaces de
usuario.
2. La mayoría de los sistemas requieren un conjunto de instalaciones básicas que son utilizadas por
diferentes partes del sistema. Como los requisitos no se definen en detalle hasta que se implementa
un incremento, puede ser difícil identificar las instalaciones comunes que necesitan todos los incrementos.
3. La esencia de los procesos iterativos es que la especificación se desarrolla junto con el software. Sin
embargo, esto entra en conflicto con el modelo de adquisición de muchas organizaciones, donde la
especificación completa del sistema es parte del contrato de desarrollo del sistema. En el enfoque
incremental, no existe una especificación completa del sistema hasta que se especifica el incremento
final. Esto requiere una nueva forma de contrato, que los grandes clientes, como las agencias
gubernamentales, pueden encontrar difícil de acomodar.
Para algunos tipos de sistemas, el desarrollo y la entrega incrementales no son el mejor enfoque. Estos
son sistemas muy grandes en los que el desarrollo puede implicar equipos que trabajan en diferentes
ubicaciones, algunos sistemas integrados en los que el software depende del desarrollo del hardware y
algunos sistemas críticos en los que se deben analizar todos los requisitos para comprobar si hay
interacciones que puedan comprometer la seguridad del usuario. sistema.
Estos grandes sistemas, por supuesto, sufren los mismos problemas de requisitos inciertos y
cambiantes. Por lo tanto, para abordar estos problemas y obtener algunos de los beneficios del desarrollo
incremental, se puede desarrollar un prototipo de sistema y usarlo como plataforma para experimentos con
los requisitos y el diseño del sistema. Con la experiencia adquirida con el prototipo, se pueden acordar los
requisitos definitivos.
2.4 Mejora de procesos
Hoy en día, existe una demanda constante por parte de la industria de software mejor y más barato, que
debe entregarse en plazos cada vez más ajustados. En consecuencia, muchas empresas de software han
recurrido a la mejora de procesos de software como una forma de mejorar la
Machine Translated by Google
66 Capítulo 2 ÿ Procesos de software
Medida
Cambio
Analizar
Figura 2.11 El ciclo de
mejora de procesos
calidad de su software, reduciendo costos o acelerando sus procesos de desarrollo. La mejora de
procesos significa comprender los procesos existentes y cambiar estos procesos para aumentar la
calidad del producto y/o reducir los costos y el tiempo de desarrollo. Cubro temas generales de
medición de procesos y mejora de procesos en detalle en el Capítulo 26 de la web.
Se utilizan dos enfoques bastante diferentes para la mejora y el cambio de procesos:
1. El enfoque de madurez de procesos, que se ha centrado en mejorar la gestión de procesos y
proyectos e introducir buenas prácticas de ingeniería de software en una organización. El nivel
de madurez del proceso refleja la medida en que se han adoptado buenas prácticas técnicas
y de gestión en los procesos de desarrollo de software organizacional. Los objetivos principales
de este enfoque son mejorar la calidad del producto y la previsibilidad del proceso.
2. El enfoque ágil, que se ha centrado en el desarrollo iterativo y la reducción de los gastos
generales en el proceso de software. Las características principales de los métodos ágiles son
la entrega rápida de funcionalidad y la capacidad de respuesta a los requisitos cambiantes del
cliente. La filosofía de mejora aquí es que los mejores procesos son aquellos con los gastos
generales más bajos y los enfoques ágiles pueden lograr esto.
Describo los enfoques ágiles en el Capítulo 3.
Las personas entusiastas y comprometidas con cada uno de estos enfoques generalmente son
escépticas sobre los beneficios del otro. El enfoque de la madurez del proceso tiene sus raíces en
el desarrollo impulsado por un plan y, por lo general, requiere mayores “gastos generales”, en el
sentido de que se introducen actividades que no son directamente relevantes para el desarrollo del
programa. Los enfoques ágiles se centran en el código que se está desarrollando y minimizan
deliberadamente la formalidad y la documentación.
El proceso general de mejora del proceso que subyace al enfoque de madurez del proceso es
un proceso cíclico, como se muestra en la Figura 2.11. Las etapas en este proceso son:
1. Medición del proceso Mide uno o más atributos del proceso o producto de software. Estas
medidas forman una línea de base que le ayuda a decidir si
Machine Translated by Google
2.4 ÿ Mejora de procesos 67
las mejoras en los procesos han sido efectivas. A medida que introduce mejoras, vuelve a medir
los mismos atributos, que con suerte habrán mejorado de alguna manera.
2. Análisis del proceso Se evalúa el proceso actual y se identifican las debilidades y los cuellos de
botella del proceso. Los modelos de proceso (a veces llamados mapas de proceso) que
describen el proceso pueden desarrollarse durante esta etapa. El análisis puede enfocarse
considerando características del proceso tales como rapidez y robustez.
3. Cambio de proceso Se proponen cambios de proceso para abordar algunas de las debilidades de
proceso identificadas. Estos se introducen y el ciclo se reanuda para recopilar datos sobre la
efectividad de los cambios.
Sin datos concretos sobre un proceso o el software desarrollado utilizando ese proceso, es
imposible evaluar el valor de la mejora del proceso. Sin embargo, es poco probable que las empresas
que inician el proceso de mejora de procesos tengan datos de proceso disponibles como referencia
de mejora. Por lo tanto, como parte del primer ciclo de cambios, es posible que deba recopilar datos
sobre el proceso de software y medir las características del producto de software.
La mejora de procesos es una actividad a largo plazo, por lo que cada una de las etapas del
proceso de mejora puede durar varios meses. También es una actividad continua ya que,
independientemente de los nuevos procesos que se introduzcan, el entorno empresarial cambiará y
los nuevos procesos tendrán que evolucionar para tener en cuenta estos cambios.
La noción de madurez del proceso se introdujo a fines de la década de 1980 cuando el Instituto
de Ingeniería de Software (SEI) propuso su modelo de madurez de la capacidad del proceso
(Humphrey 1988). La madurez de los procesos de una empresa de software refleja la gestión de
procesos, la medición y el uso de buenas prácticas de ingeniería de software en la empresa. Esta
idea se introdujo para que el Departamento de Defensa de EE. UU. pudiera evaluar la capacidad de
ingeniería de software de los contratistas de defensa, con miras a limitar los contratos a aquellos
contratistas que habían alcanzado el nivel requerido de madurez del proceso. Se propusieron cinco
niveles de madurez del proceso. como se muestra en la Figura 2.12. Estos han evolucionado y se
han desarrollado durante los últimos 25 años (Chrissis, Konrad y Shrum 2011), pero las ideas
fundamentales del modelo de Humphrey siguen siendo la base de la evaluación de la madurez del
proceso de software.
Los niveles en el modelo de madurez del proceso son:
1. Inicial Se cumplen los objetivos asociados con el área de proceso y para todos los procesos se
establece explícitamente el alcance del trabajo a realizar y se comunica a los miembros del
equipo.
2. Gestionado En este nivel, se cumplen los objetivos asociados con el área de proceso y existen
políticas organizacionales que definen cuándo se debe utilizar cada proceso. Debe haber planes
de proyecto documentados que definan los objetivos del proyecto. Los procedimientos de control
de procesos y gestión de recursos deben estar en funcionamiento en toda la institución.
3. Definido Este nivel se enfoca en la estandarización organizacional y el despliegue de procesos.
Cada proyecto tiene un proceso gestionado que se adapta a los requisitos del proyecto a partir
de un conjunto definido de procesos organizacionales. Los activos del proceso y las mediciones
del proceso deben recopilarse y utilizarse para futuras mejoras del proceso.
Machine Translated by Google
68 Capítulo 2 ÿ Procesos de software
Nivel 5
optimizando
Nivel 4
Gestionado
cuantitativamente
Nivel 3
definido
Nivel 2
Administrado
Nivel 1
Figura 2.12 Niveles de
Inicial
madurez de la capacidad
4. Administrado cuantitativamente En este nivel, existe la responsabilidad organizacional de utilizar
métodos estadísticos y otros métodos cuantitativos para controlar los subprocesos. Es decir,
las mediciones recopiladas de procesos y productos deben usarse en la gestión de procesos.
5. Optimización En este nivel más alto, la organización debe utilizar las mediciones del proceso y
del producto para impulsar la mejora del proceso. Se deben analizar las tendencias y adaptar
los procesos a las cambiantes necesidades del negocio.
El trabajo sobre los niveles de madurez de los procesos ha tenido un gran impacto en la industria
del software. Enfocó la atención en los procesos y prácticas de ingeniería de software que se
utilizaron y condujo a mejoras significativas en la capacidad de ingeniería de software. Sin embargo,
hay demasiados gastos generales en la mejora de procesos formales para las pequeñas empresas,
y la estimación de la madurez con procesos ágiles es difícil. En consecuencia, solo las grandes
empresas de software ahora utilizan este enfoque centrado en la madurez para la mejora del
proceso de software.
Puntos clave
ÿ Los procesos de software son las actividades involucradas en la producción de un sistema de software. proceso de software
los modelos son representaciones abstractas de estos procesos.
ÿ Los modelos de procesos generales describen la organización de los procesos de software. Ejemplos de estos
los modelos generales incluyen el modelo en cascada, el desarrollo incremental y la configuración e integración
de componentes reutilizables.
Machine Translated by Google
Capítulo 2 ÿ Sitio web 69
ÿ La ingeniería de requisitos es el proceso de desarrollar una especificación de software. Las especificaciones están
destinadas a comunicar las necesidades del sistema del cliente a los desarrolladores del sistema.
ÿ Los procesos de diseño e implementación se ocupan de transformar una especificación de requisitos en un sistema
de software ejecutable.
ÿ La validación del software es el proceso de comprobar que el sistema se ajusta a su especificación y
que satisfaga las necesidades reales de los usuarios del sistema.
ÿ La evolución del software tiene lugar cuando usted cambia los sistemas de software existentes para cumplir
con los nuevos requisitos. Los cambios son continuos y el software debe evolucionar para seguir siendo útil.
ÿ Los procesos deben incluir actividades para hacer frente al cambio. Esto puede implicar una fase de creación de
prototipos que ayude a evitar malas decisiones sobre los requisitos y el diseño. Los procesos se pueden estructurar
para el desarrollo iterativo y la entrega, de modo que se puedan realizar cambios sin interrumpir el sistema en su conjunto.
ÿ La mejora de procesos es el proceso de mejorar los procesos de software existentes para mejorar
calidad del producto, reducir los costos de desarrollo o reducir el tiempo de desarrollo. Es un proceso cíclico que implica la
medición, el análisis y el cambio del proceso.
Otras lecturas
"Modelos de proceso en ingeniería de software". Esta es una excelente descripción general de una amplia gama de modelos de
procesos de ingeniería de software que se han propuesto. (W. Scacchi, Encyclopaedia of Software Engineering, ed. JJ Marciniak, John
Wiley & Sons, 2001) http://www.ics.uci.edu/~wscacchi/ Papers/SE-Encyc/Process-Models-SE-Encyc .pdf
Mejora de Procesos de Software: Resultados y Experiencia de Campo. Este libro es una colección de artículos que se centran en
estudios de casos de mejora de procesos en varias pequeñas y medianas empresas noruegas. También incluye una buena introducción
a los aspectos generales de la mejora de procesos.
(Conradi, R., Dybå, T., Sjøberg, D. y Ulsund, T. (eds.), Springer, 2006).
"Modelos y metodologías del ciclo de vida del desarrollo de software". Esta publicación de blog es
un resumen sucinto de varios modelos de procesos de software que se han propuesto y utilizado.
Discute las ventajas y desventajas de cada uno de estos modelos (M. Sami, 2012). http://
melsatar.wordpress. com/2012/03/15/software-desarrollo-ciclo-de-vida-modelos-y-metodologías/
Sitio web
Diapositivas de PowerPoint para este capítulo:
www.pearsonglobaleditions.com/Sommerville
Enlaces a videos de apoyo:
http://software-engineering-book.com/videos/software-engineering/
Machine Translated by Google
70 Capítulo 2 ÿ Procesos de software 70 Capítulo 2 ÿ Procesos de software
Ejercicios
2.1. Sugerir el modelo de proceso de software genérico más apropiado que podría usarse como base
para gestionar el desarrollo de los siguientes sistemas. Explique su respuesta de acuerdo al tipo de sistema que se está
desarrollando:
Un sistema para controlar el frenado antibloqueo en un automóvil.
Un sistema de realidad virtual para apoyar el mantenimiento del software
Un sistema de contabilidad universitario que reemplaza un sistema existente
Un sistema interactivo de planificación de viajes que ayuda a los usuarios a planificar viajes con el menor
impacto ambiental
2.2. El desarrollo de software incremental podría usarse de manera muy efectiva para clientes que no tienen una idea clara
sobre los sistemas necesarios para sus operaciones. Conversar.
2.3. Considere el modelo de proceso de integración y configuración que se muestra en la Figura 2.3. Explique por qué es
fundamental repetir la actividad de ingeniería de requisitos en el proceso.
2.4. Sugiera por qué es importante hacer una distinción entre desarrollar los requisitos del usuario y desarrollar los requisitos
del sistema en el proceso de ingeniería de requisitos.
2.5. Utilizando un ejemplo, explique por qué las actividades de diseño del diseño arquitectónico, el diseño de bases de datos,
el diseño de interfaces y el diseño de componentes son interdependientes.
2.6. Explique por qué las pruebas de software siempre deben ser una actividad incremental y por etapas. ¿Son los
programadores las mejores personas para probar los programas que han desarrollado?
2.7. Imagine que un gobierno quiere un programa de software que ayude a realizar un seguimiento de la utilización de los
vastos recursos minerales del país. Aunque los requisitos planteados por el gobierno no estaban muy claros, se
encargó a una empresa de software el desarrollo de un prototipo. El gobierno encontró el prototipo impresionante y
pidió que se ampliara para que fuera el sistema real que se utilizaría. Analice los pros y los contras de adoptar este
enfoque.
2.8. Ha desarrollado un prototipo de un sistema de software y su gerente está muy impresionado con él. Ella propone que se
ponga en uso como un sistema de producción, con nuevas funciones agregadas según sea necesario. Esto evita el
gasto de desarrollo del sistema y hace que el sistema sea inmediatamente útil. Escriba un breve informe para su gerente
que explique por qué los sistemas de prototipos no deberían usarse normalmente como sistemas de producción.
2.9. Sugiera dos ventajas y dos desventajas del enfoque de evaluación y mejora de procesos que se incorpora en el marco
de Madurez de Capacidad de SEI.
2.10. Históricamente, la introducción de la tecnología ha provocado cambios profundos en el mercado laboral y, al menos
temporalmente, ha desplazado a personas de sus puestos de trabajo. Analice si es probable que la introducción de una
amplia automatización de procesos tenga las mismas consecuencias para los ingenieros de software. Si no cree que lo
hará, explique por qué no. Si cree que reducirá las oportunidades laborales, ¿es ético que los ingenieros afectados se
resistan pasiva o activamente a la introducción de esta tecnología?
Machine Translated by Google
Capítulo 2 ÿ Referencias 71
Referencias
Abrial, JR 2005. El Libro B: Asignación de Programas a Significados. Cambridge, Reino Unido: Cambridge
University Press.
. 2010. Modelado en Event-B: Ingeniería de Sistemas y Software. Cambridge, Reino Unido: Cambridge
University Press.
Böhm, BW (1988). "Un modelo en espiral de desarrollo y mejora de software". Computadora IEEE, 21 (5), 61–72.
doi:10.1145/12944.12948
Boehm, BW y R. Turner. 2004. "Equilibrio de la agilidad y la disciplina: evaluación e integración de métodos ágiles
y basados en planes". En 26 Int. Conf sobre Ingeniería de Software, Edimburgo, Escocia. doi:10.1109/
ICSE.2004.1317503.
Chrissis, MB, M. Konrad y S. Shrum. 2011. CMMI para el desarrollo: Directrices para la integración de procesos
y la mejora de productos, 3.ª ed. Boston: Addison-Wesley.
Humphrey, WS 1988. "Caracterización del proceso de software: un marco de madurez". Software IEEE 5 (2): 73–79.
doi:10.1109/2.59.
Koskela, L. 2013. Pruebas unitarias efectivas: una guía para desarrolladores de Java. Greenwich, CT:
Publicaciones de Manning.
Krutchen, P. 2003. El proceso unificado racional: una introducción, 3.ª ed. Reading, MA: Addison-Wesley.
Royce, WW 1970. “Gestión del desarrollo de grandes sistemas de software: conceptos y técnicas”. En IEEE
WESTCON, 1–9. Los Ángeles, California.
Wheeler, W. y J. White. 2013. Primavera en la práctica. Greenwich, CT: Publicaciones de Manning.
Download