domingo, 18 de febrero de 2007

La Crisis del Software (tarea 2)

LA CRISIS DEL SOFTWARE


La rápida expansión de la Informática ha llevado a la escritura de millones de líneas de código antes de que se empezaran a plantear de manera seria metodologías para el diseño y la construcción del software, así como técnicas para resolver los problemas de mantenimiento, fiabilidad, etc. Esta expansión sin control tuvo como consecuencia lógica la llamada Crisis del Software. El punto básico de esta crisis es que el software es mucho más difícil de construir de lo que nos indica nuestra intuición. Los síntomas que hicieron palpable la aparición de la crisis son los siguientes:
Expectativas: A menudo los sistemas no responden a las expectativas que de ellos tienen los usuarios.
Costo: Los costos del software son muy difíciles de prever, y a menudo son muy superiores a lo esperado.
Facilidad de modificación: La modificación de software es una tarea compleja, costosa y propensa a errores.
Plazos: El software se suele entregar tarde y con menos prestaciones de las ofertadas.
Portabilidad: Es difícil cambiar un programa de su entorno hardware, incluso cuando las tareas a realizar son las mismas.
Eficiencia: Los esfuerzos que se hacen para el desarrollo de software no suelen hacer un aprovechamiento óptimo de los recursos accesibles.
Fiabilidad: Los programas fallan demasiado a menudo.
El primer reconocimiento público de la existencia de esta crisis tuvo lugar en una conferencia organizada en 1968 por la Comisión de Ciencias de la OTAN que convocó a un grupo de unos cincuenta expertos. El objetivo de esta conferencia era trazar el rumbo que permitiera salir de la Crisis del Software. En otras palabras hacer de la construcción de software una ingeniería; en palabras de Bauer "establecer y usar principios de ingeniería orientados a obtener software de manera económica, que sea fiable y funcione eficientemente", surgiendo así una nueva disciplina: la Ingeniería del Software (IS).La IS tiene tres elementos fundamentales:
Técnicas a emplear en la construcción del software. Entre ellas se encuentran técnicas a emplear durante la planificación de proyectos, análisis de requisitos, diseño de software, diseño de estructuras de datos, validación de sistemas software, mantenimiento, etc.
Herramientas que dan soporte al desarrollo de software.
Procesos y metodologías, nexo de unión entre las técnicas y las herramientas que definen la secuencia en que se aplican las técnicas, las entregas que se requieren, los controles necesarios para asegurar la calidad, la coordinación de cambios, etc.




PERFIL DEL INGENIERO
¿Qué hace un Ingeniero del Software en su trabajo?Trabaja preferentemente en equipo para desarrollar un proyecto.Los proyectos consisten en la construcción (análisis de la situación actual, análisis del problema, propuesta de solución automatizada, estudio de viabilidad, diseño, implementación, validación, mantenimiento) de Sistemas de Software y la gestión de dichos proyectos; siguiendo metodologías, métodos técnicas y herramientas de Ingeniería del Software.El trabajo que el IS realiza dentro del grupo es:
Planificación, Gestión y Control del Proyecto.
Control de la Calidad del proceso y de sus productos.
Interacción con los directivos, resolutores y usuarios.
Análisis de la situación, Análisis del problema, Análisis de la viabilidad.
Análisis de Requisitos y establecimiento de Especificaciones.
Obtención de información, Modelización del sistema existente y Propuesta de solución automatizada. Diseño del sistema software.
Supervisa la implementación.
Diseña el Proceso de Evaluación y supervisa las pruebas.
Controla el Mantenimiento y la Gestión de Configuraciones.
Controla, supervisa y realiza partes de la documentación del proyecto, de trabajo internos, para los clientes y manual de usuario.
Planificación y control de versiones sucesivas del sistema.
Planifica y controla la Transferencia de tecnología.
Integración con otros sistemas software o físicos.
Los alumnos deben alcanzar las siguientes capacidades:A.- Cualificaciones claves de Ingeniería del Software. Estas cualificaciones son la prioridad máxima del curso. En concreto, se desea que el alumno sea capaz de:
Conocer y utilizar una metodología de trabajo para la construcción de sistemas software.
Conocer y utilizar las técnicas y herramientas para la planificación y gestión de proyectos.
Conocer y utilizar las técnicas de Análisis.
Conocer y utilizar las técnicas de especificación de requisitos.
Desarrollo de un modelo conceptual del sistema existente.
Conocer y utilizar las técnicas de diseño de software.
Saber llevar a cabo la Evaluación de un sistema software.
Ser capaz de llevar a cabo el mantenimiento de un sistema software.
B.- Cualificaciones técnicas. Además de las cualificaciones clave de un IS, es necesario que los alumnos conozcan una serie de técnicas y herramientas concretas:
Utilizar una herramienta de construcción CASE.
Tener conocimiento de los lenguajes de programación existentes y su adecuación para la construcción de los distintos sistemas.
Tener conocimiento de la programación orientada a objetos.
El patrón dialéctico de tesis, antítesis y síntesis dirige la evolución del conocimiento: antítesis que se oponen y cuestionan las tesis anteriores, y dan como resultado nuevas posturas de síntesis que a su vez harán el papel de tesis en el siguiente ciclo evolutivo; formando así una espiral de evolución y perfeccionamiento continuo.
Los modelos basados en procesos han sido la "tesis" que inicia el conocimiento para desarrollar sistemas de software. Que la agilidad es su antítesis, y que estamos generando en estos años la síntesis; un resultado enriquecido de ambos, depurado y con mayor valor de conocimiento.


