Está en la página 1de 29

No hay bala de plata: esencia y accidentes de la Ingeniera de Software

Ingeniera del Software II

Reflexiones

El disfrute del oficio Las desgracias del oficio La leyenda del Hombre-lobo Dificultades esenciales y accidentales La esencia del software Conclusiones - Qu podemos intentar?

El disfrute del oficio

Lo divertido de hacer cosas... El placer de que las cosas que El disfrute de trabajar con algo hacemos sean tiles a otras tan maleable: el pensamiento personas (como los poetas)...

La fascinacin de disear complejos rompecabezas...

La diversin que3 conlleva el siempre aprender...

El disfrute del oficio


La programacin es divertida porque despierta la creatividad que hay dentro de nosotros, con la cual podemos obtener placeres comunes que tenemos todos los seres humanos.

Las desgracias del oficio

Dependemos de otros
Usualmente el producto que se est construyendo se nos vuelve obsoleto antes de terminarlo Debe realizarse perfecto

Otra persona nos Disear conceptos es divertido, pero asigna los objetivos, 5 recursos y la informacin construirlos es el trabajo real necesaria

A pesar de todo ...

Para muchos de nosotros el disfrute sobrepasa a las desgracias y hemos decidido continuar con esta profesin ...

La leyenda del Hombre-lobo

De todos los monstruos que tenemos como parte del folclore de nuestras pesadillas, ninguno es ms terrorfico que el Hombre-lobo, porque se transforma inesperadamente- de lo familiar a lo horrorfico ...
7

La leyenda del Hombre-lobo

Para el Hombre-lobo buscamos una bala de plata que pueda mgicamente- destruirlo ...o al menos mandarlo a descansar
8

Los proyectos de software tienen algo del Hombre-lobo...


Pero son capaces de convertirse en

Al principio son inocentes y hasta parecen factibles (y hasta fciles) ...

Caracterizados por ...

y productos intiles
Presupuestos incorrectos ...

Entregas fuera de tiempo ...


9

Las Dificultades pueden ser Esenciales o Accidentales

Esencial: una cualidad fundamental del software.

Constituye o forma parte de la esencia de algo; es inherente. Relativo a una propiedad, factor o atributo que no es esencial.

Accidental: un problema en los mtodos de produccin actuales

10

Pero muchas de las dificultades accidentales ya han sido resueltas, por ejemplo...

La dificultad de programar por el bajo nivel de abstraccin de los lenguajes ... Facilitar el acceso al poder de cmputo ... Mucha de la ganancia lograda en productividad de software ha sido consecuencia de eliminar estas barreras artificiales que hacen que las tareas accidentales sean inordinariamente difciles

El uso de mltiples 11 herramientas: ambientes integrados de desarrollo ...

Cunto del esfuerzo realizado por los ingenieros de software es hacia lo accidental y no hacia lo esencial?
...para que exista una mejora significativa en la productividad, confiabilidad y simplicidad, el 90% de las dificultades al desarrollar software deberan ser accidentales (poco probable) y las tcnicas y herramientas deberan buscar reducirlas al 0% (difcil que ocurra)...
12

Cul es la esencia del software?


El software es una construccin de conceptos interrelacionados:
Esta esencia es abstracta, en el sentido de que la construccin conceptual es la misma bajo muchas representaciones diferentes. No obstante es altamente precisa y ricamente detallada.

Conjuntos de datos

Algoritmos Invocacin de funciones


13

Relaciones entre datos

Cul es la esencia del software?


...La parte difcil de construir software es la especificacin, diseo y prueba de esta construccin conceptual, no la labor de representarla y probar la fidelidad de esta representacin...

Si esto es verdad, construir software siempre ser difcil. De forma inherente la bala de plata no existe ... Consideremos entonces las propiedades inherentes de esta esencia irreducible de los sistemas de software: complejidad, conformidad, maleabilidad e 14 invisibilidad

El software es complejo

Porque:
No

hay dos partes iguales (a menos a nivel superior al estatuto, si as fuera lo hacemos subrutina). El nmero de estados del software es mucho mayor que cualquier otro hardware creado por el hombre. Escalar software no es la repeticin de elementos preexistentes a un tamao mayor: es necesario incrementar el nmero de elementos (y esto se ve afectado por el aumento en la complejidad no lineal de la interrelacin con los elementos restantes).
15

Por esta complejidad se han generado muchos de los problemas del desarrollo de software

Dificultad de comunicacin entre los miembros del equipo...

