parecen simples y factibles Esta aparente simplicidad termina en: Productos inútiles Presupuestos incorrectos Entregas fuera de tiempo En por lo menos una década no se avistan “balas de plata” para mejorar la: productividad, confiabilidad o ¿Tiene que ser difícil? Dificultades Esenciales Es casi imposible crear “balas de plata” por la naturaleza del SW. El SW no avanza lento, el HW avanza rápido. Dificultades de la tecnología: Inherentes a la naturaleza del SW No inherentes ( accidentales ) Lo difícil de hacer SW es: Especificación Diseño Prueba de construcción conceptual Propiedades de la esencia Complejidad Diseño Prueba de construcción conceptual COMPLEJIDAD No existen componentes iguales en el SW Las cosas más complejas que construye la gente son los omputadores Tienen estados infinitos El escalado de SW no es la repetición de elementos en tamaños más grandes La complejidad no es lineal Es un problema esencial ADAPTABILIDAD Las instituciones obligan a que las antiguas interfaces sean respetadas. El SW debe adaptarse por: Ser el último en llegar Ser el más adaptable MODIFICABILIDAD Las funciones son las partes que sufren más presiones de cambio. El SW es un producto mental puro, más modificable e infinitamente maleable. El SW sigue el flujo: Prueba que es útil Se requieren más funcionalidades INVISIBILIDAD Es visible, no visualizable. Su realidad es NO ESPACIAL. Hay muchos grafos dirigidos superpuestos en la estructura del SW SOLUCIONES A PROBLEMAS ACCIDENTALES LENGUAJES DE ALTO NIVEL Resuelven: productividad, confiabilidad, simplicidad y comprensibilidad. Representan constructos en el programa abstracto (operaciones, tipo de datos) y evitan los de bajo nivel (bits, registros…) TIEMPO COMPARTIDO Ayuda a la productividad y calidad del producto Reduce el tiempo de respuesta SISTEMAS DE PROGRAMACIÓN UNIFICADOS Atacar dificultades accidentales producto de usar programas individuales en conjunto Entregando bibliotecas integradas, pipes y filtros. ESPERANZA DE BALAS ADA Incentiva diseño moderno y modularización de tipos abstractos de datos De commplejidad accidental de la máquina a planteamiento más abstracto de la solución El cambio a ADA obligará a la capacitación de los programadores en técnicas modernas de diseño de SW. POO Tipos abstractos de datos y tipos jerárquicos Los abstractos: definidos por nombre, valores, operaciones, ocultan su estructura de almacenamiento. Los jerárquicos: definen interfaces generales refinadas creando tipos subordinados.
Existe jerarquía sin ocultamiento y
ocultamiento sin jerarquía. INTELIGENCIA ARTIFICIAL Usar computadores para resolver problemas antes solo resueltos por la inteligencia humana Uso de heurísticas (programación basada en reglas) SISTEMAS EXPERTOS contiene máquina de inferencias y base de reglas. Su poder se basa en conocimientos más ricos y no en sistemas más complejos PROGRAMACIÓN AUTOMÁTICA Generación de un programa para resolver un problema a partir de una especificación del mismo. Se puede caracterizar un problema con pocos parámetros Varios métodos de solución Hay reglas explícitas PROGRAMACIÓN GRÁFICA Se pueden ver sólo pocas cosas a la vez El SW es difícil de visualizar. VERIFICACIÓN DE PROGRAMAS Las demostraciones son muy trabajosas Se demuestra que se ha cumplido con una especificación, pero ¿cómo llegar a una especificación completa y consistente? AMBIENTES Y HERRAMIENTAS Productividad y confiabilidad al integrar la BD al ambiente de programación ESTACIONES DE TRABAJO Aumento en la capacidad de las estaciones individuales. ATAQUES PROMETEDORES A LA ESENCIA CONCEPTUAL Los comoponentes conceptuales de la tarea, son ahora los que toman más tiempo. COMPRAR Vs. CONSTRUÍR Crear un mercado de módulos individuales. Compartir SW para eliminar costo de duplicación Es imposible que el cliente especifique completa, precisa y correctamente los requerimientos. ATACAR LA ESENCIA “Cultive, no construya el SW” El SW se hace crecer, no se construye. El buen diseño siempre puede enseñarse La diferencia entre diseños conceptuales malos y buenos es por el método de diseño. La diferencia entre diseños buenos y brillantes NO. ¿Cómo cultivar diseñadores brillantes? Identificar los mejores diseñadores ( no necesariamente el más experimentado) Asignar un seguidor de la carrera Crecer y mantener un plan de desarrollo de carrera por cada candidato Dar oportunidades a los diseñadores que se están desarrollando.