LA CRISIS DEL SOFTWARE EN LA ACTUALIDAD
Para los desarrolladores de software estadounidenses, el tema de considerar el liderazgo que han, o habían, mantenido a lo largo de incontables décadas ha comenzado a formar una fuerza dominante.Frente a un contexto de cambio cada vez más acelerado, dichos programadores en particular los de mayor edad encuentran que tendrán ser cada vez más creativos si desean mantenerse en la parte superior de la cadena de valor, principalmente a través de soluciones a nivel individual, como opciones más viables. Soluciones con base en tecnologías o empresas específicas, p ej, en Java o MS, son consideradas como entre las menos viables en el largo plazo; frente a desafíos como los de que cada vez más desarrolladores extranjeros escriben buenos programas y a un precio menor; situación cuantificada con precisión mediante recursos como el de los cinco niveles del Capability Maturity Model, CMM, los cuales miden el grado de complejidad alcanzado por las organizaciones de desarrollo de software, mediante establecer cada uno de dichos niveles metasespecíficas, cada una mejor que la anterior. El nivel 1 del CMM mide sólo los esfuerzos heroicos, es un nivel en el que no existen reglas; en el nivel 2 se incorpora la administración básica de proyectos, la cual puede diferir de entre otros similares; el 3, el desarrollo en una organización sigue las mismas reglas; el 4, se administra con base en medidas precisas del control efectivo dedesarrollo; y, finalmente en el 5 existe retroalimentación cuantitativa de proyectos anteriores para mejorar la siguiente generación de proyectos. En desarrolladores estadounidenses hay fuerte preocupación por hechos como el de que únicamente contaban ya en 2002 con tan sólo 41% de las organizaciones desarrolladoras de software a nivel mundial en el nivel4; peor aún, con el 17% de las de nivel 5, consúltese al respecto la reveladora presentación del consultor estadounidense Dave Thomas, How to Keep Your Job. El desafío que representan dichos porcentajes para Estados Unidos, afirma Thomas, es similar al que significó en los 80 el fracaso de IBM en reconocer qué tan importante serían finalmente la PC y el hardware de consumo, así como que dicho mercado había dejado de pertenecerle. Para dicho consultor, las soluciones estadounidenses a nivel gubernamental o empresarial no pueden afrontar tal desafío; únicamente las locales a nivel individual a través de la renovación y la actualización del saber individual podrían afrontarlo, provocando pautas similares a las seguidas por acertados inversores financieros individuales: tener un plan para enfrentar situaciones riesgosassumamente cambiantes, diversificar inversiones, identificar el valor generado por cada una de éstas, actuar frente a dichas situaciones en lugar de sólo padecerlas mediante actuar de forma continua en el largo plazo para enfrentarlas. Pues a nivel individual siguen existiendo formas de controlar, de responsabilizarse y de aprovecharoportunidades. Si para los estadounidenses, problemas como los mencionados serían efecto en última instancia de la arrogancia, en el caso de los latinoamericanos, estarían definidos por un sentimiento de una autoestima demasiado baja: "estamos tan mal y somos tan incapaces que es imposible competir", no obstante que ejemplos como el de India y China, y el propio estadounidense, muestran opciones diferentes.