Document Details

LeadingField

Uploaded by LeadingField

Universidad Nacional de José Clemente Paz

Tags

software engineering software development computer science programming

Summary

This document discusses software and software engineering concepts. It covers topics such as software characteristics, application domains, and software engineering practices. The document highlights the importance of software in modern life and the evolution of software engineering.

Full Transcript

CAPÍTULO EL SOFTWARE Y LA INGENIERÍA DE SOFTWARE 1 CONCEPTOS...

CAPÍTULO EL SOFTWARE Y LA INGENIERÍA DE SOFTWARE 1 CONCEPTOS enía la apariencia clásica de un alto ejecutivo de una compañía importante de software T CLAVE actividades estructurales.... 12 —a la mitad de los 40, con las sienes comenzando a encanecer, esbelto y atlético, con actividades sombrilla....... 12 ojos que penetraban al observador mientras hablaba—. Pero lo que dijo me dejó anona- características del software... 3 dado. “El software ha muerto”. dominios de aplicación....... 6 Pestañeé con sorpresa y sonreí. “Bromeas, ¿verdad? El mundo es dirigido con software y tu ingeniería de software..... 10 empresa se ha beneficiado mucho de ello. ¡No ha muerto! Está vivo y en desarrollo.” mitos del software........ 18 Movió su cabeza de manera enfática. “No, está muerto… al menos como lo conocimos.” práctica................ 15 Me apoyé en el escritorio. “Continúa.” principios............... 16 Habló al tiempo que golpeaba en la mesa con énfasis. “El concepto antiguo del software —lo proceso del software....... 12 compras, lo posees y tu trabajo consiste en administrarlo— está llegando a su fin. Hoy día, con software heredado......... 8 Web 2.0 y la computación ubicua cada vez más fuerte, vamos a ver una generación de software webapps................ 9 por completo diferente. Se distribuirá por internet y se verá exactamente como si estuviera ins- talado en el equipo de cómputo de cada usuario… pero se encontrará en un servidor remoto.” Tuve que estar de acuerdo. “Entonces, tu vida será mucho más sencilla. Tus muchachos no tendrán que preocuparse por las cinco diferentes versiones de la misma App que utilizan dece- nas de miles de usuarios.” Sonrió. “Absolutamente. Sólo la versión más reciente estará en nuestros servidores. Cuando hagamos un cambio o corrección, actualizaremos funcionalidad y contenido a cada usuario. Todos lo tendrán en forma instantánea…” Hice una mueca. “Pero si cometes un error, todos lo tendrán también instantáneamente”. Él se rió entre dientes. “Es verdad, por eso estamos redoblando nuestros esfuerzos para hacer una ingeniería de software aún mejor. El problema es que tenemos que hacerlo ‘rápido’ porque el mercado se ha acelerado en cada área de aplicación.” UNA MIRADA ¿Qué es? El software de computadora es el nas. La ingeniería de software es importante porque nos RÁPIDA producto que construyen los programadores permite construir sistemas complejos en un tiempo razona- profesionales y al que después le dan manteni- ble y con alta calidad. miento durante un largo tiempo. Incluye pro- ¿Cuáles son los pasos? El software de computadora se gramas que se ejecutan en una computadora de cual- construye del mismo modo que cualquier producto exitoso, quier tamaño y arquitectura, contenido que se presenta a con la aplicación de un proceso ágil y adaptable para medida de que se ejecutan los programas de cómputo e obtener un resultado de mucha calidad, que satisfaga las información descriptiva tanto en una copia dura como en necesidades de las personas que usarán el producto. En formatos virtuales que engloban virtualmente a cualesquie- estos pasos se aplica el enfoque de la ingeniería de soft- ra medios electrónicos. La ingeniería de software está for- ware. mada por un proceso, un conjunto de métodos (prácticas) ¿Cuál es el producto final? Desde el punto de vista de y un arreglo de herramientas que permite a los profesiona- un ingeniero de software, el producto final es el conjunto les elaborar software de cómputo de alta calidad. de programas, contenido (datos) y otros productos termi- ¿Quién lo hace? Los ingenieros de software elaboran y nados que constituyen el software de computadora. Pero dan mantenimiento al software, y virtualmente cada perso- desde la perspectiva del usuario, el producto final es la na lo emplea en el mundo industrializado, ya sea en forma información resultante que de algún modo hace mejor al directa o indirecta. mundo en el que vive. ¿Por qué es importante? El software es importante por- ¿Cómo me aseguro de que lo hice bien? Lea el resto que afecta a casi todos los aspectos de nuestras vidas y ha de este libro, seleccione aquellas ideas que sean aplicables invadido nuestro comercio, cultura y actividades cotidia- al software que usted hace y aplíquelas a su trabajo. 1 01Pressman(001-024).indd 1 14/1/10 13:30:53 2 C AP Í T UL O 1 E L SOFT WARE Y LA ING ENIERÍA DE SOFT WARE Me recargué en la espalda y coloqué mis manos en mi nuca. “Ya sabes lo que se dice… pue- des tenerlo rápido o bien hecho o barato. Escoge dos de estas características…” “Elijo rápido y bien hecho”, dijo mientras comenzaba a levantarse. También me incorporé. “Entonces realmente necesitas ingeniería de software.” “Ya lo sé”, dijo mientras salía. “El problema es que tenemos que llegar a convencer a otra generación más de técnicos de que así es…” ¿Está muerto realmente el software? Si lo estuviera, usted no estaría leyendo este libro… El software de computadora sigue siendo la tecnología más importante en la escena mundial. Y también es un ejemplo magnífico de la ley de las consecuencias inesperadas. Hace 50 años, Cita: nadie hubiera podido predecir que el software se convertiría en una tecnología indispensable para los negocios, ciencias e ingeniería, ni que permitiría la creación de tecnologías nuevas (por “Las ideas y los descubrimientos ejemplo, ingeniería genética y nanotecnología), la ampliación de tecnologías ya existentes (te- tecnológicos son los motores que impulsan el crecimiento econó- lecomunicaciones) y el cambio radical de tecnologías antiguas (la industria de la impresión); mico.” tampoco que el software sería la fuerza que impulsaría la revolución de las computadoras per- sonales, que productos de software empacados se comprarían en los supermercados, que el Wall Street Journal software evolucionaría poco a poco de un producto a un servicio cuando compañías de software “sobre pedido” proporcionaran funcionalidad justo a tiempo a través de un navegador web, que una compañía de software sería más grande y tendría más influencia que casi todas las empre- sas de la era industrial, que una vasta red llamada internet sería operada con software y evolu- cionaría y cambiaría todo, desde la investigación en bibliotecas y la compra de productos para el consumidor hasta el discurso político y los hábitos de encuentro de los adultos jóvenes (y no tan jóvenes). Nadie pudo prever que habría software incrustado en sistemas de toda clase: de transporte, médicos, de telecomunicaciones, militares, industriales, de entretenimiento, en máquinas de oficina… la lista es casi infinita. Y si usted cree en la ley de las consecuencias inesperadas, hay muchos efectos que aún no podemos predecir. Nadie podía anticipar que millones de programas de computadora tendrían que ser corregi- dos, adaptados y mejorados a medida que transcurriera el tiempo. Ni que la carga de ejecutar estas actividades de “mantenimiento” absorbería más personas y recursos que todo el trabajo aplicado a la creación de software nuevo. Conforme ha aumentado la importancia del software, la comunidad de programadores ha tratado continuamente de desarrollar tecnologías que hagan más fácil, rápida y barata la elabo- ración de programas de cómputo de alta calidad. Algunas de estas tecnologías se dirigen a un dominio específico de aplicaciones (por ejemplo, diseño e implantación de un sitio web), otras se centran en un dominio tecnológico (sistemas orientados a objetos o programación orientada a aspectos), otros más tienen una base amplia (sistemas operativos, como Linux). Sin embargo, todavía falta por desarrollarse una tecnología de software que haga todo esto, y hay pocas pro- babilidades de que surja una en el futuro. A pesar de ello, las personas basan sus trabajos, confort, seguridad, diversiones, decisiones y sus propias vidas en software de computadora. Más vale que esté bien hecho. Este libro presenta una estructura que puede ser utilizada por aquellos que hacen software de cómputo —personas que deben hacerlo bien—. La estructura incluye un proceso, un conjunto de métodos y unas herramientas que llamamos ingeniería de software. 1. 1 LA NATURALEZA DEL SOFTWARE En la actualidad, el software tiene un papel dual. Es un producto y al mismo tiempo es el ve- hículo para entregar un producto. En su forma de producto, brinda el potencial de cómputo in- corporado en el hardware de cómputo o, con más amplitud, en una red de computadoras a las 01Pressman(001-024).indd 2 14/1/10 13:30:55 C AP Í T UL O 1 EL SOFT WARE Y LA ING ENIERÍA DE SOFT WARE 3 PU que se accede por medio de un hardware local. Ya sea que resida en un teléfono móvil u opere NT O en el interior de una computadora central, el software es un transformador de información CLAVE —produce, administra, adquiere, modifica, despliega o transmite información que puede ser tan El software es tanto un producto simple como un solo bit o tan compleja como una presentación con multimedios generada a como un vehículo para entregar un partir de datos obtenidos de decenas de fuentes independientes—. Como vehículo utilizado para producto. distribuir el producto, el software actúa como la base para el control de la computadora (siste- mas operativos), para la comunicación de información (redes) y para la creación y control de otros programas (herramientas y ambientes de software). El software distribuye el producto más importante de nuestro tiempo: información. Trans- forma los datos personales (por ejemplo, las transacciones financieras de un individuo) de modo Cita: que puedan ser más útiles en un contexto local, administra la información de negocios para mejorar la competitividad, provee una vía para las redes mundiales de información (la internet) “El software es un lugar donde se siembran sueños y se cose- y brinda los medios para obtener información en todas sus formas. chan pesadillas, una ciénega En el último medio siglo, el papel del software de cómputo ha sufrido un cambio significativo. abstracta y mística en la que Las notables mejoras en el funcionamiento del hardware, los profundos cambios en las arqui- terribles demonios luchan contra tecturas de computadora, el gran incremento en la memoria y capacidad de almacenamiento, y panaceas mágicas, un mundo de una amplia variedad de opciones de entradas y salidas exóticas han propiciado la existencia de hombres lobo y balas de plata.” sistemas basados en computadora más sofisticados y complejos. Cuando un sistema tiene éxito, Brad J. Cox la sofisticación y complejidad producen resultados deslumbrantes, pero también plantean pro- blemas enormes para aquellos que deben construir sistemas complejos. En la actualidad, la enorme industria del software se ha convertido en un factor dominante en las economías del mundo industrializado. Equipos de especialistas de software, cada uno centrado en una parte de la tecnología que se requiere para llegar a una aplicación compleja, han reemplazado al programador solitario de los primeros tiempos. A pesar de ello, las pregun- tas que se hacía aquel programador son las mismas que surgen cuando se construyen sistemas modernos basados en computadora:1 ¿Por qué se requiere tanto tiempo para terminar el software? ¿Por qué son tan altos los costos de desarrollo? ¿Por qué no podemos detectar todos los errores antes de entregar el software a nuestros clientes? ¿Por qué dedicamos tanto tiempo y esfuerzo a mantener los programas existentes? ¿Por qué seguimos con dificultades para medir el avance mientras se desarrolla y mantiene el software? Éstas y muchas otras preguntas, denotan la preocupación sobre el software y la manera en que se desarrolla, preocupación que ha llevado a la adopción de la práctica de la ingeniería del software. 1.1.1 Definición de software En la actualidad, la mayoría de profesionales y muchos usuarios tienen la fuerte sensación de que entienden el software. Pero, ¿es así? La descripción que daría un libro de texto sobre software sería más o menos así: ? ¿Cómo se define software? El software es: 1) instrucciones (programas de cómputo) que cuando se ejecutan proporcionan las características, función y desempeño buscados; 2) estructuras de datos que permiten que los progra- 1 En un excelente libro de ensayos sobre el negocio del software, Tom DeMarco [DeM95] defiende el punto de vista contrario. Dice: “En lugar de preguntar por qué el software cuesta tanto, necesitamos comenzar a preguntar: ¿Qué hemos hecho para hacer posible que el software actual cueste tan poco? La respuesta a esa pregunta nos ayudará a continuar el extraordinario nivel de logro que siempre ha distinguido a la industria del software.” 01Pressman(001-024).indd 3 14/1/10 13:30:55 4 C AP Í T UL O 1 E L SOFT WARE Y LA ING ENIERÍA DE SOFT WARE mas manipulen en forma adecuada la información, y 3) información descriptiva tanto en papel como en formas virtuales que describen la operación y uso de los programas. No hay duda de que podrían darse definiciones más completas. Pero es probable que una definición más formal no mejore de manera apreciable nuestra comprensión. Para asimilar lo anterior, es importante examinar las características del software que lo hacen diferente de otros objetos que construyen los seres humanos. El software es ele- mento de un sistema lógico y no de uno físico. Por tanto, tiene características que difieren con- siderablemente de las del hardware: 1. El software se desarrolla o modifica con intelecto; no se manufactura en el sentido clásico. PU Aunque hay algunas similitudes entre el desarrollo de software y la fabricación de hard- NT O ware, las dos actividades son diferentes en lo fundamental. En ambas, la alta calidad se CLAVE logra a través de un buen diseño, pero la fase de manufactura del hardware introduce El software se modifica con intelecto, problemas de calidad que no existen (o que se corrigen con facilidad) en el software. no se manufactura. Ambas actividades dependen de personas, pero la relación entre los individuos dedica- dos y el trabajo logrado es diferente por completo (véase el capítulo 24). Las dos activi- dades requieren la construcción de un “producto”, pero los enfoques son distintos. Los costos del software se concentran en la ingeniería. Esto significa que los proyectos de software no pueden administrarse como si fueran proyectos de manufactura. 2. El software no se “desgasta”. PU La figura 1.1 ilustra la tasa de falla del hardware como función del tiempo. La relación, NT O que es frecuente llamar “curva de tina”, indica que el hardware presenta una tasa de fa- CLAVE llas relativamente elevada en una etapa temprana de su vida (fallas que con frecuencia El software no se desgasta, pero sí son atribuibles a defectos de diseño o manufactura); los defectos se corrigen y la tasa se deteriora. de fallas se abate a un nivel estable (muy bajo, por fortuna) durante cierto tiempo. No obstante, conforme pasa el tiempo, la tasa de fallas aumenta de nuevo a medida que los componentes del hardware resienten los efectos acumulativos de suciedad, vibración, abuso, temperaturas extremas y muchos otros inconvenientes ambientales. En pocas palabras, el hardware comienza a desgastarse. El software no es susceptible a los problemas ambientales que hacen que el hard- ware se desgaste. Por tanto, en teoría, la curva de la tasa de fallas adopta la forma de la “curva idealizada” que se aprecia en la figura 1.2. Los defectos ocultos ocasionarán ta- FIGURA 1.1 Curva de fallas del hardware “Mortalidad “Desgaste” infantil” Tasa de falla Tiempo 01Pressman(001-024).indd 4 14/1/10 13:30:55 C AP Í T UL O 1 EL SOFT WARE Y LA ING ENIERÍA DE SOFT WARE 5 FIGURA 1.2 Curvas de falla Tasa de fallas del software incrementada debido a efectos colaterales Tasa de fallas Cambio Curva real Curva idealizada Tiempo sas elevadas de fallas al comienzo de la vida de un programa. Sin embargo, éstas se co- CONSEJO rrigen y la curva se aplana, como se indica. La curva idealizada es una gran simplifica- Si quiere reducir el deterioro del ción de los modelos reales de las fallas del software. Aun así, la implicación está clara: software, tendrá que mejorar su el software no se desgasta, ¡pero sí se deteriora! diseño (capítulos 8 a 13). Esta contradicción aparente se entiende mejor si se considera la curva real en la fi- gura 1.2. Durante su vida,2 el software sufrirá cambios. Es probable que cuando éstos se PU realicen, se introduzcan errores que ocasionen que la curva de tasa de fallas tenga au- NT O mentos súbitos, como se ilustra en la “curva real” (véase la figura 1.2). Antes de que la CLAVE curva vuelva a su tasa de fallas original de estado estable, surge la solicitud de otro Los métodos de la ingeniería de software llevan a reducir la magnitud cambio que hace que la curva se dispare otra vez. Poco a poco, el nivel mínimo de la de los picos y de la pendiente de la tasa de fallas comienza a aumentar: el software se está deteriorando como consecuen- curva real en la figura 1.2. cia del cambio. Otro aspecto del desgaste ilustra la diferencia entre el hardware y el software. Cuando un componente del hardware se desgasta es sustituido por una refacción. En cambio, no hay refacciones para el software. Cada falla de éste indica un error en el di- seño o en el proceso que tradujo el diseño a código ejecutable por la máquina. Enton- ces, las tareas de mantenimiento del software, que incluyen la satisfacción de peticio- nes de cambios, involucran una complejidad considerablemente mayor que el mantenimiento del hardware. 3. Aunque la industria se mueve hacia la construcción basada en componentes, la mayor parte Cita: del software se construye para un uso individualizado. “Las ideas son los ladrillos con A medida que evoluciona una disciplina de ingeniería, se crea un conjunto de compo- los que se construyen las ideas.” nentes estandarizados para el diseño. Los tornillos estándar y los circuitos integrados Jason Zebehazy preconstruidos son sólo dos de los miles de componentes estándar que utilizan los in- genieros mecánicos y eléctricos conforme diseñan nuevos sistemas. Los componentes reutilizables han sido creados para que el ingeniero pueda concentrarse en los elemen- tos verdaderamente innovadores de un diseño; es decir, en las partes de éste que repre- sentan algo nuevo. En el mundo del hardware, volver a usar componentes es una parte 2 En realidad, los distintos participantes solicitan cambios desde el momento en que comienza el desarrollo y mucho antes de que se disponga de la primera versión. 01Pressman(001-024).indd 5 14/1/10 13:30:56 6 C AP Í T UL O 1 E L SOFT WARE Y LA ING ENIERÍA DE SOFT WARE natural del proceso de ingeniería. En el del software, es algo que apenas ha empezado a hacerse a gran escala. Un componente de software debe diseñarse e implementarse de modo que pueda volverse a usar en muchos programas diferentes. Los modernos componentes reutiliza- bles incorporan tanto los datos como el procesamiento que se les aplica, lo que permite que el ingeniero de software cree nuevas aplicaciones a partir de partes susceptibles de volverse a usar.3 Por ejemplo, las actuales interfaces interactivas de usuario se constru- yen con componentes reutilizables que permiten la creación de ventanas gráficas, me- nús desplegables y una amplia variedad de mecanismos de interacción. Las estructuras de datos y el detalle de procesamiento que se requieren para construir la interfaz están contenidos en una librería de componentes reusables para tal fin. 1.1.2 Dominios de aplicación del software Actualmente, hay siete grandes categorías de software de computadora que plantean retos continuos a los ingenieros de software: Software de sistemas: conjunto de programas escritos para dar servicio a otros progra- mas. Determinado software de sistemas (por ejemplo, compiladores, editores y herramien- tas para administrar archivos) procesa estructuras de información complejas pero determi- nistas.4 Otras aplicaciones de sistemas (por ejemplo, componentes de sistemas operativos, manejadores, software de redes, procesadores de telecomunicaciones) procesan sobre todo datos indeterminados. En cualquier caso, el área de software de sistemas se caracteriza por: gran interacción con el hardware de la computadora, uso intensivo por parte de usua- rios múltiples, operación concurrente que requiere la secuenciación, recursos compartidos y administración de un proceso sofisticado, estructuras complejas de datos e interfaces ex- ternas múltiples. WebRef Software de aplicación: programas aislados que resuelven una necesidad específica de En la dirección shareware.cnet. negocios. Las aplicaciones en esta área procesan datos comerciales o técnicos en una com se encuentra una de las librerías forma que facilita las operaciones de negocios o la toma de decisiones administrativas o más completas de software compartido técnicas. Además de las aplicaciones convencionales de procesamiento de datos, el soft- y libre. ware de aplicación se usa para controlar funciones de negocios en tiempo real (por ejem- plo, procesamiento de transacciones en punto de venta, control de procesos de manufac- tura en tiempo real). Software de ingeniería y ciencias: se ha caracterizado por algoritmos “devoradores de números”. Las aplicaciones van de la astronomía a la vulcanología, del análisis de tensio- nes en automóviles a la dinámica orbital del transbordador espacial, y de la biología mo- lecular a la manufactura automatizada. Sin embargo, las aplicaciones modernas dentro del área de la ingeniería y las ciencias están abandonando los algoritmos numéricos conven- cionales. El diseño asistido por computadora, la simulación de sistemas y otras aplicacio- nes interactivas, han comenzado a hacerse en tiempo real e incluso han tomado caracterís- ticas del software de sistemas. Software incrustado: reside dentro de un producto o sistema y se usa para implementar y controlar características y funciones para el usuario final y para el sistema en sí. El software incrustado ejecuta funciones limitadas y particulares (por ejemplo, control del tablero de un horno de microondas) o provee una capacidad significativa de funcionamiento y control 3 El desarrollo basado en componentes se estudia en el capítulo 10. 4 El software es determinista si es posible predecir el orden y momento de las entradas, el procesamiento y las salidas. El software es no determinista si no pueden predecirse el orden y momento en que ocurren éstos. 01Pressman(001-024).indd 6 14/1/10 13:30:56 C AP Í T UL O 1 EL SOFT WARE Y LA ING ENIERÍA DE SOFT WARE 7 (funciones digitales en un automóvil, como el control del combustible, del tablero de con- trol y de los sistemas de frenado). Software de línea de productos: es diseñado para proporcionar una capacidad especí- fica para uso de muchos consumidores diferentes. El software de línea de productos se centra en algún mercado limitado y particular (por ejemplo, control del inventario de pro- ductos) o se dirige a mercados masivos de consumidores (procesamiento de textos, hojas de cálculo, gráficas por computadora, multimedios, entretenimiento, administración de base de datos y aplicaciones para finanzas personales o de negocios). Aplicaciones web: llamadas “webapps”, esta categoría de software centrado en redes agrupa una amplia gama de aplicaciones. En su forma más sencilla, las webapps son poco más que un conjunto de archivos de hipertexto vinculados que presentan información con uso de texto y gráficas limitadas. Sin embargo, desde que surgió Web 2.0, las webapps es- tán evolucionando hacia ambientes de cómputo sofisticados que no sólo proveen caracte- rísticas aisladas, funciones de cómputo y contenido para el usuario final, sino que también están integradas con bases de datos corporativas y aplicaciones de negocios. Software de inteligencia artificial: hace uso de algoritmos no numéricos para resolver Cita: problemas complejos que no son fáciles de tratar computacionalmente o con el análisis di- “No hay computadora que recto. Las aplicaciones en esta área incluyen robótica, sistemas expertos, reconocimiento tenga sentido común.” de patrones (imagen y voz), redes neurales artificiales, demostración de teoremas y juegos. Marvin Minsky Son millones de ingenieros de software en todo el mundo los que trabajan duro en proyectos de software en una o más de estas categorías. En ciertos casos se elaboran sistemas nuevos, pero en muchos otros se corrigen, adaptan y mejoran aplicaciones ya existentes. No es raro que una joven ingeniera de software trabaje en un programa de mayor edad que la de ella… Las genera- ciones pasadas de los trabajadores del software dejaron un legado en cada una de las categorías mencionadas. Por fortuna, la herencia que dejará la actual generación aligerará la carga de los futuros ingenieros de software. Aun así, nuevos desafíos (capítulo 31) han aparecido en el hori- zonte. Computación en un mundo abierto: el rápido crecimiento de las redes inalámbricas quizá lleve pronto a la computación verdaderamente ubicua y distribuida. El reto para los ingenieros de software será desarrollar software de sistemas y aplicación que permita a dispositivos móviles, computadoras personales y sistemas empresariales comunicarse a través de redes enormes. Construcción de redes: la red mundial (World Wide Web) se está convirtiendo con rapi- dez tanto en un motor de computación como en un proveedor de contenido. El desafío para los ingenieros de software es hacer arquitecturas sencillas (por ejemplo, planeación fi- nanciera personal y aplicaciones sofisticadas que proporcionen un beneficio a mercados objetivo de usuarios finales en todo el mundo). Fuente abierta: tendencia creciente que da como resultado la distribución de código fuente para aplicaciones de sistemas (por ejemplo, sistemas operativos, bases de datos y ambientes de desarrollo) de modo que mucha gente pueda contribuir a su desarrollo. El de- safío para los ingenieros de software es elaborar código fuente que sea autodescriptivo, y también, lo que es más importante, desarrollar técnicas que permitirán tanto a los consu- Cita: midores como a los desarrolladores saber cuáles son los cambios hechos y cómo se mani- fiestan dentro del software. “No siempre puedes predecir, pero siempre puedes Es indudable que cada uno de estos nuevos retos obedecerá a la ley de las consecuencias im- prepararte.” previstas y tendrá efectos (para hombres de negocios, ingenieros de software y usuarios finales) Anónimo que hoy no pueden predecirse. Sin embargo, los ingenieros de software pueden prepararse de- 01Pressman(001-024).indd 7 14/1/10 13:30:57 8 C AP Í T UL O 1 E L SOFT WARE Y LA ING ENIERÍA DE SOFT WARE sarrollando un proceso que sea ágil y suficientemente adaptable para que acepte los cambios profundos en la tecnología y las reglas de los negocios que seguramente surgirán en la década siguiente. 1.1.3 Software heredado Cientos de miles de programas de cómputo caen en uno de los siete dominios amplios de apli- cación que se estudiaron en la subsección anterior. Algunos de ellos son software muy nuevo, disponible para ciertos individuos, industria y gobierno. Pero otros programas son más viejos, en ciertos casos muy viejos. Estos programas antiguos —que es frecuente denominar software heredado— han sido centro de atención y preocupación continuas desde la década de 1960. Dayani-Fard y sus colegas [Day99] describen el software heredado de la manera siguiente: Los sistemas de software heredado […] fueron desarrollados hace varias décadas y han sido modifi- cados de manera continua para que satisfagan los cambios en los requerimientos de los negocios y plataformas de computación. La proliferación de tales sistemas es causa de dolores de cabeza para las organizaciones grandes, a las que resulta costoso mantenerlos y riesgoso hacerlos evolucionar. Liu y sus colegas [Liu98] amplían esta descripción al hacer notar que “muchos sistemas hereda- dos continúan siendo un apoyo para las funciones básicas del negocio y son ‘indispensables’ para éste”. Además, el software heredado se caracteriza por su longevidad e importancia críti- ca para el negocio. Desafortunadamente, en ocasiones hay otra característica presente en el software heredado: ? ¿Qué hago si encuentro un sistema heredado de mala calidad.5 Hay veces en las que los sistemas heredados tienen diseños que no son suscepti- mala calidad? bles de extenderse, código confuso, documentación mala o inexistente, casos y resultados de pruebas que nunca se archivaron, una historia de los cambios mal administrada… la lista es muy larga. A pesar de esto, dichos sistemas dan apoyo a las “funciones básicas del negocio y son indispensables para éste”. ¿Qué hacer? La única respuesta razonable es: hacer nada, al menos hasta que el sistema heredado tenga un cambio significativo. Si el software heredado satisface las necesidades de sus usuarios y corre de manera confiable, entonces no falla ni necesita repararse. Sin embargo, conforme pase el tiempo será frecuente que los sistemas de software evolucionen por una o varias de las si- guientes razones: El software debe adaptarse para que cumpla las necesidades de los nuevos ambientes ? ¿Qué tipos de cambios se hacen a los sistemas del cómputo y de la tecnología. heredados? El software debe ser mejorado para implementar nuevos requerimientos del negocio. El software debe ampliarse para que sea operable con otros sistemas o bases de datos modernos. La arquitectura del software debe rediseñarse para hacerla viable dentro de un ambiente de redes. CONSEJO Cuando ocurren estos modos de evolución, debe hacerse la reingeniería del sistema heredado (capítulo 29) para que sea viable en el futuro. La meta de la ingeniería de software moderna es Todo ingeniero de software debe reconocer que el cambio es natural. “desarrollar metodologías que se basen en el concepto de evolución; es decir, el concepto de No trate de evitarlo. que los sistemas de software cambian continuamente, que los nuevos sistemas de software se 5 En este caso, la calidad se juzga con base en el pensamiento moderno de la ingeniería de software, criterio algo injusto, ya que algunos conceptos y principios de la ingeniería de software moderna tal vez no hayan sido bien entendidos en la época en que se desarrolló el software heredado. 01Pressman(001-024).indd 8 14/1/10 13:30:57 C AP Í T UL O 1 EL SOFT WARE Y LA ING ENIERÍA DE SOFT WARE 9 desarrollan a partir de los antiguos y […] que todo debe operar entre sí y cooperar con cada uno de los demás” [Day99]. 1. 2 LA NATURALEZA ÚNICA DE LAS WEBAPPS En los primeros días de la Red Mundial (entre 1990 y 1995), los sitios web consistían en poco más Cita: que un conjunto de archivos de hipertexto vinculados que presentaban la información con el empleo de texto y gráficas limitadas. Al pasar el tiempo, el aumento de HTML por medio de “Cuando veamos cualquier tipo de estabilización, la web se herramientas de desarrollo (XML, Java) permitió a los ingenieros de la web brindar capacidad habrá convertido en algo com- de cómputo junto con contenido de información. Habían nacido los sistemas y aplicaciones ba- pletamente diferente.” sados en la web6 (denominó a éstas en forma colectiva como webapps). En la actualidad, las webapps se han convertido en herramientas sofisticadas de cómputo que no sólo proporcionan Louis Monier funciones aisladas al usuario final, sino que también se han integrado con bases de datos cor- porativas y aplicaciones de negocios. Como se dijo en la sección 1.1.2, las webapps son una de varias categorías distintas de soft- ware. No obstante, podría argumentarse que las webapps son diferentes. Powell [Pow98] sugiere que los sistemas y aplicaciones basados en web “involucran una mezcla entre las publicaciones impresas y el desarrollo de software, entre la mercadotecnia y la computación, entre las comu- nicaciones internas y las relaciones exteriores, y entre el arte y la tecnología”. La gran mayoría de webapps presenta los siguientes atributos: Uso intensivo de redes. Una webapp reside en una red y debe atender las necesidades ? ¿Qué característica diferencia las webapps de una comunidad diversa de clientes. La red permite acceso y comunicación mundiales de otro software? (por ejemplo, internet) o tiene acceso y comunicación limitados (por ejemplo, una intranet corporativa). Concurrencia. A la webapp puede acceder un gran número de usuarios a la vez. En mu- chos casos, los patrones de uso entre los usuarios finales varían mucho. Carga impredecible. El número de usuarios de la webapp cambia en varios órdenes de magnitud de un día a otro. El lunes tal vez la utilicen cien personas, el jueves quizá 10 000 usen el sistema. Rendimiento. Si un usuario de la webapp debe esperar demasiado (para entrar, para el procesamiento por parte del servidor, para el formado y despliegue del lado del cliente), él o ella quizá decidan irse a otra parte. Disponibilidad. Aunque no es razonable esperar una disponibilidad de 100%, es fre- cuente que los usuarios de webapps populares demanden acceso las 24 horas de los 365 días del año. Los usuarios en Australia o Asia quizá demanden acceso en horas en las que las aplicaciones internas de software tradicionales en Norteamérica no estén en línea por razones de mantenimiento. Orientadas a los datos. La función principal de muchas webapp es el uso de hiperme- dios para presentar al usuario final contenido en forma de texto, gráficas, audio y video. Además, las webapps se utilizan en forma común para acceder a información que existe en bases de datos que no son parte integral del ambiente basado en web (por ejemplo, comer- cio electrónico o aplicaciones financieras). 6 En el contexto de este libro, el término aplicación web (webapp) agrupa todo, desde una simple página web que ayude al consumidor a calcular el pago del arrendamiento de un automóvil hasta un sitio web integral que pro- porcione servicios completos de viaje para gente de negocios y vacacionistas. En esta categoría se incluyen sitios web completos, funcionalidad especializada dentro de sitios web y aplicaciones de procesamiento de informa- ción que residen en internet o en una intranet o extranet. 01Pressman(001-024).indd 9 14/1/10 13:30:58 10 C AP Í T UL O 1 E L SOFT WARE Y LA ING ENIERÍA DE SOFT WARE Contenido sensible. La calidad y naturaleza estética del contenido constituye un rasgo importante de la calidad de una webapp. Evolución continua. A diferencia del software de aplicación convencional que evolu- ciona a lo largo de una serie de etapas planeadas y separadas cronológicamente, las aplica- ciones web evolucionan en forma continua. No es raro que ciertas webapp (específica- mente su contenido) se actualicen minuto a minuto o que su contenido se calcule en cada solicitud. Inmediatez. Aunque la inmediatez —necesidad apremiante de que el software llegue con rapidez al mercado— es una característica en muchos dominios de aplicación, es frecuente que las webapps tengan plazos de algunos días o semanas para llegar al mercado.7 Seguridad. Debido a que las webapps se encuentran disponibles con el acceso a una red, es difícil o imposible limitar la población de usuarios finales que pueden acceder a la apli- cación. Con el fin de proteger el contenido sensible y brindar modos seguros de transmi- sión de los datos, deben implementarse medidas estrictas de seguridad a través de la infra- estructura de apoyo de una webapp y dentro de la aplicación misma. Estética. Parte innegable del atractivo de una webapp es su apariencia y percepción. Cuando se ha diseñado una aplicación para comercializar o vender productos o ideas, la estética tiene tanto que ver con el éxito como el diseño técnico. Podría argumentarse que otras categorías de aplicaciones estudiadas en la sección 1.1.2 muestran algunos de los atributos mencionados. Sin embargo, las webapps casi siempre poseen todos ellos. 1. 3 INGENIERÍA DE SOFTWARE Con objeto de elaborar software listo para enfrentar los retos del siglo XXI, el lector debe aceptar algunas realidades sencillas: PU NT El software se ha incrustado profundamente en casi todos los aspectos de nuestras vidas O y, como consecuencia, el número de personas que tienen interés en las características y CLAVE funciones que brinda una aplicación específica8 ha crecido en forma notable. Cuando ha Entender el problema antes de dar de construirse una aplicación nueva o sistema incrustado, deben escucharse muchas una solución. opiniones. Y en ocasiones parece que cada una de ellas tiene una idea un poco distinta de cuáles características y funciones debiera tener el software. Se concluye que debe hacerse un esfuerzo concertado para entender el problema antes de desarrollar una aplica- ción de software. PU NT Los requerimientos de la tecnología de la información que demandan los individuos, O negocios y gobiernos se hacen más complejos con cada año que pasa. En la actualidad, CLAVE grandes equipos de personas crean programas de cómputo que antes eran elaborados El diseño es una actividad crucial de por un solo individuo. El software sofisticado, que alguna vez se implementó en un la ingeniería de software. ambiente de cómputo predecible y autocontenido, hoy en día se halla incrustado en el interior de todo, desde la electrónica de consumo hasta dispositivos médicos o sistemas de armamento. La complejidad de estos nuevos sistemas y productos basados en computadora demanda atención cuidadosa a las interacciones de todos los elementos del sistema. Se concluye que el diseño se ha vuelto una actividad crucial. 7 Con las herramientas modernas es posible producir páginas web sofisticadas en unas cuantas horas. 8 En una parte posterior de este libro, llamaré a estas personas “participantes”. 01Pressman(001-024).indd 10 14/1/10 13:30:58 C AP Í T UL O 1 EL SOFT WARE Y LA ING ENIERÍA DE SOFT WARE 11 PU NT Los individuos, negocios y gobiernos dependen cada vez más del software para tomar O decisiones estratégicas y tácticas, así como para sus operaciones y control cotidianos. Si CLAVE el software falla, las personas y empresas grandes pueden experimentar desde un incon- Tanto la calidad como la facilidad de veniente menor hasta fallas catastróficas. Se concluye que el software debe tener alta recibir mantenimiento son resultado de un buen diseño. calidad. A medida que aumenta el valor percibido de una aplicación específica se incrementa la probabilidad de que su base de usuarios y longevidad también crezcan. Conforme se extienda su base de usuarios y el tiempo de uso, las demandas para adaptarla y mejorarla también crecerán. Se concluye que el software debe tener facilidad para recibir mantenimiento. Estas realidades simples llevan a una conclusión: debe hacerse ingeniería con el software en todas sus formas y a través de todos sus dominios de aplicación. Y esto conduce al tema de este libro: la ingeniería de software. Aunque cientos de autores han desarrollado definiciones personales de la ingeniería de soft- Cita: ware, la propuesta por Fritz Bauer [Nau69] en la conferencia fundamental sobre el tema todavía sirve como base para el análisis: “Más que una disciplina o cuer- po de conocimientos, ingeniería [La ingeniería de software es] el establecimiento y uso de principios fundamentales de la ingeniería es un verbo, una palabra de con objeto de desarrollar en forma económica software que sea confiable y que trabaje con eficiencia acción, una forma de abordar en máquinas reales. un problema.” El lector se sentirá tentado de ampliar esta definición.9 Dice poco sobre los aspectos técnicos Scott Whitmir de la calidad del software; no habla directamente de la necesidad de satisfacer a los consumi- dores ni de entregar el producto a tiempo; omite mencionar la importancia de la medición y la metrología; no establece la importancia de un proceso eficaz. No obstante, la definición de Bauer proporciona una base. ¿Cuáles son los “principios fundamentales de la ingeniería” que pueden aplicarse al desarrollo del software de computadora? ¿Cómo se desarrolla software “en forma económica” y que sea “confiable”? ¿Qué se requiere para crear programas de cómputo que trabajen con “eficiencia”, no en una sino en muchas “máquinas reales” diferentes? Éstas son las preguntas que siguen siendo un reto para los ingenieros de software. El IEEE [IEEE93a] ha desarrollado una definición más completa, como sigue: La ingeniería de software es: 1) La aplicación de un enfoque sistemático, disciplinado y cuantificable ? ¿Cómo se define la ingeniería de software? al desarrollo, operación y mantenimiento de software; es decir, la aplicación de la ingeniería al soft- ware. 2) El estudio de enfoques según el punto 1. Aun así, el enfoque “sistemático, disciplinado y cuantificable” aplicado por un equipo de software podría ser algo burdo para otro. Se necesita disciplina, pero también adaptabilidad y agilidad. PU La ingeniería de software es una tecnología con varias capas. Como se aprecia en la figura NT O 1.3, cualquier enfoque de ingeniería (incluso la de software) debe basarse en un compromiso CLAVE organizacional con la calidad. La administración total de la calidad, Six Sigma y otras filosofías La ingeniería de software incluye un similares10 alimentan la cultura de mejora continua, y es esta cultura la que lleva en última ins- proceso, métodos y herramientas tancia al desarrollo de enfoques cada vez más eficaces de la ingeniería de software. El funda- para administrar y hacer ingeniería con el software. mento en el que se apoya la ingeniería de software es el compromiso con la calidad. El fundamento para la ingeniería de software es la capa proceso. El proceso de ingeniería de software es el aglutinante que une las capas de la tecnología y permite el desarrollo racional y 9 Consulte muchas otras definiciones en www.answers.com/topic/software-engineering#wp-_note-13. 10 En el capítulo 14 y toda la parte 3 del libro se estudia la administración de la calidad y los enfoques relacionados con ésta. 01Pressman(001-024).indd 11 14/1/10 13:30:59 12 C AP Í T UL O 1 E L SOFT WARE Y LA ING ENIERÍA DE SOFT WARE FIGURA 1.3 Capas de la Herramientas ingeniería de software Métodos Proceso Compromiso con la calidad WebRef oportuno del software de cómputo. El proceso define una estructura que debe establecerse para CrossTalk es un periódico que da la obtención eficaz de tecnología de ingeniería de software. El proceso de software forma la base información práctica sobre procesos, para el control de la administración de proyectos de software, y establece el contexto en el que métodos y herramientas. Se encuentra en www.stsc.hill.af.mil se aplican métodos técnicos, se generan productos del trabajo (modelos, documentos, datos, reportes, formatos, etc.), se establecen puntos de referencia, se asegura la calidad y se adminis- tra el cambio de manera apropiada. Los métodos de la ingeniería de software proporcionan la experiencia técnica para elaborar software. Incluyen un conjunto amplio de tareas, como comunicación, análisis de los requeri- mientos, modelación del diseño, construcción del programa, pruebas y apoyo. Los métodos de la ingeniería de software se basan en un conjunto de principios fundamentales que gobiernan cada área de la tecnología e incluyen actividades de modelación y otras técnicas descriptivas. Las herramientas de la ingeniería de software proporcionan un apoyo automatizado o se- miautomatizado para el proceso y los métodos. Cuando se integran las herramientas de modo que la información creada por una pueda ser utilizada por otra, queda establecido un sistema llamado ingeniería de software asistido por computadora que apoya el desarrollo de software. 1. 4 EL PROCESO DEL SOFTWARE Un proceso es un conjunto de actividades, acciones y tareas que se ejecutan cuando va a crearse ? ¿Cuáles son los elementos de un algún producto del trabajo. Una actividad busca lograr un objetivo amplio (por ejemplo, comu- proceso de software? nicación con los participantes) y se desarrolla sin importar el dominio de la aplicación, tamaño del proyecto, complejidad del esfuerzo o grado de rigor con el que se usará la ingeniería de software. Una acción (diseño de la arquitectura) es un conjunto de tareas que producen un pro- Cita: ducto importante del trabajo (por ejemplo, un modelo del diseño de la arquitectura). Una tarea se centra en un objetivo pequeño pero bien definido (por ejemplo, realizar una prueba unitaria) “Un proceso define quién hace qué, cuándo y cómo, para que produce un resultado tangible. alcanzar cierto objetivo.” En el contexto de la ingeniería de software, un proceso no es una prescripción rígida de cómo elaborar software de cómputo. Por el contrario, es un enfoque adaptable que permite que las Ivar Jacobson, Grady Booch y James Rumbaugh personas que hacen el trabajo (el equipo de software) busquen y elijan el conjunto apropiado de acciones y tareas para el trabajo. Se busca siempre entregar el software en forma oportuna y con calidad suficiente para satisfacer a quienes patrocinaron su creación y a aquellos que lo usarán. La estructura del proceso establece el fundamento para el proceso completo de la ingeniería de software por medio de la identificación de un número pequeño de actividades estructurales que sean aplicables a todos los proyectos de software, sin importar su tamaño o complejidad. Además, la estructura del proceso incluye un conjunto de actividades sombrilla que son aplica- bles a través de todo el proceso del software. Una estructura de proceso general para la inge- niería de software consta de cinco actividades: 01Pressman(001-024).indd 12 14/1/10 13:30:59 C AP Í T UL O 1 EL SOFT WARE Y LA ING ENIERÍA DE SOFT WARE 13 Comunicación. Antes de que comience cualquier trabajo técnico, tiene importancia crí- ? ¿Cuáles son las cinco actividades tica comunicarse y colaborar con el cliente (y con otros participantes).11 Se busca entender estructurales del los objetivos de los participantes respecto del proyecto, y reunir los requerimientos que proceso? ayuden a definir las características y funciones del software. Planeación. Cualquier viaje complicado se simplifica si existe un mapa. Un proyecto de software es un viaje difícil, y la actividad de planeación crea un “mapa” que guía al equipo mientras viaja. El mapa —llamado plan del proyecto de software— define el trabajo de inge- niería de software al describir las tareas técnicas por realizar, los riesgos probables, los re- cursos que se requieren, los productos del trabajo que se obtendrán y una programación de las actividades. Modelado. Ya sea usted diseñador de paisaje, constructor de puentes, ingeniero aeronáu- Cita: tico, carpintero o arquitecto, a diario trabaja con modelos. Crea un “bosquejo” del objeto por “Einstein afirmaba que debía hacer a fin de entender el panorama general —cómo se verá arquitectónicamente, cómo haber una explicación sencilla ajustan entre sí las partes constituyentes y muchas características más—. Si se requiere, re- de la naturaleza porque Dios no fina el bosquejo con más y más detalles en un esfuerzo por comprender mejor el problema y es caprichoso o arbitrario. Al cómo resolverlo. Un ingeniero de software hace lo mismo al crear modelos a fin de entender ingeniero de software no lo con- mejor los requerimientos del software y el diseño que los satisfará. forta una fe parecida. Gran parte de la complejidad que Construcción. Esta actividad combina la generación de código (ya sea manual o auto- debe doblegar es de origen matizada) y las pruebas que se requieren para descubrir errores en éste. arbitrario.” Despliegue. El software (como entidad completa o como un incremento parcialmente Fred Brooks terminado) se entrega al consumidor que lo evalúa y que le da retroalimentación, misma que se basa en dicha evaluación. Estas cinco actividades estructurales genéricas se usan durante el desarrollo de programas pe- queños y sencillos, en la creación de aplicaciones web grandes y en la ingeniería de sistemas enormes y complejos basados en computadoras. Los detalles del proceso de software serán distintos en cada caso, pero las actividades estructurales son las mismas. Para muchos proyectos de software, las actividades estructurales se aplican en forma itera- tiva a medida que avanza el proyecto. Es decir, la comunicación, la planeación, el mode- lado, la construcción y el despliegue se ejecutan a través de cierto número de repeticiones del proyecto. Cada iteración produce un incremento del software que da a los participantes un subconjunto de características y funcionalidad generales del software. Conforme se produce cada incremento, el software se hace más y más completo. Las actividades estructurales del proceso de ingeniería de software son complementadas por cierto número de actividades sombrilla. En general, las actividades sombrilla se aplican a lo largo de un proyecto de software y ayudan al equipo que lo lleva a cabo a administrar y controlar el avance, la calidad, el cambio y el riesgo. Es común que las actividades sombrilla sean las si- PU NT guientes: O CLAVE Seguimiento y control del proyecto de software: permite que el equipo de software Las actividades sombrilla ocurren evalúe el progreso comparándolo con el plan del proyecto y tome cualquier acción necesa- a lo largo del proceso de software ria para apegarse a la programación de actividades. y se centran sobre todo en la administración, el seguimiento Administración del riesgo: evalúa los riesgos que puedan afectar el resultado del pro- y el control del proyecto. yecto o la calidad del producto. 11 Un participante es cualquier persona que tenga algo que ver en el resultado exitoso del proyecto —gerentes del negocio, usuarios finales, ingenieros de software, personal de apoyo, etc.—. Rob Thomset dice en broma que “un participante es una persona que blande una estaca grande y aguda […] Si no vez más lejos que los participantes, ya sabes dónde terminará la estaca”. (N. del T.: Esta nota es un juego de palabras: stake significa estaca y también parte, y stakeholder es el que blande una estaca, pero también un participante.) 01Pressman(001-024).indd 13 14/1/10 13:31:00 14 C AP Í T UL O 1 E L SOFT WARE Y LA ING ENIERÍA DE SOFT WARE Aseguramiento de la calidad del software: define y ejecuta las actividades requeridas para garantizar la calidad del software. Revisiones técnicas: evalúa los productos del trabajo de la ingeniería de software a fin de descubrir y eliminar errores antes de que se propaguen a la siguiente actividad. Medición: define y reúne mediciones del proceso, proyecto y producto para ayudar al equipo a entregar el software que satisfaga las necesidades de los participantes; puede usarse junto con todas las demás actividades estructurales y sombrilla. Administración de la configuración del software: administra los efectos del cambio a lo largo del proceso del software. Administración de la reutilización: define criterios para volver a usar el producto del trabajo (incluso los componentes del software) y establece mecanismos para obtener com- ponentes reutilizables. Preparación y producción del producto del trabajo: agrupa las actividades requeridas para crear productos del trabajo, tales como modelos, documentos, registros, formatos y listas. PU Cada una de estas actividades sombrilla se analiza en detalle más adelante. NT O Ya se dijo en esta sección que el proceso de ingeniería de software no es una prescripción CLAVE rígida que deba seguir en forma dogmática el equipo que lo crea. Al contrario, debe ser ágil y La adaptación del proceso de adaptable (al problema, al proyecto, al equipo y a la cultura organizacional). Por tanto, un pro- software es esencial para el éxito ceso adoptado para un proyecto puede ser significativamente distinto de otro adoptado para del proyecto. otro proyecto. Entre las diferencias se encuentran las siguientes: Flujo general de las actividades, acciones y tareas, así como de las interdependencias ? ¿Qué diferencias existen entre los entre ellas modelos del proceso? Grado en el que las acciones y tareas están definidas dentro de cada actividad estruc- tural Grado en el que se identifican y requieren los productos del trabajo Cita: Forma en la que se aplican las actividades de aseguramiento de la calidad Manera en la que se realizan las actividades de seguimiento y control del proyecto “Siento que una receta es sólo un tema que una cocinera inteli- Grado general de detalle y rigor con el que se describe el proceso gente ejecuta con una variación Grado con el que el cliente y otros participantes se involucran con el proyecto en cada ocasión.” Nivel de autonomía que se da al equipo de software Madame Benoit Grado con el que son prescritos la organización y los roles del equipo En la parte 1 de este libro, se examinará el proceso de software con mucho detalle. Los modelos de proceso prescriptivo (capítulo 2) enfatizan la definición, la identificación y la aplicación deta- lladas de las actividades y tareas del proceso. Su objetivo es mejorar la calidad del sistema, desarrollar proyectos más manejables, hacer más predecibles las fechas de entrega y los costos, y guiar a los equipos de ingenieros de software cuando realizan el trabajo que se requiere para construir un sistema. Desafortunadamente, ha habido casos en los que estos objetivos no se han logrado. Si los modelos prescriptivos se aplican en forma dogmática y sin adaptación, pueden incrementar el nivel de burocracia asociada con el desarrollo de sistemas basados en compu- tadora y crear inadvertidamente dificultades para todos los participantes. Los modelos de proceso ágil (capítulo 3) ponen el énfasis en la “agilidad” del proyecto y siguen ? ¿Qué caracteriza a un proceso “ágil”? un conjunto de principios que conducen a un enfoque más informal (pero no menos efectivo, dicen sus defensores) del proceso de software. Por lo general, se dice que estos modelos del proceso son “ágiles” porque acentúan la maniobrabilidad y la adaptabilidad. Son apropiados para muchos tipos de proyectos y son útiles en particular cuando se hace ingeniería sobre apli- caciones web. 01Pressman(001-024).indd 14 14/1/10 13:31:00 C AP Í T UL O 1 EL SOFT WARE Y LA ING ENIERÍA DE SOFT WARE 15 1. 5 LA PRÁCTICA DE LA INGENIERÍA DE SOFTWARE WebRef En la sección 1.4 se introdujo un modelo general de proceso de software compuesto de un con- En la dirección www. junto de actividades que establecen una estructura para la práctica de la ingeniería de software. literateprogramming.com se Las actividades estructurales generales —comunicación, planeación, modelado, construc- encuentran varias citas ción y despliegue— y las actividades sombrilla establecen el esqueleto de la arquitectura para provocativas sobre la práctica de la el trabajo de ingeniería de software. Pero, ¿cómo entra aquí la práctica de la ingeniería de soft- ingeniería de software. ware? En las secciones que siguen, el lector obtendrá la comprensión básica de los conceptos y principios generales que se aplican a las actividades estructurales.12 1.5.1 La esencia de la práctica CONSEJO En un libro clásico, How to Solve It, escrito antes de que existieran las computadoras modernas, Podría decirse que el enfoque de George Polya [Pol45] describió la esencia de la solución de problemas y, en consecuencia, la Polya es simple sentido común. Es verdad. Pero es sorprendente la esencia de la práctica de la ingeniería de software: frecuencia con la que el sentido 1. Entender el problema (comunicación y análisis). común es poco común en el mundo del software. 2. Planear la solución (modelado y diseño del software). 3. Ejecutar el plan (generación del código). 4. Examinar la exactitud del resultado (probar y asegurar la calidad). En el contexto de la ingeniería de software, estas etapas de sentido común conducen a una serie de preguntas esenciales [adaptado de Pol45]: Entender el problema. En ocasiones es difícil de admitir, pero la mayor parte de nosotros adoptamos una actitud de orgullo desmedido cuando se nos presenta un problema. Escuchamos por unos segundos y después pensamos: Claro, sí, entiendo, resolvamos esto. Desafortunada- mente, entender no siempre es fácil. Es conveniente dedicar un poco de tiempo a responder algunas preguntas sencillas: ¿Quiénes tienen que ver con la solución del problema? Es decir, ¿quiénes son los partici- pantes? ¿Cuáles son las incógnitas? ¿Cuáles datos, funciones y características se requieren para resolver el problema en forma apropiada? ¿Puede fraccionarse el problema? ¿Es posible representarlo con problemas más pequeños que sean más fáciles de entender? ¿Es posible representar gráficamente el problema? ¿Puede crearse un modelo de análisis? Planear la solución. Ahora entiende el problema (o es lo que piensa) y no puede esperar para Cita: escribir el código. Antes de hacerlo, cálmese un poco y haga un pequeño diseño: “En la solución de cualquier pro- ¿Ha visto antes problemas similares? ¿Hay patrones reconocibles en una solución blema hay un grano de potencial? ¿Hay algún software existente que implemente los datos, funciones y caracte- descubrimiento.” rísticas que se requieren? George Polya ¿Ha resuelto un problema similar? Si es así, ¿son reutilizables los elementos de la solución? ¿Pueden definirse problemas más pequeños? Si así fuera, ¿hay soluciones evidentes para éstos? 12 El lector debería volver a consultar las secciones de este capítulo a medida que en el libro se describan en espe- cífico los métodos y las actividades sombrilla de la ingeniería de software. 01Pressman(001-024).indd 15 14/1/10 13:31:01 16 C AP Í T UL O 1 E L SOFT WARE Y LA ING ENIERÍA DE SOFT WARE ¿Es capaz de representar una solución en una forma que lleve a su implementación eficaz? ¿Es posible crear un modelo del diseño? Ejecutar el plan. El diseño que creó sirve como un mapa de carreteras para el sistema que quiere construir. Puede haber desviaciones inesperadas y es posible que descubra un camino mejor a medida que avanza, pero el “plan” le permitirá proceder sin que se pierda. ¿Se ajusta la solución al plan? ¿El código fuente puede apegarse al modelo del diseño? ¿Es probable que cada parte componente de la solución sea correcta? ¿El diseño y código se han revisado o, mejor aún, se han hecho pruebas respecto de la corrección del algoritmo? Examinar el resultado. No se puede estar seguro de que la solución sea perfecta, pero sí de que se ha diseñado un número suficiente de pruebas para descubrir tantos errores como sea posible. ¿Puede probarse cada parte componente de la solución? ¿Se ha implementado una estra- tegia razonable para hacer pruebas? ¿La solución produce resultados que se apegan a los datos, funciones y características que se requieren? ¿El software se ha validado contra todos los requerimientos de los partici- pantes? No debiera sorprender que gran parte de este enfoque tenga que ver con el sentido común. En realidad, es razonable afirmar que un enfoque de sentido común para la ingeniería de software hará que nunca se extravíe. 1.5.2 Principios generales El diccionario define la palabra principio como “una ley importante o suposición que subyace y se requiere en un sistema de pensamiento”. En este libro se analizarán principios en muchos niveles distintos de abstracción. Algunos se centran en la ingeniería de software como un todo, otros consideran una actividad estructural general específica (por ejemplo, comunicación), y otros más se centran en acciones de la ingeniería de software (por ejemplo, diseño de la ar- quitectura) o en tareas técnicas (escribir un escenario para el uso). Sin importar su nivel de enfoque, los principios lo ayudarán a establecer un conjunto de herramientas mentales para una práctica sólida de la ingeniería de software. Ésa es la razón de que sean importantes. David Hooker [Hoo96] propuso siete principios que se centran en la práctica de la ingeniería de software como un todo. Se reproducen en los párrafos siguientes:13 Primer principio: La razón de que exista todo CONSEJO Un sistema de software existe por una razón: dar valor a sus usuarios. Todas las decisiones Antes de comenzar un proyecto de deben tomarse teniendo esto en mente. Antes de especificar un requerimiento del sistema, software, asegúrese de que el antes de notar la funcionalidad de una parte de él, antes de determinar las plataformas del software tenga un propósito para el negocio y que los usuarios perciben hardware o desarrollar procesos, plantéese preguntas tales como: “¿Esto agrega valor real al

Use Quizgecko on...
Browser
Browser