5
IIE - Instituto de Ingeniería Eléctrica. DesaSoft - Desarrollo de Software para Ingeniería Eléctrica. Guías de clase.   Parte II: Ingeniería de Software. Ingeniería de Software. Índice de contenido Ingeniería de Software......................................................................................................................1 Qué comprende la ingeniería de software................................................................................1 Análisis y Síntesis para resolver un problema..........................................................................1 Herramientas, procedimientos, técnicas, paradigmas..............................................................2 El ingeniero de software..........................................................................................................2 La ingeniería de software........................................................................................................2 Exitos y fracasos......................................................................................................................3 Calidad....................................................................................................................................3 Participantes............................................................................................................................3 Sistema....................................................................................................................................4 Subsistemas.............................................................................................................................4 Construcción de un sistema:....................................................................................................4 Referencias y lecturas recomendadas.......................................................................................5 Lecturas recomendadas..................................................................................................5 Referencias.....................................................................................................................5 Qué comprende la ingeniería de software. El término "ingeniería de software" fue usado por primera vez en 1968 en una conferencia de la OTAN (Plfeeger, 2002). Desde 1968 el software ha penetrado en todos los campos de la vida humana. Los productos de software deben realizar funciones útiles, de la mejor manera posible: deben exhibir funcionalidad y calidad. La Ingeniería de Software abarca dos campos: el de la práctica profesional, para la construcción de software funcional y de buena calidad. el de la investigación, para encontrar formas de mejorar la calidad y productividad de quienes lo construyen. Las buenas prácticas de la ingeniería de software deben asegurar la contribución positiva del software a la vida humana. Análisis y Síntesis para resolver un problema. El software resuelve un problema. Primero debe buscarse una solución al problema. Luego, si es necesario, se puede usar la tecnología del software para implementar esa solución. Asumiremos de ahora en adelante que se ha determinado la necesidad y utilidad de resolver el problema mediante la construcción de un software. El Análisis investiga el problema descomponiéndolo en partes fáciles de comprender. Un problema grande puede describirse entonces como un conjunto de problemas chicos y las relaciones que mantienen entre sí. Puede arribarse a la solución del problema grande resolviendo todos los problemas chicos, atendiendo especialmente a las relaciones existentes entre esos problemas chicos. La Síntesis es la composición de una gran estructura mediante bloques constructivos más 1 de 5

1_Ingenieria de Software

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: 1_Ingenieria de Software

IIE ­ Instituto de Ingeniería Eléctrica.DesaSoft ­ Desarrollo de Software para Ingeniería Eléctrica.Guías de clase.   Parte II: Ingeniería de Software.

Ingeniería de Software.

Índice de contenido

Ingeniería de Software......................................................................................................................1Qué comprende la ingeniería de software................................................................................1Análisis y Síntesis para resolver un problema..........................................................................1Herramientas, procedimientos, técnicas, paradigmas..............................................................2El ingeniero de software..........................................................................................................2La ingeniería de software........................................................................................................2Exitos y fracasos......................................................................................................................3Calidad....................................................................................................................................3Participantes............................................................................................................................3Sistema....................................................................................................................................4Subsistemas.............................................................................................................................4Construcción de un sistema:....................................................................................................4Referencias y lecturas recomendadas.......................................................................................5

Lecturas recomendadas..................................................................................................5Referencias.....................................................................................................................5

Qué comprende la ingeniería de software.

• El término "ingeniería de software" fue usado por primera vez en 1968 en una conferencia de la OTAN (Plfeeger, 2002). 

• Desde 1968 el software ha penetrado en todos los campos de la vida humana. Los productos de software deben realizar funciones útiles, de la mejor manera posible: deben exhibir funcionalidad y calidad. 

• La Ingeniería de Software abarca dos campos: • el de la práctica profesional, para la construcción de software funcional y de buena calidad. • el de la investigación, para encontrar formas de mejorar la calidad y productividad de 

quienes lo construyen. • Las buenas prácticas de la ingeniería de software deben asegurar la contribución positiva 

del software a la vida humana. 

Análisis y Síntesis para resolver un problema.

• El software resuelve un problema. Primero debe buscarse una solución al problema. Luego, si es necesario, se puede usar la tecnología del software para implementar esa solución. Asumiremos de ahora en adelante que se ha determinado la necesidad y utilidad de resolver el problema mediante la construcción de un software. 

• El Análisis investiga el problema descomponiéndolo en partes fáciles de comprender. Un problema grande puede describirse entonces como un conjunto de problemas chicos y las relaciones que mantienen entre sí. 

• Puede arribarse a la solución del problema grande resolviendo todos los problemas chicos, atendiendo especialmente a las relaciones existentes entre esos problemas chicos. 

• La Síntesis es la composición de una gran estructura mediante bloques constructivos más 

1 de 5

Page 2: 1_Ingenieria de Software

chicos. La composición de soluciones individuales puede conformar la solución al problema general, siempre y cuando se hayan resuelto bien los problemas chicos y se hayan respetado las relaciones entre ellos. 

