• No se han encontrado resultados

Ingeniería de Software II

N/A
N/A
Protected

Academic year: 2022

Share "Ingeniería de Software II"

Copied!
19
0
0

Texto completo

(1)

Ingeniería de Software II

Primer Cuatrimestre de 2009

Buenos Aires, 16 de Marzo de 2009 Clase 1a: Introducción a la Ingeniería de Software

(2)

2

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 símbolos usualmente llamada 'programación'.

Para llevarse a casa el mensaje que este curso es primariamente un curso en matemáticas formales, vemos que el lenguaje de

programación en cuestión no ha sido implementado en la universidad.

De esta forma, los estudiantes son protegidos de la tentación de

"testear" sus programas.

¿Existe la Ingeniería de Software?

Fuente: ver http://www.cs.utexas.edu/users/EWD/transcriptions/EWD13xx/EWD1305.html

(3)

¿Existe la Ingeniería de Software? (cont.)

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 mantenimiento, y el proceso de desarrollo. Ese conjunto de métodos es llamado “Ingeniería de Software”.

(4)

4

Aportando al a confusión: ¿Existe la ciencia de la computación?

Fred Brooks:

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

ingeniería. Nuestro trabajo es “construir” cosas, sean algoritmos, computadoras o sistemas

“La ingeniería de objetos abstractos”

Fuente: Fred Brooks. The computer scientist as a Toolsmith II. Communications of the ACM, Marzo 1996.

(5)

La Ingeniería…

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

Fuente: Mary Shaw – Prospects for an Engineering Discipline of Software. IEEE Software. Noviembre 1990.

(6)

6

Evolución de una disciplina de ingeniería (Shaw)

“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.

(7)

Evolución de una disciplina de ingeniería (Shaw) (cont.)

La aparición de modelos y teorías es clave para alimentar el ciclo que nos llevará a la verdadera disciplina de ingeniería.

Fuente: Mary Shaw – Prospects for an Engineering Discipline of Software. IEEE Software. Noviembre 1990.

(8)

8

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.

Bertrand Meyer, Software Engineering in the Academy, IEEE Computer, Mayo 2001.

(9)

Las 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

A Program A Programming System (Interfaces, System Integration)

A Programming Product

(Generalization, Doc, Testing, Maint)

A Programming Systems Product X3

X3

(10)

10

Las Diferencias: 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

La Ingeniería de Software se nutre de las ciencias de la computación y otras ciencias

Otra diferencia: con la Ingeniería de Sistemas

(11)

Algunos hitos en nuestra historia

1968 – Nace el uso del nombre, conferencia NATO.

(12)

12

La crisis del Software

Principio de los 80s

Primeras “horror stories”

Respuesta del DoD 

Software Engineering Institute

Famoso artículo de 1994 de Scientific American, caso del aeropuerto de Denver

(13)

Algunas “horror stories”

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)

CMU (Chenyenne Mountain Upgrade)

Larga Distancia AT&T falla por 9 horas. Break en un switch de C.

Todas las que no sabemos…

(14)

14

Otro hito – No Silver Bullet

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)

Facilidad de Cambios

Invisibilidad

(15)

Hitos con visiones diferenciadas

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” (2000 - …):

“Many in the Software development field are now

recognizing that software development, as knowledge work, has more in common with art than with

engineering”

(16)

16

Si quisiéramos saber todo…

(17)

SWEBOK – Cont.

(18)

18

Ojo que cada una se expande… Por ejemplo

(19)

En resumen:

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

Nos vamos a concentrar en aquellos que más afectan la construcción de grandes sistemas de software

Referencias

Documento similar

Fuente de emisión secundaria que afecta a la estación: Combustión en sector residencial y comercial Distancia a la primera vía de tráfico: 3 metros (15 m de ancho)..

Entre otras cosas, hay en el texto agudas percepciones de las pecuiiaridades de funcionamiento de la economía, tanto desde el punto de vista sociológico como del epistemológico,

Se ha proporcionado un Marco de Trabajo Motivacional (MTM) para la evaluación y mejora de la motivación de estudiantes en ingeniería, especialmente ingeniería del software.

La concepción de la política como una actividad planeadora áe una organización social desconoce esa entraña misma de la po- lítica que la vincula a la justicia, y que define la

IV. Está relacionada con la ingeniería de sistemas, dado que al construir software en general estamos construyendo a la vez un sistema compuesto al menos por software, hardware

n En cada iteración se identifican y especifican los casos de uso relevantes, se crea un diseño basado en la arquitectura seleccionada, se implementa el diseño mediante componentes

De este modo se constituye un espacio ontológico y epistemológico a la vez, en el que cada elemento (cada principio) ocupa un lugar determinado en la totalidad, y desde ahí está

Cancioneiro de Madrid. 1 Nunca espeiei de amor contentamiento. 5v) 2 Es en todo tan corta esta jornada. 6v) 3 Aquel camino larguo de mis daños. 8v) 5 El tiempo en toda cosa