Software engineering for the creation of quality applications
Autor: Yaneidis Hernández Orozco / yaneidis.hernandez@scu.jovenclub.cu
Resumen
El presente artículo aborda como la Ingeniería de Software puede constituir un indicador para asegurar y evaluar el éxito del proyecto, se destaca la importancia de la misma ya que con ella se puede analizar, diseñar, programar y aplicar un software de manera correcta y organizada, cumpliendo con todas las especificaciones del cliente y el usuario final, se explica como aplicar los principios de la ciencia de computación y las matemáticas para lograr soluciones eficaces y económicas a los problemas de desarrollo de software. Además, se tratan los objetivos de la Ingeniería de Software, los Proceso de Desarrollo del Software, los Flujos de trabajo, Fases del proyecto y la importancia dela detección de errores en un producto terminado.
Palabras Claves: Ingeniería de Software, proceso de software, metodologías, software, calidad
Abstract
This article discusses how Software Engineering can be an indicator to ensure and evaluate the success of the project, it highlights the importance of it since with it you can analyze, design, program and apply a software in a correct and organized way, complying with all the specifications of the client and the end user, it is explained how to apply the principles of computer science and mathematics to achieve effective and economical solutions to software development problems. In addition, the objectives of Software Engineering, the Software Development Process, Workflows, Project Phases and the importance of detecting errors in a finished product are discussed.
Keywords: Software Engineering, software process, methodologies, software, quality
Introducción
En la actualidad a nivel mundial la industria del software se ha convertido en un enorme gigante, el cual crece y se desarrolla a ritmo agitado. Todas las empresas quieren producir aplicaciones informáticas con alta calidad, en el menor tiempo posible y a costos mínimos. Aumentando así la competitividad entre ellas debido a que los clientes son cada vez más exigentes.
La Ingeniería de Software aplica los principios de la ciencia de computación y las matemáticas para lograr soluciones eficaces y económicas a los problemas de desarrollo de software. Propone metodologías para a través de ellas efectuar un proceso de software efectivo, de forma que se pueda evitar fallas tales como: planificación irreal, mala calidad del trabajo, cambios no controlados, requisitos incompletos y expectativas no realistas en desarrolladores de aplicaciones informáticas. Por lo que es preciso desarrollar o adquirir una disciplina en el desarrollo del software y hacer uso de los métodos y procedimientos que propone la Ingeniería y Gestión de Software para obtener aplicaciones con mayor calidad.
Desarrollo
Ingeniería de un indicador para asegurar y evaluar el éxito del proyecto
Precisamente es esta rama de la ingeniería la encargada de establecer los principios necesarios para la obtención de un software económico, fiable y que funcione eficientemente. En el mundo globalizado de hoy, donde las organizaciones se ven enfrentadas a competencia de nivel mundial, la calidad surge como una necesidad y se convierte en un importante punto diferenciador, ya que aumenta la satisfacción general del cliente, disminuye costos y optimiza recursos.
La Ingeniería de Software es muy importante ya que con ella se puede analizar, diseñar, programar y aplicar un software de manera correcta y organizada, cumpliendo con todas las especificaciones del cliente y el usuario final.
¿Qué es la Ingeniería de Software?
Es la ingeniería que aplica los principios de la ciencia de computación y las matemáticas para lograr soluciones eficaces y económicas a los problemas de desarrollo de software.
Es decir, es una tecnología multicapa en la que, se pueden identificar: los métodos (indican cómo construir técnicamente el software), el proceso (es el fundamento de la Ingeniería de Software, es la unión que mantiene juntas las capas de la tecnología) y las herramientas (soporte automático o semiautomático para el proceso y los métodos).
Tanto estas definiciones como otras propuestas tienen como elemento común que la Ingeniería de Software trata la construcción de sistemas informáticos utilizando principios de ingeniería para el desarrollo de estos con la mayor calidad posible.
Objetivos de la Ingeniería de Software
Esta disciplina se centra en mejorar la calidad de los productos de software, aumentar la productividad y trabajo de los especialistas, facilitar el control del proceso de desarrollo, y definir una disciplina que garantice la producción y el mantenimiento de los productos de software desarrollados en el plazo fijado y dentro del costo estimado.
Proceso de Desarrollo del Software
Un proceso define “quién” está haciendo “qué”, “cuándo” y “cómo” par alcanzar un determinado objetivo. Un Proceso de Desarrollo de Software es la definición del conjunto de actividades que guían los esfuerzos de las personas implicadas en el proyecto, a modo de plantilla que explica los pasos necesarios para terminar el proyecto. Las piedras angulares del proceso de desarrollo del software son: el proyecto, las personas y el producto; siendo las características del cliente, el entorno de desarrollo y las condiciones del negocio, elementos que influyen en el proceso.
Un proyecto es un elemento organizativo a través del cual se gestiona el desarrollo del software. Un proyecto de desarrollo obtiene una versión de un producto que contiene modelos, código fuente, documentación y un ejecutable. Este producto va evolucionando durante el proceso de desarrollo desde un proyecto inicial o innovador (prototipo inicial) hasta convertirse en el proyecto final.
A pesar de la variedad de propuestas de proceso de software, existe un conjunto de actividades fundamentales que se encuentran presentes en todos ellos:
- Especificación de software: Se debe definir la funcionalidad y restricciones operacionales que debe cumplir el software.
- Diseño e Implementación: Se diseña y construye el software de acuerdo a la especificación.
- Validación: El software debe validarse, para asegurar que cumpla con lo que quiere el cliente.
- Evolución: El software debe evolucionarse, para adaptarse a las necesidades del cliente.
¿Por qué fracasan los proyectos?
Estudios realizados han demostrado la existencia de problemas en el desarrollo de software de forma general. Algunos de los factores que influyen decisivamente en el fracaso de los proyectos y están vinculados a una pobre Ingeniería de Software, estos son los siguientes:
- Planificación irreal.
- Requisitos incompletos.
- Mala calidad del trabajo.
- Personal inadecuado.
- Cambios no controlados.
- Conocimiento deficiente.
- Poco compromiso con el trabajo.
- Demora del producto.
En los últimos años de la industria del software se han ido definiendo modelos basados en experiencias de la Ingeniería de Software sirviendo de guía para las mejoras y unificando los criterios de evaluación para las empresas.
Y aún con la existencia de metodologías, estándares, normas, técnicas y herramientas para lograr un mejor resultado en las aplicaciones informáticas, muchos sistemas siguen fallando, no por falta de presupuesto o tecnología, sino porque se siguen cometiendo errores en las diferentes etapas de desarrollo del software, o lo que es lo mismo, no se lleva a cabo una Ingeniería de Software con calidad.
Uso de metodologías
Un proceso de software detallado y completo suele denominarse “Metodología”. Las metodologías se basan en una combinación de los modelos de proceso genéricos (cascada, evolutivo, incremental, etc.). Adicionalmente una metodología debería definir con precisión los artefactos, roles y actividades involucrados, junto con prácticas y técnicas recomendadas, guías de adaptación de la metodología al proyecto, guías para uso de herramientas de apoyo, etc.
Existen varias metodologías para efectuar un software con calidad y garantizar así que el producto sea elaborado de acuerdo a una estructura bien fundamentada y lógica.
El Proceso Racional Unificado o RUP (por sus siglas en inglés de Rational Unified Process) y de ellas la más utilizada en Cuba, AUP, XP, Scrum, entre otras. En RUP se han agrupado las actividades en grupos lógicos definiéndose 9 flujos de trabajo principales. Los 6 primeros son conocidos como flujos de ingeniería y los tres últimos como de apoyo.
Flujos de trabajo:
Modelamiento del negocio: Describe los procesos de negocio, identificando quiénes participan y las actividades que requieren automatización.
Requerimientos: Define qué es lo que el sistema debe hacer, para lo cual se identifican las funcionalidades requeridas y las restricciones que se imponen.
Análisis y diseño: Describe cómo el sistema será realizado a partir de la funcionalidad prevista y las restricciones impuestas (requerimientos), por lo que indica con precisión lo que se debe programar.
Implementación: Define cómo se organizan las clases y objetos en componentes, cuáles nodos se utilizarán y la ubicación en ellos de los componentes y la estructura de capas de la aplicación.
Prueba (Testeo): Busca los defectos a lo largo del ciclo de vida.
Instalación: Produce release del producto y realiza actividades (empaque, instalación, asistencia a usuarios, etc.) para entregar el software a los usuarios finales.
Administración del proyecto: Involucra actividades con las que se busca producir un producto que satisfaga las necesidades de los clientes.
Administración de configuración y cambios: Describe cómo controlar los elementos producidos por todos los integrantes del equipo de proyecto en cuanto a: utilización/actualización concurrente de elementos, control de versiones, etc.
Ambiente: Contiene actividades que describen los procesos y herramientas que soportarán el equipo de trabajo del proyecto; así como el procedimiento para implementar el proceso en una organización.
Fases:
Conceptualización (Concepción o Inicio): Se describe el negocio y se delimita el proyecto describiendo sus alcances con la identificación de los casos de uso del sistema.
Elaboración: Se define la arquitectura del sistema y se obtiene una aplicación ejecutable que responde a los casos de uso que la comprometen. A pesar de que se desarrolla a profundidad una parte del sistema, las decisiones sobre la arquitectura se hacen sobre la base de la comprensión del sistema completo y los requerimientos (funcionales y no funcionales) identificados de acuerdo al alcance definido.
Construcción: Se obtiene un producto listo para su utilización que está documentado y tiene un manual de usuario. Se obtiene 1 o varios release del producto que han pasado las pruebas. Se ponen estos release a consideración de un subconjunto de usuarios.
Transición: El release ya está listo para su instalación en las condiciones reales. Puede implicar reparación de errores.
El ciclo de vida de RUP se caracteriza por:
Dirigido por casos de uso: Los casos de uso reflejan lo que los usuarios futuros necesitan y desean, lo cual se capta cuando se modela el negocio y se representa a través de los requerimientos. A partir de aquí los casos de uso guían el proceso de desarrollo ya que los modelos que se obtienen, como resultado de los diferentes flujos de trabajo, representan la realización de los casos de uso (cómo se llevan a cabo).
Centrado en la arquitectura: La arquitectura muestra la visión común del sistema completo en la que el equipo de proyecto y los usuarios deben estar de acuerdo, por lo que describe los elementos del modelo que son más importantes para su construcción, los cimientos del sistema que son necesarios como base para comprenderlo, desarrollarlo y producirlo económicamente. RUP se desarrolla mediante iteraciones, comenzando por los CU relevantes desde el punto de vista de la arquitectura.
Iterativo e Incremental: Aunque puede sugerir que los flujos de trabajo se desarrollan en cascada, la “lectura” de este gráfico tiene que ser vertical y horizontal. RUP propone que cada fase se desarrolle en iteraciones. Una iteración involucra actividades de todos los flujos de trabajo, aunque desarrolla fundamentalmente algunos más que otros. Por ejemplo, una iteración de elaboración centra su atención en el análisis y diseño, aunque refina los requerimientos y obtiene un producto con un determinado nivel, pero que irá creciendo incrementalmente en cada iteración.
Aunque cada metodología tiene sus propias características y varía su documentación, cada una de ellas garantiza la creación del software con calidad. Elegirla va de acuerdo a las necesidades de los desarrolladores y los clientes.
¿Cómo saber si un producto terminado tiene errores?
Para ello se aplican diversas pruebas que determinan estos errores a medida que proporciona los mismos al desarrollador/res para que puedan ser corregidas. Estas pruebas:
- Actúan como un proveedor de servicio a las otras disciplinas en muchos aspectos.
- Evalúa o valora la calidad del producto.
- Encuentra y exponer las debilidades en el software.
Conclusiones
La Ingeniería de Software s la ingeniería que aplica los principios de la ciencia de computación y las matemáticas para lograr soluciones eficaces y económicas a los problemas de desarrollo de software.
Todo desarrollador de software que desee obtener productos de buena calidad, debe aplicar un buen proceso de desarrollo de software, por lo tanto, se requiere utilizar los métodos y procedimientos de la Ingeniería y Gestión de Software, y debe también contar con la preparación necesaria para llevar a cabo todo el proceso con calidad desarrollando el software que realmente desea y necesita el cliente.
Otra conclusión a la que se arriba es que al desarrollar un software se debe tener definido una serie de parámetros, así como requerimientos para que el producto pueda contar con la calidad que el usuario final o cliente necesita.
La Ingeniería de Software es muy importante ya que con ella se puede analizar, diseñar, programar y aplicar un software de manera correcta y organizada, cumpliendo con todas las especificaciones del cliente y el usuario final.
Referencias Bibliográficas
- Jacobson, I.; Booch, G. y Rumbaugh, J.; “El Proceso Unificado de Desarrollo de software”. 2000. Recuperado el 22 de febrero de 2017. http://yaqui.mxl.uabc.mx/~molguin/as/RUP.htm
- Pérez Porto J. y Gardey A. (2009). Definición de ingeniería de software. Recuperado el 20 de octubre del 2017 de http://definicion.de/ingenieria-de-software/
- Rodríguez Tello E. (2012). Conceptos básicos de Ingeniería de Software. Recuperado el 20 de octubre del 2017 de http://www.tamps.cinvestav.mx/~ertello/swe/sesion01.pdf
- (2012). Que es la ingeniería software. Recuperado el 20 de octubre del 2017 de https://social.technet.microsoft.com/Forums/es-ES/7dc2cf80-a6ad-4271-b4db-a1e3edb946fb/-que-es-la-ingenieria-software-?forum=ietechnetes
- Wikipedia, (s.f.). Ingeniería de software. Recuperado el 20 de octubre del 2017 de https://es.wikipedia.org/wiki/Ingenier%C3%ADa_de_software