• Cualquier técnica de resolución de problemas tendrá dos partes: el análisis, para determinar la naturaleza del problema, y la síntesis de una solución basada en el análisis. 

Análisis. Síntesis.

Herramientas, procedimientos, técnicas, paradigmas.

• Una herramienta es un instrumento o sistema automatizado para realizar algo de la mejor manera posible. 

• Una técnica es la habilidad para el uso de las herramientas de un área en particular.• Un procedimiento es una combinación de herramientas y técnicas que, usadas en conjunto, 

dan como resultado un producto particular. Un procedimiento es como una receta de cocina. 

• Un paradigma representa un enfoque particular o filosofía para la construcción del software. 

• Ejemplo: las herramientas de cocina (cacerolas, ralladores, cuchillos,...) se emplean en la técnica culinaria (habilidad de usar esas herramientas para cocinar) siguiendo un procedimiento (receta de cocina) para lograr un producto (un plato de comida) según un cierto paradigma (estilo culinario: cocina francesa, cocina china).

El ingeniero de software.

• Los ingenieros de software usan herramientas, técnicas, procedimientos y paradigmas para crear productos de software de calidad en forma productiva (con el menor esfuerzo) obteniendo soluciones eficaces (que funcionen, que resuelvan el problema planteado) y eficientes (con el menor insumo de recursos). 

• Los ingenieros de software ven las computadoras y los lenguajes de programación como herramientas a utilizar en la solución de un problema. Su visión está centrada en el problema. 

La ingeniería de software.

• La ingeniería de software existe por los fracasos: software sin terminar, con errores, que no resuelven el problema, son difíciles de usar... mucho dinero y esfuerzo perdido llevan a buscar un enfoque de ingeniería para la construcción del software. 

• Aspiraciones de la ingeniería de software: producir un software cuyo código sea

2 de 5

Page 3: 1_Ingenieria de Software

• robusto: capaz de superar contingencias o accidentes posibles y corrientes.• fácil de comprender: que otros profesionales lo entiendan fácilmente.• fácil de mantener: que se puedan hacer cambios o correcciones.• efectivo: que cumpla la función para la que fue diseñado. • eficiente: que lo haga con el mínimo uso de recursos (tiempo, procesador, papel...). 

• La ingeniería de software es una disciplina de diseño y desarrollo para lograr construir software  de alta calidad. Es tanto un arte como una ciencia: aplica conocimientos formales, pero hay muchas maneras de realizar la tarea, algunas mejores que otras, variables según los casos.

Exitos y fracasos.

• Los usuarios, ¿están satisfechos con el software existente? Sí y no. Los logros son indiscutibles, pero todos hemos oído de sistemas difíciles de usar, que no resuelven el problema del usuario, que "se cuelgan" o que funcionan mal. 

• Ejemplos, varios citados en [Pfleeger2002, p.7­9]: • Sperry Corporation y el IRS (recaudación de impuestos en USA), "un fiasco de 4000 

millones de dólares", de 1980 a 1996.• Therac­25, equipo de radioterapia, murieron varios pacientes por uso no previsto de 

teclas.• SDI, proyecto de defensa estratégica (“guerra de las galaxias”), requiere 114000 

años de pruebas para asegurar una confiabilidad de 10­9, mínimo requerido para aplicaciones de alto riesgo. 

• Un caza Harrier confundió un radar de la policía caminera con un blanco enemigo (1996). 

• La confiabilidad de un disco duro anda por los 10­9. ¿Cuántos defectos se esperan en un disco de 80 GB? 

• En los hechos, la mayoría de los productos de software tienen defectos. • El costo de corrección de un error en la etapa de análisis es el 10% del costo de corregirlo 

cuando el software se ha entregado al cliente.

Calidad.

• La calidad de un producto debe mirarse al menos desde tres perspectivas diferentes, cada una con sus propios indicadores de calidad: 

• usuarios: si hace lo que desean, si es fácil de aprender y de usar, si es rápido. • diseñadores, programadores y mantenedores: número y tipo de fallas. • contexto de la empresa donde se usa: retorno de la inversión, cubrir el costo, más la 

ganancia que habría dado ese dinero colocado en otro lado, más una compensación por los riesgos asumidos. 

• Se han estudiado modelos para relacionar la calidad interna (perspectiva de los desarrolladores) con la calidad externa (perspectiva de los usuarios). Relacionar la calidad técnica (interna) con el retorno de inversión es más difícil, sobre todo por las diferencias de criterios para el cálculo del retorno. No obstante, los desarrolladores siempre deberán, en algún momento, enfrentar los niveles gerenciales y justificar la inversión. 

Participantes.

En la ingeniería del software participan:

• Cliente: persona u organización que encarga (y paga) el trabajo. • Usuario: personas que usarán el sistema. • Desarrollador: personas u organización que construye el sistema de software. 

3 de 5

Page 4: 1_Ingenieria de Software

Sistema.

