Ian Sommerville, María Isabel Alfonso Galipienso (trad.)
La primera edición de este libro de ingeniería del software fue publicada hace más de veinte años. Aquella edición fue escrita utilizando un terminal de tex to conectado a una minicomputadora (un PDP-ll) que posiblemente costaba cerca de 50.000 $. Yo he escrito esta edición desde un portátil con conexión inalámbrica que cuesta menos de 2.000 $ y mucho más potente que aquel PDP-ll. El software más común era el software para mainframes, pero las computadoras personales estaban a punto de aparecer. Ninguno de nosotros imaginó el nivel de difusión que éstas iban a tener ni el cambio que este he cho iba a producir en el mundo. Los cambios en el hardware en los últimos veinte años han sido notables, y podría parecer que los cambios en el software han sido igual de significati vos. Ciertamente, nuestra capacidad para construir sistemas grandes y com plejos ha mejorado drásticamente. Nuestros servicios e infraestructuras na cionales energía, comunicaciones y transporte dependen de sistemas informáticos muy grandes, complejos y fiables. En la construcción de siste mas software se mezclan muchas tecnologías J2EE, .NET, EJB, SAP, BPEL4WS, SOAP, CBSE que permiten que aplicaciones grandes basadas en Web sean desarrolladas mucho más rápido que en el pasado. Sin embargo, a pesar de los cambios que ha habido en las dos últimas déca das, cuando nosotros miramos más allá de las tecnologías, hacia los procesos fundamentales de la ingeniería del software, éstos se han mantenido igual. Nos otros reconocimos hace veinte años que el modelo en cascada tenía problemas serios, pero un examen publicado en diciembre de 2003 por IEEE mostraba que más de un 40% de las compañías siguen utilizando esta aproximación. El tes teo sigue siendo la técnica de validación dominante, a pesar de que otras técni cas, como las inspecciones, han sido utilizadas de una forma más efectiva des de mediados de los años 70. Las herramientas CASE, a pesar de estar basadas ahora en UML, siguen siendo básicamente editores gráficos con alguna fun cionalidad para chequear y generar código. Nuestros actuales métodos y técnicas de ingeniería del software han hecho que la cons trucción de sistemas grandes y complejos sea mejor. A pesar de ello, sigue siendo habitual en contrar proyectos que se retrasan, que sobrepasan el presupuesto o que se entregan sin satis facer las necesidades de los clientes. Mientras estaba escribiendo este libro, se divulgó una investigación del gobierno en Reino Unido, sobre un proyecto para proveer a los juzgados de un sistema software para casos de delincuencia menor. El coste del sistema fue estimado en 156 millones de libras y fue planificado para ser entregado en el año 2001. En 2004, el coste había subido a 390 millones de libras y no estaba totalmente operativo. Hay, por lo tanto, una necesidad imperiosa de educación en ingeniería del software. En los últimos años, el desarrollo más significativo en ingeniería del software ha sido la aparición de UML como estándar para la descripción de sistemas orientados a objetos, yel desarrollo de métodos ágiles como la programación extrema. Los métodos ágiles están per mitiendo el desarrollo rápido de sistemas, explícitamente implican al usuario en el equipo de trabajo y reducen el papeleo y la burocracia en el proceso software. A pesar de lo que algunos críticos sostienen, pienso que estas aproximaciones encarnan buenas prácticas de ingeniería del software. Ellas tienen unos procesos bien definidos, prestan atención a la es pecificación del sistema y a los requerimientos del usuario, y tienen estándares de alta ca lidad. No obstante, esta revisión no pretende ser un texto sobre métodos ágiles. Prefiero centrar me en los procesos básicos de ingeniería del software especificación, diseño, implementa ción, verificación, y validación y gestióno Es necesario entender estos procesos y las técni cas asociadas para decidir si los métodos ágiles son la estrategia de desarrollo más adecuada y cómo adaptar los métodos a una situación particular. Un tema dominante en el libro son los sistemas críticos sistemas en los que los fallos de funcionamiento tienen consecuencias ne fastas y donde la seguridad del sistema es crítica. En cada parte del libro, estudiaremos las técnicas específicas de ingeniería del software que son relevantes para la construcción sistemas críticos. Inevitablemente, los libros reflejan las opiniones y prejuicios de sus autores. Algunos lec tores estarán en desacuerdo con mis opiniones y con mi elección del material. Este desacuer do es un reflejo de la diversidad de disciplinas y es esencial para su evolución. No obstante, yo espero que a todos los ingenieros de software y estudiantes de ingeniería del software les resulte interesante. Estructura del libro: La estructura del libro está basada en los procesos fundamentales de la ingeniería del software. Está organizado en seis partes, con varios capítulos en cada parte: Parte 1: Introduce la ingeniería del software, situándola en un amplio contexto de sistemas y presentando las nociones de procesos y gestión de ingeniería del software. Parte 2: Trata los procesos, técnicas y documentación asociados con los requerimientos de ingeniería. Incluye un estudio sobre los requerimientos software, modelado de sistemas, especificación formal y técnicas para especificar la fiabilidad. Parte 3: Esta parte está dedicada al diseño de software y a los procesos de diseño. Tres de los seis capítulos se centran en el importante tema de las arquitecturas software. Otros te mas incluyen diseño orientado a objetos, diseño de sistemas en tiempo real y diseño de in terfaces de usuario. Parte 4: Describe una serie de aproximaciones a la implementación, incluyendo métodos ágiles, reutilización, CBSE y desarrollo de sistemas críticos. Como los cambios son una parte importante de la implementación, he integrado temas de evolución y mantenimiento en esta parte. Parte 5: Se centra en temas de verificación y validación. Incluye capítulos de validación y verificación estática, testeo y validación de sistemas críticos. Parte 6: La parte final abarca una serie de temas de gestión: gestión de personal, estima ción de costes, gestión de calidad, procesos de mejora y gestión de cambios. En la introducción de cada parte, expondré la estructura y organización con mayor detalle. Cambios en la 6. edición : Hay cambios importantes, relativos a la organización y contenido, respecto a la edición previa. He incluido cuatro capítulos nuevos y he hecho una importante revisión en otros once ca pítulos. Todos los otros capítulos han sido actualizados, incorporando convenientemente nuevo material. Más y más sistemas tienen altos requerimientos de disponibilidad y fiabilidad, y espero que nosotros tomemos la fiabilidad como un conductor básico en la ingeniería del software. Por esta razón, los capítulos de sistemas críticos han sido integrados en otras secciones. Para evi tar que el volumen del libro sea excesivo, he reducido la cantidad de material sobre manteni miento del software y he integrado los temas de mantenimiento y evolución del software en otros capítulos. Hay dos casos de estudio uno sobre la gestión de documentos de una biblioteca y otro de un sistema médico, los cuales presento en diferentes capítulos. El material referente a los casos de estudio está señalado con iconos en los márgenes. La Tabla 1 resume los cambios, indicando con el número entre paréntesis el capítulo correspon diente en la 6. edición. En el sitio Web del libro se puede encontrar más información sobre estos cambios. TABLA l. Revisión de los capítulos: Nuevos capitulos Capítulo 13: Arquitectura de las aplicaciones. Capítulo 17: Desarrollo rápido de aplicaciones. Capítulo 19: Ingeniería del software basada en componentes. Capítulo 21: Evolución del software Capitulas con mayores revisiones estructurales y/o nuevo material Capítulo 2: Sistemas sociotécnicos (2) Capítulo 4: Procesos software (3) Capítulo 7: Procesos de ingeniería de requerimientos (6) Capítulo 9: Especificación de sistemas críticos (17) Capítulo 12: Arquitecturas de sistemas distribuidos (11) Capítulo 16: Diseño de interface de usuario (15) Capítulo 18: Reutilización de código (14) Capítulo 23: Pruebas del software (20) Capítulo 25: Gestión de personal (22) Capítulo 24: Validación de sistemas críticos (21) Capítulo 28: Mejora de procesos (25) Capítulos actualizados Capítulo 1: Introducción (1) Capítulo 3: Sistemas críticos (16) Capítulo 5: Gestión de proyectos (4) Capítulo 6: Requerimientos software (5) Capítulo 8: Modelos de sistemas (7) Capítulo 10: Especificación formal (9) Capítulo 11: Diseño arquitectónico (10) Capítulo 14: Diseño orientado a objetos (12) Capítulo 15: Diseño de sistemas en tiempo real (13) Capítulo 20: Implementación de sistemas críticos (18) Capítulo 22: Verificación y validación (19) Capítulo 26: Estimación de costes del software (23) Capítulo 27: Gestión de calidad (24) Capítulo 29: Gestión de configuraciones (29) Capitulos eliminados Construcción de prototipos software (8) Sistemas heredados (26) Cambios en el software (27) Reingeniería del software (28) Guía para el lector Este libro está enfocado a estudiantes, graduados e ingenieros de la industria del software. Puede ser utilizado en cursos generales de ingeniería del software o en cursos específicos, como programación avanzada, especificación, diseño y gestión software. A los ingenieros de software que trabajan en la industria, este libro puede resultarles útil como lectura general y como actualización de sus conocimientos en temas particulares como ingeniería de requeri mientos, diseño de la arquitectura, desarrollo de sistemas formales y mejora de procesos. Los ejemplos en el texto han sido utilizados como una vía práctica para reflejar el tipo de aplica ciones que los ingenieros deben desarrollar. Usando el libro para enseñar He diseñado el libro para que pueda ser utilizado en tres tipos de cursos de ingeniería. l. Cursos de introducción a la ingeniería del software para estudiantes que no tienen experiencia en ingeniería del software. Se puede empezar con la sección introducto ria y luego seleccionar capítulos de otras secciones del libro. Esto dará a los estu diantes una visión general de la materia con la oportunidad de hacer un estudio más detallado por parte de los alumnos interesados. Si el curso está basado en proyectos, los primeros capítulos proporcionarán suficiente material para comenzar el proyec to, y capítulos posteriores servirán para referenciar y dar más información del avan ce de su trabajo. Páginas Web 2. Cursos de introducción o nivel medio sobre temas específicos de ingeniería del soft ware. El libro es válido para cursos de especificación de requerimientos, diseño de software, gestión de proyectos software, desarrollo de sistemas fiables y evolución del software. Cada parte puede servir tanto para cursos de introducción como intermedios en los diferentes temas. Así como cada capítulo tiene lecturas asociadas, he incluido en el sitio web información sobre otros artículos y libros relevantes. 3. Cursos avanzados en ingeniería del software. Los capítulos pueden servir como base para cursos específicos, pero deben ampliarse con lecturas complementarias que tra ten con mayor detalle los temas. Por ejemplo, yo imparto un módulo en Master en in geniería de sistemas el cual se apoya en este material. He incluido detalles de este cur so y de un curso en ingeniería de sistemas críticos en el sitio web. La utilidad de un libro general como éste está en que puede utilizarse en diferentes cursos. En Lancaster, nosotros empleamos el texto en un curso de introducción a la ingeniería del soft ware y en cursos de especificación, diseño y sistemas críticos. Cursos de ingeniería del soft ware basada en componentes e ingeniería de sistemas utilizan el libro a lo largo de su impar tición, junto con artículos complementarios que se distribuyen entre los alumnos. Tener un solo libro de texto da a los alumnos una visión coherente de la materia, y éstos no tienen que comprar varios libros. Para reforzar la experiencia de aprendizaje de los estudiantes, he incluido un glosario de términos, con definiciones adicionales en el sitio web. Además, cada capítulo tiene: � Unos objetivos claros presentados en la primera página. � Una lista de los puntos clave tratados en el capítulo. � Lecturas adicionales recomendadas otros libros que están actualmente en impresión o artículos fácilmente accesibles (en mi sitio web puede encontrar un listado de otras lec turas y enlaces recomendados). � Ejercicios, que incluyen ejercicios de diseño. El proyecto denominado «Software Engineering Body ofKnowledge» (http://swebok.org) fue establecido para definir las áreas clave de conocimiento técnico relevantes para los pro fesionales del software. Están organizadas bajo 10 epígrafes: requerimientos, diseño, cons trucción, prueba, mantenimiento, gestión de configuraciones, gestión, procesos, herramien tas y métodos, y calidad. Mientras sería imposible incluir en un solo libro de texto todas las áreas de conocimiento propuestas por el proyecto SWEBOK, en este libro se tratan todas las áreas de alto nivel. Páginas Web El sitio web asociado a este libro es: http://www.software-engin.com Este sitio ofrece una amplia gama de material complementario de ingeniería del software. Desde aquí, usted puede acceder a las páginas web de soporte de este libro y de ediciones an teriores. Ésta ha sido mi política, en versiones anteriores y en ésta, para mantener el número de en laces web en el libro en un mínimo absoluto. La razón es que los enlaces web sufren muchos cambios y, una vez impreso el libro, son imposibles de actualizar. En consecuencia, la pági na web del libro incluye un gran número de enlaces a recursos y material relacionado con I ingeniería del software. Si usted los utiliza y encuentra problemas, por favor hágamelo sabe y actualizaré esos enlaces. Para dar soporte en el uso de este libro en cursos de ingeniería del software, he incluid una amplia variedad de material en el sitio web. En los enlaces al material para el docente podrá encontrar: - Presentaciones (PowerPoint y PDF) para todos los capítulos del libro. - Cuestiones para cada capítulo. - Casos de estudio. - Sugerencias sobre proyectos. - Descripciones sobre estructuras de cursos. - Sugerencias sobre lecturas complementarias y enlaces a los recursos web de cada capí tulo. - Soluciones para los ejercicios asociados a cada capítulo y para las cuestiones (sólo pro fesor). Sus sugerencias y comentarios sobre el libro y el sitio web serán bienvenidos. Puede con tactar conmigo a través de ian@software-engin.com. Recomiendo que incluya [SE7] en el asunto del mensaje para evitar que los filtros antispam rechacen su mensaje. Siento no tener tiempo para ayudar a los estudiantes en su trabajo; por lo tanto, no me pregunten cómo re solver ningún problema del libro. Reconocimientos A lo largo de los años muchas personas han contribuido al desarrollo de este libro, y me gus taría dar las gracias a todos los que han comentado las ediciones anteriores y han hecho su gerencias constructivas (revisores, estudiantes, lectores que me han escrito). Al personal de la editorial y producción de Pearson Educación en Inglaterra y en Estados Unidos por su apo yo y ayuda, y producir el libro en un tiempo récord. Por lo tanto, gracias a Keith Mansfield, Patty Mahtani, Daniel Rausch, Carol Noble y Sharon Burkhardt por su ayuda y apoyo. Finalmente, me gustaría dar las gracias a mi familia, que ha tolerado mi ausencia cuando el libro estaba comenzándose a escribir y mi frustración cuando las palabras no surgían. Yen especial a mi esposa, Anne, y a mis hijas, Ali y Jane, por su ayuda y apoyo
© 2008-2024 Fundación Dialnet · Todos los derechos reservados