Dificultad de enumerar (mucho menos entender) todos los posibles estados de un programa (y de ah viene la falta de confiabilidad)...
Dificultad de invocar funciones complejas, lo cual hace a los programas difciles de utilizar
16

Por esta complejidad se han generado muchos de los problemas del desarrollo de software

Dificultades de gestin del proyecto

17

Por esta complejidad se han generado muchos de los problemas del desarrollo de software
Estas dificultades en la gestin de proyectos conllevan al problema de Integridad Conceptual La Integridad Conceptual es la consideracin ms importante en el diseo de sistemas. Es mejor tener un sistema que omita ciertas caractersticas fantsticas y mejoras, pero que refleje un conjunto coherente de ideas de diseo y no un conjunto de ideas brillantes independientes y no coordinadas Muchas catedrales Europeas muestran diferencias en los planes y el estilo arquitectnico entre partes construidas por diferentes generaciones y diferentes constructores. Los ltimos intentaron mejorar los diseos de los primeros por moda o gusto 18 personal ...

Conformidad
No solamente la gente que desarrolla software se enfrenta a la complejidad. Los fsicos, por ejemplo se tienen que enfrentar con objetos terriblemente complejos, an en las partculas fundamentales...

Sin embargo, los fsicos fundamentan su labor en una fe firme de que existen principios unificadores que deben encontrarse en cualquier rea de su estudio
Deben existir explicaciones sencillas de la naturaleza, porque Dios no 19 es caprichoso o arbitrario ...

Conformidad
Muchas de las veces los sistemas de software llegan despus que los sistemas de negocios (estos ya existen). A diferencia de la naturaleza, estos sistemas fueron creados por humanos... Mucha de la complejidad que debe enfrentar el ingeniero de software es arbitraria, forzada sin ritmo y razn por las instituciones humanas y los sistemas a los cuales las interfaces de la aplicacin debe conformarse Como el sistema suele ser el ltimo
que llega, a l le toca conformarse. Adems siempre es visto como lo 20 ms fcil de conformar (sic) ...

Maleabilidad
Los cambios en edificios, automviles y hardware de computadoras ocurren pero no con la misma frecuencia que el software...

Esto es porque el software encierra funcionalidad y esta es la parte ms sujeta a la presin del cambio. A su vez esta funcionalidad est hecha del material ms altamente maleable: Los edificios tambin se pueden el pensamiento cambiar, pero los costos son altos y eso impide el cambio 21 frecuente..

Maleabilidad
Todo software exitoso tiene cambios en dos aspectos principales ...

El software exitoso sobrevive ms all de la vida normal del hardware

Conforme el software resulta til, los usuarios intentan usarlo en nuevos casos en la frontera del dominio (o ms all) inventan nuevos 22 usos para l ...

Invisibilidad
El software es invisible y no visualizable...

Las abstracciones geomtricas son poderosas para capturar realidades geomtricas, pero la realidad del software es que no est incrustado en el espacio
23

Invisibilidad
La realidad es que los aspectos estructurales son ...
Muy complejos ...

Y poseen solamente una vista externa de entrada/salida

Ocultos ...

24

Hay alguna esperanza?


Comparemos con la medicina

Para aplicar un esfuerzo persistente que lentamente logre erradicar las enfermedades

Se dej a un lado las soluciones simples y creencias falsas para curar las enfermedades...

25

Hay alguna esperanza?


Y comparemos con la qumica

Se dej a un lado la alquimia ... Para invertir muchos aos en la comprensin del tomo y despus aprender a sintetizar el oro... Podremos aprender algo de estas disciplinas?
26

S !
...Un esfuerzo disciplinado, consistente para desarrollar, propagar y explotar estas innovaciones, debera llevarnos a una mejora significativa en ordende-magnitud. No hay camino de reyes, pero al menos hay un camino...
Este se parece a mi!
27

Qu podemos hacer para tratar de atacar la esencia?


Ningn monto de actividad que se dedique a la expresin de las construcciones conceptuales de las tareas puede darnos grandes ganancias en productividad

Se debe entonces considerar atacar la esencia del software, en pocas palabras la formulacin de las complejas estructuras conceptuales
28

Qu podemos intentar para tratar de atacar la esencia?

Comprar, no construir (reutilizar)...

Refinamiento de requisitos y prototipado rpido ...

Ms entrenamiento en SE y nutrirse de los grandes


29

Desarrollo incremental (grow dont build)...