Un sistema es un conjunto de objetos y actividades, más una descripción de las relaciones que mantienen unidos los objetos y las actividades. Cada actividad se describe por una lista de las entradas recibidas, las acciones realizadas y las salidas producidas.

La descripción de un sistema requiere:

• identificar sus partes, asignarles nombre. • identificar las relaciones entre las partes.

Para describir un sistema se debe:

1. Distinguir objetos y actividades.Una actividad es algo que sucede en el sistema, un evento iniciado por un disparador que transforma una cosa en otra, cambiando alguna característica.Un objeto o entidad es un elemento involucrado en una actividad. Los objetos o entidades suelen estar relacionados entre sí de alguna manera. En el desarrollo orientado a objetos los objetos se definen como entidades independientes, con características y acciones propias de ese objeto. 

2. Identificar relaciones.Definir las relaciones entre entidades y actividades: qué entidades reciben, producen o modifican algo en el sistema (realizan actividades), qué actividades afectan una entidad. La definición de una entidad incluye su origen (externo o creada por una actividad) y su destino final (otra actividad o salida del sistema). 

3. Identificar los límites.El sistema tiene un límite o frontera; hay entidades que ingresan al sistema desde el exterior y otras que salen del sistema hacia el exterior. 

Redefinición de sistema. Un sistema es un conjunto de entidades, un conjunto de actividades, una descripción de las relaciones entre entidades y actividades y una determinación del límite del sistema. La descripción de estas entidades, actividades, relaciones y límites constituyen los requerimientos del sistema: explicitan de manera estructurada lo que el sistema debe hacer. 

Subsistemas.

• Un sistema raramente existe aislado; generalmente depende de otros sistemas. Deben estudiarse y documentarse cuidadosamente las interacciones del sistema en estudio con los sistemas externos.

• Es posible que un sistema exista dentro de otro, como un subsistema. Si se documentan cuidadosamente las relaciones entre los subsistemas que componen un sistema mayor, es posible concentrar la atención en cada subsistema. 

• Cuando se construye un sistema se simplifica considerablemente la tarea si el sistema total puede construirse como una sucesión creciente de sistemas intermedios. 

Construcción de un sistema:

1. Análisis y definición de requerimientos: descripción de las entidades, actividades, relaciones y límites del sistema.

2. Diseño del sistema: descripción ante el cliente de la apariencia y funcionalidad, la forma como el cliente interactúa con el sistema. Escrito en el lenguaje del cliente, sujeto a su aprobación. 

3. Construcción de los programas. Incluye 

4 de 5

Page 5: 1_Ingenieria de Software

• escritura de los programas: escribir el código. • prueba unitaria o prueba de módulos: prueba de cada programa como pieza 

individual de código. • prueba de integración: prueba conjunta de varios programas ya probados 

unitariamente. • prueba del sistema: comprobación de funcionalidades e interacciones; usuarios, 

clientes y desarrolladores comparan el sistema desarrollado con los requerimientos originales. 

4. Entrega del sistema: instalación, configuración.5. Mantenimiento:

• correcciones de mal funcionamiento; • atención de cambios en los requerimientos. 

Idealmente estas actividades de realizarían una tras otra; en la vida real se hace necesario repetir varias de estas actividades. El proceso de desarrollo de software es una descripción de la construcción del sistema donde las tareas de construcción aparecen organizadas de cierto modo con el objetivo de producir código probado.

Referencias y lecturas recomendadas.

El contenido de este documento está basado en las fuentes citadas a continuación, cuya lectura o consulta no pretenden sustituir.

Lecturas recomendadas.

• [Larman2003] Larman, Craig. UML y patrones. Una introducción al análisis y diseño orientado a objetos y al Proceso Unificado, 2a. edición. Madrid, 2003.ISBN 84­205­3438­2.

• [Fowler1997] Fowler, Martin y Scott, Kendall. UML distilled. Applying the Standard Object Modelling Language. Addison Wesley Longman, Inc., 1997. ISBN 0­201­32563­2.

• [Pfleeger2002] PFLEEGER, SHARI LAWRENCE. Ingeniería de software, teoría y práctica, 1a. edición. Buenos Aires, Pearson educación, 2002. ISBN: 987­9460­71­5.

Referencias.

• [Jacobson2000] Jacobson, Ivar; Booch, Grady; Rumbaugh, James. El proceso unificado de desarrollo de software. Pearson Educación, Madrid, 2000. ISBN: 84­7829­036­2.

• [Booch1999] Booch, Grady; Jacobson, Ivar; Rumbaugh, James. El lenguaje unificado de modelado. Pearson Educación, Madrid, 2000. ISBN: 84­7829­028­1.

Errores, omisiones, comentarios: Víctor González Barbone, vagonbar en fing.edu.uy

Desarrollo de Software para Ingeniería Eléctrica ­ Rev. 2009­05­09Instituto de Ingeniería Eléctrica    ­    Facultad de Ingeniería    ­ Universidad de la República, Uruguay.   

5 de 5