Ingeniería del Software. Ian Sommerville Introducción. Preguntas de introducción. Qué es el software? Programas de ordenador y la documentación asociada. Los productos de software se pueden desarrollar para algún cliente en particular o para un mercado general. Qué es la ingeniería del software? La ingeniería del software es una disciplina de ingeniería que comprende todos los aspectos de la producción de software. Cuál es la diferencia entre ingeniería del software y ciencia de la computación? La ciencia de la computación comprende la teoría y los fundamentos; la ingeniería del software comprende las formas prácticas para desarrollar y entregar un software útil. Cuál es la diferencia entre ingeniería del software e ingeniería de sistemas? La ingeniería de sistemas se refiere a todos los aspectos del desarrollo de sistemas informáticos, incluyendo hardware, software e ingeniería de procesos. La ingeniería del software es parte de este proceso. Qué es un proceso del software? Un conjunto de actividades cuya meta es el desarrollo o evolución del software. Qué es un modelo de procesos del software? Una representación simplificada de un proceso del software, presentad desde una perspectiva específica. Cuáles son los costos de la ingeniería del software? A grande rasgos, el 60% de los costos son de desarrollo, el 40% restante son de pruebas. En el caso del software personalizado, los costos de evolución a menudo exceden los de desarrollo. Qué son los métodos de la ingeniería del software? Enfoques estructurados para el desarrollo de software que incluyen modelos de sistemas, notaciones, reglas, sugerencias de diseño y guías de procesos. Qué es CASE (ingeniería del software asistida por ordenador? Sistemas de software que intentan proporcionar ayuda automatizada a las actividades del proceso del software. Los sistemas CASE a menudo se utilizan como apoyo al método. 1
Cuáles son los atributos de un buen software? El software debe tener la funcionalidad y el rendimiento requeridos por el usuario, además de ser mantenible, confiable y fácil de utilizar. Cuáles son los retos fundamentales a los que se enfrenta la ingeniería del software)? Enfrentarse con la creciente diversidad, las demandadas para reducir los tiempos de entrega y el desarrollo de software fiable. Definición de método. Un método es un enfoque estructurado para el desarrollo de software cuyo propósito es facilitar la producción de software de alta calidad de una forma costeable. Componentes de un método. Descripciones del modelo del sistema. Descripciones de los modelos del sistema que desarrollará y la notación utilizada para definir estos modelos. Por ejemplo: modelos de objetos o flujos de datos. Reglas. Restricciones que siempre se aplican a los modelos de sistemas. Por ejemplo: cada entidad de un modelo del sistema debe tener un nombre único. Recomendaciones. Heurística que caracteriza una buena práctica de diseño en este método. Seguir recomendaciones debe dar como resultado un modelo del sistema bien organizado. Por ejemplo: ningún objeto debe tener más de siete subobjetos asociados a él. Guías en el proceso. Descripciones de las actividades que deben seguirse para desarrollar los modelos del sistema y la organización de estas actividades. Por ejemplo: los atributos de los objetos deben documentarse antes de definir las operaciones asociadas a un objeto. Los atributos de un buen software. Mantenibilidad. El software debe escribirse de tal forma que pueda evolucionar para cumplir las necesidades de cambio de los clientes. Éste es un atributo crítico debido a que el cambio en el software es una consecuencia inevitable de un cambio en el entorno de negocio. Confiabilidad. La confiabilidad del software tiene un gran número de características, incluyendo la fiabilidad, la protección y la seguridad. El software confiable no debe causar daños físicos en el caso de que se produzca un error en el sistema. Eficiencia. El software no debe hacer que se malgasten los recursos del sistema, como la memoria y los ciclos de procesamiento. Por lo tanto, la eficiencia incluye tiempos de respuesta y de procesamiento, de utilización de memoria, etc. Usabilidad. El software debe ser fácil de utilizar, sin esfuerzo adicional, por el usuario para quien está diseñado. Esto significa que debe tener una interfaz de usuario apropiada y una documentación adecuada. 2
Puntos clave. La ingeniería del software es una disciplina de ingeniería que comprende todos los aspectos de producción de un software. Los productos software consisten en programas desarrollados y en la documentación asociada. Los atributos esenciales de los productos software son: Mantenibilidad, confiabilidad, eficiencia y usabilidad. El proceso del software incluye todas las actividades relativas al desarrollo del software. Las actividades de alto nivel de especificación del software, el desarrollo, la validación y la evolución son parte de todos los procesos software. Los métodos son formas organizadas de producir software. Incluyen sugerencias para el proceso que se debe seguir, la notación que se va a utilizar, los modelos del sistema que hay que desarrollar y las reglas que gobiernan estos modelos junto con las pautas de diseño. Las herramientas CASE son sistemas de software que están diseñados para ayudar a las actividades rutinarias del proceso del software, como editar diagramas de diseño, verificar la consistencia de éstos y mantener un banco de pruebas de los programas ejecutados. Los ingenieros de software tienen responsabilidades en la profesión de la ingeniería y en la sociedad. No sólo deben estar pendientes de los aspectos técnicos. Las sociedades profesionales publican códigos de conducta que definen los estándares de comportamientos esperado por sus miembros. Sistemas socio-técnicos. Propiedades emergentes de los sistemas. Volumen. El volumen de un sistema (el espacio total ocupado) varía dependiendo de cómo estén ordenados y conectados los montajes de los componentes. Fiabilidad. La fiabilidad del sistema depende de la fiabilidad de los componentes, pero interacciones inesperadas pueden causar nuevos tipos de fallos y, por lo tanto, afectar a la fiabilidad del sistema. Protección. La protección del sistema (su capacidad para resistir ataques) es una propiedad compleja que no se puede medir fácilmente. Los ataques pueden ser ideados de forma que no fueron predichos por los diseñadores del sistema y así vencer las protecciones incorporadas. Reparabilidad. Esta propiedad refleja que punto resulta fácil arreglar un problema con el sistema una vez que ha sido descubierto. Depende de la posibilidad de diagnosticar el 3
problema, acceder a los componentes que son defectuosos y modificar o reemplazar estos componentes. Usabilidad. Esta propiedad refleja como es de fácil usar el sistema. Depende de los componentes técnicos del sistema, sus operarios y su entorno de operaciones. Puntos clave. Los sistemas socio-técnicos incluyen hardware, software y personas y, se sitúan dentro de una organización. Están diseñados para ayudar a la organización a cumplir algún objetivo amplio. Las propiedades emergentes de un sistema son características de los sistemas como un todo más que sus partes componentes. Incluyen propiedades como el rendimiento, la fiabilidad, la usabilidad, la seguridad y la protección. El éxito o fracaso de un sistema depende a menudo de estas propiedades emergentes. El proceso de la ingeniería de sistemas comprende la especificación, el diseño, el desarrollo, la integración y las pruebas. La integración de sistemas es crítica cuando diversos subsistemas de diferentes proveedores deben trabajar de manera conjunta. Factores humanos y organizacionales como la estructura y políticas organizacionales influyen de forma significativa en el funcionamiento de los sistemas socio-técnicos. Dentro de una organización, existen complejas relaciones entre los procesos de adquisición, desarrollo y operativo del sistema. Un sistema heredado es un sistema antiguo que aún proporciona servicios esenciales de negocio. Los sistemas heredados no son sólo sistemas de software de aplicación. Son sistemas sociotécnicos, por lo que incluyen procesos de negocio, software de aplicación, software de apoyo y sistema hardware. Sistemas críticos. Terminología de la fiabilidad. Fallo del sistema. Evento que tiene lugar en algún instante cuando el sistema no funciona como esperan sus usuario. Error del sistema. Estado erróneo del sistema que puede dar lugar a un comportamiento inesperado por sus usuarios. Defecto del sistema. Característica de un sistema software que puede dar lugar a un error del sistema. Por ejemplo: un fallo en la ejecución al inicializar una variable puede hacer que dicha variable tenga un valor incorrecto cuando sea usada. 4
Error humano o equivocación. Comportamiento humano que tiene como consecuencia la introducción de defectos en el sistema. Terminología de la fiabilidad. Accidente. Evento o secuencia de eventos no planificados que provocan muerte o lesiones, daño a las propiedades o al entorno. Un ejemplo de un accidente es una máquina controlada por un ordenador que lesiona a su operador. Contingencia. Una condición con el potencial de causar o contribuir a un accidente. Un ejemplo de contingencia es un fallo de funcionamiento de un sensor que detecta un obstáculo delante de una máquina. Daño. Medida de la pérdida resultante de un percance. El daño puede variar desde varias personas muertas como resultado de un accidente, hasta lesiones o daños menores a la propiedad. Gravedad de la contingencia. Evaluación del peor daño posible que podría resultar de una contingencia en particular. La gravedad de la contingencia puede variar desde catastrófica, en donde muchas personas mueren, a menor, en donde resultan solamente daños menores. Probabilidad de la contingencia. La probabilidad de la ocurrencia de eventos que provocan una contingencia. Los valores de probabilidad tienden a ser arbitrarios, pero varían desde probable hasta improbable. Riesgo. Es una medida de la probabilidad de que el sistema provoque un accidente. El riesgo se evalúa considerando la probabilidad de la contingencia, la gravedad de la contingencia y la probabilidad de que una contingencia cause un accidente. Puntos clave. En un sistema crítico, un fallo de funcionamiento puede provocar pérdidas económicas importantes, daños físicos o amenazas a la vida humana. Tres clases importantes de sistemas críticos son los sistemas de seguridad críticos, sistemas de misión críticos y sistemas de negocio críticos. La confiabilidad de un sistema informático es una propiedad del sistema que refleja el grado de confianza que el usuario tiene en el sistema. Las dimensiones más importantes de la confiabilidad son la disponibilidad, fiabilidad, seguridad y protección. La disponibilidad de un sistema es la probabilidad de que le sea posible entregar los servicios a sus usuarios cuando se lo soliciten y la fiabilidad es probabilidad de que los servicios del sistema se entreguen de acuerdo con lo especificado. La fiabilidad y la disponibilidad se consideran normalmente como las dimensiones más importantes de la confiabilidad. Si un sistema no es fiable, es difícil asegurar la seguridad del sistema o su protección, ya que éstas pueden verse comprometidas por fallos de funcionamiento del sistema. 5
La fiabilidad se relaciona con la probabilidad de que se produzca un error en el momento de utilizar el sistema. Un programa puede contener defectos conocidos, pero aún puede considerarse como fiable por sus usuarios. Éstos pueden no usar nunca las características del sistema que están afectadas por esos defectos. La seguridad de un sistema es un atributo de éste que refleja la capacidad del sistema para funcionar, de forma normal o anormalmente, sin amenazar a las personas o al entorno. La protección es importante para todos los sistemas críticos. Sin un nivel de protección razonable, la disponibilidad, fiabilidad y seguridad de un sistema pueden verse comprometidas si ataques externos provocan algún daño al sistema. Para mejorar la confiabilidad, es necesario adoptar una aproximación socio-técnica para el diseño del sistema, teniendo en cuenta a las personas que forman parte del sistema así como el hardware y el software. 6