Haga algunas preguntas sobre ingeniería de software~~¿Quién puede explicármelo?
La Ingeniería del Software (SE) es una disciplina que estudia el uso de métodos de ingeniería para construir y mantener software eficaz, práctico y de alta calidad. Implica lenguajes de programación, bases de datos, herramientas de desarrollo de software, plataformas de sistemas, estándares, patrones de diseño, etc.
En la sociedad moderna, el software se utiliza en muchos aspectos. El software típico incluye correo electrónico, sistemas integrados, interfaces hombre-computadora, suites ofimáticas, sistemas operativos, compiladores, bases de datos, juegos, etc. Al mismo tiempo, el software informático se utiliza en casi todas las industrias, como la industria, la agricultura, la banca, la aviación, los departamentos gubernamentales, etc. Estas aplicaciones promueven el desarrollo económico y social, hacen más eficiente el trabajo de las personas y mejoran la calidad de vida.
Los ingenieros de software son un término general para las personas que aplican software para crear software. Los ingenieros de software se pueden dividir en analistas de sistemas, diseñadores de software, arquitectos de sistemas, programadores, evaluadores, etc. La gente suele utilizar programadores para referirse a varios ingenieros de software.
El marco de la Ingeniería del Software (Ingeniería de Software) se puede resumir en: objetivos, procesos y principios.
(1) Objetivos de la ingeniería de software: producir productos que sean correctos, utilizables y asequibles. La corrección se refiere al grado en que un producto de software logra la funcionalidad prevista. La usabilidad se refiere al grado en que la estructura básica, la implementación y la documentación del software están disponibles para los usuarios. El costo apropiado se refiere a la medida en que el costo total del desarrollo y operación del software cumple con los requisitos del usuario. Hay muchos problemas que resolver en la realización de estos objetivos, tanto en la teoría como en la práctica, lo que limita la selección de procesos, modelos de procesos y métodos de ingeniería.
(2) Proceso de ingeniería de software: los pasos necesarios para producir un producto de software que en última instancia pueda satisfacer las necesidades y alcanzar los objetivos de ingeniería. El proceso de ingeniería de software incluye principalmente el proceso de desarrollo, el proceso de operación y el proceso de mantenimiento. Cubren actividades tales como requisitos, diseño, implementación, validación y mantenimiento. Las actividades de requisitos incluyen análisis de problemas y análisis de requisitos. El análisis de problemas obtiene definiciones de requisitos, también conocidas como especificaciones de requisitos de software. El análisis de requisitos genera especificaciones funcionales. Las actividades de diseño generalmente incluyen diseño de esquema y diseño detallado. El diseño general establece toda la estructura del sistema de software, incluidas descripciones de subsistemas, módulos y niveles relacionados, y definiciones de interfaz para cada módulo. El diseño detallado produce descripciones de módulos que pueden ser utilizadas por los programadores, incluidas descripciones de estructuras de datos y descripciones de procesamiento en cada módulo. Las actividades de implementación convierten los resultados del diseño en código de programa ejecutable. Las actividades de confirmación se ejecutan a lo largo de todo el proceso de desarrollo para lograr una confirmación posterior a la finalización para garantizar que el producto final cumpla con los requisitos del usuario. Las actividades de mantenimiento incluyen ampliación, modificación y mejora durante el uso. Junto al proceso anterior, también existen procesos de gestión, procesos de soporte, procesos de formación, etc.
(3) Los principios de la ingeniería de software se refieren a los principios que se deben seguir durante el proceso de desarrollo de software en torno al diseño de ingeniería, el soporte de ingeniería y la gestión de ingeniería.
1. Descripción general de la Ingeniería de Software
Concepto: Nace como respuesta a las necesidades
La ingeniería de software es un tipo de ingeniería. La ingeniería es la ciencia de aplicar la teoría y el conocimiento a la práctica. En lo que respecta a la ingeniería de software, se basa en los principios y métodos de la ingeniería tradicional para desarrollar software de alta calidad de manera eficiente. En él se aplican la informática, las matemáticas y las ciencias de la gestión. La informática y las matemáticas se utilizan para construir modelos y algoritmos, la ingeniería se utiliza para desarrollar especificaciones, diseñar paradigmas, evaluar costos y determinar compensaciones, y la ciencia de la gestión se utiliza para gestionar planes, recursos, calidad y costos.
El concepto de ingeniería de software se propuso principalmente como respuesta a la "crisis del software" de la década de 1960. Apareció por primera vez en la reunión de la OTAN (Organización del Tratado del Atlántico Norte) de 1968. Desde que se propuso este concepto, se han llevado a cabo investigaciones sobre modelos, métodos y herramientas de soporte de desarrollo en torno a proyectos de software. Sus principales logros incluyen: proponer el modelo en cascada, desarrollar algunos lenguajes de programación estructurados (como el lenguaje PASCAL, el lenguaje Ada), métodos estructurados, etc. También propuso métodos y herramientas como la estimación de costos y la revisión de documentos en torno a la gestión de proyectos. Si observamos el período comprendido entre finales de los años 1960 y principios de los 1980, la característica principal es que la etapa inicial se centró en el estudio de la tecnología de implementación del sistema, y la etapa posterior comenzó a enfatizar la gestión del desarrollo y la calidad del software.
Desde que se propuso el concepto de "fábrica de software" a principios de la década de 1970, la investigación y la práctica sobre la tecnología de producción de software y la gestión de la producción de software se han llevado a cabo principalmente en torno a los procesos y la reutilización del software. Sus principales logros incluyen: proponer lenguajes orientados a objetos ampliamente utilizados y métodos orientados a objetos relacionados, y llevar a cabo enérgicamente la investigación y la práctica de la ingeniería de software asistida por computadora. Especialmente en los últimos años, la tecnología de componentes de software, la tecnología de control de calidad del software y la tecnología de garantía de calidad se han utilizado ampliamente para la reutilización y producción de software. En la actualidad, todas las empresas de software conceden gran importancia a la certificación de cualificaciones y quieren mejorar la gestión corporativa y la tecnología a través de estas tareas. Los elementos involucrados en la ingeniería de software se pueden resumir de la siguiente manera:
Según este marco, se puede ver que la ingeniería de software involucra los objetivos de la ingeniería de software, los principios de la ingeniería de software y las actividades de la ingeniería de software.
Objetivo: solo veo "producto"
El objetivo principal de la ingeniería de software es producir productos que sean correctos, utilizables y asequibles. La corrección se refiere al grado en que un producto de software funciona según lo previsto. La usabilidad se refiere al grado en que la estructura básica, la implementación y la documentación del software están disponibles para los usuarios. La adecuación de los costos se refiere a la medida en que el costo total del desarrollo y operación del software cumple con los requisitos del usuario. Hay muchos problemas que resolver en la realización de estos objetivos, tanto en la teoría como en la práctica, lo que limita la selección de procesos, modelos de procesos y métodos de ingeniería.
Las actividades de ingeniería de software son "los pasos necesarios para producir un producto de software que en última instancia cumpla con los requisitos y alcance los objetivos de ingeniería". Incluye principalmente actividades como requisitos, diseño, implementación, confirmación y soporte. Las actividades de requisitos incluyen análisis de problemas y análisis de requisitos. El análisis de problemas obtiene definiciones de requisitos, también conocidas como especificaciones de requisitos de software. El análisis de requisitos genera especificaciones funcionales. Las actividades de diseño generalmente incluyen diseño de esquema y diseño detallado. El diseño general establece toda la arquitectura del software, incluidas descripciones de subsistemas, módulos y niveles relacionados, y definiciones de interfaz para cada módulo. El diseño detallado produce descripciones de módulos que pueden ser utilizadas por los programadores, incluidas descripciones de estructuras de datos y descripciones de procesamiento en cada módulo. Las actividades de implementación convierten los resultados del diseño en código de programa ejecutable. Las actividades de confirmación se ejecutan a lo largo de todo el proceso de desarrollo para lograr una confirmación posterior a la finalización para garantizar que el producto final cumpla con los requisitos del usuario. Las actividades de soporte incluyen revisión y refinamiento. Junto a las actividades anteriores, también existen procesos de gestión, procesos de apoyo, procesos de formación, etc.
Marco: Cuatro principios básicos son la piedra angular
La ingeniería de software presenta los siguientes cuatro principios básicos en torno al diseño de ingeniería, el soporte de ingeniería y la gestión de ingeniería:
Capítulo 1 1. Seleccionar un paradigma de desarrollo adecuado. Este principio es relevante para el diseño de sistemas. En el diseño de sistemas, los requisitos de software, los requisitos de hardware y otros factores son mutuamente restrictivos y se afectan entre sí, y a menudo requieren compensaciones. Por lo tanto, es necesario reconocer la variabilidad en la definición de requisitos y utilizar paradigmas de desarrollo apropiados para controlarla y garantizar que los productos de software cumplan con los requisitos del usuario.
En segundo lugar, adoptar métodos de diseño adecuados. En el diseño de software, normalmente es necesario considerar las características del software como la modularidad, la abstracción y el ocultamiento de información, la localización, la coherencia y la adaptabilidad. Los métodos de diseño apropiados facilitan la implementación de estas características para lograr los objetivos de la ingeniería de software.
En tercer lugar, proporcionar soporte de ingeniería de alta calidad. "Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." En ingeniería de software, las herramientas y entornos de software son muy importantes para respaldar el proceso de software. La calidad y el costo de un proyecto de ingeniería de software dependen directamente de la calidad y eficacia del soporte brindado al proyecto de ingeniería de software.
En cuarto lugar, preste atención a la gestión del proceso de desarrollo. La gestión de la ingeniería de software afecta directamente la utilización efectiva de los recursos disponibles, la producción de productos de software que cumplan con los objetivos y la mejora de la capacidad de producción de las organizaciones de software. Por lo tanto, una ingeniería de software eficaz sólo se puede lograr cuando el proceso de software se gestiona de forma eficaz.
Este marco de trabajo de la ingeniería de software nos dice que los objetivos de la ingeniería de software son la usabilidad, la corrección y la rentabilidad; para implementar un proyecto de software, debemos seleccionar un paradigma de desarrollo apropiado, adoptar métodos de diseño adecuados y proporcionar un alto nivel de calidad. -calidad El soporte de ingeniería de calidad requiere una gestión eficaz del proceso de desarrollo. Las actividades de ingeniería de software incluyen principalmente requisitos, diseño, implementación, confirmación y soporte. Cada actividad puede adoptar paradigmas de desarrollo, métodos de diseño, procesos de soporte y gestión de procesos adecuados.
Según el marco de la ingeniería de software, el contenido de investigación de la disciplina de ingeniería de software incluye principalmente: paradigmas de desarrollo de software, métodos de desarrollo de software, procesos de software, herramientas de software, entornos de desarrollo de software, ingeniería de software asistida por computadora (CASE) y economía del software.
Función: Desarrollar software de alta calidad de manera eficiente
Después de más de 30 años de investigación y práctica desde que se propuso el concepto de ingeniería de software, aunque la "crisis del software" no ha sido completamente resuelto, en el desarrollo de software se han producido grandes avances en métodos y tecnología. En particular, cabe señalar que desde mediados de la década de 1980, la industria estadounidense y los departamentos gubernamentales han comenzado a darse cuenta de que en el desarrollo de software, el problema más crítico es que las organizaciones de desarrollo de software no pueden definir y gestionar bien sus procesos de software, lo que dificulta algunos bueno Ni los métodos ni las tecnologías de desarrollo tienen el efecto deseado. En otras palabras, en el desarrollo de software sin procesos de software bien definidos y gestionados, es poco probable que la organización de desarrollo se beneficie de buenos métodos y herramientas de software.
Según la encuesta, la situación actual en China es casi la misma que la de Estados Unidos hace más de 10 años. El proceso de desarrollo de software no está claramente definido y la documentación está incompleta y no estandarizada. El éxito de los proyectos de software a menudo se atribuye a algunas personas del equipo de desarrollo de software. Esta confianza en el éxito del personal individual no puede sentar una base efectiva para mejorar la productividad y la calidad del software de toda la organización. Solo se puede lograr estableciendo una mejora de los procesos en toda la organización, adoptando métodos y gestión estrictos de ingeniería de software y persistiendo en implementarlos. ponerlo en práctica. Sólo a través de la práctica podemos lograr una mejora continua en las capacidades de los procesos de software de toda la organización.
Este hecho nos dice que sólo adhiriéndose a los cuatro principios básicos de la ingeniería de software, enfatizando tanto la aplicación de la tecnología de software como el soporte y la gestión de la ingeniería de software, e implementándolos en la práctica, podemos desarrollar eficientemente Software de alta calidad.
2. Siete principios básicos de la ingeniería de software
Desde que se propuso el término "ingeniería de software" en 1968, los expertos y académicos que estudian la ingeniería de software han propuesto sucesivamente más de 100 principios sobre el software. Los principios o credo de la ingeniería. Boehm, un conocido experto estadounidense en ingeniería de software, combinó las opiniones de estos expertos y resumió los muchos años de experiencia de TRW en el desarrollo de software, y propuso siete principios básicos de la ingeniería de software en 1983.
Boehm cree que los siete principios son el conjunto mínimo de principios para garantizar la calidad del producto de software y la eficiencia del desarrollo.
Son independientes entre sí y son conjuntos mínimos indispensables, al mismo tiempo que son bastante completos.
Por supuesto, las personas no pueden usar métodos matemáticos para demostrar estrictamente que son un conjunto completo, pero se puede demostrar que más de 100 principios de ingeniería de software que se han propuesto antes pueden implicarse o derivarse de cualquier combinación. de estos siete principios.
La siguiente es una breve introducción a los siete principios de la ingeniería de software:
1 Gestión estricta con un plan de ciclo de vida por fases
Este artículo se propone en base a salieron a la luz las lecciones aprendidas de las generaciones anteriores. Las estadísticas muestran que más del 50% de los proyectos fallidos se deben a una mala planificación. En el largo ciclo de vida del desarrollo y mantenimiento de software, es necesario completar muchas tareas de diferente naturaleza. Este principio significa que el ciclo de vida del software debe dividirse en varias etapas, formular planes prácticos en consecuencia y luego gestionar el desarrollo y mantenimiento del software estrictamente de acuerdo con el plan. Boehm cree que se deben especificar e implementar estrictamente seis tipos de planes a lo largo del ciclo de vida del software: plan de esquema del proyecto, plan de hitos, plan de control del proyecto, plan de control del producto, plan de verificación y plan de operación y mantenimiento.
2 Insista en las revisiones en el escenario
Los resultados estadísticos muestran: la mayoría de los errores se producen antes de la codificación, lo que representa alrededor del 63% <2> Cuanto más tarde se descubre el error, más fácil es; para corregirlo Cuanto mayor sea el precio que tengas que pagar, la diferencia es de 2 a 3 órdenes de magnitud. Por lo tanto, el control de calidad del software no puede esperar hasta que se complete la codificación. Se deben realizar revisiones estrictas de las etapas para detectar errores lo antes posible.
3 Implementar un control estricto del producto
Una de las cosas que más odian los desarrolladores son los requisitos de cambio. Pero la práctica nos dice que los cambios en los requisitos suelen ser inevitables. Esto requiere que adoptemos tecnología científica de control de productos para cumplir con este requisito. Es decir, utilizar el control de cambios, también llamado gestión de configuración básica.
Cuando los requisitos cambian, los documentos o códigos de otras etapas cambiarán en consecuencia para garantizar la coherencia del software.
4 Adoptar tecnología de programación moderna
Desde la tecnología de desarrollo de software estructurado de las décadas de 1960 y 1970 hasta la reciente tecnología orientada a objetos, desde los lenguajes de primera y segunda generación hasta En el En la cuarta generación de lenguajes, la gente se ha dado cuenta plenamente de que el método es tan poderoso como la fuerza. El uso de tecnología avanzada no solo puede mejorar la eficiencia del desarrollo de software, sino también reducir el costo de mantenimiento del software.
5 Los resultados deben ser claramente revisables.
El software es un producto lógico invisible e intangible. El progreso del trabajo del equipo de desarrollo de software tiene poca visibilidad y es difícil de evaluar y gestionar. Para una mejor gestión, las responsabilidades y los estándares de producto del equipo de desarrollo deben definirse lo más claramente posible de acuerdo con los objetivos generales y los plazos de finalización del desarrollo de software, de modo que los estándares resultantes puedan revisarse claramente.
6 El número de personas en el equipo de desarrollo debe ser pequeño pero refinado.
La calidad y cantidad de desarrolladores son factores importantes que afectan la calidad del software y la eficiencia del desarrollo, y deben ser pequeños pero refinados. .
Esto se debe a dos razones: la eficiencia de los desarrolladores de alta calidad es de varias a docenas de veces mayor que la de los desarrolladores de baja calidad, y se cometen muchos menos errores en el trabajo de desarrollo cuando se desarrolla; el grupo está formado por N personas, los posibles canales de comunicación son N (N-1)/2. Se puede ver que a medida que aumenta el número de personas N, la sobrecarga de comunicación aumentará considerablemente.
7 Reconozca la necesidad de mejorar continuamente las prácticas de ingeniería de software.
Si sigue los seis principios básicos anteriores, podrá lograr mejor la producción de ingeniería de software. Sin embargo, son sólo un resumen y una inducción de la experiencia existente y no pueden garantizar que se mantendrán al día con el ritmo del avance y desarrollo continuo de la tecnología. Por lo tanto, Boehm propuso que el reconocimiento de la necesidad de mejorar continuamente las prácticas de ingeniería de software debería considerarse como el séptimo principio de la ingeniería de software. De acuerdo con este principio, no solo debemos adoptar activamente nuevas tecnologías de desarrollo de software, sino que también debemos prestar atención a resumir constantemente la experiencia, recopilar datos como el progreso y el consumo, y hacer estadísticas sobre tipos de errores e informes de problemas. Estos datos se pueden utilizar tanto para evaluar la eficacia de nuevas tecnologías de software como para identificar cuestiones en las que se debe centrar la atención y herramientas y tecnologías a las que se debe dar prioridad para la investigación.
La Programación Orientada a Aspectos (AOP) se considera otro avance importante en la ingeniería de software de los últimos años. Aspecto aquí se refiere a una colección de objetos y funciones que completan una función. Los temas relacionados en esta área incluyen programación genérica y plantillas.
Referencia
Hu Kunshan, "Estado de desarrollo actual y demanda de talento de la industria de software de China", 1 de septiembre de 2003, /pub/article/c372_a62973_p1.html
3. Los objetivos y los modelos comúnmente utilizados de la ingeniería de software
El objetivo de la ingeniería de software es mejorar la calidad y la productividad del software y, en última instancia, realizar la producción industrial de software. La calidad es la mayor preocupación de los demandantes de software. Incluso si los usuarios no buscan alta calidad y bajo precio, siguen demandando productos genuinos. La productividad es la mayor preocupación de los proveedores de software. Tanto los jefes como los empleados quieren ganar más dinero en menos tiempo. Existe una conexión inherente entre calidad y productividad, y la alta productividad debe basarse en una calidad calificada. Si la calidad no está a la altura, será malo tanto para la oferta como para la demanda. Desde la perspectiva de los beneficios a corto plazo, la búsqueda de alta calidad extenderá el tiempo de desarrollo de software y aumentará los costos, lo que parece reducir la productividad. Desde la perspectiva de los beneficios a largo plazo, la alta calidad garantizará que todo el proceso de desarrollo de software sea más estandarizado y fluido, lo que reducirá en gran medida el costo de mantenimiento del software, esencialmente mejorará la productividad y ganará una buena reputación. No existe una oposición fundamental entre calidad y productividad. Los buenos métodos de ingeniería de software pueden mejorar tanto la calidad como la productividad.
Los representantes de la oferta y la demanda de software pueden charlar y reírse en la mesa gracias al arduo trabajo de los desarrolladores de primera línea. Las mejoras en la calidad y la productividad dependen de los programadores y directores de programas. Para los desarrolladores, si tienen que priorizar entre calidad y productividad, entonces la calidad debería ser lo primero y la productividad lo segundo. Esto se debe a que: (1) La calidad se refleja directamente en cada programa del software. La alta calidad es naturalmente la búsqueda técnica de los desarrolladores y el requisito de la ética profesional.
(2) La alta calidad es valiosa para todos los usuarios, mientras que la alta productividad sólo tiene significado para los desarrolladores. (3) Si busca una alta productividad desde el principio, fácilmente hará que las personas estén ansiosas por lograr un éxito rápido y dejarán peligros ocultos. Sería mejor avanzar a un ritmo más lento, pero garantizando la calidad de cada vínculo en aras de beneficios a largo plazo.
Existen muchos factores de calidad para el software, como la corrección, el rendimiento, la confiabilidad, la tolerancia a fallas, la facilidad de uso, la flexibilidad, la escalabilidad, la comprensibilidad, la mantenibilidad, etc. Algunos factores se superponen y otros entran en conflicto entre sí. ¡No es fácil mejorar la calidad!
Los principales eslabones de la ingeniería de software son: gestión de personal, gestión de proyectos, análisis de viabilidad y requisitos, diseño de sistemas, diseño de programas, pruebas, mantenimiento, etc., como se muestra en la Figura 1.1.
El modelo de ingeniería de software recomienda utilizar un proceso determinado para conectar todos los enlaces y operar todo el proceso de manera estandarizada, como una línea de producción de fábrica. Los modelos comunes de ingeniería de software incluyen: modelo lineal (Figura 1.2), modelo incremental (Figura 1.3), modelo en espiral, modelo de prototipo rápido, modelo de descripción formal, etc. [Pressmam 1999, Sommerville 1992].
El primer modelo de ingeniería de software fue el modelo lineal (también conocido como modelo en cascada). El modelo lineal es demasiado idealista y simple, ya no es adecuado para el modelo de desarrollo de software moderno y casi ha sido abandonado por la industria. Mencionado ocasionalmente por otros, se considera objeto de derogación y no queda ningún rastro de arrepentimiento. Pero debemos darnos cuenta de que "lineal" es la forma más fácil para que las personas lo dominen y lo apliquen con habilidad. Cuando las personas se encuentran con un problema complejo "no lineal", siempre hacen todo lo posible para descomponerlo o transformarlo en una serie de problemas lineales simples y luego resolverlos uno por uno. Un sistema de software en su conjunto puede ser complejo, pero una única subrutina siempre es simple y puede implementarse de manera lineal; de lo contrario, el trabajo será demasiado agotador. La linealidad es una especie de simplicidad y la simplicidad es belleza. Cuando comprendamos el espíritu de la linealidad, ya no deberíamos aplicar rígidamente la apariencia del modelo lineal, sino que deberíamos hacer uso de él. Por ejemplo, el modelo incremental es esencialmente un modelo lineal por partes, como se muestra en la Figura 1.3. El modelo en espiral es una serie de modelos lineales curvos. Se pueden encontrar sombras de modelos lineales en otros modelos.
Aplicar un modelo fijo no es una decisión inteligente para los programadores. Por ejemplo, en la relación entre "programación" y "pruebas", se acostumbra pensar que la programación es lo primero y las pruebas lo último, como se muestra en la Figura 1.4(a). Para algunos programas complejos, es más eficaz dividir las pruebas en pruebas sincrónicas y pruebas totales, como se muestra en la Figura 1.4(b).
No importa qué modelo de ingeniería de software sea, los diversos enlaces de la Figura 1.1 siempre son indispensables. Este libro desglosa modelos específicos de ingeniería de software y describe secuencialmente la gestión de personal, la gestión de proyectos, el análisis de viabilidad y requisitos, el diseño de sistemas, el diseño de programas, las pruebas y la ingeniería de mantenimiento y regeneración. La parte de programación toma como ejemplo el lenguaje C++/C.
4. Selección de arquitectura y herramientas de software
La arquitectura de software representa la estructura de alto nivel de un sistema de software. Las características principales son: 1) La estructura del sistema de software es de alto nivel. nivel Abstracción, no involucra la estructura específica del sistema (como B / S o C / S), ni le importa la implementación específica. 2) La arquitectura del software debe soportar las funciones requeridas por el sistema. Al diseñar la arquitectura del software, se debe considerar el comportamiento dinámico del sistema. 3) Al diseñar la arquitectura del software, se debe considerar la compatibilidad, seguridad y confiabilidad del sistema existente. Al mismo tiempo, también se debe considerar la escalabilidad futura y la escalabilidad del sistema. Por eso, a veces se deben tomar decisiones entre múltiples objetivos en diferentes direcciones.
Ya existen algunas arquitecturas de software estandarizadas, como el modelo de interconexión de sistemas abiertos ISO, el sistema X Window, etc. La estructura de un sistema de software generalmente se define como dos partes: una es el componente informático. La otra es la interacción entre componentes. Si el sistema de software se ve como una imagen, los componentes informáticos son los nodos y las interacciones entre los componentes son los arcos entre los nodos. La conexión entre componentes se puede considerar como un conector, como llamadas a procedimientos, transmisiones de eventos, consultas de bases de datos, etc. El diseño arquitectónico correcto es la clave del éxito de los sistemas de software.
Una vez que entendemos la importancia de la ingeniería de software, no contamos con las herramientas correspondientes y nos resulta difícil completar bien un sistema.
¿Qué tipo de herramientas necesitamos durante las etapas de análisis y diseño de requisitos?
Por supuesto, lo mejor es una herramienta CASE basada en UML. El más popular actualmente es Rose, que es una buena herramienta para analizar y establecer objetos y relaciones entre objetos. Cuando codificamos específicamente, necesitamos herramientas de control de versiones. SourceSafe de MS es una buena herramienta de gestión de versiones y de proyectos. Por supuesto, hay muchas herramientas de desarrollo específicas, pero si eres un programador que ha estado usando VC durante muchos años, definitivamente la elegirás porque te hará sentir lo que es la verdadera programación orientada a objetos y estás usando VB. PowerBuilder, Delphi rara vez tiene el mismo sentimiento. En cuanto a la construcción del esquema de la base de datos, siempre he usado S-Design de Sybase. No conozco una herramienta mejor.
Otra cosa a tener en cuenta es que necesitamos establecer varias plantillas para la redacción de documentos para que los desarrolladores puedan escribir documentos técnicos y de documentación estandarizados de acuerdo con esta plantilla. Los documentos de ayuda se pueden producir utilizando HTML Help Workshop de Microsoft (hhw.exe), o se pueden compilar en formato .chm, que empaqueta texto y gráficos en un solo archivo, lo que facilita su uso y distribución. Finalmente, si los desarrolladores no están concentrados en un solo lugar, es mejor establecer una lista de correo. Los desarrolladores pueden discutir diversos temas de desarrollo a través del sistema de correo.
5. Descripción general de los métodos de desarrollo de software
Las grandes empresas e instituciones de software extranjeras han estado estudiando el aspecto conceptual de los métodos de desarrollo de software y también han propuesto muchos métodos de desarrollo prácticos, tales como: Método del ciclo de vida, método de creación de prototipos, método orientado a objetos, etc. A continuación se presentan varios métodos de desarrollo populares:
1. Método estructurado
El método de desarrollo estructurado fue propuesto por E.Yourdon y L.L.Constantine, que también es el llamado método SASD. Puede denominarse método de desarrollo de software orientado a funciones o método de desarrollo de software orientado al flujo de datos. 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). Proporciona dos tipos de estructuras de software típicas (tipo de transformación y tipo de transacción), lo que mejora enormemente la tasa de éxito del desarrollo de software.
2. Método de desarrollo de software orientado a la estructura de datos
El método Jackson es el método de desarrollo de software orientado a la estructura de datos más típico. El método Jackson descompone el problema en tres formas estructurales básicas. La estructura jerárquica de cada parte. Las tres formas estructurales básicas son secuencia, selección y repetición. Las tres estructuras de datos se pueden combinar para formar sistemas estructurales complejos. 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.
3. Método de análisis orientado a problemas
PAM (Método de análisis de problemas) es un método de desarrollo de software propuesto por Hitachi a finales de los años 80. Su idea básica es tener en cuenta las estructuras de datos de entrada y salida, guiar la descomposición del sistema e integrarlo 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. 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 árbol bidimensional que es, con diferencia, una de las mejores representaciones del diseño detallado. Por supuesto, dado que también existe una brecha entre las estructuras de datos de entrada y salida y todo el sistema, este método solo es adecuado para problemas pequeños y medianos.
4. Método de creación de prototipos
Hay muchas razones para utilizar el método de creación de prototipos. Principalmente a medida que aumenta nuestra experiencia en el desarrollo de sistemas, también descubrimos que no todos los requisitos pueden predefinirse y es necesario realizar revisiones repetidas. inevitable. Por supuesto, el método de creación de prototipos se puede adoptar debido al rápido desarrollo de herramientas de desarrollo. Por ejemplo, utilizando VB, DELPHI y otras herramientas, podemos desarrollar rápidamente un marco de sistema que los usuarios puedan ver y tocar. Los usuarios que no estén muy familiarizados con las computadoras pueden presentar sus propias necesidades basándose en esta plantilla.
El desarrollo de un sistema prototipo generalmente consta de las siguientes etapas:
(1) Determinar las necesidades del usuario
(2) Desarrollar el modelo original
(3) Solicitar opiniones de los usuarios para mejorar el prototipo inicial
(4) Modificar el prototipo.
El desarrollo de prototipos es más adecuado para situaciones en las que las necesidades del usuario no están claras, la teoría empresarial es incierta y las necesidades cambian con frecuencia. Este método se utiliza mejor cuando el sistema no es muy grande ni complejo.
5. Método de desarrollo de software orientado a objetos
Las palabras más populares en la industria informática actual son los términos distribuido, paralelo y orientado a objetos. De esto podemos ver el estado del concepto de orientación a objetos en la industria informática actual. Por ejemplo, DCOM y CORBA, las dos tecnologías orientadas a objetos actualmente populares, son ejemplos. Por supuesto, lo que realmente utilizamos son lenguajes de programación orientados a objetos, como C++. Es innegable que la tecnología orientada a objetos es una revolución en la tecnología de software y un hito en la historia del desarrollo de software.
Con el desarrollo de la POO (Programación Orientada a Objetos) a OOD (Diseño Orientado a Objetos) y OOA (Análisis Orientado a Objetos), el método de desarrollo de software orientado a objetos OMT (Técnica de Modelado de Objetos) finalmente fue formado. 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, y básicamente ha resuelto problemas graves en estos aspectos.
En resumen, los sistemas orientados a objetos adoptan métodos de inducción ascendente y descomposición de arriba hacia abajo. A través del establecimiento de modelos de objetos, realmente pueden construir sistemas basados en las necesidades del usuario y la capacidad de mantenimiento del sistema es enorme. mejorado. El estándar actual de la industria para el modelado orientado a objetos es UML (Lenguaje Unificado de Modelado).
Aquí tenemos que hablar del marco MSF (Microsoft Solutions Framework) de Microsoft, que simplemente divide el diseño del sistema en tres etapas: diseño conceptual, diseño lógico y diseño físico. La etapa de diseño conceptual trata sobre cuántos objetos se pueden obtener desde la perspectiva del usuario y utilizar los objetos como cuerpo principal para dibujar el marco empresarial. La etapa de diseño lógico consiste en volver a analizar, subdividir, integrar y eliminar los objetos en la etapa de diseño conceptual. Y establezca los atributos del método de cada objeto y la relación entre objetos. El diseño físico es en realidad para determinar los componentes, servicios, estructura del marco, lenguaje de programación específico, etc. que realmente necesitamos. Toda la estructura de MCF es relativamente clara y es un sistema marco operable relativamente bueno basado en el desarrollo de objetos.
6. Método de desarrollo visual
De hecho, el desarrollo visual no puede usarse solo como un método de desarrollo. Más apropiadamente, puede considerarse como una herramienta auxiliar, como SYBASE. en S-Design sabe que puede utilizar esta herramienta para crear un esquema de base de datos gráfico que se puede mostrar e importar a diferentes bases de datos. Por supuesto, puede que no haya muchas personas que hayan usado S-Design, pero debe haber muchas personas que hayan usado VB, DELPHI, C ++ Builder y otras herramientas de desarrollo.
Por supuesto, es innegable que solo se utiliza la visualización en el proceso de programación, en lugar de en el alto nivel de análisis y diseño del sistema.
De hecho, establecer herramientas visuales para el análisis y diseño de sistemas es un buen punto de venta. Hay muchas herramientas extranjeras dedicadas al diseño de productos en esta área. Por ejemplo, Business Object es una muy buena herramienta de análisis visual de bases de datos.
El desarrollo visual nos permite centrarnos en la lógica empresarial y los procesos empresariales, y la interfaz de usuario se puede construir fácilmente utilizando herramientas visuales. El software de aplicación se genera automáticamente mediante herramientas de desarrollo visual al operar elementos de la interfaz, como menús, botones, cuadros de diálogo, cuadros de edición, cuadros de radio, casillas de verificación, cuadros de lista, barras de desplazamiento, etc.
6. Cómo cultivar el pensamiento y los métodos de la ingeniería de software
Un problema común entre los desarrolladores de software es que en las primeras etapas de un proyecto, les gusta hablar sobre los detalles de implementación y nunca se cansan. de ello. Preferimos discutir cómo implementar una función específica con código corto y flexible, ignorando la consideración de toda la arquitectura del sistema. Por lo tanto, como desarrollador, especialmente un desarrollador experimentado, debemos liberarnos del código. Más a menudo, incluso dejamos de pensar temporalmente en cómo implementar el problema en nuestra mente y comenzamos desde el proyecto o producto. producto en general.
Las siguientes son algunas de mis experiencias personales:
1. Considere las perspectivas de mercado de todo el proyecto o producto. Como verdadero analista de sistemas, no sólo debes considerar los problemas desde una perspectiva técnica, sino también desde una perspectiva de mercado. Es decir, también debemos considerar quién es la base de usuarios de nuestro producto y si nuestro producto será viable cuando se lance al mercado. Por ejemplo, incluso si utilizamos la mejor tecnología para implementar un sistema operativo de proceso único, sus perspectivas de mercado definitivamente no serán optimistas.
2. Piense en el problema desde la perspectiva del usuario. Por ejemplo, algunas operaciones suponen un problema muy obvio para los desarrolladores. Pero puede resultar muy difícil de dominar para los usuarios normales, lo que significa que, a veces, tenemos que hacer concesiones entre flexibilidad y facilidad de uso. Además, también debemos considerarlo de manera integral en términos de implementación de funciones. Aunque algunas funciones son muy poderosas, si los usuarios rara vez las usan, es posible que no se inicien en la primera versión del producto. Pensando desde la perspectiva del usuario, es decir, lo bueno es lo que los usuarios reconocen, no lo que los desarrolladores piensan que es bueno.
3. Desde una perspectiva técnica