La Importancia de la Ingeniería de Software
El término Ingeniería de Software fue introducido a finales de los años 60 a raíz de la crisis del software. Esta crisis fue el resultado de la introducción de la tercera generación del hardware. El hardware dejó de ser un impedimento para el desarrollo de la informática; redujo los costos y mejoró la calidad y eficiencia del software producido. La crisis se caracterizó por los siguientes problemas:
- Imprecisión en la planificación del proyecto y estimación de los costos.
- Baja calidad del software.
- Dificultad de mantenimiento de programas con un diseño poco estructurado, entre otros.
Se exige que el software sea eficaz y económico tanto en el desarrollo como en la adquisición. Para ello, se requiere una serie de características como fiabilidad, facilidad de mantenimiento y de uso, eficiencia, entre otras.
Concepto de Ingeniería de Software
¿Qué es la Ingeniería de Software?
Es un área de la Informática o Ciencias de la Computación que ofrece métodos y técnicas para desarrollar y mantener software de calidad que resuelven problemas de todo tipo. Hoy en día, la Ingeniería de Software es considerada una nueva área de la Ingeniería, y el Ingeniero de Software comienza a ser una profesión consolidada en el mundo laboral internacional, con reconocido prestigio social en el ámbito empresarial y un brillante futuro para quienes la ejercen.
La Ingeniería de Software aborda áreas de la Informática y de las Ciencias de la Computación, tales como: construcción de compiladores, sistemas operativos o desarrollos de Intranet/Internet. También abarca las fases del ciclo de vida del desarrollo de sistemas de información y es aplicable a áreas como: negocios, investigación científica, medicina, producción, logística, banca, control de tráfico, meteorología, el mundo del derecho, la red de redes (Internet), redes Intranet y Extranet, entre otras.
Método, Técnica y Herramienta en Ingeniería de Software
Método
Serie de pasos sucesivos que conducen a una meta. El objetivo del profesional es tomar decisiones y desarrollar una teoría que permita generalizar y resolver de la misma forma problemas semejantes en el futuro. Por ende, es necesario que siga el método más apropiado para su problema, lo que equivale a decir que debe seguir el camino que lo conduzca a su objetivo.
Técnica
Conjunto de saberes prácticos o procedimientos para obtener un resultado. Requiere de destreza manual e intelectual, y se apoya en el uso de herramientas. Las técnicas se transmiten de generación en generación. La técnica nace en la imaginación y luego se lleva a la concreción, siempre de forma empírica. En cambio, la tecnología surge de forma científica, reflexiva y con ayuda de la técnica (desde el punto de vista histórico).
Herramienta
Subprograma o módulo encargado de funciones específicas y afines entre sí para realizar una tarea. Una aplicación o programa puede contar con múltiples herramientas a su disposición. Por ejemplo, el corrector ortográfico puede ser una herramienta en una aplicación para redactar documentos, pero no es una aplicación en sí misma.
Las herramientas CASE (Computer-Aided Software Engineering, Ingeniería de Software Asistida por Ordenador) son aplicaciones informáticas destinadas a aumentar la productividad en el desarrollo de software, reduciendo su coste en términos de tiempo y dinero.
Objetivos de las Herramientas CASE
Estas herramientas asisten en el ciclo de vida de desarrollo del software en tareas como: el proceso de diseño del proyecto, cálculo de costes, implementación automática de parte del código a partir del diseño, compilación automática, documentación o detección de errores, entre otras. Sus objetivos principales son:
- Mejorar la productividad en el desarrollo y mantenimiento del software.
- Aumentar la calidad del software.
- Optimizar el tiempo y coste de desarrollo y mantenimiento de los sistemas informáticos.
- Mejorar la planificación de un proyecto.
- Aumentar el conocimiento informático de una empresa, facilitando la búsqueda de soluciones para los requisitos.
- Automatizar el desarrollo del software, la documentación, la generación de código, las pruebas de errores y la gestión del proyecto.
- Fomentar la reutilización del software, la portabilidad y la estandarización de la documentación.
- Permitir la gestión global de las fases de desarrollo de software con una misma herramienta.
- Facilitar el uso de metodologías propias de la ingeniería de software.
Clasificación de las Herramientas CASE
Las herramientas CASE se clasifican teniendo en cuenta los siguientes parámetros:
- Las plataformas que soportan.
- Las fases del ciclo de vida del desarrollo de sistemas que cubren.
- La arquitectura de las aplicaciones que producen.
- Su funcionalidad.
Clasificación por Fases del Ciclo de Desarrollo
- Upper CASE (U-CASE): Herramientas que asisten en las fases de planificación, análisis de requisitos y estrategia del desarrollo, utilizando, entre otros, diagramas UML.
- Middle CASE (M-CASE): Herramientas para automatizar tareas en el análisis y diseño de la aplicación.
- Lower CASE (L-CASE): Herramientas que semiautomatizan la generación de código, crean programas de detección de errores, soportan la depuración de programas y pruebas. Además, automatizan la documentación completa de la aplicación. Aquí pueden incluirse las herramientas de Desarrollo Rápido de Aplicaciones (RAD).
Historia de la Ingeniería de Software
La Ingeniería de Software, término utilizado por primera vez por Fritz Bauer en la conferencia sobre desarrollo de software patrocinada por el Comité de Ciencia de la OTAN, celebrada en Garmisch, Alemania, en octubre de 1968, puede definirse según Alan Davis como: «la aplicación inteligente de principios probados, técnicas, lenguajes y herramientas para la creación y mantenimiento, dentro de un coste razonable, de software que satisfaga las necesidades de los usuarios».
El término ingeniería de software empezó a usarse a finales de la década de los sesenta para expresar el área de conocimiento que se estaba desarrollando en torno a las problemáticas que ofrecía el software en ese momento.
La Crisis del Software
El entorno actual de desarrollo de sistemas de software ha adolecido de:
- Retrasos considerables en la planificación.
- Poca productividad.
- Elevadas cargas de mantenimiento.
- Demandas cada vez más desfasadas respecto a las ofertas.
- Baja calidad y fiabilidad del producto.
- Dependencia de los realizadores.
Esto se ha denominado como la «crisis del software».
¿Cómo se define crisis? Se define como «un punto decisivo en el curso de algo; momento, etapa o evento decisivo o crucial». Sin embargo, para el software no ha habido ningún punto crucial, solo una lenta evolución. La crisis en la industria del software ha permanecido durante muchos años, lo cual parece una contradicción para el término. Existe un problema crónico en el desarrollo de software. Esto ha sido originado por una falta de:
- Formalismo y metodología.
- Herramientas de soporte.
- Administración eficaz.
Metas de la Ingeniería de Software
Las metas de la ingeniería de software son:
- Mejorar la calidad de los procesos de fabricación de software y mejorar la calidad de los productos de software.
- Aumentar la productividad y la satisfacción profesional de los ingenieros de esta disciplina.
Mitos Comunes sobre el Software
Mitos de los Desarrolladores
- Programa funcionando = fin del trabajo.
- Calidad = el programa se ejecuta sin errores.
- Entrega al cliente: programa funcionando.
Mitos de Gestión
- Uso de estándares.
- Uso de herramientas.
- Mala planificación: aumento de programadores.
Mitos del Cliente
- Requisitos establecidos como una declaración general de objetivos.
- Flexibilidad del software ante los cambios.
Enfoque de la Ingeniería de Software en la Informática
La Ingeniería Informática aplica los fundamentos de la ciencia de la computación, la electrónica y la ingeniería de software para el desarrollo de soluciones integrales de cómputo y comunicaciones, capaces de procesar información de manera automática. La ingeniería informática se fundamenta en la tecnología electrónica, lo que le permite a los ordenadores interactuar con:
- Sistemas físicos, desarrollando interfaces de comunicación y control entre el ordenador y diversos dispositivos mecánicos y eléctricos.
- Sistemas de adquisición de datos, instrumentación virtual, control de robots, sistemas de iluminación, entre otros.
Tendencias Actuales en la Ingeniería de Software
Una de las preocupaciones actuales más urgentes de la industria del software es crear sistemas confiables y de mayor calidad con menor inversión de tiempo y coste, que resuelvan problemas cada vez más complejos. Es preciso utilizar técnicas avanzadas de la ingeniería de software que ayuden a optimizar el esfuerzo en las diferentes etapas del ciclo de vida.
La Tecnología Orientada a Objetos (TOO) ha demostrado ser una excelente herramienta para resolver problemas de gran complejidad, permitiendo obtener sistemas interoperables, modulares, evolutivos y con un alto índice de reusabilidad. La reutilización conduce a un desarrollo más rápido y a programas de mejor calidad.
Las técnicas orientadas a objetos, combinadas con otras herramientas como las CASE (Ingeniería de Software Asistida por Computadora), programación visual, generadores de código, metodologías basadas en repositorios, bases de datos, bibliotecas de clases que maximicen la reutilización, tecnología cliente-servidor, entre otras; pueden proporcionar la magnitud de cambio necesaria para lograr ese salto anteriormente mencionado.
En este capítulo se describen los principales factores que determinan la calidad del software y se introducen los principios y conceptos básicos en que se basa para producir software de alta calidad y confiabilidad.
La Ingeniería de Software es la disciplina o área de la informática que ofrece métodos y técnicas para desarrollar y mantener software de calidad. Esta ingeniería aborda áreas muy diversas de la informática y de las Ciencias de la Computación, tales como: construcción de compiladores, sistemas operativos o desarrollos Intranet/Internet, así como las fases del ciclo de vida del desarrollo de Sistemas de Información, siendo aplicable a áreas como: negocios, investigación científica, medicina, producción, logística, banca, control de tráfico, meteorología, derecho, Internet, Intranet, entre otras.