Ingeniería de Software
Universidad del Aconcagua
Ciclo 2010
Que se entiende por
Ingeniería de Software
Edsger Dijkstra Wybe (1930-2002) fue uno de los miembros más
influyentes de la ciencia de la computación de la generación fundadora. Sus contribuciones científicas son fundamentales
diseño de algoritmos
lenguajes y diseño de programación sistemas operativos
procesamiento distribuido especificación y verificación
Edward Yourdon Nash (1944) es un ingeniero informático, consultor,
autor y profesor, y un reconocido pionero en la metodología de la ingeniería de software. Es conocido como el principal promotor del Diseño de Análisis Estructurado de Sistemas y Diseño de Método
(SSADM) de la década de 1970, así como co-desarrollador de método orientado a objetos finales del decenio de 1980 y 1990.
Barbara Liskov, Ph.D. (1939) es una prominente científica de la
computación. Actualmente está trabajando en el Depto Ciencias de la computación del MIT.Tiene un Ph D en Ciencias de la computación por la Universidad de Stanford.
Premio Turing: Por su contribución a los fundamentos teóricos y prácticos en el diseño de lenguajes de
Que se entiende por
Ingeniería de Software
Ingeniería de Software según Dijkstra:
Así como la economía se conoce como “La ciencia
miserable”, la Ingeniería de Software debería ser conocida como “The Doomed Discipline”.
La ingeniería de software, por supuesto, se presenta a si
misma como otra causa meritoria, pero eso es puro cuento. Si uno lee cuidadosamente su literatura y
analiza lo que sus devotos realmente hacen, descubre que la ingeniería de software ha aceptado como su carta de presentación “como programar si no puede”.
Es realmente útil ver un programa como una fórmula.
Primero, pone la tarea del programador en perspectiva: tiene que derivar esa fórmula... manipulación de
Que se entiende por
Ingeniería de Software
Ingeniería de Software según Yourdon:
La construcción de sistemas de software que funcionen
no es una “ciencia”. Los así llamados “científicos en computación” nos tratan de convencer de que nuestros sistemas son en realidad grafos dirigidos, o n-tuplas de formas normalizadas, o autómatas de estados finitos... Sus pronunciamientos son mas relevantes a Zen que al difícil problema de construir sistemas y programas útiles y fáciles de mantener.
En lugar de aproximaciones académicas, lo que
necesitamos es un conjunto de métodos prácticos que traten con la naturaleza propensa a errores del personal de proyectos, los usuarios, los encargados del
Que se entiende por
Ingeniería de Software
Fred Brooks aportando a la confusión:
Un dicho académico es que “Todo lo que se hace llamar
ciencia no lo es”.
Astronomía, Física, Química son ciencias
Ciencias Sociales, Ciencias Políticas, Ciencias de la Computación no lo son
El científico construye para aprender
El ingeniero aprende para construir
Elegimos mal el nombre. Lo que llamamos “Ciencias de
la Computación” es en realidad una disciplina de
Que se entiende por
Ingeniería de Software
Antes de ir a la ingeniería de software pensemos en la definición de ingeniería. Hay muchas definiciones, pero todas tienen cosas en común:
Crear soluciones eficientes A problemas prácticos
Aplicando conocimiento científico Construyendo cosas
Al servicio de la humanidad
La ingeniería permite a la gente común hacer cosas que antes requerían virtuosos
Evolución de una disciplina de
ingeniería
“Craft” (“habilidad”): virtuosos y amateurs. Intuición
y fuerza bruta. Se construye para usar, no vender.
Comercial: se construye para vender, más habilidades,
procesos establecidos.
Ingeniería profesional: Profesionales educados, el
progreso basado en la ciencia, análisis y teoría, segmentación.
Fuente: Mary Shaw –Prospects for an Engineering Discipline of Software. IEEE Software. Noviembre 1990.
Definición de Ingeniería de
Software
IEEE: “La aplicación de un enfoque sistemático, disciplinado y
cuantificable al desarrollo, mantenimiento y operación de sistemas
de software”
Es decir, la aplicación de la ingeniería al software Otra definición interesante:
Bertrand Meyer: “The development of possibly large systems intended for
use in production environments, over a possibly long period, worked on by possibly many people, and possibly undergoing many changes, where
development includes management, maintenance, validation, documentation, and so forth.”
Fuentes: IEEE Glossary for Software Engineering Terminology.
Diferencias
Programación vs Ingeniería de Software:
Un desarrollador vs. equipos de desarrolladores Sistemas simples vs. sistemas complejos
Tiempo previsto de duración corto vs. largo
Sin “stakeholders” (desarrollador = usuario) vs. muchos“stakeholders” Construidos de cero vs. mucho reuso
Poco mantenimiento vs. mantenimiento usualmente mayor al 60% de los costos originales
Ciencias de la Computación vs. Ingeniería De Software
La ciencia de la computación se ocupa de las teorías y los fundamentos. La Ingeniería de Software se ocupa de los aspectos prácticos de
desarrollar y entregar software útil
Un poco de historia
Problemas de ingeniería
Therac-25: 6 personas expuestas a dosis masivas de radiación (15000 a
20000 rads en vez de 200), se cree que 3 murieron por esta causa
Arianne5: el cohete explotó en su despegue. 7B del programa, 500MM
cohete más su carga (4 satélites). Bug por overflow no tratado al mover un número de punto flotante de 64 bits a un entero con signo de 16 bits. Ni siquiera debería haber estado corriendo…
Problema en el Pentium (1994). Problema en un for loop causaba cálculo
incorrecto de divisiones. 400 MM de costo.
Aeropuerto de Denver: $ 193 millones, 400 carros, 21 millas de pistas.
Sólo una aerolínea lo llegó a usar. US$ 1,1MM por día de retraso. Dic 93 – Feb 95 (no todo por software).
Misil Patriot: cálculo incorrecto del tiempo desde booteo por error de
redondeo (0,34 segundos en 100 horas, más de 500 metros)
Hitos destacados
Paper magistral de Brooks, Abril de 1987
Dos tipos de problemas:
Esenciales Accidentales
Las 4 dificultades esenciales:
Complejidad (no lineal con el tamaño) Conformidad (Arbitrariedad)
Hitos con miradas diferentes
SEI –Humphrey –CMM –CMMI (1987-…)
“Manufacturing has long recognized the importance of process
effectiveness and efficiency”
“CMMI describes an evolutionary improvement path from ad hoc,
immature processes to disciplined, mature processes with improved quality and effectiveness”
Agilidad -curso oficial de “Certified Scrum
Master”
“Many in the Software development field are now recognizing
Ingeniería de Software
SWEBOK
Cuerpo de conocimiento de la Ingeniería de Software es un proyecto impulsado por Software Engineering Coordinating Committee,
patrocinado por la IEEE Computer Society.
IEEE publica la primera versión del SWEBOK en mayo de 2001, siendo la última revisión del año 2004. Se describen las siguientes áreas:
Requisitos.
•Diseño.
•Contrucción de Software. •Pruebas.
•Manteniemiento.
•Gestión de la configuración (administración, control del cambio, versiones).
•Gestión de proyecto específica de la Ingeniería de Software. •Procesos de Ingeniería para el Software.
•Herramientas y Métodos.
Resumiendo
Trabajamos con algo muy complejo
Que trata con una problemática muy amplia
Que tiene dificultades esenciales
Y que además está evolucionando
Hay muchos temas por cubrir