Actualmente la mayoría de países desarrollados y aun los que están en vías de desarrollo utilizan software complejos que controlan y gestionan sus economías, prácticamente casi todos los procesos están automatizados. Por tal razón hemos sido testigos de un incremento exponencial en la producción de software en los últimos años.
La ingeniería de software tiene como objetivo el proceso de desarrollo de software utilizando teorías, métodos y técnicas que ayudan a la construcción de software basándose en la premisa de que diferentes tipos de sistemas necesitan distintos procesos de desarrollo.
El proceso de desarrollo de software normalmente genera programas con errores y problemas diversos que pueden ir desde dificultad de uso, errores comunes, altos tiempos de respuestas y los proyectos frecuentemente siempre se sobregiran en presupuesto. Todo lo anterior es lo que intenta evitar la aplicación correcta de la ingeniería de software.
A través de los años la experiencia nos ha confirmado que la correcta definición de los requerimientos son la pieza fundamental en el éxito o fracaso de un proyecto de desarrollo de software, ya que son el reflejo detallado de las necesidades que los interesados necesitan que el software les resuelva. Estos marcan el punto de partida para actividades como la planificación de costos, recursos y tiempos necesarios para la ejecución del proyecto. Toda mi argumentación la sustentan muchos expertos en la gestión de proyectos de software en todo el mundo.
Recordemos que un requisito es una condición o necesidad que el usuario espera que se resuelva. Mientras que la especificación es el detalle en donde se especifica el flujo normal o secundario que garantiza y verifica que el objetivo sea satisfecho.
En la web existen muchas definiciones y ejemplos sobre buenas practicas o criterios en la definición y especificaciones de requerimientos que nos orientan a crear una definición de forma correcta, el problema es que no aplicamos dichas definiciones ya sea por falta de experiencia o porque no se mide el impacto que esto genera en el resultado final de nuestro proyecto.
La realidad es que muchas veces nuestra definición de requerimientos es ambigua y abierta que da paso a las suposiciones y es más que probable que el esfuerzo, tiempo, recursos se vean afectados por tales motivos y el ciclo de vida del desarrollo se vuelve interminable y costoso. Definir correctamente y sistemáticamente los requisitos tampoco es una tarea fácil y sencilla ya que implica un nivel de abstracción que requiere de habilidades técnicas, de comunicación y sobre todo de experiencia.
Para poder definir un requerimiento este deberá ser verificable, claro, trazable, modificable, alcanzable, etc. Mientras estos principios se cumplan podemos decir que la definición es completamente acertada y correcta. Lo anterior según la IEEE (830)“genera beneficios como base de acuerdos con el cliente, reducción de esfuerzos de desarrollo, estimación más acertada de costos y tiempos, mejora entre la comunicación entre equipos, mejora de la calidad del software y un proceso de validación y verificación confiable”.
Una buena definición, especificación y administración de requerimientos es la base para dar paso a la siguiente etapa que tiene que ver con el modelado del diseño lo que llamamos diseño de software .Las etapas futuras depende de lo planteado anteriormente.
Existen una serie de metodologías de desarrollo que nos ayudaran a completar el ciclo de desarrollo y llevar a los términos esperados el proyecto, la elección dependerá del contexto, alcances, ambiente o necesidades particulares de cada proyecto. Durante mucho tiempo se hizo uso de las metodologías tradicionales (evolutivos, cascadas, espiral, etc.) debido a que eran la única solución al desarrollo pero en los últimos año surgieron las metodologías ágiles que nacen con la idea de solventar los problemas asociados al tiempo, poco feedback y la poca flexibilidad de las metodologías tradicionales.
Muchos de nosotros algunas veces nos amarramos a un único modelo de desarrollo aun cuando su aplicación dependerá del tipo de sistemas a implementar. Este punto es de crucial importancia ya que debemos tener claridad al definir que metodología usar.
En el proceso del diseño de software requiere que la toma de decisiones sobre el mismo debe estar basada en criterios, principios o lineamientos. Los objetivos de diseño nos indican que debemos considerar en descomponer nuestro software en componentes, determinar sus relaciones, dependencias y mecanismos de intercomunicación, especificar las interfaces de los componentes, describir sus funcionalidades entre otros.
Para concluir se puede decir que el proceso de análisis y diseño de software debemos realizarlo sobre la base de principios, reglas, metodologías y directrices que nos propone la ingeniería de software. Definir claramente los requisitos, especificación de los mismos, uso correcto de metodologías según las características de cada proyecto sin duda alguna representan la calidad y éxito del software que se esta construyendo.