Red de conocimientos turísticos - Conocimientos sobre calendario chino - ¿Qué es una crisis de software? ¿Por favor explique con ejemplos?

¿Qué es una crisis de software? ¿Por favor explique con ejemplos?

La crisis del software es una serie de problemas graves que encuentra el software informático durante su desarrollo y mantenimiento. En resumen, incluye principalmente dos aspectos: cómo desarrollar software y cómo satisfacer la creciente demanda de software, cómo mantener la cantidad cada vez mayor de software existente;

La "crisis del software" ha provocado que la gente realice una investigación más profunda sobre el software y sus características, y la gente ha cambiado sus primeras opiniones incorrectas sobre el software. Los programas que se consideraban excelentes al principio a menudo eran difíciles de entender para los demás y todo el texto estaba lleno de técnicas de programación. Hoy en día, se cree generalmente que un programa excelente no sólo debe tener funciones correctas y un rendimiento excelente, sino también ser fácil de entender, fácil de usar, fácil de modificar y ampliar.

Aunque los lenguajes de programación han abierto perspectivas extremadamente amplias para las aplicaciones informáticas, el fantasma que deambula en el mundo del software: la "crisis del software" todavía existe. Porque el desarrollo de software no solo está restringido por los métodos y estructuras de diseño del programa, sino también por el ciclo de desarrollo y los costos de desarrollo del software. Más importante aún, la garantía de la calidad del software está estrechamente relacionada con la corrección del diseño del programa. Si no se puede garantizar la fiabilidad del software desarrollado, se producirán consecuencias graves inimaginables durante el funcionamiento.

Desde mediados de la década de 1960, la tecnología de hardware informático ha mejorado día a día. La capacidad de almacenamiento, la velocidad informática y la confiabilidad de la informática han aumentado significativamente, y el costo de producción de hardware ha seguido disminuyendo. La caída de los precios de las computadoras ha creado excelentes condiciones para su aplicación generalizada. Ante esta situación, existe una necesidad urgente de que los programas informáticos se adapten a ella. Por lo tanto, se han propuesto algunos requisitos para el desarrollo de sistemas de software a gran escala. Sin embargo, el progreso de la tecnología del software no ha podido satisfacer las necesidades del desarrollo de la situación. En el proceso de desarrollo de software a gran escala, han surgido tres problemas principales: alta complejidad, largo ciclo de desarrollo y dificultad para garantizar la precisión. . No hay solución a los problemas encontrados, lo que hace que los problemas se acumulen y formen una situación difícil de controlar para las personas. Se produce la llamada "crisis del software".

El ejemplo más destacado es el sistema operativo de la serie de ordenadores IBM360 desarrollado por IBM en Estados Unidos entre 1963 y 1966. Este sistema de software requirió de trabajo de unas 5.000 personas al año, como máximo, 1.000 personas invirtieron en trabajo de desarrollo y escribieron casi 1 millón de líneas de programa fuente. A pesar de invertir tanta mano de obra y recursos materiales, los resultados fueron extremadamente pobres. Según las estadísticas, cada vez que se lanza una nueva versión de este sistema operativo, se encuentran y corrigen 1.000 errores de programas de la versión anterior. Uno puede imaginarse lo mala que es la calidad de dicho software.

No es de extrañar que el responsable del proyecto, F.D Sirrox, dijera con gran tristeza al resumir el proyecto: "...al igual que una bestia que huye cayendo al cieno y luchando hasta la muerte, más y más Es una lucha que se hunde cada vez más y finalmente no puede escapar del desastre de la extinción ... El trabajo de programación es como un atolladero ... Grupos de programadores se ven obligados a luchar desesperadamente en el atolladero ... Nadie Se esperaba que el problema resultara Caerá en tal dilema ... "Las lecciones históricas del sistema operativo IBM360 se han convertido en un ejemplo típico en proyectos de desarrollo de software y han quedado registrados en la historia.

Si el software desarrollado contiene errores ocultos y no se puede garantizar la confiabilidad, es probable que tenga consecuencias muy graves en todo el sistema durante el funcionamiento. Al menos afectará el funcionamiento normal del sistema, y ​​al menos. Lo peor que provocará es la parálisis de todo el sistema, pudiendo incluso provocar accidentes irreversibles. Por ejemplo, los depósitos bancarios pueden desaparecer o incluso quedar en déficit; todos los productos de la fábrica pueden ser desechados, provocando la quiebra de la fábrica.

En 1963, un "," en el software informático utilizado por los Estados Unidos para controlar la sonda a Marte se escribió erróneamente como "·", lo que provocó que la sonda que volaba a Marte explotara, causando cientos de millones de muertes.

Para superar esta crisis, por un lado, es necesario realizar una serie de investigaciones sobre cuestiones como los métodos de programación, la corrección del programa y la confiabilidad del software; Se estudiaron los métodos necesarios para realizar una serie de estudios sobre preparación, pruebas y mantenimiento del software, así como métodos de gestión, dando como resultado la metodología de programación.

