ingenieria de software somerville

792
SOMMERVILLE 9 INGENIERÍA DE SOFTWARE

Upload: unad

Post on 17-Feb-2017

1.011 views

Category:

Software


32 download

TRANSCRIPT

  • INGENIERA DE SOFTWARE, en su novena edicin, se dirige principalmente a estudiantes universitarios que estn inscritos en cursos tanto introductorios como avanzados de ingeniera de software y sistemas. Asimismo, los ingenieros de software que trabajan en la industria encon-trarn el libro til como lectura general y para actualizar sus conocimientos acerca de temas como reutilizacin de software, diseo arquitectnico, confiabilidad, seguridad y mejora de procesos.

    La presente obra se actualiz al incorporar los siguientes cambios:

    > Nuevos captulos sobre software gil y sistemas embebidos.

    > Nuevo material sobre ingeniera dirigida por modelos, desarrollo de fuente abierta y desarrollo dirigido por pruebas, modelo de queso suizo de Reason, arquitecturas de sistemas confiables, anlisis esttico y com-probacin de modelos, reutilizacin COTS, software como servicio y planeacin gil.

    > Un nuevo estudio de caso de amplio alcance que detalla un sistema de registro de pacientes.

    El enfoque del presente texto se centra en temas fundamentales para todos los procesos de desarrollo y, en particular, para el desarrollo de sistemas fiables.

    S O M M E R V I L L E

    9

    SOMMERVILLE

    9IN

    GE

    NIE

    RA

    DE

    SO

    FT

    WA

    RE

    INGENIERA DE SOFTWARE

    Vistenos en:www.pearsoneducacion.net

    Addison-Wesleyes una marca de

    Para mayor informacin, consultewww.pearsoneducation.net/sommerville

    ISBN 978-607-32-0603-7

    PORTADA SOMMERVILLE.indd 1 3/24/11 6:08 PM

  • A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xviA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xvi 3/18/11 4:42:02 PM3/18/11 4:42:02 PM

  • INGENIERA DE SOFTWARENovena edicin

    Ian Sommerville

    Traduccin:Vctor Campos OlgunTraductor especialista en Sistemas Computacionales

    Revisin tcnica:Sergio Fuenlabrada VelzquezEdna Martha Miranda ChvezMiguel ngel Torres DurnMario Alberto Sesma MartnezMario Oviedo GaldeanoJos Luis Lpez GoytiaUnidad Profesional Interdisciplinaria de Ingeniera y Ciencias Sociales y Administrativas-Instituto Politcnico Nacional, Mxico

    Daro Guillermo CardacciUniversidad Abierta Interamericana, Buenos Aires, Argentina

    Marcelo Martn MarciszackUniversidad Tecnolgica Nacional, Crdoba, Argentina

    Addison-Wesley

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd iA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd i 3/22/11 4:44:33 PM3/22/11 4:44:33 PM

  • Authorized translation from the English language edition, entitled Software engineering, 9th edition, by Ian Sommerville published by Pearson Education, Inc., publishing as Addison-Wesley, Copyright 2011. All rights reserved. ISBN 9780137035151

    Traduccin autorizada de la edicin en idioma ingls, titulada Software engineering, 9a edicin por Ian Sommerville publicada por Pearson Education, Inc., publicada como Addison-Wesley, Copyright 2011. Todos los derechos reservados.

    Esta edicin en espaol es la nica autorizada.

    Edicin en espaolEditor: Luis M. Cruz Castillo e-mail: [email protected] Editor de desarrollo: Felipe Hernndez CarrascoSupervisor de produccin: Juan Jos Garca Guzmn

    NOVENA EDICIN, 2011

    D.R. 2011 por Pearson Educacin de Mxico, S.A. de C.V.Atlacomulco 500-5o. pisoCol. Industrial Atoto53519, Naucalpan de Jurez, Estado de Mxico

    Cmara Nacional de la Industria Editorial Mexicana. Reg. nm. 1031.

    Addison-Wesley es una marca registrada de Pearson Educacin de Mxico, S.A. de C.V.

    Reservados todos los derechos. Ni la totalidad ni parte de esta publicacin pueden reproducirse, registrarse o transmitirse, por un sistema de recuperacin de informacin, en ninguna forma ni por ningn medio, sea electrnico, mecnico, fotoqumico, magntico o electroptico, por fotocopia, grabacin o cualquier otro, sin permiso previo por escrito del editor.

    El prstamo, alquiler o cualquier otra forma de cesin de uso de este ejemplar requerir tambin la autorizacin del editor o de sus representantes.

    ISBN VERSIN IMPRESA: 978-607-32-0603-7ISBN VERSIN E-BOOK: 978-607-32-0604-4ISBN E-CHAPTER: 978-607-32-0605-1

    PRIMERA IMPRESIN

    Impreso en Mxico. Printed in Mexico.

    1 2 3 4 5 6 7 8 9 0 - 14 13 12 11

    Datos de catalogacin bibliogrfica

    Sommerville, Ian

    Pginas: 792

    PEARSON EDUCACIN, Mxico, 2011

    ISBN: 978-607-32-0603-7

    rea: Computacin

    Formato: 18.5 3 23.5 cm

    Ingeniera de Software

    Addison Wesleyes una marca de

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd iiA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd ii 3/18/11 4:42:01 PM3/18/11 4:42:01 PM

  • PREFACIO

    Mientras escriba los captulos finales de este libro en el verano de 2009, me di cuenta de que la ingeniera de software tena 40 aos de existencia. El nombre ingeniera de software se propuso en 1969 en una conferencia de la Organizacin del Tratado del Atlntico Norte (OTAN) para analizar los problemas del desarrollo de software; en esa poca haba grandes sistemas de software que estaban rezagados, que no ofrecan la fun-cionalidad que requeran los usuarios, que costaban ms de lo esperado y que no eran fiables. No asist a dicha conferencia, pero un ao despus escrib mi primer programa e inici mi vida profesional en el software. El progreso en la ingeniera de software ha sido notable durante mi vida profesional. En la actualidad, nuestras sociedades no podran funcionar sin grandes sistemas de soft-ware profesionales. Para construir sistemas empresariales existe una gran variedad de tecnologas (J2EE, .NET, SaaS, SAP, BPEL4WS, SOAP, CBSE, etctera) que apoyan el desarrollo y la implementacin de grandes aplicaciones empresariales. Los servicios pblicos y la infraestructura nacionales (energa, comunicaciones y transporte) se apoyan en sistemas de cmputo complejos y fiables. El software ha permitido la exploracin del espacio y la creacin de la World Wide Web, el sistema de informacin ms signi-ficativo en la historia de la humanidad. El mundo ahora enfrenta un nuevo conjunto de desafos: cambio climtico y temperaturas extremas, agotamiento de los recursos natu-rales, una creciente poblacin mundial que demanda alimentos y vivienda, terrorismo internacional, y la necesidad de ayudar a los adultos mayores a tener vidas satisfactorias y plenas. Necesitamos nuevas tecnologas para enfrentar todos esos problemas y, desde luego, el software desempear un papel central en dichas tecnologas. Por lo tanto, la ingeniera de software es una tecnologa muy importante para el futuro de la humanidad. Debemos continuar educando a los ingenieros de software y desarrollar la disciplina de manera que puedan crearse sistemas de software ms complejos. Desde luego, an existen problemas con los proyectos de software. En ocasiones, el software todava funciona con demoras y es ms costoso de lo esperado. Sin embargo, no debe permitirse que dichos problemas oculten los verdaderos xitos en la ingeniera de software, como tampoco los mtodos y tecnologas impresionantes que se han desarrollado en ese campo. La ingeniera de software es ahora una especialidad tan vasta, que sera imposible cubrir toda la materia en un libro. En consecuencia, el enfoque del presente texto se centra en los

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd iiiA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd iii 3/18/11 4:42:01 PM3/18/11 4:42:01 PM

  • iv Prefacio

    temas clave para todos los procesos de desarrollo y, en particular, para el desarrollo de sistemas fiables. Hay un creciente nfasis en los mtodos giles y la reutilizacin de soft-ware. Creo firmemente que los mtodos giles tienen su lugar, al igual que la ingeniera de software dirigida por el plan tradicional. Es necesario combinar lo mejor de estos enfoques para construir mejores sistemas de software. Los libros inevitablemente reflejan las opiniones y los prejuicios de sus autores. Es probable que algunos lectores estn en desacuerdo con mis opiniones y con mi eleccin del material. Tal desacuerdo es un sano reflejo de la diversidad de la disciplina y es esen-cial para su evolucin. No obstante, espero que todos los ingenieros de software y los estudiantes de esta materia puedan encontrar aqu un material de inters.

    Integracin con la Web

    Existe una increble cantidad de informacin acerca de ingeniera de software disponi-ble en la Web, tanta, que algunas personas han cuestionado si los libros de texto como ste todava son necesarios. Sin embargo, la calidad de la informacin disponible en la Web es muy irregular; en ocasiones se presenta muy mal estructurada, por lo que resulta difcil encontrar la informacin que se necesita. En consecuencia, creo que los libros de texto todava desempean una funcin importante en el aprendizaje. Sirven como un mapa del campo de estudio; adems, permiten organizar la informacin acerca de los mtodos y las tcnicas, y presentarla en forma coherente y legible. Tambin ofrecen un punto de partida para efectuar una exploracin ms profunda de la literatura de investigacin y del material disponible en la Web. Creo firmemente que los libros de texto tienen futuro, pero slo si estn integrados y agregan valor al material en la Web. Por ello, este libro fue diseado como un texto hbrido que combina material impreso con material publicado en la Web, pues la infor-macin central en la edicin en papel se vincula con material complementario en medios electrnicos. Casi todos los captulos incluyen secciones Web especialmente disea-das, que se agregan a la informacin en dicho captulo. Tambin existen cuatro captu-los Web acerca de temas que no se cubrieron en la versin impresa del libro. El sitio Web que se asocia con el libro es:

    http://SoftwareEngineering-9.com

    El material en el sitio Web del libro tiene cuatro componentes principales:

    1. Secciones Web Se trata de secciones adicionales que agregan informacin al con-tenido presentado en cada captulo. Dichas secciones Web se vinculan a partir de recuadros de conexin separados en cada captulo.

    2. Captulos Web Existen cuatro captulos Web que cubren mtodos formales, diseo de interaccin, documentacin y arquitecturas de aplicacin. Ser posible agregar otros captulos acerca de nuevos temas durante la vida del libro.

    3. Material para profesores El material en esta seccin tiene la intencin de apoyar a los docentes que ensean ingeniera de software. Vase la seccin Materiales de apoyo en este prefacio.

    4. Estudios de caso Ofrecen informacin adicional acerca de los estudios de caso analizados en el libro (bomba de insulina, sistema de atencin a la salud mental,

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd ivA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd iv 3/18/11 4:42:01 PM3/18/11 4:42:01 PM

  • Prefacio v

    sistema de clima selvtico), as como informacin acerca de ms estudios de caso, como la falla del cohete Ariane 5.

    Paralelamente a estas secciones, tambin existen vnculos a otros sitios con material til acerca de ingeniera de software: lecturas complementarias, blogs, boletines, etctera. Doy la bienvenida a sus comentarios y sugerencias acerca del libro y el sitio Web, en la direccin electrnica [email protected]. Por favor, anote [SE9] en el asunto de su mensaje. De otro modo, mis filtros de spam probablemente rechazarn su mensaje y usted no recibir una respuesta. Cabe aclarar que ste no es un espacio para resolver dudas de los estudiantes en relacin con sus tareas escolares; slo es un medio para comunicar comentarios y sugerencias sobre el texto.

    Crculo de lectores

    El libro se dirige principalmente a estudiantes universitarios y de niveles superiores, que estn inscritos en cursos introductorios y avanzados de ingeniera de software y sistemas. Los ingenieros de software en la industria encontrarn el libro til como lectura general y para actualizar sus conocimientos acerca de temas como reutilizacin de software, diseo arquitectnico, confiabilidad, seguridad, y mejora de procesos. Se parte de la suposicin de que los lectores completaron un curso de introduccin a la programacin y estn fami-liarizados con la terminologa del tema.

    Cambios respecto a ediciones anteriores

    Esta edicin conserva el material fundamental acerca de ingeniera de software que se cubri en ediciones anteriores, pero todos los captulos fueron revisados y actualizados, y se incluye nuevo material acerca de muchos temas diferentes. Los cambios ms impor-tantes son:

    1. Se dej atrs el enfoque centrado exclusivamente en un libro impreso, para dar paso a un enfoque hbrido que incluye un texto impreso y material Web firmemente inte-grado con las secciones del libro. Esto permiti reducir el nmero de captulos en la versin impresa y enfocarse en material clave en cada captulo.

    2. Se realiz una reestructuracin para facilitar el uso del libro en la enseanza de la ingeniera de software. El libro consta ahora de cuatro partes en vez de ocho, y cada una puede usarse de manera independiente o en combinacin con otras como la base de un curso de ingeniera de software. Las cuatro partes son: Introduccin a la ingeniera de software, Confiabilidad y seguridad, Ingeniera de software avanzada y Gestin de ingeniera de software.

    3. Muchos temas de las ediciones anteriores se presentan de manera ms concisa en un solo captulo, con material adicional trasladado a la Web.

    4. Algunos captulos adicionales, basados en captulos de ediciones anteriores que no se incluyen aqu, estn disponibles en la Web.

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd vA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd v 3/18/11 4:42:01 PM3/18/11 4:42:01 PM

  • vi Prefacio

    5. Se actualiz y revis el contenido de todos los captulos. Entre el 30 y 40% del texto se rescribi por completo.

    6. Se agregaron nuevos captulos acerca del desarrollo de software gil y sistemas embebidos.

    7. Adems de esos nuevos captulos, hay nuevo material acerca de ingeniera dirigida por modelo, el desarrollo de fuente abierta, el desarrollo dirigido por pruebas, el modelo de queso suizo de Reason, las arquitecturas de sistemas confiables, el anli-sis esttico y la comprobacin de modelos, la reutilizacin COTS, el software como servicio y la planeacin gil.

    8. En muchos captulos se incorpor un nuevo estudio de caso acerca de un sistema de registro de pacientes que se someten a tratamiento para problemas de salud mental.

    Uso del libro para la enseanza

    El libro est diseado de forma que pueda utilizarse en tres tipos diferentes de cursos de ingeniera de software:

    1. Cursos introductorios generales acerca de ingeniera de software La primera parte del libro se dise explcitamente para apoyar un curso de un semestre de introduccin a la ingeniera de software.

    2. Cursos introductorios o intermedios acerca de temas especficos de ingeniera de software Es posible crear varios cursos ms avanzados con los captulos de las partes 2 a 4. Por ejemplo, yo impart un curso acerca de ingeniera de sistemas crti-cos usando los captulos de la parte 2, junto con los captulos acerca de administra-cin de la calidad y administracin de la configuracin.

    3. Cursos ms avanzados acerca de temas especficos de ingeniera de software En este caso, los captulos del libro constituyen un fundamento para el curso. Luego, ste se complementa con lecturas que exploran el tema con mayor detalle. Por ejemplo, un curso acerca de reutilizacin de software podra basarse en los captulos 16, 17, 18 y 19.

    En el sitio Web del libro est disponible ms informacin acerca del uso del libro para la enseanza, incluida una comparacin con ediciones anteriores.

    Materiales de apoyo

    Una gran variedad de materiales de apoyo est disponible para ayudar a los profesores que usen el libro para impartir sus cursos de ingeniera de software. Entre ellos se incluyen:

    Presentaciones PowerPoint para todos los captulos del libro.

    Figuras en PowerPoint.

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd viA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd vi 3/18/11 4:42:01 PM3/18/11 4:42:01 PM

  • Prefacio vii

    Una gua para el profesor que da consejos acerca de cmo usar el libro en diferentes cursos, y que explica la relacin entre los captulos de esta edicin y ediciones ante-riores.

    Ms informacin acerca de los estudios de caso del libro.

    Estudios de caso adicionales que pueden usarse en cursos de ingeniera de software.

    Presentaciones PowerPoint adicionales acerca de ingeniera de sistemas.

    Cuatro captulos Web que cubren mtodos formales, diseo de interaccin, arquitec-turas de aplicacin y documentacin.

    Todo ese material est disponible de manera gratuita para los usuarios en el sitio Web del libro o en el sitio de apoyo de Pearson que se menciona ms adelante. Material adi-cional para los maestros est disponible de manera restringida solamente para profesores acreditados:

    Respuestas modelo para ejercicios seleccionados de fin de captulo.

    Preguntas y respuestas de exmenes para cada captulo.

    Todo el material de apoyo, incluido el material protegido con contrasea, est dispo-nible en:

    www.pearsoneducacion.net/sommerville

    Los profesores que usen el libro para sus cursos pueden obtener una contrasea para ingresar al material restringido al registrarse en el sitio Web de Pearson o al ponerse en contacto con su representante local de Pearson. El autor no proporciona las contraseas.

    Reconocimientos

    Muchas personas contribuyeron a travs de los aos a la evolucin de este libro. Quisiera agradecer a todos los revisores, estudiantes y usuarios del libro que comentaron edicio-nes anteriores, e hicieron sugerencias constructivas para realizar cambios. En particular, quiero agradecer a mi familia (Anne, Ali y Jane) por su ayuda y apoyo mientras escriba el libro. Un enorme agradecimiento especial para mi hija Jane, quien dio muestra de su talento al corregir las pruebas de la edicin. Su participacin fue de muchsima ayuda, pues realiz un excelente trabajo al leer todo el libro, y marcar y corre-gir una gran cantidad de errores tipogrficos y gramaticales.

    Ian SommervilleOctubre de 2009

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd viiA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd vii 3/18/11 4:42:01 PM3/18/11 4:42:01 PM

  • Contenido breve

    Prefacio iii

    Parte 1 Introduccin a la ingeniera de software 1 Captulo 1 Introduccin 3 Captulo 2 Procesos de software 27 Captulo 3 Desarrollo gil de software 56 Captulo 4 Ingeniera de requerimientos 82 Captulo 5 Modelado del sistema 118 Captulo 6 Diseo arquitectnico 147 Captulo 7 Diseo e implementacin 176 Captulo 8 Pruebas de software 205 Captulo 9 Evolucin del software 234

    Parte 2 Confiabilidad y seguridad 261 Captulo 10 Sistemas sociotcnicos 263 Captulo 11 Confiabilidad y seguridad 289 Captulo 12 Especificacin de confiabilidad y seguridad 309 Captulo 13 Ingeniera de confiabilidad 341 Captulo 14 Ingeniera de seguridad 366 Captulo 15 Garanta de confiabilidad y seguridad 393

    Parte 3 Ingeniera de software avanzada 423 Captulo 16 Reutilizacin de software 425 Captulo 17 Ingeniera de software basada en componentes 452 Captulo 18 Ingeniera de software distribuido 479 Captulo 19 Arquitectura orientada a servicios 508 Captulo 20 Software embebido 537 Captulo 21 Ingeniera de software orientada a aspectos 565

    Parte 4 Gestin de software 591 Captulo 22 Gestin de proyectos 593 Captulo 23 Planeacin de proyectos 618 Captulo 24 Gestin de la calidad 651 Captulo 25 Administracin de la configuracin 681 Captulo 26 Mejora de procesos 705

    Glosario 733 ndice analtico 749 ndice de autores 767

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd viiiA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd viii 3/18/11 4:42:01 PM3/18/11 4:42:01 PM

  • CONTENIDO

    Prefacio iii

    Parte 1 Introduccin a la ingeniera de software 1

    Captulo 1 Introduccin 3

    1.1 Desarrollo de software profesional 5

    1.2 tica en la ingeniera de software 14

    1.3 Estudios de caso 17

    Captulo 2 Procesos de software 27

    2.1 Modelos de proceso de software 29

    2.2 Actividades del proceso 36

    2.3 Cmo enfrentar el cambio 43

    2.4 El Proceso Unificado Racional 50

    Captulo 3 Desarrollo gil de software 56

    3.1 Mtodos giles 58

    3.2 Desarrollo dirigido por un plan y desarrollo gil 62

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd ixA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd ix 3/18/11 4:42:01 PM3/18/11 4:42:01 PM

  • x Contenido

    3.3 Programacin extrema 64

    3.4 Administracin de un proyecto gil 72

    3.5 Escalamiento de mtodos giles 74

    Captulo 4 Ingeniera de requerimientos 82

    4.1 Requerimientos funcionales y no funcionales 84

    4.2 El documento de requerimientos de software 91

    4.3 Especificacin de requerimientos 94

    4.4 Procesos de ingeniera de requerimientos 99

    4.5 Adquisicin y anlisis de requerimientos 100

    4.6 Validacin de requerimientos 110

    4.7 Administracin de requerimientos 111

    Captulo 5 Modelado del sistema 118

    5.1 Modelos de contexto 121

    5.2 Modelos de interaccin 124

    5.3 Modelos estructurales 129

    5.4 Modelos de comportamiento 133

    5.5 Ingeniera dirigida por modelo 138

    Captulo 6 Diseo arquitectnico 147

    6.1 Decisiones en el diseo arquitectnico 151

    6.2 Vistas arquitectnicas 153

    6.3 Patrones arquitectnicos 155

    6.4 Arquitecturas de aplicacin 164

    Captulo 7 Diseo e implementacin 176

    7.1 Diseo orientado a objetos con el uso del UML 178

    7.2 Patrones de diseo 189

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd x 3/18/11 4:42:01 PM3/18/11 4:42:01 PM

  • 7.3 Conflictos de implementacin 193

    7.4 Desarrollo de cdigo abierto 198

    Captulo 8 Pruebas de software 205

    8.1 Pruebas de desarrollo 210

    8.2 Desarrollo dirigido por pruebas 221

    8.3 Pruebas de versin 224

    8.4 Pruebas de usuario 228

    Captulo 9 Evolucin del software 234

    9.1 Procesos de evolucin 237

    9.2 Evolucin dinmica del programa 240

    9.3 Mantenimiento del software 242

    9.4 Administracin de sistemas heredados 252

    Parte 2 Confiabilidad y seguridad 261

    Captulo 10 Sistemas sociotcnicos 263

    10.1 Sistemas complejos 266

    10.2 Ingeniera de sistemas 273

    10.3 Procuracin del sistema 275

    10.4 Desarrollo del sistema 278

    10.5 Operacin del sistema 281

    Captulo 11 Confiabilidad y seguridad 289

    11.1 Propiedades de confiabilidad 291

    11.2 Disponibilidad y fiabilidad 295

    11.3 Proteccin 299

    11.4 Seguridad 302

    Contenido xi

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xiA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xi 3/18/11 4:42:01 PM3/18/11 4:42:01 PM

  • xii Contenido

    Captulo 12 Especificacin de confiabilidad y seguridad 309

    12.1 Especificacin de requerimientos dirigida por riesgos 311

    12.2 Especificacin de proteccin 313

    12.3 Especificacin de fiabilidad 320

    12.4 Especificacin de seguridad 329

    12.5 Especificacin formal 333

    Captulo 13 Ingeniera de confiabilidad 341

    13.1 Redundancia y diversidad 343

    13.2 Procesos confiables 345

    13.3 Arquitecturas de sistemas confiables 348

    13.4 Programacin confiable 355

    Captulo 14 Ingeniera de seguridad 366

    14.1 Gestin del riesgo de seguridad 369

    14.2 Diseo para la seguridad 375

    14.3 Supervivencia del sistema 386

    Captulo 15 Garanta de confiabilidad y seguridad 393

    15.1 Anlisis esttico 395

    15.2 Pruebas de fiabilidad 401

    15.3 Pruebas de seguridad 404

    15.4 Aseguramiento del proceso 406

    15.5 Casos de proteccin y confiabilidad 410

    Parte 3 Ingeniera de software avanzada 423

    Captulo 16 Reutilizacin de software 425

    16.1 Panorama de la reutilizacin 428

    16.2 Frameworks de aplicacin 431

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xiiA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xii 3/18/11 4:42:01 PM3/18/11 4:42:01 PM

  • 16.3 Lneas de productos de software 434

    16.4 Reutilizacin de productos COTS 440

    Captulo 17 Ingeniera de software basada en componentes 452

    17.1 Componentes y modelos de componentes 455

    17.2 Procesos CBSE 461

    17.3 Composicin de componentes 468

    Captulo 18 Ingeniera de software distribuido 479

    18.1 Conflictos de los sistemas distribuidos 481

    18.2 Computacin cliente-servidor 488

    18.3 Patrones arquitectnicos para sistemas distribuidos 490

    18.4 Software como servicio 501

    Captulo 19 Arquitectura orientada a servicios 508

    19.1 Servicios como componentes de reutilizacin 514

    19.2 Ingeniera de servicio 518

    19.3 Desarrollo de software con servicios 527

    Captulo 20 Software embebido 537

    20.1 Diseo de sistemas embebidos 540

    20.2 Patrones arquitectnicos 547

    20.3 Anlisis de temporizacin 554

    20.4 Sistemas operativos de tiempo real 558

    Captulo 21 Ingeniera de software orientada a aspectos 565

    21.1 La separacin de intereses 567

    21.2 Aspectos, puntos de enlaces y puntos de corte 571

    21.3 Ingeniera de software con aspectos 576

    Contenido xiii

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xiiiA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xiii 3/18/11 4:42:01 PM3/18/11 4:42:01 PM

  • xiv Contenido

    Parte 4 Gestin de software 591

    Captulo 22 Gestin de proyectos 593

    22.1 Gestin del riesgo 595

    22.2 Gestin de personal 602

    22.3 Trabajo en equipo 607

    Captulo 23 Planeacin de proyectos 618

    23.1 Fijacin de precio al software 621

    23.2 Desarrollo dirigido por un plan 623

    23.3 Calendarizacin de proyectos 626

    23.4 Planeacin gil 631

    23.5 Tcnicas de estimacin 633

    Captulo 24 Gestin de la calidad 651

    24.1 Calidad del software 655

    24.2 Estndares de software 657

    24.3 Revisiones e inspecciones 663

    24.4 Medicin y mtricas del software 668

    Captulo 25 Administracin de la configuracin 681

    25.1 Administracin del cambio 685

    25.2 Gestin de versiones 690

    25.3 Construccin del sistema 693

    25.4 Gestin de entregas de software (release) 699

    Captulo 26 Mejora de procesos 705

    26.1 El proceso de mejora de procesos 708

    26.2 Medicin del proceso 711

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xivA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xiv 3/18/11 4:42:02 PM3/18/11 4:42:02 PM

  • 26.3 Anlisis del proceso 715

    26.4 Cambios en los procesos 718

    26.5 El marco de trabajo para la mejora de procesos CMMI 721

    Glosario 733ndice analtico 749ndice de autores 767

    Contenido xv

    A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xvA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xv 3/18/11 4:42:02 PM3/18/11 4:42:02 PM

  • A01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xviA01_SOMMERVILLE_6037_9ED_SE_i-xvi FM.indd xvi 3/18/11 4:42:02 PM3/18/11 4:42:02 PM

  • La meta de esta parte del libro es ofrecer una introduccin general a la ingeniera de software. Se incluyen conceptos importantes como procesos de software y mtodos giles; adems, se describen actividades esencia-les del desarrollo de software, desde la especificacin inicial del software hasta la evolucin del sistema. Los captulos de esta parte se disearon para apoyar un curso de un semestre en ingeniera de software.

    El captulo 1 introduce al lector de manera general en la ingeniera de software profesional y define algunos conceptos al respecto. Tambin se escribe un breve anlisis de los conflictos ticos en la ingeniera de soft-ware. Es importante que los ingenieros de software consideren las nume-rosas implicaciones de su trabajo. Este captulo adems presenta tres estudios de caso que se usan en el libro, a saber: un sistema para adminis-trar registros de pacientes que se someten a tratamiento por problemas de salud mental, un sistema de control para una bomba de insulina porttil y un sistema meteorolgico a campo abierto.

    Los captulos 2 y 3 tratan los procesos de ingeniera de software y el desarrollo gil. En el captulo 2 se presentan modelos de proceso de soft-ware genrico de uso comn, como el waterfall (cascada), y se estudian las actividades bsicas que son parte de dichos procesos. El captulo 3 complementa esto con un estudio de los mtodos de desarrollo gil para ingeniera de software. Se usa sobre todo la programacin extrema como

    PARTE1 Introduccin a la ingeniera de software

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 1M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 1 3/18/11 4:44:28 PM3/18/11 4:44:28 PM

  • ejemplo de un mtodo gil, aunque tambin en esta seccin se introduce brevemente Scrum.

    Los captulos restantes son amplias descripciones de las actividades del proceso de software que se introducirn en el captulo 2. En el captulo 4 se trata un tema importante de la ingeniera de requerimientos, donde se definen las necesidades de lo que debe hacer un sistema. El captulo 5 muestra el modelado de sistemas usando el UML, donde se enfoca el uso de los diagramas de caso, diagramas de clase, diagramas de secuencia y diagramas de estado para modelar un sistema de software. El captulo 6 introduce al diseo arquitectnico y estudia la importancia de la arqui-tectura y el uso de patrones arquitectnicos en el diseo de software.

    El captulo 7 trata sobre el diseo orientado a objetos y el uso de patrones de diseo. Aqu tambin se observan importantes problemas de imple-mentacin: reutilizacin, manejo de configuracin y el desarrollo de host-target (anfitrin destino); tambin se estudia el desarrollo de cdigo abierto. El captulo 8 se enfoca en las pruebas del software, desde la prueba de unidad durante el desarrollo del sistema, hasta la prueba de la puesta en venta del software. Tambin se analiza el uso del desarrollo impulsado por prueba, un enfoque pionero en los mtodos giles, pero con gran aplicabilidad. Finalmente, el captulo 9 brinda un panorama de los temas sobre la evolucin del software. Se describen los procesos evo-lutivos, el mantenimiento del software y la gestin de sistemas legados.

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 2M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 2 3/18/11 4:44:28 PM3/18/11 4:44:28 PM

  • ObjetivosLos objetivos de este captulo consisten en introducir al lector a la ingeniera de software y ofrecer un marco conceptual para entender el resto del libro. Al estudiar este captulo:

    conocer qu es la ingeniera de software y por qu es importante;

    comprender que el desarrollo de diferentes tipos de sistemas de software puede requerir distintas tcnicas de ingeniera de software;

    entender algunos conflictos ticos y profesionales que son importantes para los ingenieros de software;

    conocer tres sistemas de diferentes tipos, que se usarn como ejemplos a lo largo del libro.

    Contenido1.1 Desarrollo de software profesional1.2 tica en la ingeniera de software1.3 Estudios de caso

    1

    Introduccin

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 3M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 3 3/18/11 4:44:28 PM3/18/11 4:44:28 PM

  • 4 Captulo 1 Introduccin

    Es imposible operar el mundo moderno sin software. Las infraestructuras nacionales y los servicios pblicos se controlan mediante sistemas basados en computadoras, y la mayora de los productos elctricos incluyen una computadora y un software de control. La fabricacin y la distribucin industrial estn completamente computarizadas, como el sistema financiero. El entretenimiento, incluida la industria musical, los juegos por computadora, el cine y la televisin, usan software de manera intensiva. Por lo tanto, la ingeniera de software es esencial para el funcionamiento de las sociedades, tanto a nivel nacional como internacional.

    Los sistemas de software son abstractos e intangibles. No estn restringidos por las propiedades de los materiales, regidos por leyes fsicas ni por procesos de fabri-cacin. Esto simplifica la ingeniera de software, pues no existen lmites naturales a su potencial. Sin embargo, debido a la falta de restricciones fsicas, los sistemas de software pueden volverse rpidamente muy complejos, difciles de entender y costosos de cambiar.

    Hay muchos tipos diferentes de sistemas de software, desde los simples sistemas embebidos, hasta los complejos sistemas de informacin mundial. No tiene sentido bus-car notaciones, mtodos o tcnicas universales para la ingeniera de software, ya que diferentes tipos de software requieren distintos enfoques. Desarrollar un sistema orga-nizacional de informacin es completamente diferente de un controlador para un ins-trumento cientfico. Ninguno de estos sistemas tiene mucho en comn con un juego por computadora de grficos intensivos. Aunque todas estas aplicaciones necesitan ingenie-ra de software, no todas requieren las mismas tcnicas de ingeniera de software.

    An existen muchos reportes tanto de proyectos de software que salen mal como de fallas de software. Por ello, a la ingeniera de software se le considera inadecuada para el desarrollo del software moderno. Sin embargo, desde la perspectiva del autor, muchas de las llamadas fallas del software son consecuencia de dos factores:

    1. Demandas crecientes Conforme las nuevas tcnicas de ingeniera de software ayudan a construir sistemas ms grandes y complejos, las demandas cambian. Los sistemas tienen que construirse y distribuirse ms rpidamente; se requieren sistemas ms grandes e incluso ms complejos; los sistemas deben tener nuevas capacidades que anteriormente se consideraban imposibles. Los mtodos existentes de ingeniera de software no pueden enfrentar la situacin, y tienen que desarrollarse nuevas tcni-cas de ingeniera de software para satisfacer nuevas demandas.

    2. Expectativas bajas Es relativamente sencillo escribir programas de cmputo sin usar mtodos y tcnicas de ingeniera de software. Muchas compaas se deslizan hacia la ingeniera de software conforme evolucionan sus productos y servicios. No usan mtodos de ingeniera de software en su trabajo diario. Por lo tanto, su soft-ware con frecuencia es ms costoso y menos confiable de lo que debiera. Es nece-saria una mejor educacin y capacitacin en ingeniera de software para solucionar este problema.

    Los ingenieros de software pueden estar orgullosos de sus logros. Desde luego, toda-va se presentan problemas al desarrollar software complejo, pero, sin ingeniera de soft-ware, no se habra explorado el espacio ni se tendra Internet o las telecomunicaciones modernas. Todas las formas de viaje seran ms peligrosas y caras. La ingeniera de software ha contribuido en gran medida, y sus aportaciones en el siglo XXI sern an mayores.

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 4M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 4 3/18/11 4:44:28 PM3/18/11 4:44:28 PM

  • 1.1 Desarrollo de software profesional 5

    1.1 Desarrollo de software profesional

    Muchos individuos escriben programas. En las empresas los empleados hacen programas de hoja de clculo para simplificar su trabajo; cientficos e ingenieros elaboran progra-mas para procesar sus datos experimentales, y los aficionados crean programas para su propio inters y satisfaccin. Sin embargo, la gran mayora del desarrollo de software es una actividad profesional, donde el software se realiza para propsitos de negocios espec-ficos, para su inclusin en otros dispositivos o como productos de software, por ejemplo, sistemas de informacin, sistemas de CAD, etctera. El software profesional, destinado a usarse por alguien ms aparte de su desarrollador, se lleva a cabo en general por equipos, en vez de individualmente. Se mantiene y cambia a lo largo de su vida.

    La ingeniera de software busca apoyar el desarrollo de software profesional, en lugar de la programacin individual. Incluye tcnicas que apoyan la especificacin, el diseo y la evolucin del programa, ninguno de los cuales son normalmente relevantes para el desa-rrollo de software personal. Con el objetivo de ayudarlo a obtener una amplia visin de lo que trata la ingeniera de software, en la figura 1.1 se resumen algunas preguntas planteadas con frecuencia.

    Muchos suponen que el software es tan slo otra palabra para los programas de cmpu-to. No obstante, cuando se habla de ingeniera de software, esto no slo se refiere a los programas en s, sino tambin a toda la documentacin asociada y los datos de configu-racin requeridos para hacer que estos programas operen de manera correcta. Un sistema de software desarrollado profesionalmente es usualmente ms que un solo programa. El sistema por lo regular consta de un nmero de programas separados y archivos de con-figuracin que se usan para instalar dichos programas. Puede incluir documentacin del sistema, que describe la estructura del sistema; documentacin del usuario, que explica cmo usar el sistema, y los sitios web para que los usuarios descarguen informacin reciente del producto.

    sta es una de las principales diferencias entre el desarrollo de software profesional y el de aficionado. Si usted disea un programa personal, nadie ms lo usar ni tendr que preocuparse por elaborar guas del programa, documentar el diseo del programa, etctera. Por el contrario, si crea software que otros usarn y otros ingenieros cambiarn, entonces, en general debe ofrecer informacin adicional, as como el cdigo del programa.

    Historia de la ingeniera de software

    El concepto ingeniera de software se propuso originalmente en 1968, en una conferencia realizada para discutir lo que entonces se llamaba la crisis del software (Naur y Randell, 1969). Se volvi claro que los enfoques individuales al desarrollo de programas no escalaban hacia los grandes y complejos sistemas de software. stos no eran confiables, costaban ms de lo esperado y se distribuan con demora.

    A lo largo de las dcadas de 1970 y 1980 se desarroll una variedad de nuevas tcnicas y mtodos de ingeniera de software, tales como la programacin estructurada, el encubrimiento de informacin y el desarrollo orientado a objetos. Se perfeccionaron herramientas y notaciones estndar y ahora se usan de manera extensa.

    http://www.SoftwareEngineering-9.com/Web/History/

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 5M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 5 3/18/11 4:44:28 PM3/18/11 4:44:28 PM

  • 6 Captulo 1 Introduccin

    Los ingenieros de software estn interesados por el desarrollo de productos de software (es decir, software que puede venderse a un cliente). Existen dos tipos de productos de software:

    1. Productos genricos Consisten en sistemas independientes que se producen por una organizacin de desarrollo y se venden en el mercado abierto a cualquier cliente

    Figura 1.1 Preguntas planteadas con frecuencia sobre el software

    Pregunta Respuesta

    Qu es software? Programas de cmputo y documentacin asociada. Los productos de software se desarrollan para un cliente en particular o para un mercado en general.

    Cules son los atributos del buen software? El buen software debe entregar al usuario la funcionalidad y el desempeo requeridos, y debe ser sustentable, confiable y utilizable.

    Qu es ingeniera de software? La ingeniera de software es una disciplina de la ingeniera que se interesa por todos los aspectos de la produccin de software.

    Cules son las actividades fundamentales de la ingeniera de software?

    Especificacin, desarrollo, validacin y evolucin del software.

    Cul es la diferencia entre ingeniera de software y ciencias de la computacin?

    Las ciencias de la computacin se enfocan en teora y fundamentos; mientras la ingeniera de software se enfoca en el sentido prctico del desarrollo y en la distribucin de software.

    Cul es la diferencia entre ingeniera de software e ingeniera de sistemas?

    La ingeniera de sistemas se interesa por todos los aspectos del desarrollo de sistemas basados en computadoras, incluidos hardware, software e ingeniera de procesos. La ingeniera de software es parte de este proceso ms general.

    Cules son los principales retos que enfrenta la ingeniera de software?

    Se enfrentan con una diversidad creciente, demandas por tiempos de distribucin limitados y desarrollo de software confiable.

    Cules son los costos de la ingeniera de software?

    Aproximadamente 60% de los costos del software son de desarrollo, y 40% de prueba. Para el software elaborado especficamente, los costos de evolucin superan con frecuencia los costos de desarrollo.

    Cules son los mejores mtodos y tcnicas de la ingeniera de software?

    Aun cuando todos los proyectos de software deben gestionarse y desarrollarse de manera profesional, existen diferentes tcnicas que son adecuadas para distintos tipos de sistema. Por ejemplo, los juegos siempre deben disearse usando una serie de prototipos, mientras que los sistemas crticos de control de seguridad requieren de una especificacin completa y analizable para su desarrollo. Por lo tanto, no puede decirse que un mtodo sea mejor que otro.

    Qu diferencias ha marcado la Web a la ingeniera de software?

    La Web ha llevado a la disponibilidad de servicios de software y a la posibilidad de desarrollar sistemas basados en servicios distribuidos ampliamente. El desarrollo de sistemas basados en Web ha conducido a importantes avances en lenguajes de programacin y reutilizacin de software.

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 6M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 6 3/18/11 4:44:28 PM3/18/11 4:44:28 PM

  • 1.1 Desarrollo de software profesional 7

    que desee comprarlos. Ejemplos de este tipo de productos incluyen software para PC, como bases de datos, procesadores de texto, paquetes de dibujo y herramientas de administracin de proyectos. Tambin abarcan las llamadas aplicaciones verticales diseadas para cierto propsito especfico, tales como sistemas de informacin de librera, sistemas de contabilidad o sistemas para mantener registros dentales.

    2. Productos personalizados (o a la medida) Son sistemas que estn destinados para un cliente en particular. Un contratista de software desarrolla el programa especial-mente para dicho cliente. Ejemplos de este tipo de software incluyen los sistemas de control para dispositivos electrnicos, sistemas escritos para apoyar cierto proceso empresarial y los sistemas de control de trfico areo.

    Una diferencia importante entre estos tipos de software es que, en productos gen-ricos, la organizacin que desarrolla el software controla la especificacin del mismo. Para los productos personalizados, la organizacin que compra el software generalmente desarrolla y controla la especificacin, por lo que los desarrolladores de software deben trabajar siguiendo dicha especificacin.

    Sin embargo, la distincin entre estos tipos de producto de sistemas se vuelve cada vez ms difusa. Ahora, cada vez ms sistemas se construyen con un producto genrico como base, que luego se adapta para ajustarse a los requerimientos de un cliente. Los sis-temas Enterprise Resource Planning (ERP, planeacin de recursos empresariales), como el sistema SAP, son los mejores ejemplos de este enfoque. Aqu, un sistema grande y complejo se adapta a una compaa al incorporar la informacin acerca de las reglas y los procesos empresariales, los reportes requeridos, etctera.

    Cuando se habla de la calidad del software profesional, se debe considerar que el software lo usan y cambian personas, adems de sus desarrolladores. En consecuencia, la calidad no tiene que ver slo con lo que hace el software. En cambio, debe incluir el comportamiento del software mientras se ejecuta, y la estructura y organizacin de los programas del sis-tema y la documentacin asociada. Esto se refleja en los llamados calidad o atributos no funcionales del software. Ejemplos de dichos atributos son el tiempo de respuesta del soft-ware ante la duda de un usuario y la comprensibilidad del cdigo del programa.

    El conjunto especfico de atributos que se espera de un sistema de software depende evidentemente de su aplicacin. As, un sistema bancario debe ser seguro, un juego inte-ractivo debe tener capacidad de respuesta, un sistema de conmutacin telefnica debe ser confiable, etctera. Esto puede generalizarse en el conjunto de atributos que se muestra en la figura 1.2, los cuales consideran las caractersticas esenciales de un sistema de software profesional.

    1.1.1 Ingeniera de softwareLa ingeniera de software es una disciplina de ingeniera que se interesa por todos los aspectos de la produccin de software, desde las primeras etapas de la especificacin del sistema hasta el mantenimiento del sistema despus de que se pone en operacin. En esta definicin se presentan dos frases clave:

    1. Disciplina de ingeniera Los ingenieros hacen que las cosas funcionen. Aplican teoras, mtodos y herramientas donde es adecuado. Sin embargo, los usan de manera

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 7M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 7 3/18/11 4:44:28 PM3/18/11 4:44:28 PM

  • 8 Captulo 1 Introduccin

    selectiva y siempre tratan de encontrar soluciones a problemas, incluso cuando no hay teoras ni mtodos aplicables. Los ingenieros tambin reconocen que deben tra-bajar ante restricciones organizacionales y financieras, de modo que buscan solucio-nes dentro de tales limitaciones.

    2. Todos los aspectos de la produccin del software La ingeniera de software no slo se interesa por los procesos tcnicos del desarrollo de software, sino tambin incluye actividades como la administracin del proyecto de software y el desa-rrollo de herramientas, as como mtodos y teoras para apoyar la produccin de software.

    La ingeniera busca obtener resultados de la calidad requerida dentro de la fecha y del presupuesto. A menudo esto requiere contraer compromisos: los ingenieros no deben ser perfeccionistas. Sin embargo, las personas que disean programas para s mismas podran pasar tanto tiempo como deseen en el desarrollo del programa.

    En general, los ingenieros de software adoptan en su trabajo un enfoque sistemtico y organizado, pues usualmente sta es la forma ms efectiva de producir software de alta calidad. No obstante, la ingeniera busca seleccionar el mtodo ms adecuado para un conjunto de circunstancias y, de esta manera, un acercamiento al desarrollo ms creativo y menos formal sera efectivo en ciertas situaciones. El desarrollo menos formal es parti-cularmente adecuado para la creacin de sistemas basados en la Web, que requieren una mezcla de habilidades de software y diseo grfico.

    La ingeniera de software es importante por dos razones:

    1. Cada vez con mayor frecuencia, los individuos y la sociedad se apoyan en los avan-zados sistemas de software. Por ende, se requiere producir econmica y rpidamente sistemas confiables.

    Figura 1.2 Atributos esenciales del buen software

    Caractersticas del producto Descripcin

    Mantenimiento El software debe escribirse de tal forma que pueda evolucionar para satisfacer las necesidades cambiantes de los clientes. ste es un atributo crtico porque el cambio del software es un requerimiento inevitable de un entorno empresarial variable.

    Confiabilidad y seguridad La confiabilidad del software incluye un rango de caractersticas que abarcan fiabilidad, seguridad y proteccin. El software confiable no tiene que causar dao fsico ni econmico, en caso de falla del sistema. Los usuarios malintencionados no deben tener posibilidad de acceder al sistema o daarlo.

    Eficiencia El software no tiene que desperdiciar los recursos del sistema, como la memoria y los ciclos del procesador. Por lo tanto, la eficiencia incluye capacidad de respuesta, tiempo de procesamiento, utilizacin de memoria, etctera.

    Aceptabilidad El software debe ser aceptable al tipo de usuarios para quienes se disea. Esto significa que necesita ser comprensible, utilizable y compatible con otros sistemas que ellos usan.

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 8M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 8 3/18/11 4:44:28 PM3/18/11 4:44:28 PM

  • 1.1 Desarrollo de software profesional 9

    2. A menudo resulta ms barato a largo plazo usar mtodos y tcnicas de ingeniera de software para los sistemas de software, que slo disear los programas como si fuera un proyecto de programacin personal. Para muchos tipos de sistemas, la mayora de los costos consisten en cambiar el software despus de ponerlo en operacin.

    El enfoque sistemtico que se usa en la ingeniera de software se conoce en ocasiones como proceso de software. Un proceso de software es una secuencia de actividades que conducen a la elaboracin de un producto de software. Existen cuatro actividades funda-mentales que son comunes a todos los procesos de software, y stas son:

    1. Especificacin del software, donde clientes e ingenieros definen el software que se producir y las restricciones en su operacin.

    2. Desarrollo del software, donde se disea y programa el software.

    3. Validacin del software, donde se verifica el software para asegurar que sea lo que el cliente requiere.

    4. Evolucin del software, donde se modifica el software para reflejar los requerimien-tos cambiantes del cliente y del mercado.

    Diferentes tipos de sistemas necesitan distintos procesos de desarrollo. Por ejemplo, el software en tiempo real en una aeronave debe especificarse por completo antes de comenzar el desarrollo. En los sistemas de comercio electrnico, la especificacin y el programa por lo general se desarrollan en conjunto. En consecuencia, tales actividades genricas pueden organizarse en diferentes formas y describirse en distintos niveles de detalle, dependiendo del tipo de software que se vaya a desarrollar. En el captulo 2 se des-criben con ms puntualidad los procesos de software.

    La ingeniera de software se relaciona con las ciencias de la computacin y la inge-niera de sistemas:

    1. Las ciencias de la computacin se interesan por las teoras y los mtodos que sub-yacen en las computadoras y los sistemas de software, en tanto que la ingeniera de software se preocupa por los asuntos prcticos de la produccin del software. Cierto conocimiento de ciencias de la computacin es esencial para los ingenieros de soft-ware, del mismo modo que cierto conocimiento de fsica lo es para los ingenieros electricistas. Sin embargo, con frecuencia la teora de las ciencias de la computacin es ms aplicable a programas relativamente pequeos. Las teoras de las ciencias de la computacin no siempre pueden aplicarse a grandes problemas complejos que requieren una solucin de software.

    2. La ingeniera de sistemas se interesa por todos los aspectos del desarrollo y la evo-lucin de complejos sistemas, donde el software tiene un papel principal. Por lo tanto, la ingeniera de sistemas se preocupa por el desarrollo de hardware, el dise-o de polticas y procesos, la implementacin del sistema, as como por la inge-niera de software. Los ingenieros de sistemas intervienen en la especificacin del sistema, definiendo su arquitectura global y, luego, integrando las diferentes partes para crear el sistema terminado. Estn menos preocupados por la ingeniera de los componentes del sistema (hardware, software, etctera).

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 9M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 9 3/18/11 4:44:28 PM3/18/11 4:44:28 PM

  • 10 Captulo 1 Introduccin

    Como se expone en la siguiente seccin, hay muchos tipos diferentes de software. No existe un mtodo o una tcnica universales en la ingeniera de software que sea aplicable para todos stos. No obstante, tres problemas generales afectan a muy diversos tipos de software:

    1. Heterogeneidad Cada vez con mayor frecuencia se requieren sistemas que operen como distribuidos a travs de redes que incluyan diferentes tipos de computadoras y dispositivos mviles. Es posible que el software se ejecute tanto en computadoras de propsito general como en telfonos mviles. Se tendr que integrar con frecuencia el nuevo software con sistemas legados ms viejos, escritos en diferentes lenguajes de programacin. El reto aqu es desarrollar tcnicas para construir software confia-ble que sea suficientemente flexible para enfrentar esa heterogeneidad.

    2. Cambio empresarial y social Los negocios y la sociedad cambian de manera increblemente rpida, conforme se desarrollan las economas emergentes y nuevas tecnologas estn a la disposicin. Ambos necesitan tener la posibilidad de cambiar su software existente y desarrollar rpidamente uno nuevo. Muchas tcnicas tradi-cionales de la ingeniera de software consumen tiempo, y generalmente la entrega de los nuevos sistemas tarda ms de lo planeado. Requieren evolucionar de modo que se reduzca el tiempo necesario para que el software d valor a sus clientes.

    3. Seguridad y confianza Dado que el software est vinculado con todos los aspectos de la vida, es esencial confiar en dicho software. Esto es especialmente cierto para los sistemas de software remoto a los que se accede a travs de una pgina Web o una interfaz de servicio Web. Es necesario asegurarse de que usuarios malintencionados no puedan atacar el software y que se conserve la seguridad de la informacin.

    Desde luego, stos no son problemas independientes. Por ejemplo, quiz sea nece-sario realizar cambios rpidos a un sistema legado con la finalidad de dotarlo con una interfaz de servicio Web. Para enfrentar dichos retos se necesitarn nuevas herramientas y tcnicas, as como formas innovadoras de combinar y usar los mtodos existentes de ingeniera de software.

    1.1.2 Diversidad de la ingeniera de softwareLa ingeniera de software es un enfoque sistemtico para la produccin de software que toma en cuenta los temas prcticos de costo, fecha y confiabilidad, as como las nece-sidades de clientes y fabricantes de software. Como este enfoque sistemtico realmente implementado vara de manera drstica dependiendo de la organizacin que desarrolla el software, el tipo de software y los individuos que intervienen en el proceso de desarrollo, no existen mtodos y tcnicas universales de ingeniera de software que sean adecuados para todos los sistemas y las compaas. Ms bien, durante los ltimos 50 aos evolu-cion un conjunto de mtodos y herramientas de ingeniera de software.

    Quizs el factor ms significativo en la determinacin de qu mtodos y tcnicas de la ingeniera de software son ms importantes, es el tipo de aplicacin que est siendo desarrollada. Existen muchos diferentes tipos de aplicacin, incluidos los siguientes:

    1. Aplicaciones independientes Se trata de sistemas de aplicacin que corren en una computadora local, como una PC, e incluyen toda la funcionalidad necesaria

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 10M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 10 3/18/11 4:44:29 PM3/18/11 4:44:29 PM

  • 1.1 Desarrollo de software profesional 11

    y no requieren conectarse a una red. Ejemplos de tales aplicaciones son las de oficina en una PC, programas CAD, software de manipulacin de fotografas, etctera.

    2. Aplicaciones interactivas basadas en transaccin Consisten en aplicaciones que se ejecutan en una computadora remota y a las que los usuarios acceden desde sus propias PC o terminales. Evidentemente, en ellas se incluyen aplicaciones Web como las de comercio electrnico, donde es posible interactuar con un sistema remoto para comprar bienes y servicios. Esta clase de aplicacin tambin incluye sistemas empresariales, donde una organizacin brinda acceso a sus sistemas a tra-vs de un navegador Web o un programa de cliente de propsito especfico y servi-cios basados en nube, como correo electrnico y comparticin de fotografas. Las aplicaciones interactivas incorporan con frecuencia un gran almacn de datos al que se accede y actualiza en cada transaccin.

    3. Sistemas de control embebido Se trata de sistemas de control de software que regulan y gestionan dispositivos de hardware. Numricamente, quizs existen ms sistemas embebidos que cualquier otro tipo de sistema. Algunos ejemplos de sis-temas embebidos incluyen el software en un telfono mvil (celular), el software que controla los frenos antibloqueo de un automvil y el software en un horno de microondas para controlar el proceso de cocinado.

    4. Sistemas de procesamiento en lotes Son sistemas empresariales que se disean para procesar datos en grandes lotes (batch). Procesan gran cantidad de entradas indivi-duales para crear salidas correspondientes. Los ejemplos de sistemas batch incluyen sistemas de facturacin peridica, como los sistemas de facturacin telefnica y los sistemas de pago de salario.

    5. Sistemas de entretenimiento Son sistemas para uso sobre todo personal, que tienen la intencin de entretener al usuario. La mayora de estos sistemas son juegos de uno u otro tipo. La calidad de interaccin ofrecida al usuario es la caracterstica ms importante de los sistemas de entretenimiento.

    6. Sistemas para modelado y simulacin stos son sistemas que desarrollan cientfi-cos e ingenieros para modelar procesos o situaciones fsicas, que incluyen muchos ob-jetos separados interactuantes. Dichos sistemas a menudo son computacionalmente intensivos y para su ejecucin requieren sistemas paralelos de alto desempeo.

    7. Sistemas de adquisicin de datos Son sistemas que desde su entorno recopilan datos usando un conjunto de sensores, y envan dichos datos para su procesamiento a otros sistemas. El software tiene que interactuar con los sensores y se instala regularmente en un ambiente hostil, como en el interior de un motor o en una ubi-cacin remota.

    8. Sistemas de sistemas Son sistemas compuestos de un cierto nmero de sistemas de software. Algunos de ellos son producto del software genrico, como un programa de hoja de clculo. Otros sistemas en el ensamble pueden estar especialmente escri-tos para ese entorno.

    Desde luego, los lmites entre estos tipos de sistemas son difusos. Si se desarrolla un juego para un telfono mvil (celular), se debe tomar en cuenta las mismas restriccio-nes (energa, interaccin de hardware) que las de los desarrolladores del software del

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 11M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 11 3/18/11 4:44:29 PM3/18/11 4:44:29 PM

  • 12 Captulo 1 Introduccin

    telfono. Los sistemas de procesamiento por lotes se usan con frecuencia en conjuncin con sistemas basados en la Web. Por ejemplo, en una compaa, las solicitudes de gastos de viaje se envan mediante una aplicacin Web, aunque se procesa en una aplicacin batch para pago mensual.

    Para cada tipo de sistema se usan distintas tcnicas de ingeniera de software, por-que el software tiene caractersticas muy diferentes. Por ejemplo, un sistema de control embebido en un automvil es crtico para la seguridad y se quema en la ROM cuando se instala en el vehculo; por consiguiente, es muy costoso cambiarlo. Tal sistema necesita verificacin y validacin muy exhaustivas, de tal modo que se minimicen las probabili-dades de volver a llamar para revisin a automviles, despus de su venta, para corregir los problemas del software. La interaccin del usuario es mnima (o quizs inexistente), por lo que no hay necesidad de usar un proceso de desarrollo que se apoye en el prototipo de interfaz de usuario.

    Para un sistema basado en la Web sera adecuado un enfoque basado en el desarrollo y la entrega iterativos, con un sistema de componentes reutilizables. Sin embargo, tal enfoque podra no ser prctico para un sistema de sistemas, donde tienen que definirse por adelantado las especificaciones detalladas de las interacciones del sistema, de modo que cada sistema se desarrolle por separado.

    No obstante, existen fundamentos de ingeniera de software que se aplican a todos los tipos de sistema de software:

    1. Deben llevarse a cabo usando un proceso de desarrollo administrado y comprendido. La organizacin que disea el software necesita planear el proceso de desarrollo, as como tener ideas claras acerca de lo que producir y el tiempo en que estar comple-tado. Desde luego, se usan diferentes procesos para distintos tipos de software.

    2. La confiabilidad y el desempeo son importantes para todos los tipos de sistemas. El software tiene que comportarse como se espera, sin fallas, y cuando se requiera estar disponible. Debe ser seguro en su operacin y, tanto como sea posible, tambin contra ataques externos. El sistema tiene que desempearse de manera eficiente y no desperdiciar recursos.

    3. Es importante comprender y gestionar la especificacin y los requerimientos del software (lo que el software debe hacer). Debe conocerse qu esperan de l los dife-rentes clientes y usuarios del sistema, y gestionar sus expectativas, para entregar un sistema til dentro de la fecha y presupuesto.

    4. Tiene que usar de manera tan efectiva como sea posible los recursos existentes. Esto significa que, donde sea adecuado, hay que reutilizar el software que se haya desa-rrollado, en vez de disear uno nuevo.

    Estas nociones fundamentales sobre proceso, confiabilidad, requerimientos, gestin y reutilizacin, son temas importantes de este libro. Diferentes mtodos los reflejan de formas diversas, pero subyacen en todo el desarrollo de software profesional.

    Hay que destacar que estos fundamentos no cubren la implementacin ni la progra-macin. En este libro no se estudian tcnicas especficas de programacin, ya que ellas varan drsticamente de un tipo de sistema a otro. Por ejemplo, un lenguaje de guiones (scripts), como Ruby, sirve para programacin de sistemas basados en la Web, aunque sera totalmente inadecuado para ingeniera de sistemas embebidos.

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 12M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 12 3/18/11 4:44:29 PM3/18/11 4:44:29 PM

  • 1.1 Desarrollo de software profesional 13

    1.1.3 Ingeniera de software y la WebEl desarrollo de la World Wide Web tuvo un profundo efecto en todas nuestras vidas. En un inicio, la Web fue bsicamente un almacn de informacin universal accesible que tuvo escaso efecto sobre los sistemas de software. Dichos sistemas corran en computadoras locales y eran slo accesibles desde el interior de una organizacin. Alrededor del ao 2000, la Web comenz a evolucionar, y a los navegadores se les agregaron cada vez ms funcionalidades. Esto signific que los sistemas basados en la Web podan desarrollarse donde se tuviera acceso a dichos sistemas usando un navegador Web, en lugar de una interfaz de usuario de propsito especfico. Esta situacin condujo al desarrollo de una gran variedad de nuevos productos de sistemas que entregaban servicios innovadores, a los cua-les se ingresaba desde la Web. A menudo los financiaban los anuncios publicitarios que se desplegaban en la pantalla del usuario y no requeran del pago directo de los usuarios.

    As como estos productos de sistemas, el desarrollo de navegadores Web que corrieran pequeos programas y realizaran cierto procesamiento local condujo a una evolucin en los negocios y el software organizacional. En lugar de elaborar software e implementarlo en las PC de los usuarios, el software se implementaba en un servidor Web. Este avance hizo mucho ms barato cambiar y actualizar el software, pues no haba necesidad de instalar el software en cada PC. Tambin redujo costos, ya que el desarrollo de interfaces de usuario es bastante caro. En consecuencia, dondequiera que fuera posible hacerlo, muchos negocios se mudaron a la interaccin basada en la Web con sistemas de software de la compaa.

    La siguiente etapa en el desarrollo de los sistemas basados en la Web fue la nocin de los servicios Web. Estos ltimos son componentes de software que entregan funcionalidad especfica y til, y a los que se accede desde la Web. Las aplicaciones se construyen al inte-grar dichos servicios Web que ofrecen diferentes compaas. En principio, esta vinculacin suele ser dinmica, de modo que se utilice una aplicacin cada vez que se ejecutan diferen-tes servicios Web. En el captulo 19 se analiza este acercamiento al desarrollo del software.

    En los ltimos aos se desarroll la nocin de software como servicio. Se pro-puso que el software no correra usualmente en computadoras locales, sino en nubes de cmputo a las que se accede a travs de Internet. Si usted utiliza un servicio como el correo basado en la Web, usa un sistema basado en nube. Una nube de computacin es un enorme nmero de sistemas de cmputo vinculados que comparten muchos usuarios. stos no compran software, sino que pagan segn el tiempo de software que se utiliza, o tambin se les otorga acceso gratuito a cambio de ver anuncios publicitarios que se despliegan en sus pantallas.

    Por consiguiente, la llegada de la Web condujo a un significativo cambio en la forma en que se organiza el software empresarial. Antes de la Web, las aplicaciones empresa-riales eran bsicamente monolticas, los programas corran en computadoras individuales o en grupos de computadoras. Las comunicaciones eran locales dentro de una organiza-cin. Ahora el software est ampliamente distribuido, en ocasiones a lo largo del mundo. Las aplicaciones empresariales no se programan desde cero, sino que requieren la reutili-zacin extensiva de componentes y programas.

    En efecto, este cambio radical en la organizacin del software tuvo que conducir a modificaciones en las formas en que los sistemas basados en la Web se someten a inge-niera. Por ejemplo:

    1. La reutilizacin de software se ha convertido en el enfoque dominante para construir sistemas basados en la Web. Cuando se construyen tales sistemas, uno piensa en cmo ensamblarlos a partir de componentes y sistemas de software preexistentes.

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 13M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 13 3/18/11 4:44:29 PM3/18/11 4:44:29 PM

  • 14 Captulo 1 Introduccin

    2. Ahora se reconoce en general que no es prctico especificar por adelantado todos los requerimientos para tales sistemas. Los sistemas basados en la Web deben desarro-llarse y entregarse de manera progresiva.

    3. Las interfaces de usuario estn restringidas por las capacidades de los navegadores Web. Aunque tecnologas como AJAX (Holdener, 2008) significan que es posible crear valiosas interfaces dentro de un navegador Web, dichas tecnologas an son difciles de emplear. Se usan ms comnmente los formatos Web con escritura de guiones local. Las interfaces de aplicacin en sistemas basados en la Web con fre-cuencia son ms deficientes que las interfaces de usuario especficamente diseadas en productos de sistema PC.

    Las ideas fundamentales de la ingeniera de software, discutidas en la seccin ante-rior, se aplican en el software basado en la Web de la misma forma que en otros tipos de sistemas de software. En el siglo XX, la experiencia obtenida con el desarrollo de gran-des sistemas todava es relevante para el software basado en la Web.

    1.2 tica en la ingeniera de software

    Como otras disciplinas de ingeniera, la ingeniera de software se realiza dentro de un marco social y legal que limita la libertad de la gente que trabaja en dicha rea. Como ingeniero de software, usted debe aceptar que su labor implica responsabilidades mayores que la simple aplicacin de habilidades tcnicas. Tambin debe comportarse de forma tica y moralmente responsable para ser respetado como un ingeniero pro-fesional.

    No sobra decir que debe mantener estndares normales de honestidad e integridad. No debe usar sus habilidades y experiencia para comportarse de forma deshonesta o de un modo que desacredite la profesin de ingeniera de software. Sin embargo, existen reas donde los estndares de comportamiento aceptable no estn acotados por la legis-lacin, sino por la nocin ms difusa de responsabilidad profesional. Algunas de ellas son:

    1. Confidencialidad Por lo general, debe respetar la confidencialidad de sus emplea-dores o clientes sin importar si se firm o no un acuerdo formal sobre la misma.

    2. Competencia No debe desvirtuar su nivel de competencia. Es decir, no hay que aceptar de manera intencional trabajo que est fuera de su competencia.

    3. Derechos de propiedad intelectual Tiene que conocer las leyes locales que rigen el uso de la propiedad intelectual, como las patentes y el copyright. Debe ser cuidadoso para garantizar que se protege la propiedad intelectual de empleadores y clientes.

    4. Mal uso de computadoras No debe emplear sus habilidades tcnicas para usar incorrectamente las computadoras de otros individuos. El mal uso de compu-tadoras vara desde lo relativamente trivial (esto es, distraerse con los juegos de la PC del compaero) hasta lo extremadamente serio (diseminacin de virus u otro malware).

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 14M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 14 3/18/11 4:44:29 PM3/18/11 4:44:29 PM

  • 1.2 tica en la ingeniera de software 15

    Las sociedades e instituciones profesionales tienen un importante papel que desempe-ar en el establecimiento de estndares ticos. Organizaciones como la ACM, el instituto de ingenieros elctricos y electrnicos (IEEE) y la British Computer Society publican un cdigo de conducta profesional o cdigo de tica. Los integrantes de tales organizaciones se comprometen a seguir dicho cdigo cuando firman al afiliarse. Estos cdigos de con-ducta se preocupan en general por el comportamiento tico fundamental.

    Las asociaciones profesionales, sobre todo la ACM y el IEEE, han cooperado para elaborar conjuntamente un cdigo de tica y prctica profesionales. Este cdigo existe tanto de manera simplificada (figura 1.3) como pormenorizada (Gotterbarn et al., 1999) que agrega detalle y sustancia a la versin ms corta. Los fundamentos detrs de este cdigo se resumen en los primeros dos prrafos de la forma pormenorizada:

    Las computadoras tienen una funcin central y creciente en el comercio, la indus-tria, el gobierno, la medicina, la educacin, el entretenimiento y la sociedad en general. Los ingenieros de software son quienes contribuyen, mediante la partici-pacin directa o con la enseanza, al anlisis, la especificacin, el diseo, el desa-rrollo, la certificacin, el mantenimiento y la prueba de los sistemas de software.

    Figura 1.3 El cdigo de tica ACM/IEEE ( IEEE/ACM, 1999)

    Cdigo de tica y prctica profesional de la ingeniera de software

    ACM/IEEE-CS Fuerza de trabajo conjunta acerca de tica y prcticas profesionales de la ingeniera de software

    PREMBULOLa versin corta del cdigo resume las aspiraciones a un alto nivel de abstraccin; las clusulas que se incluyen en la versin completa dan ejemplos y detalles de cmo dichas aspiraciones cambian la forma en que actuamos como profesionales de la ingeniera de software. Sin las aspiraciones, los detalles pueden volverse legalistas y tediosos; mientras que sin los detalles, las aspiraciones suelen volverse muy resonantes pero vacas; en conjunto, aspiraciones y detalles forman un cdigo cohesivo. Los ingenieros de software deben comprometerse a hacer del anlisis, la especificacin, el diseo, el desarrollo, la prueba y el mantenimiento del software, una profesin benfica y respetada. De acuerdo con su compromiso con la salud, la seguridad y el bienestar del pblico, los ingenieros de software tienen que adherirse a los ocho principios siguientes:

    1. PBLICO: Los ingenieros de software deben actuar consecuentemente con el inters del pblico.

    2. CLIENTE Y EMPLEADOR: Los ingenieros de software tienen que comportarse de tal forma que fomente el mejor inters para su cliente y empleador, en coherencia con el inters pblico.

    3. PRODUCTO: Los ingenieros de software deben garantizar que sus productos y modificaciones relacionadas satisfagan los estndares profesionales ms altos posibles.

    4. JUICIO: Los ingenieros de software tienen que mantener integridad e independencia en su juicio profesional.

    5. GESTIN: Los administradores y lderes en la ingeniera de software deben suscribir y promover un enfoque tico a la gestin del desarrollo y el mantenimiento del software.

    6. PROFESIN: Los ingenieros de software tienen que fomentar la integridad y la reputacin de la profesin consecuente con el inters pblico.

    7. COLEGAS: Los ingenieros de software deben ser justos con sus colegas y apoyarlos.8. UNO MISMO: Los ingenieros de software tienen que intervenir en el aprendizaje para

    toda la vida, en cuanto a la prctica de su profesin, y promover un enfoque tico.

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 15M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 15 3/18/11 4:44:29 PM3/18/11 4:44:29 PM

  • 16 Captulo 1 Introduccin

    Debido a su funcin en el desarrollo de los sistemas de software, los ingenieros de software tienen oportunidades significativas para hacer lo correcto o causar dao, para permitir que otros hagan lo correcto o causen dao, o para influir en otros para hacer lo correcto o causar dao. Para garantizar, tanto como sea posible, que sus esfuerzos sern usados correctamente, los ingenieros de software deben comprometerse a hacer de la ingeniera de software una profesin benfica y respetada. En concordancia con dicho compromiso, los ingenieros de software tienen que adherirse al siguiente Cdigo de tica y Prctica Profesional.

    El cdigo contiene ocho principios relacionados con el comportamiento y las deci-siones tomadas por ingenieros de software profesionales, incluidos practicantes, educadores, administradores, supervisores y polticos, as como por aprendices y estudiantes de la profesin. Los principios identifican las relaciones ticamente responsables en las que participan individuos, grupos y organizaciones, as como las obligaciones principales dentro de estas relaciones. Las clusulas de cada principio son ilustraciones de algunas de las obligaciones incluidas en dichas relaciones. Tales obligaciones se fundamentan en el sentido humano del ingeniero de software, en el cuidado especial que se debe a las personas afectadas por el trabajo de los ingenieros de software, y los elementos nicos de la prctica de la ingeniera de software. El cdigo las formula como obligaciones de quienquiera que afirme o aspire a ser ingeniero de software.

    En cualquier situacin donde distintos individuos tengan diferentes visiones y obje-tivos, es probable que usted enfrente dilemas ticos. Por ejemplo, si est en desacuerdo, en principio, con las polticas de los ejecutivos de ms alto nivel en la compaa, cmo reaccionara? Claramente, esto depende de cada individuo y de la naturaleza de la dis-crepancia. Es mejor argumentar un caso para su posicin desde el interior de la orga-nizacin o renunciar en principio? Si siente que existen problemas con un proyecto de software, cundo los reporta a la administracin? Si los discute mientras apenas son un indicio, puede estar exagerando su reaccin ante una situacin; y si los deja para ms tarde, quiz sea ya imposible resolver las dificultades.

    Estos dilemas ticos los enfrentamos todos en la vida profesional y, por fortuna, en la mayora de los casos son relativamente menores o pueden resolverse sin demasiada dificultad. En caso de que no puedan solucionarse, el ingeniero afronta, tal vez, otro problema. La accin basada en los principios quiz sea renunciar al empleo, aunque esta decisin bien podra afectar a otros, como a su pareja o a sus hijos.

    Una situacin muy difcil para los ingenieros profesionales surge cuando su emplea-dor acta sin tica. Es decir, una compaa es responsable del desarrollo de un sistema crtico de seguridad y, debido a presin del tiempo, falsifica los registros de validacin de seguridad. Es responsabilidad del ingeniero mantener la confidencialidad o alertar al cliente o manifestar, de alguna forma, que el sistema entregado quiz sea inseguro?

    El problema aqu es que no hay absolutos cuando se trata de seguridad. Aunque el sis-tema pueda no estar validado de acuerdo con criterios predefinidos, dichos criterios quiz sean demasiado estrictos. En realidad el sistema operar con seguridad a lo largo de su vida. Tambin est el caso de que, aun cuando se valide de manera adecuada, el sistema falle y cause un accidente. La deteccin oportuna de los problemas puede resultar lesiva para el empleador y otros trabajadores; el fracaso por revelar los problemas podra ser daino para otros.

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 16M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 16 3/18/11 4:44:29 PM3/18/11 4:44:29 PM

  • 1.3 Estudios de caso 17

    El lector debe formar su propio criterio en estos asuntos. Aqu, la posicin tica ade-cuada depende por completo de las percepciones de los individuos que estn implicados. En este caso, el potencial de dao, el alcance del mismo y las personas afectadas deben influir en la decisin. Si el escenario es muy peligroso, estara justificado anunciarlo a travs de la prensa nacional (por ejemplo). Sin embargo, siempre hay que tratar de resol-ver la situacin sin dejar de respetar los derechos de su empleador.

    Otro conflicto tico es la participacin en el desarrollo de sistemas militares y nuclea-res. Al respecto, algunas personas se sienten muy afectadas por estos temas y evitan par-ticipar en el desarrollo de algn sistema asociado con los sistemas militares. Otras ms trabajarn en los sistemas militares, pero no en los de armamento. Incluso otras sentirn que la seguridad nacional es un principio fundamental y no tienen objeciones ticas para trabajar en sistemas de armamento.

    En tal situacin es importante que tanto empleadores como empleados dejen en claro con antelacin sus percepciones o puntos de vista. Cuando una organizacin participa en trabajo militar o nuclear, debe contar con la capacidad de especificar que los emplea-dos tienen la voluntad de aceptar cualquier trabajo asignado. De igual forma, si un empleado toma la responsabilidad y deja en claro que no quiere trabajar en tales siste-mas, los empleadores no tendrn que presionarlo para que ste lo haga ms tarde.

    El rea general de la tica y la responsabilidad profesional se vuelven ms importan-tes conforme los sistemas intensivos en software prevalecen en cada vez ms cuestiones del trabajo y la vida cotidiana. Puede considerarse desde un punto de vista filosfico, donde se tomen en cuenta los principios bsicos de la tica y se analice la tica de la inge-niera de software en relacin con dichos principios bsicos. ste es el enfoque que toma Laudon (1995) y, en menor medida, Huff y Martin (1995). El texto de Johnson sobre tica computacional (2001) tambin trata el tema desde una perspectiva filosfica.

    Sin embargo, este enfoque filosfico resulta muy abstracto y difcil de relacionar con la experiencia cotidiana. Es preferible el enfoque ms concreto plasmado en los cdigos de conducta y prctica. Se considera que la tica se analiza mejor en un contexto de ingeniera de software y no como un tema por derecho propio. Por lo tanto, en este libro no se presen-tan, donde es adecuado, discusiones ticas abstractas, sino que se incluyen ejemplos en los ejercicios que son el punto de partida para una discusin grupal sobre conflictos ticos.

    1.3 Estudios de caso

    Para ilustrar los conceptos de la ingeniera de software, a lo largo del libro se utilizan ejemplos de tres tipos de sistemas diferentes. La razn de no usar un solo estudio de caso obedece a que uno de los mensajes clave de este libro es que la prctica de la ingenie-ra de software depende del tipo de sistemas a producir. Por consiguiente, se elegir un ejemplo adecuado cuando se estudien conceptos como seguridad y confiabilidad, mode-lado de sistema, reutilizacin, etctera.

    Los tres tipos de sistemas que se usan como estudios de caso son:

    1. Un sistema embebido Se trata de un sistema donde el software controla un dis-positivo de hardware y est embebido en dicho dispositivo. Los conflictos en los sistemas embebidos incluyen por lo general tamao fsico, capacidad de reaccin,

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 17M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 17 3/18/11 4:44:29 PM3/18/11 4:44:29 PM

  • 18 Captulo 1 Introduccin

    administracin de la energa, etctera. El ejemplo de un sistema embebido utilizado es un sistema de software para controlar un dispositivo mdico.

    2. Un sistema de informacin Es un sistema cuyo principal propsito es gestionar y dar acceso a una base de datos de informacin. Los conflictos en los sistemas de infor-macin incluyen seguridad, usabilidad, privacidad y mantenimiento de la integridad de los datos. Un sistema de registros mdicos se utiliza como ejemplo de un sistema de informacin.

    3. Un sistema de adquisicin de datos basado en sensores Se trata de un sistema cuyo principal objetivo es recolectar datos de un conjunto de sensores y procesar esos datos de alguna forma. Los requerimientos clave de tales sistemas son fiabili-dad, incluso en condiciones de ambientes hostiles, y capacidad de mantenimiento. Una estacin meteorolgica a campo abierto es el ejemplo que se usa como sistema de adquisicin de datos.

    En este captulo se introduce cada uno de dichos sistemas, y sobre todos ellos hay ms informacin disponible en la Web.

    1.3.1 Sistema de control para una bomba de insulinaUna bomba de insulina es un sistema mdico que simula la funcin del pncreas (un rgano interno). El software que controla este sistema es un sistema embebido, que recopila informa-cin de un sensor y controla una bomba que entrega al usuario una dosis regulada de insulina.

    Las personas que sufren de diabetes usan el sistema. La diabetes es relativamente una condicin comn, donde el pncreas humano es incapaz de producir suficientes cantida-des de una hormona llamada insulina. La insulina metaboliza la glucosa (azcar) en la sangre. El tratamiento convencional de la diabetes incluye inyecciones regulares de insu-lina genticamente manipulada. Los diabticos calculan sus niveles de azcar en la sangre usando un medidor externo y, luego, ajustan la dosis de insulina que deben inyectarse.

    El problema con este tratamiento es que el nivel de insulina requerido no depende slo del nivel de glucosa en la sangre, sino tambin del tiempo desde la ltima inyec-cin de insulina. Esto podra conducir a niveles muy bajos de glucosa sangunea (si hay mucha insulina) o niveles muy altos de azcar sangunea (si hay muy poca insulina). La baja en glucosa sangunea es, a corto plazo, una condicin ms seria que puede resultar en mal funcionamiento temporal del cerebro y, finalmente, en inconsciencia y muerte. Y por otro lado, a largo plazo los continuos niveles elevados de glucosa en la sangre ocasio-nan dao ocular, renal y problemas cardiacos.

    Los avances recientes en el desarrollo de sensores miniaturizados significan que ahora es posible desarrollar sistemas automatizados de suministro de insulina. Dichos sistemas monitorizan los niveles de azcar en la sangre y, cuando se requiere, administran una dosis adecuada de insulina. Los sistemas de entrega de insulina como ste ya existen para el tratamiento de pacientes hospitalarios. En el futuro, muchos diabticos tendrn tales sistemas permanentemente unidos a sus cuerpos.

    Un sistema de suministro de insulina controlado por software puede funcionar al usar un microsensor embebido en el paciente, con la finalidad de medir ciertos parmetros sanguneos que sean proporcionales al nivel de azcar. Luego, esto se enva al controla-dor de la bomba, el cual calcula el nivel de azcar y la cantidad de insulina que se nece-

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 18M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 18 3/18/11 4:44:29 PM3/18/11 4:44:29 PM

  • sita. Entonces enva seales a una bomba miniaturizada para administrar la insulina va una aguja permanentemente unida.

    La figura 1.4 muestra los componentes de hardware y la organizacin de la bomba de insulina. Para entender los ejemplos, todo lo que necesita saber es que el sensor de sangre mide la conductividad elctrica de la sangre bajo diferentes condiciones y que dichos valo-res podran relacionarse con el nivel de azcar en la sangre. La bomba de insulina entrega una unidad de insulina en respuesta a un solo pulso de un controlador. Por lo tanto, para entregar 10 unidades de insulina, el controlador enva 10 pulsos a la bomba. La figura 1.5 es un modelo de actividad UML que ilustra cmo el software transforma una entrada de nivel de azcar en la sangre, con una secuencia de comandos que impulsan la bomba de insulina.

    Claramente, ste es un sistema crtico de seguridad. Si la bomba no opera o no lo hace de manera correcta, entonces la salud del usuario estara en grave riesgo o ste caera en estado de coma debido a que sus niveles de azcar en la sangre son muy altos o muy bajos. En con-secuencia, hay dos requerimientos esenciales de alto nivel que debe satisfacer este sistema:

    1. El sistema tiene que estar disponible para entregar insulina cuando se requiera.

    2. El sistema requiere funcionar de manera confiable y entregar la cantidad correcta de insulina, para contrarrestar el nivel actual de azcar en la sangre.

    Ensamblede aguja

    Sensor

    Pantalla 1 Pantalla 2

    Alarma

    Bomba Reloj

    Controlador

    Fuente de poder

    Depsito de insulina

    Figura 1.4 Hardware de bomba de insulina

    Sensorde sangre

    Bombade insulina

    Azcarsangunea

    Anlisis de lecturade sensor

    Clculode insulina

    Dosisde insulina

    Bitcorade insulina

    Bitcora de dosisClculo de comandosde bombaDatos

    de bombaControl de bomba

    de insulina

    Figura 1.5 Modelo de actividad de la bomba de insulina

    1.3 Estudios de caso 19

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 19M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 19 3/18/11 4:44:29 PM3/18/11 4:44:29 PM

  • 20 Captulo 1 Introduccin

    Por consiguiente, el sistema debe disearse e implementarse para garantizar que siem-pre satisfaga dichos requerimientos. En captulos posteriores se estudian requerimientos ms detallados y se discute acerca de cmo probar que el sistema sea seguro.

    1.3.2 Sistema de informacin de pacientes para atencin a la salud mentalUn sistema de informacin de pacientes para apoyar la atencin a la salud mental es un sistema de informacin mdica, que administra la informacin de pacientes que sufren problemas de salud mental y los tratamientos que reciben. La mayora de los pacientes con problemas de salud mental no requieren tratamiento hospitalario dedicado, pero s asistir regularmente a clnicas especializadas donde se renen con un mdico que tiene conocimiento detallado de sus problemas. Para facilitar la asistencia de los pacientes, dichas clnicas no slo funcionan en los hospitales sino tambin en consultorios mdicos locales o centros comunitarios.

    El MHC-PMS (sistema de administracin de pacientes-atencin a la salud mental) es un sistema de informacin destinado para usarse en clnicas. Utiliza una base de datos centralizada con informacin de los pacientes, aunque tambin se dise para operarse desde una PC, de modo que se puede acceder a ella y usarse desde sitios sin conectivi-dad de red segura. Cuando los sistemas locales tienen acceso seguro a red, emplean la informacin de los pacientes en la base de datos, pero adems son capaces de descargar y usar copias locales de registros de pacientes cuando los sistemas estn desconecta-dos. El sistema no es un sistema de registros mdicos completo, por lo que no conserva informacin acerca de otras condiciones mdicas. Sin embargo, interacta e intercambia datos con otros sistemas de informacin clnica. La figura 1.6 ilustra la organizacin del MHC-PMS.

    El MHC-PMS tiene dos metas globales:

    1. Generar informacin de gestin que permita a los administradores de servicios de salud valorar el desempeo contra objetivos locales y de gobierno.

    2. Proporcionar al personal mdico informacin oportuna para apoyar el tratamiento de los pacientes.

    Servidor MHC-PMS

    Base de datos del paciente

    LocalMHC-PMS

    LocalMHC-PMS

    LocalMHC-PMS

    Figura 1.6 Organizacin del MHC-PMS

    M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 20M01_SOMMERVILLE_INGENIERIA_1ED_SE_001-026.indd 20 3/18/11 4:44:32 PM3/18/11 4:44:32 PM

  • La naturaleza de los problemas de salud mental es tal que los pacientes se hallan con frecuencia desorganizados y suelen faltar a sus citas, deliberada o accidentalmente, perder recetas y medicamentos, olvidar instrucciones y realizar demandas irracionales al personal mdico. Pueden llegar a las clnicas de manera inesperada. En muy pocos casos, son un riesgo para s mismos o para otros individuos. Regularmente pueden cambiar de direccin o no tener casa a corto o largo plazo. Cuando los pacientes son peligrosos, quiz deban inte