Este documento resume los conceptos clave de la ingeniería de software. Explica que la ingeniería de software busca dar un enfoque sistemático y cuantificable al desarrollo de software. También describe brevemente la historia de la disciplina y algunos de los modelos de ciclo de vida del software más importantes como el ciclo de vida en cascada. Finalmente, discute algunos de los retos actuales y futuros de la ingeniería de software como la calidad del software, los servicios y modelos de negocio, y la integración de sistemas
1. INGENIERÍA DE SOFTWARE I – UNIVERSIDAD SERGIO ARBOLEDA
Abstract—Software Engineering is considered nowadays an
important science and field of study for establishing software
development methodologies. In the following paper a
conceptualization about SI is presented and the challenges
presented in that discipline in the XXI century.
Index Terms—Software, Development, Methodologies,
Evaluation.
I. INTRODUCCIÓN
A ingeniería de software consiste en dar una
orientación sistemática y cuantificable al software, como
facilitadora para su creación y posterior mantenimiento en
diferentes escenarios.
La carencia de aplicación de ingeniería de software trae
como consecuencia que el software tienda a fallar, a ser más
difícil de analizar y a causar retrasos a las personas que lo
requieren, como se evidenció por ejemplo en los años 50
donde aún no se consideraba como disciplina. Posteriormente
se produjo un suceso conocido como "La crisis del software"
donde la comunidad estudiosa del software se reunió y
comenzó a establecer estándares y formalizar el trabajo de los
ingenieros de software (que en ese momento su metodología
no era lo suficientemente estructurada). Tras terminar la
segunda guerra mundial se refinó el proceso de elaboración
del software agregándole la calidad del mismo.
En la actualidad existe un amplio estudio sobre el
planteamiento de dichas metodologías, por ejemplo, Pressman
estableció que la ingeniería de software podría tener 7
enfoques: de sistemas, de aplicación, científico y de
ingeniería, empotrado, de línea de productos, aplicaciones web
y de Inteligencia Artificial.
Esta ingeniería también puede definirse como un área de las
ciencias computacionales donde se hace uso de la gestión de
proyectos, diseño, desarrollo, documentación pruebas, control
y gestión de calidad y mantenimiento de software; esta ha
cobrado mayor importancia debido a que al transcurrir del
tiempo se demanda software con mayores funcionalidades y
especificaciones causando que este tenga una mayor injerencia
social y deba orientarse siempre a lo que busca el cliente
ofreciendo herramientas fiables.
II. HISTORIA
En 1980, Estados Unidos hizo uso de tarjetas perforadas y
máquinas tabuladoras para realizar el censo nacional diseñadas
por Hernan Hollerith (donde su compañía sería la base del
origen de IBM). Hacia 1950 se crearon los primeros
compiladores y lenguajes de programación orientando a la
ingeniería de software solamente hacia la programación (en
ese entonces estructurada, por ende haciendo que los
programas fuesen extensos y poco controlables).
En 1967 se estableció el grupo de estudios en ciencias
computacionales en la OTAN. Ese mismo año se realizó una
conferencia en Alemania para discutir el proceso de
producción de software, la formación de ingenieros de
software, entre otras temáticas.
Así mismo el software fue evolucionando como se describe
en 4 etapas: los primeros años (donde se introdujo el
procesamiento por lotes y software a la medida), la segunda
era (apareció la programación multiusuario y en tiempo real,
las bases de datos y el aumento en consumo de software), la
tercera era (se crearon los sistemas distribuidos y se introdujo
el concepto de inteligencia de software, aumento de consumo
y baja de precios de hardware) y la cuarta era (se incrementó
la potencia de los equipos, se introdujo la programación
orientada a objetos, aplicaciones de inteligencia artificial,
programación concurrente y crecimiento de las redes de
computadores).
III. CICLO DE VIDA DEL SOFTWARE
Al pasar del tiempo se propusieron diferentes modelos del
ciclo de vida del software, el ciclo de vida en cascada donde se
estableció el desarrollo lineal y secuencial de las actividades
(desde el análisis previo hasta su desarrollo y posterior
mantenimiento) e hizo una analogía con la cascada debido a
que entre más fuerte fuese un cambio en etapas avanzadas del
software, se hacía mucho más difícil volver a estados
anteriores del mismo. El ciclo de vida basado en prototipos en
el año 1975 donde se hacía un prototipo del software a
desarrollar en etapas tempranas de su desarrollo con el fin de
que el cliente pudiese visualizar desde un primer momento las
funcionalidades que poseería el software. Es un ciclo de vida
evolutivo estableciendo que si se agrega personal a un
proyecto atrasado, este se retrasará aún más. El ciclo de vida
incremental, también proceso evolutivo, donde el software se
desarrolla sobre versiones intermedias donde una nueva
versión es igual a la anterior agregándole los nuevos
Ingeniería de Software: Conceptos y Retos
(February 2015)
Laura Brugés, Member, Universidad Sergio Arboleda
L
2. INGENIERÍA DE SOFTWARE I – UNIVERSIDAD SERGIO ARBOLEDA
requerimientos establecidos por el cliente que surgen durante
su desarrollo. El ciclo de vida en espiral el cual agrega una
nueva fase en el desarrollo de software de evaluación e
identificación de riesgos contemplando tres tipos: riesgos de
proyecto, riesgos técnicos y riesgos del negocio. El ciclo de
vida de agrupamiento o de clúster que está orientado a objetos
donde se desarrollan componentes o agregaciones donde cada
uno tendrá su propio ciclo de vida, especificación, diseño, etc.
El ciclo de vida fuente, igualmente orientado a objetos donde
se contempla en concepto de piscina (donde reposan las clases
del sistema). Cuenta con tres fases: la del negocio,
construcción y entrega. El ciclo de vida rápido de aplicaciones
donde se promueve el uso de programación visual y los
generadores automáticos de aplicaciones donde se aumenta la
productividad de los programadores y se disminuye su tiempo
de desarrollo. El ciclo de vida en remolino donde se amplía la
versión del ciclo de vida en cascada donde se lleva un proceso
iterativo hasta que se alcance el nivel de detalle deseado
siendo multi-cíclico semejante a la forma de un remolino. En
1990 la institución ISO, encargada de establecer estándares a
nivel global, se estableció el 12207 donde el ciclo de vida del
software está conformado por 5 procesos principales
(adquisición, suministro, desarrollo, operación y
mantenimiento que consiste a los cambios realizados sobre el
software), 4 procesos organizacionales (gestión,
infraestructura, mejora en los procesos y formación) y 8 de
apoyo (documentación, gestión de la configuración,
verificación, validación del cumplimiento de los requisitos ,
revisión conjunta, auditoría y resolución de problemas.
IV. DESARROLLO DEL SOFTWARE EN LATINOAMÉRICA
La ingeniería de Software puede ser considerada como una
alternativa de consolidación económica y de desarrollo por lo
que resulta ideal para Latino América donde es una industria
en crecimiento para así poder tener más herramientas para
competir a nivel global. Países como Costa Rica han mostrado
interés en obtener certificaciones relacionadas con software
como las normad de ISO 9000 y 2000, habiendo establecido
igualmente un plan de desarrollo de software. También se han
evidenciado avances en países como Argentina, Chile, Brasil,
Uruguay, Perú, Venezuela y Bolivia donde se han establecido
organismos específicos para ocuparse de esta área.
En Colombia por su parte la industria del software es
creciente contando con varias empresas certificadas en ISO y
CMMI donde sin embargo falta inversión en dicha materia y
en el área de tecnología. Así mismo, Colombia exporta
servicios de consultoría, desarrollo e ingeniería de software
que se ve limitado debido al nivel de bilingüismo. Por su parte
en Colombia se encuentran instituciones como FEDESOFT,
INDUSOFT y FEDECOLSOFT entre otras. Más
recientemente se fundó el ministerio especializado en
tecnologías de la información (min TIC). Así mismo tiene
políticas de derechos de autor, reglamentación de inscripción
de soporte lógico, entre otros.
Contruir correctamente un producto de software implica que
este sea fiable (resistente a fallos), de fácil mantenimiento, de
acuerdo a los parámetros establecidos por el cliente (respecto a
tiempo, costo, expectativas, etc.), ser portable y predecible al
momento de estar en funcionamiento.
V. INGENIERÍA DE SOFTWARE EN LATINOAMÉRICA
Atribuyéndole a la crisis del software el inicio del estudio
de la ingeniería de software como ciencia, el principal objetivo
de la conferencia que se convocó en torno a ella fue el de usar
principios de la ingeniería para producir software de manera
económica y a su vez fiable y eficiente.
Se buscó darle una caracterización más ingenieril al
desarrollo y construcción de software, aunque también
requiere de creatividad.
Para poder estudiar el desarrollo de software en
Latinoamérica se tomaron como referencia tres enfoques.
El primer enfoque es la formación académica de
profesionales en software debido a que la producción de
software de calidad influencia de gran manera la capacidad
técnico-académica de los profesionales que llevan a cabo
proyectos, su actualización y profundización de su
conocimiento para lo cual se recomienda proveer formación
académica actualizada, crear condiciones necesarias para
responder a la demanda de sorftware con el número de
profesionales formados, actualizar constantemente los
contenidos relacionados con control y gestión de proyectos,
fomentar la creación de grupos de investigación, orientar
especializaciones a la ingeniería de requisitos, fomentar y
fortalecer la formación a nivel posgrado, promover beca, entre
otras.
El segundo trata el tema de los atributos de los productos de
software, debido a que siempre se busca ofrecer una solución
adecuada para los requerimientos del usuario, es necesario
focalizarse en aspectos de calidad no relacionados con la
funcionalidad del negocio como la confiabilidad que busca no
generar inconvenientes al momento de ocurrir un fallo en el
sistema (idealmente de funcionamiento ininterrumpido en el
tiempo), seguridad que se refiere a la prevención de fraudes y
ataques de diferentes tipos, la precisión que busca responder
eficientemente a las necesidades que surjan alrededor del uso
del software, usabilidad refiriéndose a que deben ser sencillos
de entender para sus usuarios, y el mantenimiento que implica
que la documentación debe actualizarse con la evolución del
software.
El tercer enfoque se refiere a la responsabilidad ética y
profesional ya que estos aspectos son inherentes al proceso de
desarrollo de software. A pesar de que organizaciones como la
IEEE promulgan códigos de conducta, no se tienen las
suficientes regulaciones en cuanto a las responsabilidades
sociales y morales implicadas. Aspectos que se contemplan en
cuanto a esto son la competencia que busca que un ingeniero
de software no tome trabajos que superen su capacidad ni su
área de especialización empresarial, confidencialidad que
consiste en respetar la información intercambiada entre cliente
y usuario así haya o no un acuerdo de confidencialidad en
medio y que no se debe emplear habilidades técnicas para
hacer uso inapropiado de hardware.
3. INGENIERÍA DE SOFTWARE I – UNIVERSIDAD SERGIO ARBOLEDA
VI. PROYECCIÓN Y RETOS DE LA INGENIERÍA DE SOFTWARE
La proyección a futuro de la ingeniería de software no
busca predecir sino analizar los cambios para enfrentar
situaciones donde se puedan presentar fallos requiriendo
creatividad y aplicación de elementos transformadores y de
cambio.
La primera problemática que se aborda al respecto es la
calidad del software donde se requiere del cumplimiento de
varios factores los cuales son esenciales en la determinación
de las fases iniciales del ciclo de vida haciendo énfasis en
requerimientos no funcionales donde se contemplan
características como Seguridad (protección de información
sensible susceptible a ataque), disponibilidad y confiabilidad
(funcionamiento ininterrumpido) y la usabilidad (facilitar el
acceso a todo tipo de usuario al software).
La segunda se refiere a los servicios y modelos del negocio
que involucra modelo de software como servicio, cambio y
adaptación de la arquitectura y optimización de recursos para
responder a las necesidades del cliente que cada vez se hacen
más complejas haciendo que se orientar el software a
componentes o frameworks para así incrementar la
reutilización
Una tercera problemática habla de la integración de
sistemas y componentes debido al incremento en la demanda
de software por componentes debe evitarse que se pierda el
control sobre los mismos donde cada uno podría ser cambiado
o actualizado; este inconveniente debe ser solucionado en
corto plazo.
Como cuarta problemática se tiene que gracias a la creciente
demanda de dispositivos móviles deben replantearse las
necesidades del usuario en campos como conectividad y
diseño de aplicativo donde se busca responder a las
necesidades de que el producto sea seguro y confiable.
La última se refiere a la selección de recurso humano
competente para la capacitación de personal y el desarrollo de
proyectos
Existen cuatro tendencias en el desarrollo de software: los
métodos ágiles e incrementales (que ofrecen atención a
modificaciones requeridas por el usuario, la integración de
nuevas tecnologías y formación de grupos de desarrollo para
lograr interacción y cohesión), dominio de los productos de
software (que hacen referencia a su vida útil), ingeniería de
requisitos en entornos globales (relacionada con la aplicación
de metodologías de trabajo) y la prueba del software
(propuesta de metodologías para probar su funcionamiento).
En cuanto a las necesidades actuales se encuentra la gestión
de conocimiento (planificar, coordinar y controlar el
conocimiento que produce una organización de la realización
de sus funciones para generar nuevas competencias para
combinarlas con las existentes donde vienen asociados cuatro
pilares: las personas, los procesos, los contenidos y la
tecnología).
La ingeniería de software es un proceso cognitivo, debido a
que su materia prima es el conocimiento, se debe hacer gestión
del mismo, este proceso tiene las siguientes características:
requieren de conocimiento de múltiples dominios, el objetivo
de un proyecto de software es dinámico, el proceso de
obtención y transformación de conocimiento es continuo, la
evolución del software es un proceso continuo y el software se
orienta a diferentes grupos sociales y áreas geográficas.
La gestión de software también se orienta a comprender el
conocimiento existente en la aplicación, facilitar a los
analistas, arquitectos y desarrolladores el acceso a la
información, orientar una metodología para seguir el
desarrollo de objetivos cumplidos o por cumplir y dar
retroalimentación a cada uno de los miembros del equipo de
desarrollo.
Dentro de la gestión de los equipos de desarrollo se
encuentra la gestión de datos (que incluye el modelo de datos,
la administración de bases de datos, el data warehousing, la
migración de datos, la minería de datos, entre otros) y la
gestión y vigilancia de la información (que incluye la
búsqueda de ventajas competitivas, niveles elevados de
saturación y el control de la información).
VII. CONCLUSIONES
La ingeniería de software entró a normalizar, estandarizar y
organizar el proceso de la elaboración de software proveyendo
una serie de metodologías y paradigmas usando como materia
prima el conocimiento y la información buscando dar a este
proceso una caracterización más ingenieril buscando que las
personas que participen en proyectos de software sean
capacitadas y que haya una comprensión y dominio sobre el
proceso evolutivo de la creación de software de tal manera que
satisfaga las necesidades de los clientes que se van adaptando
a un entorno de crecimiento progresivo.
La aplicación de ingeniería de software hace que se eviten
fallos de construcción de software sobre modelos poco sólidos
susceptibles a tener baja seguridad, confiabilidad y ser
difíciles de manipular por los usuarios finales que fueron las
principales causas de que ocurriera la llamada “Crisis del
Software”.
Debido a que recientemente se han estado utilizando
metodologías de desarrollo en torno a componentes o
frameworks es esencial que se tenga control sobre los cambios
que se realizan en cada uno de ellos y que tengan la cohesión
suficiente para poder ser utilizados como una sola aplicación.
La utilización de la Ingeniería de Software en los proyectos
de elaboración del mismo puede servir como herramienta para
que los países latinoamericanos avancen en materia de
producción de software de tal manera que puedan competir
con distintas alternativas ofrecidas a nivel internacional y así
aportar a su proceso de crecimiento y desarrollo.
Como la Ingeniería de Software ayuda a la comprensión y
gestión de proyectos se vuelve una herramienta indispensable
para los CIOs pudiendo así orientar los procesos de una
organización bajo sus principios acercándola al concepto de
organización inteligente.
VIII. REFERENCIAS
[1] Instituto Antioqueño de Investigación, LIBRO BLANCO DE LA
INGENIERÍA DE SOFTWARE EN AMÉRICA LATINA 1st
ed.
Colombia. pp. 23-44, 81-94.