En 1968, E.W. Dykstra presentó por primera vez el argumento de que "las declaraciones GOTO son dañinas", desafiando los métodos de programación tradicionales, lo que llevó a una discusión generalizada sobre los métodos de programación. Muchos científicos informáticos destacados participaron en esta discusión. La metodología de programación se fue produciendo y formando gradualmente en esta discusión extensa y profunda.

¿Qué es la metodología de programación? En resumen, la metodología de programación es una disciplina que analiza la naturaleza de los programas, teorías y métodos de programación. Contiene contenido rico, como programación estructural, prueba de corrección de programas, transformación de programas, descripción y derivación formal de programas, síntesis de programas, diseño automático de programas, etc. En la metodología de programación, la programación estructural ocupa una posición muy importante. Se puede decir que la metodología de programación se desarrolla y mejora gradualmente sobre la base de la programación estructural.

¿Qué es la programación estructural? Todavía existen opiniones diferentes y no existe una definición estricta y generalmente aceptada. En 1974, D. Grice clasificó las diferentes explicaciones existentes de programación estructural en 13 tipos, entre ellas las más representativas son las siguientes:

La programación estructural es una forma de evitar el uso de sentencias GOTO <; /p>

La programación estructural es programación de arriba hacia abajo;

La programación estructural es un método para organizar y programar programas. Los programas compilados con ella son fáciles de entender y modificar.

Una de las funciones principales de la estructuración del programa es facilitar la prueba de la corrección del programa

La programación estructural verifica la corrección de cada paso en el proceso de diseño, lo que conduce automáticamente a una autoevaluación; -estilo de programación documentador y de autodefensa;

En resumen, la programación estructural analiza cómo convertir diagramas de flujo grandes y complejos en una forma estándar para que puedan usarse de varias maneras. Varias estructuras de control estándar (generalmente secuenciales). , rama y repetición) se representan mediante repetición y anidamiento.

Las definiciones o explicaciones anteriores reflejan los principales temas discutidos en la programación estructural desde diferentes ángulos. En esencia, la programación estructural es un principio y método de programación. Según este principio y método, se puede diseñar un programa con una estructura clara, fácil de entender, fácil de modificar y fácil de verificar.

Un lenguaje de programación diseñado según los requisitos de la programación estructural se denomina lenguaje de programación estructural. Los programas compilados utilizando lenguajes de programación estructural, o según las ideas y principios de la programación estructural, se denominan programas estructurados.

A finales de los años 1960 y principios de los años 1970, hubo un intenso debate sobre el uso de declaraciones GOTO. Las personas que abogan por eliminar la declaración GOTO de los lenguajes de programación de alto nivel creen que la declaración GOTO es una declaración dañina que tiene el mayor impacto en la estructura del programa. Su razón principal es que la declaración GOTO crea la estructura estática y la estructura dinámica. El programa es inconsistente, lo que hace que el programa sea difícil de entender y difícil de encontrar errores. Después de eliminar la declaración GOTO, el proceso de ejecución del programa se puede reflejar directamente desde la estructura del programa. De esta manera, no sólo hace que la estructura del programa sea clara, fácil de entender y de verificación de errores, sino que también ayuda a demostrar la corrección del programa.

Los oponentes creen que la declaración GOTO es más flexible de usar y puede mejorar la eficiencia del programa en algunas situaciones. Si la declaración GOTO se elimina por completo, en algunos casos hará que el programa sea demasiado complejo y aumentará los cálculos innecesarios.

En 1974, D.E. Knuth hizo una revisión exhaustiva y justa de la controversia sobre las declaraciones GOTO. Su punto básico es: utilizar declaraciones GOTO sin restricciones, especialmente el uso de declaraciones GOTO que saltan hacia atrás. La estructura del programa es difícil de entender. En este caso, se debe evitar en la medida de lo posible el uso de sentencias GOTO. Pero en otros casos, para mejorar la eficiencia del programa sin destruir la buena estructura del programa, es necesario utilizar algunas declaraciones GOTO de forma controlada.

En sus palabras: "En algunos casos, abogo por eliminar la declaración GOTO; en otros casos, abogo por la introducción de la declaración GOTO. Desde entonces, este debate de 10 años se ha resuelto".

Más tarde, G. Giacoppini y C. Boehm demostraron teóricamente que cualquier programa puede representarse mediante estructuras secuenciales, ramificadas y repetitivas. Esta conclusión muestra que eliminar la declaración GOTO de un lenguaje de programación de alto nivel no afecta la capacidad de programación del lenguaje de programación de alto nivel y la estructura del programa escrito es más clara.

