Cómo desarrollar software
La conocida crisis del software comenzó a mediados de los años 60. Para superar esta crisis, el término ingeniería de software se propuso en las dos famosas reuniones de la OTAN celebradas en 1968 y 1969, y desde entonces se ha desarrollado y mejorado continuamente. Al mismo tiempo, los investigadores de software exploran constantemente nuevos métodos de desarrollo de software. Hasta ahora se han formado ocho categorías de métodos de desarrollo de software.
1. Método de Parnas en 1972
2. Método SASA en 1978
3. Método de desarrollo de software orientado a la estructura de datos (aún ampliamente utilizado en la actualidad).
4. Método de análisis de problemas
5. Método de desarrollo de software orientado a objetos
6. Método de desarrollo visual
1.
El primer método de desarrollo de software fue desarrollado por D. Propuesto por Parnas en 1972. Dado que el software en ese momento tenía serios problemas de mantenibilidad y confiabilidad, el método propuesto por Parnas estaba dirigido a estos dos problemas. Primero, Parnas propuso el principio de ocultación de información: enumerar los factores que pueden cambiar en el futuro al diseñar el esquema y colocar estos factores dentro de módulos individuales al dividir los módulos. De esta manera, cuando sea necesario modificar el software debido a cambios en estos factores en el futuro, solo será necesario modificar estos módulos individuales y otros módulos no se verán afectados. La tecnología de ocultación de información no sólo mejora la capacidad de mantenimiento del software, sino que también evita la propagación de errores y mejora la confiabilidad del software. Actualmente, el principio de ocultación de información se ha convertido en un principio importante en la ingeniería de software.
El segundo principio propuesto por Parnas es tomar medidas para hacer frente a diversos fallos inesperados que pueden ocurrir durante el diseño del software. El software es muy frágil y un pequeño error puede provocar un accidente grave, por lo que se deben tomar precauciones. Por ejemplo, antes de asignar el equipo para su uso, debe tomar la palabra de estado del equipo y verificar si el equipo es normal. Además, se deben reforzar los controles entre módulos para evitar que los errores se propaguen.
Parnas proporciona conocimientos profundos sobre el desarrollo de software. Desafortunadamente, no proporcionó un flujo de trabajo claro. Por lo tanto, este método no se puede utilizar de forma independiente y sólo se puede utilizar como complemento de otros métodos.
2. ?_Método ASA
En 1978, E. Yourdon y L. l. Constantine propuso un método estructurado, el método SASD, que también puede denominarse método de desarrollo de software orientado a funciones o método de desarrollo de software orientado al flujo de datos. En 1979, Tom DeMarco mejoró aún más este método.
El método Yourdon fue el método de desarrollo de software más utilizado en la década de 1980. Primero utiliza el análisis estructurado (SA) para realizar el análisis de requisitos del software, luego utiliza el método de diseño estructurado (SD) para el diseño general y, finalmente, la programación estructurada (SP). Este método no solo tiene pasos de desarrollo claros, SA, SD y SP se complementan entre sí a la vez, sino que también proporciona dos tipos de estructuras de software típicas (tipo de transformación y tipo de transacción) para una fácil referencia, lo que mejora en gran medida la tasa de éxito del desarrollo de software. Y, por lo tanto, a los desarrolladores de software les encanta.
3. Método de desarrollo de software orientado a estructura de datos
Método de Jackson
En 1975, M. A. Jackson propuso una clase de métodos de desarrollo de software que todavía se utilizan ampliamente en la actualidad. Este método comienza con las estructuras de datos de entrada y salida del sistema de destino, deriva la estructura del marco del programa y luego agrega otros detalles para obtener un diagrama completo de la estructura del programa. Este método es particularmente eficaz para sistemas pequeños y medianos con estructuras de datos de entrada y salida claras, como el procesamiento de tablas de archivos en aplicaciones comerciales. Este método también se puede combinar con otros métodos para el diseño detallado de módulos.
El método Jackson a veces también se denomina método de diseño de software orientado a estructuras de datos.
Método de Warner
En 1974, J. D. El método de desarrollo de software propuesto por Warnier es similar al método Jackson.
Hay tres diferencias: una es que usan diferentes herramientas gráficas, usando diagramas de Warnier y diagramas de Jackson respectivamente, la otra diferencia es que usan pseudocódigos diferentes, la diferencia más importante es que al construir el marco del programa; , El método de Warnier solo considera la estructura de datos de entrada, mientras que el método de Jackson considera no solo la estructura de datos de entrada sino también la estructura de datos de salida.
4. Método de análisis de problemas
Método de análisis de problemas PAM. PAM() es un método de desarrollo de software propuesto por Hitachi a finales de los años 1980.
El método PAM espera tener en cuenta las ventajas del método Yourdon, el método Jackson y el método de desarrollo de software ascendente, evitando al mismo tiempo sus deficiencias. Su idea básica es tener en cuenta las estructuras de datos de entrada y salida, guiar la descomposición del sistema y sintetizarlo gradualmente bajo la guía del análisis del sistema. Los pasos específicos de este método son: derivar cuadros de procesamiento básicos a partir de las estructuras de datos de entrada y salida; analizar la relación secuencial entre estos cuadros de procesamiento; integrar gradualmente los cuadros de procesamiento de acuerdo con la relación secuencial hasta que se dibuje el diagrama PAD de todo el sistema. De los pasos anteriores se puede ver que este método es esencialmente un método ascendente integral, pero se ha descompuesto intencionalmente antes de la síntesis gradual. Este propósito es considerar completamente las estructuras de datos de entrada y salida del sistema.
Otra ventaja del método PAM es el uso de diagramas PAD. Este es un diagrama de estructura de árbol bidimensional, que es, con diferencia, uno de los mejores métodos de representación de diseño detallado, muy superior a los diagramas NS y los lenguajes PDL.
Este método es más popular en Japón y la tasa de éxito en el desarrollo de software también es muy alta. Dado que también existe una brecha entre las estructuras de datos de entrada y salida y todo el sistema, este enfoque solo es adecuado para problemas pequeños y medianos.
5. Método de desarrollo de software orientado a objetos
La tecnología orientada a objetos es una revolución en la tecnología del software y un hito en la historia del desarrollo de software.
Con el desarrollo de OOP (Programación Orientada a Objetos) a OOD (Diseño Orientado a Objetos) y OOA (Análisis Orientado a Objetos), finalmente se formó el método de desarrollo de software orientado a objetos OMT(). Este es un método que combina de abajo hacia arriba y de arriba hacia abajo, y se basa en el modelado de objetos, que no solo considera las estructuras de datos de entrada y salida, sino que también incluye las estructuras de datos de todos los objetos. Por lo tanto, OMT ha logrado por completo los objetivos que PAM no ha logrado por completo. No solo eso, la tecnología OO ha logrado avances sustanciales en los tres eslabones clave e indicadores de calidad del desarrollo de software: análisis de demanda, mantenibilidad y confiabilidad, resolviendo por completo problemas graves en estos aspectos, declarando así que el software se acerca el fin de la crisis.
Inducción ascendente
El primer paso de OMT es comenzar con el planteamiento del problema y construir un modelo de sistema. El sistema de clases se deriva del sistema real, es decir, el modelo de objetos incluye los atributos de la clase, la relación de herencia con subclases y clases principales, y las asociaciones entre clases. Una clase es una abstracción de un grupo de instancias concretas (objetos objetivos) con atributos y comportamientos similares, y una clase principal es el resumen de varias subclases. Se trata entonces de un proceso inductivo ascendente. En el proceso de inducción ascendente, para que la subclase herede de manera más razonable los atributos y comportamientos de la clase principal, es posible que se necesiten modificaciones de arriba hacia abajo para hacer que todo el sistema de clases sea más razonable. Dado que la estructura de este tipo de sistema va de lo concreto a lo abstracto y luego de lo abstracto a lo concreto, se ajusta a las leyes del pensamiento humano, por lo que puede completar las tareas de manera más rápida y conveniente. Esto contrasta marcadamente con el enfoque verticalista de Yourdon. Construir el modelo del sistema con el método Yourdon es el paso más difícil, porque la "arriba" de arriba hacia abajo es un castillo en el aire, que carece de una base sólida y la descomposición funcional es bastante arbitraria, por lo que los desarrolladores deben tener un software rico. experiencia en desarrollo. En OMT, los desarrolladores generales pueden completar este trabajo con relativa rapidez. Una vez establecido el modelo de objetos, es fácil derivar el modelo dinámico y el modelo funcional sobre esta base. Juntos, estos tres modelos forman el modelo del sistema a resolver.
Descomposición de arriba hacia abajo
El trabajo posterior a establecer el modelo del sistema es la descomposición. A diferencia del método Yourdon, que se descompone por función, OMT normalmente se descompone por servicio.
Un servicio es una colección de funciones relacionadas con el mismo objetivo, como procesamiento de E/S, procesamiento de gráficos, etc. La descomposición en este paso suele ser muy clara y una mayor descomposición de estos subsistemas es relativamente fácil porque se basa en un modelo de sistema más específico. Por lo tanto, OMT también tiene las ventajas del método de arriba hacia abajo, es decir, puede controlar eficazmente la complejidad del módulo y al mismo tiempo evitar la dificultad y la incertidumbre de la descomposición funcional en el método Yourdon.
La base de OMT es el modelo de objetos
Cada clase de objeto se compone de una estructura de datos (propiedad) y una operación (comportamiento), y todas las estructuras de datos relacionadas (incluidos los datos de entrada y salida). estructuras) Todos se han convertido en la base para el desarrollo de software. Por lo tanto, la brecha entre las estructuras de datos de entrada y salida y todo el sistema en el método Jackson y PAM ya no existe en OMT. OMT no sólo tiene las ventajas del método Jackson y PAM, sino que también puede aplicarse a sistemas grandes. Más importante aún, en el método Jackson y el método PAM, cuando las estructuras de datos de entrada y salida de su punto de partida (es decir, los límites del sistema) cambian, todo el software debe anularse y reiniciarse. Sin embargo, en OMT, los cambios en los límites del sistema son solo la suma o resta de algunos objetos, y los cambios en todo el sistema son mínimos.
Análisis exhaustivo de requisitos
El análisis de requisitos incompleto es una de las principales razones del fallo del software. Incluso ahora, este peligro persiste. Los métodos tradicionales de desarrollo de software no permiten que las necesidades de los usuarios cambien durante el proceso de desarrollo, lo que genera varios problemas. Es por esta razón que la gente ha propuesto métodos de creación de prototipos, ha lanzado prototipos de exploración, prototipos experimentales y prototipos evolutivos, y ha alentado activamente a los usuarios a mejorar sus necesidades. Después de cada requisito de mejora, se forma un nuevo prototipo evolutivo para que los usuarios lo prueben hasta que estén básicamente satisfechos, lo que mejora en gran medida la tasa de éxito del software. Pero requiere que los desarrolladores de software generen rápidamente estos prototipos, lo que requiere el soporte de herramientas que generen código automáticamente.
OMT soluciona completamente este problema. Debido a que el proceso de análisis de requisitos ha sido consistente con el proceso de formación del modelo del sistema, las discusiones entre desarrolladores y usuarios comienzan con instancias (entidades) específicas que son familiares para los usuarios. Los desarrolladores deben comprender el sistema real antes de poder derivar el modelo del sistema. Esto permite a los usuarios y desarrolladores tener el mismo lenguaje y evita varios problemas que pueden surgir en el análisis de requisitos tradicional.
La mantenibilidad ha mejorado enormemente
Los métodos de desarrollo de software antes de que OMT se basaran en la descomposición funcional. Aunque la ingeniería de software ha hecho grandes esfuerzos en materia de mantenibilidad, la mantenibilidad del software ha mejorado enormemente. Pero, en esencia, el software basado en descomposición funcional no es fácil de mantener. Porque una vez que cambian las funciones, el sistema de software desarrollado sufrirá cambios importantes, o incluso será anulado y comenzado de nuevo. Lo que es más grave es que en este tipo de sistema de software la modificación es difícil. Por diversas razones, incluso las modificaciones menores pueden introducir nuevos errores. Por lo tanto, es probable que los métodos de desarrollo tradicionales causen una serie de problemas graves, como un crecimiento descontrolado de los costos del software y la incapacidad de garantizar la calidad del software. Es OMT el que ha mejorado cualitativamente la mantenibilidad del software.
La base de OMT es el modelo de objetos del sistema objetivo, más que la descomposición de funciones. La funcionalidad es el uso de un objeto, que depende de los detalles de la aplicación y de los cambios durante el desarrollo. Dado que los objetos existen objetivamente, la naturaleza del objeto es más estable que el uso del objeto cuando los requisitos cambian, lo que hace que el sistema de software basado en la estructura del objeto sea más estable.
Más importante aún, OMT resuelve por completo la mantenibilidad del software. En los lenguajes OO, las subclases no solo pueden heredar los atributos y comportamientos de la clase principal, sino también sobrecargar ciertos comportamientos (funciones virtuales) de la clase principal. Aprovechando esta característica, podemos modificar funciones fácilmente: introducir una subclase de una determinada clase y sobrecargar algunos comportamientos para modificar (es decir, funciones virtuales o métodos virtuales), es decir, redefinirlos. Dado que ya no se introducen modificaciones en los módulos del programa original, la modificabilidad del software está completamente resuelta y la mantenibilidad del software también está completamente resuelta. La tecnología OO también mejora la confiabilidad y solidez del software.
6. Métodos de desarrollo visual
El desarrollo visual fue uno de los dos puntos más importantes de la industria del software en la década de 1990.
Con el auge de las interfaces gráficas de usuario, la proporción de interfaces de usuario en los sistemas de software también está aumentando, algunas incluso hasta entre el 60 y el 70%. La razón de este problema es que la generación de elementos de la interfaz gráfica
es muy inconveniente. Para ello, Windows proporciona la API de interfaz de programación de aplicaciones (Interfaz de programación de aplicaciones), que contiene más de 600 funciones, lo que facilita enormemente el desarrollo de interfaces gráficas de usuario. Sin embargo, en este lote de funciones, una gran cantidad de parámetros de función y una mayor cantidad de constantes relacionadas hacen que el desarrollo basado en la API de Windows sea muy difícil. Con este fin, Borland C introdujo la programación de objetos en Windows. Encapsula varias partes de la API con clases de objetos, proporciona una gran cantidad de clases predefinidas y define muchas funciones miembro para ellas. Al utilizar la herencia de subclases de las clases principales y la referencia de instancias a funciones de clase, el desarrollo de aplicaciones puede guardar una gran cantidad de definiciones de clases, guardar una gran cantidad de definiciones de funciones miembro o solo requerir una pequeña cantidad de modificaciones para definir subclases.
Object Windows también proporciona muchos procesamientos estándar predeterminados, lo que reduce en gran medida la carga de trabajo del desarrollo de aplicaciones. Pero dominarlos sigue siendo una pesada carga para los no profesionales. Por esta razón, la gente ha desarrollado una serie de herramientas de desarrollo visual utilizando la API de Windows o Object Windows de Borland C.
El desarrollo visual se basa en la interfaz gráfica de usuario proporcionada por las herramientas de desarrollo visual, a través de elementos de la interfaz operativa, como menús, botones, cuadros de diálogo, cuadros de edición, cuadros de radio, casillas de verificación, cuadros de lista y artículos de desplazamiento. , etc., generan automáticamente software de aplicación mediante herramientas de desarrollo visual.
Este tipo de software de aplicación funciona de forma basada en eventos. Para cada evento, el sistema genera un mensaje correspondiente y luego lo pasa a la función de respuesta de mensaje correspondiente. Estas funciones de respuesta a mensajes se cargan automáticamente mediante herramientas de desarrollo visual al generar software