La idea de programación estructural se refleja en la adopción de algunos métodos relativamente efectivos, el más representativo de los cuales es el método de "refinamiento paso a paso". El método llamado "refinamiento paso a paso" significa que al programar un programa, primero considere la estructura general del programa e ignore temporalmente algunos detalles, y luego refínelo gradualmente capa por capa hasta que cada detalle se describa completamente en el idioma elegido, es decir, hasta obtener el programa deseado. En otras palabras, organiza las actividades de pensamiento de las personas de acuerdo con el proceso de primero global antes de parcial, primero completo antes de detalles, primero abstracto y luego concreto, de modo que la estructura del programa escrito sea clara, fácil de entender, fácil de verificar y fácil de modificar. El método de "refinamiento paso a paso" está relacionado y es diferente del método de diseño modular. En términos generales, el refinamiento progresivo se refiere principalmente al proceso de diseño de un programa, mientras que el diseño modular se refiere principalmente al proceso de diseño de un sistema relativamente grande.

Además, ante la "crisis del software", la gente investigó y estudió la situación real de la producción de software y gradualmente sintió la necesidad de utilizar métodos de ingeniería para dedicarse a la investigación y el mantenimiento de sistemas de software. , por lo que se combinaron con la metodología de programación. El campo estrechamente relacionado de la ingeniería de software nació en 1968. El objeto principal de la ingeniería de software es el software a gran escala. Los contenidos de la investigación en ingeniería de software incluyen principalmente: garantía de calidad y evaluación de la calidad del software, métodos, herramientas y documentos para el desarrollo y mantenimiento de software y gestión de software; El objetivo final de la ingeniería de software es deshacerse de la situación de la producción manual de software y realizar gradualmente la automatización del desarrollo y mantenimiento del software.

Las principales manifestaciones de la crisis del software:

1. Las estimaciones de los costes y cronogramas de desarrollo de software suelen ser muy inexactas.

El costo real puede ser un orden de magnitud mayor que el costo estimado, y no es raro que el progreso real se retrase meses o incluso años más allá del progreso esperado. Este fenómeno reduce la credibilidad de la organización de desarrollo. Las medidas oportunas que se toman para cumplir con los cronogramas y ahorrar costos a menudo comprometen la calidad de los productos de software, provocando inevitablemente la insatisfacción del usuario.

2. Los usuarios a menudo no están satisfechos con el sistema de software "completado".

Los desarrolladores de software a menudo se apresuran a escribir programas cuando sólo tienen una comprensión vaga de las necesidades del usuario, o incluso una comprensión precisa del problema a resolver. La comunicación entre los desarrolladores de software y los usuarios suele ser insuficiente y "trabajar a puerta cerrada" conducirá inevitablemente a que el producto final no satisfaga las necesidades reales de los usuarios.

3. La calidad de los productos de software suele ser poco fiable.

Los conceptos cuantitativos precisos de confiabilidad y garantía de calidad del software acaban de surgir, y las técnicas de garantía de calidad del software (revisión, revisión y prueba) no se han aplicado de manera consistente a todo el proceso de desarrollo de software, lo que conducirá a productos de software Se produce un problema de calidad.

4. El software a menudo no se puede mantener.

Los errores en los programas son difíciles de corregir. De hecho, es imposible adaptar estos programas a nuevos entornos de hardware y es imposible agregar nuevas funciones a los programas originales según las necesidades del usuario.

5. El software a menudo no está debidamente documentado.

El software no es sólo un programa, sino que también debe contar con un conjunto completo de documentación. Estos materiales de documentación se generan durante el proceso de desarrollo de software y deben estar "actualizados" (exactamente consistentes con el código). La falta de documentación traerá inevitablemente muchas dificultades y problemas graves al desarrollo y mantenimiento del software.

6. La proporción de los costes de software en el coste total de los sistemas informáticos aumenta año tras año.

Con el avance de la tecnología microelectrónica y la mejora de la automatización de la producción, los costos de hardware están disminuyendo año tras año. Sin embargo, el desarrollo de software requiere mucha mano de obra y los costos de software aumentan año tras año con la inflación y la inflación. expansión continua de la escala y el aumento de la cantidad de software. Una encuesta realizada en 1995 en los Estados Unidos mostró que los costos del software representaban aproximadamente el 90% del costo total de los sistemas informáticos.

La aparición de la crisis del software ha hecho que la gente busque las razones internas de la crisis y descubrió que las razones se pueden resumir en dos aspectos: por un lado, es la complejidad de la producción de software en sí. , y por otro lado, está relacionado con el software. Los métodos y tecnologías utilizados en el desarrollo están relacionados.

La ingeniería de software es un concepto propuesto para superar la crisis del software, y sus principios, técnicas y métodos se exploran constantemente en la práctica. En este proceso, la gente estudió y tomó prestados ciertos principios y métodos de la ingeniería y formó una nueva disciplina: la ingeniería de software. Sin embargo, es una lástima que la gente no haya superado completamente la crisis del software hasta el día de hoy.