Ingeniero en Software, diferencia con un Programador

Actualizado el martes, 17 diciembre, 2019

En este artículo te daremos toda la información que necesitas saber sobre la Ingeniería en Software, desde su historia, áreas de trabajo y formación académica hasta las competencias y habilidades que posee un profesional graduado. Ideal si estas interesado en estudiar la carrera pero desconoces que es lo que hace un Ingeniero en Software o sí simplemente deseas conocer un poco sobre esta interesante carrera.

ingeniero en software

Ingeniería en Software ¿Qué es?

En la actualidad hay una disyuntiva entre los profesionales respecto a si deben considerar la carrera como una ingeniería per se o una rama, enfoque y aplicación de otras ingenierías, principalmente de la ingeniería en informática. Esto se debe a que el desarrollo de software, pese a que necesita de un enfoque sistemático, disciplinario y cuantificable es realizado por muchos profesionales de distintas disciplinas. Ingenieros de distintas ramas: eléctricos, informáticos, mecánicos, etc. Así como otros profesionales que incluso no están relacionados con el área de forma directa: médicos, licenciados en biología, química, etc.

Este debate se complica aun más cuando hoy en día encontramos aplicaciones para casi todos los artículos electrónicos y para hacer prácticamente cualquier cosa. Solo basta con echar un pequeño vistazo a las tiendas virtuales de nuestros teléfonos inteligentes (Google Play o Play Store) y ver la gran variedad de Apps (aplicaciones) que hay a disposición de lo usuarios. Donde cualquiera con una buena idea y un nivel de conocimiento mínimo en informática puede programar su propia aplicación.

Lo que es peor, el alcance cada vez mayor de la información que incrementa la probabilidad para que las personas particulares se adiestren por sus propios medios en el desarrollo de software. Si tienes dudas de esto solo debes visitar el portal web de YouTube y escribir “tutorial + cualquier lenguaje de programación”, inmediatamente encontrarás decenas o cientos de tutoriales relacionados que lo único que logran es la transgresión a la profesionalización del desarrollo de software.

Si te preguntas por que comenzamos abordando este tema, la razón es sencilla, debes saber de antemano que el ingeniero en software se enfrenta y deberá lidiar con la competencia e intromisión de profesionales que no están especializados en el el área de forma directa. De hecho, el término de “ingeniero de software” se utiliza de forma genérica y se etiqueta a cualquiera dentro del ambiente empresarial con ella.

Problema que se trató de disminuir al realizar esfuerzos por delimitar su objeto de estudio y definir que es lo que se hace en la carrera. Pero al día de hoy aún no hay una definición dominante y generalizada para el ingeniero en software, por el contrario, existen muchas definiciones que abarcan partes aisladas de lo que hacen. A continuación te dejamos algunas de ellas:

  • Bauer en 1972 indica que la ingeniería en software consiste en el establecimiento de los principios y métodos de la ingeniería con la finalidad de conseguir software de manera rentable, confiable y que puedan funcionar con máquinas reales.
  • El autor Zelkovits en 1978 la define como el estudio de los principios y metodologías para el desarrollo y mantenimiento de software.
  • En cambio, para el año 1976 Bohen indica que la ingeniería de software es la aplicación práctica del conocimiento científico al diseño y construcción de programas de computadora y a la documentación asociada requerida para desarrollar, operar y mantenerlos. Esto incluye a su vez, la creación de nuevos software.
  • Una definición más general establece que la disciplina de ingeniería en software se encarga de la aplicación por medio de una metodología sistemática y cuantitativa del desarrollo, manejo y mantenimiento de los software.
¿Qué es la ingeniería de software y por qué es importante?

De todas estas definiciones podemos concluir tres cosas que hay en común:

  • Todas las definiciones aluden al desarrollo, manejo y mantenimiento de software.
  • La disciplina no posee más de 50 años de haber sido creada, lo que indica que ahora es que está en proceso de desarrollo. Por lo que se puede hablar de la ingeniería en software como una carrera que aún tiene mucho camino por recorrer.
  • En las definiciones se habla de la elaboración de software haciendo uso de muchas características relacionadas con el método científico: la sistematización, cuantificación, el uso de un método.
  • Todas las definiciones hacen referencia a la programación de software para computadoras, sin tomar en cuenta otros equipos electrónicos que hoy en día utilizan programas informáticos para su beneficio y funcionamiento. Pero esta peculiaridad se relaciona con lo rápido que ha avanzado la tecnología en el último siglo.

Debido a muchos desacuerdos que hay respecto a la disciplina, algunas personas consideran que los profesionales en está área deberían ser etiquetados como desarrolladores de software en vez de ingenieros en software. Haciendo hincapié en que la finalidad de la carrera va dirigida principalmente al proceso de creación de nuevos programas. En respuesta a afirmaciones como esta, autores como Pete McBreen explican que el término de ingeniero en software involucra un nivel de metodológia, sistemático y de prueba mayor que el que puede tener la mayoría de los desarrolladores de software.

Otro ejemplo de que la carrera aún se encuentra en pañales la podemos encontrar al observar como para el 2004 solo había contabilizado unos 840 ingenieros de software en USA. Este dato es arrojado por la Oficina de Estadísticas del Trabajo en Estados Unidos.

En la actualidad se puede utilizar cualquiera de estas variantes: ingeniería de software, ingeniería en software o ingeniería del software. Mientras que las siglas que se utilizan para describir a los profesionales de esta área son “IS“.

Lo siguiente que debes saber es que software significa programa y que su elaboración surge a partir de un proceso netamente creativo. Es decir, requiere ir más allá de los conocimientos básicos de la informática, el manejo de los lenguajes de programación y del método científico. Estos conocimientos son la base, pero es la combinación y uso que hace el profesional de dichos aprendizajes para generar un producto final que pueda ser considerado como un programa.

Dicho de una manera más sencilla, crear un programa va más allá de conocer los códigos de programación y de tener conocimientos en redes o bases de datos. Por esta razón, la ingeniería de software lo que intenta como disciplina es generar una sistematización de este proceso con el objetivo de maximizar las probabilidades de éxito, haciendo uso de un conjunto de técnicas que se han ido desarrollando con el paso de los años.

ingeniero en software

La carrera de ingeniería de software se puede considerar como una ciencia aplicada cuya finalidad es la resolución de problemas por medio de su objeto de estudio el cual son los software. Haciendo uso de herramientas sistematizadas y preestablecidas que permiten el desarrollo óptimo de los programas. Esto quiere decir que aunque existan diferentes soluciones para resolver un problema se escoja aquella solución más eficiente para cada caso particular.

El uso de programas de computación ha tenido un crecimiento exponencial en las últimas décadas ampliando el mercado laboral de los ingenieros en software. Pero también las demandas y exigencias solicitadas por las empresas, que cada día automatizan y ponen en manos de los software su infraestructura para incrementar su desempeño y ganancias. Esto obliga a los ingenieros en software a incrementar el nivel de calidad y especialización de sus conocimientos, principalmente con tantos desarrollodares de programas en el mercado ofertando sus servicios muchas veces a un menor precio, pero también con una menor calidad.

¿Qué Hace un Ingeniero en Software?

Luego de mencionar distintas definiciones sobre la carrera seguro tendrás una idea vaga de lo que realiza un ingeniero en Software, pero ahora te lo explicaremos a detalle. Un IS es un profesional especializado con los conocimientos y habilidades para desarrollar, planificar, diseñar, analizar, crear y probar sistemas informáticos y programas. Todo según las indicaciones y demandas de su empleador. Esto quiere decir que un ingeniero en software puede realizar:

  • Esta capacitado para dirigir y liderar proyectos encargados de desarrollar un software o realizar el respectivo mantenimiento de ellos.
  • En concordancia con el punto anterior, el IS esta capacitado para supervisar las distintas etapas de un programa que esté en desarrollo .
  • Posee las habilidades y herramientas para liderar un equipo multidisciplinario compuesto de diseñadores y programadores.
  • Debe estar en la vanguardia e ir estudiando y analizando las nuevas técnicas y herramientas relacionados con los software que salgan al mercado.
  • Planifica y desarrolla aplicaciones de software.
  • Es capaz de realizar pruebas de desempeño para garantizar el perfecto funcionamiento de un programa.
  • Puede integrar distintos sistemas que sean compatibles entre si.
  • Ejerce el rol de asesor en caso de ser necesario para ayudar a terceras personas sobre distintos aspectos relacionados con un software: su uso, mantenimiento, configuración, etc.
  • En relación con el punto anterior, el IS puede trabajar como consultor independiente o en cooperación con otros profesionales del área.
  • Tiene los conocimientos para administrar bases de datos.
  • Trabajar en cooperación con otros profesionales del área de la informática para crear lineamientos de seguridad y técnicas criptográficas para las organizaciones que lo requieran.
  • Corrobora que los programas satisfagan todas las pautas y criterios establecidos por la ley.

ingeniero en software

¿Cómo son sus Actividades Laborales?

Se le puede solicitar a los ingenieros en software trabajar en aplicaciones que ya hayan sido desarrolladas y estén en funcionamiento, para que realicen una revisión del programa actual o para que diseñen un software que reemplace el programa que esta en uso, todo esto según las especificaciones del cliente. El IS debe escribir el código del programa, probarlo hasta estar seguro de su estabilidad, a su vez tiene que especificar como es el funcionamiento de esta nueva herramienta y cuales son las características que poseerá. Deberá realizar una comparación con el programa que estaba en uso para puntualizar donde fueron implementados los cambios y como estos benefician al programa actual a obtener un mejor desempeño.

Cuando se le asigna un proyecto a un ingeniero de software, lo primero que debe hacer es realizar un estudio de su cliente, su negocio, sus necesidades, los problemas que presenta y los requerimientos que solicita. Todo esto para diseñar una herramienta que realmente se adapte a sus necesidades.

En estos casos, el IS va más allá de las funciones de un programador ya que actúa como un consultor en primera instancia. Orientando al cliente respecto a que es lo mejor para cumplir sus exigencias en vez de solo acatar órdenes. Un problema clásico que ocurre en el mundo empresarial es que en ocasiones los clientes piden soluciones para problemas que no son la raíz de base, es ahí donde el ingeniero en software debe participar de manera activa para orienta al cliente a dar con el problema real y trabajar para solucionarlo.

Luego de determinar cual es el problema, se debe plantear distintas soluciones puntualizando aquellas que sean las más eficientes para el cliente. A partir de ahí se finiquita la propuesta final junto con detalles más técnicos como la fecha de entrega o el costo de los honorarios, etc. Todas estas pautas suelen quedar registradas por medio de un contrato.

El trabajo de los ingenieros en software rara vez se hace en solitario. Esa concepción del programador que está en su casa diseñando un programa durante toda la noche califica más como un mito que como una realidad que generalice el quehacer diario. En la actualidad los ingenieros de software deben trabajar en conjunto con un equipo multidisciplinario que varía en su tamaño según lo grande y complejo que sea el programa que se esté desarrollando. Por ejemplo, no es lo mismo diseñar un sistema operativo que un aplicación para tomar notas. Por otro lado, a medida que van avanzando se debe ir probando que el programa no presente errores y funcione perfectamente.

Al finalizar el proyecto, se realiza una presentación con el cliente y las personas que manejaran el software para mostrarlo, aclarar dudas y corroborar que todas las exigencias solicitadas hayan sido cubiertas. Una vez que se ha superado esta etapa viene el proceso de adiestramiento donde los empleados de la empresa encargados de manejar el programa aprendan a utilizarlo de manera correcta. En ocasiones, para facilitar el adiestramiento, los ingenieros en software elaboran manuales con las instrucciones pertinentes relacionados al software creado.

¿Cuál es el Perfil Profesional de un Ingeniero en Software?

Para ser un profesional en la creación y desarrollo de programas se necesita:

  • Habilidad para resolver problemas.
  • Tener pensamiento lógico, sistemático y metódico.
  • Ser atento a los detalles.
  • Perseverancia, no te puedes comprometer a realizar un proyecto y dejarlo a la mitad.
  • Dominio avanzado de los conocimientos técnicos.
  • Capacidad para desenvolverse a nivel interpersonal.
  • Tener la versatilidad para trabar solo o en equipo.
  • Estar actualizado con las tecnologías del momento.
  • Habilidad para redactar texto, de forma que puede plasmar por escrito manuales, propuestas, instructivos, etc.
  •  Facilidad para la comunicación.
  • Trabajar bajo presión.
  • Ser organizado.
  • Pensamiento holístico y capacidad de análisis para ser capaz de entender cuales son las necesidades reales de sus clientes.

Competencias de un Ingeniero en Software

Las principales competencias que debe tener un IS son:

  • Ser organizado.
  • Tener buena atención.
  • Poder trabajar solo o en equipo.
  • No tener miedo a tomar la iniciativa.
  • Ser capaz de verificar los errores de los programas.
  • Pensamiento flexible (lo opuesto a la rigidez mental).
  • Habilidades de comunicación para dar información compleja de forma sencilla y que los clientes o personas relacionadas sean capaces de entender.
  • Ser capaz de mantener el control bajo presión y trabajar en base a fechas límites.
  • Facilidad para resolver problemas.
  • Ser paciente.
  • Ser capaz de trabajar teniendo un presupuesto fijo o en todo caso, ser capaz de realizar estimaciones coherentes con el trabajo a realizar.
  • Poder realizar un trabajo multidisciplinario.

Se que mucha de estas competencias suenan desafiantes y difíciles de dominar, pero si estas comenzando en esta área no te preocupes, ya que todas estas habilidades se pueden desarrollar con el trabajo duro, estudio y experiencia.

¿Cuánto gana un Ingeniero en Software?

Esta es una pregunta típica que se suele hacer, pero la respuesta no es tan sencilla ya que los sueldos de un IS varía ampliamente dependiendo de la rama o área en la que trabaje. Esta condicionado si trabajas como un profesional independiente, contratista privado o empleado para una compañía. En todo caso, te podemos asegurar que los sueldos son bastante considerables dado la demanda que poseen estos profesionales en la actualidad. Además, debemos decirte que un gran porcentaje de las personas que se han hecho multimillonarias en las últimas décadas han estado relacionadas con el desarrollo de software. Así que te puedes dar una idea de la relevancia y lucro de esta carrera.

Historia de la Ingeniería en Software

La historia de la ingeniería del software esta intrínsecamente relacionada con la historia de la computación, la cual comienza a partir del año 1940. Para esta época el desarrollo de programas era algo totalmente nuevo y novedoso, por lo que se hacía imposible realizar estimaciones sobre los recursos necesarios para finalizar un programa.

El tiempo requerido para crear un software podía demorar mucho y sobrepasar los tiempos de entrega, disminuyendo las ganancias debido a los presupuestos solicitados. Además de todas estas incertidumbres, había muchos problemas de compatibilidad entre equipos y sistemas, provocando que un programa funcionara solo para casos, máquinas y sistemas operativos específicos, por lo que había que escribir varias versiones de un mismo programa que al final, solo estaría en el mercado unos dos o tres años para ser reemplazado por un modelo nuevo haciendo obsoleto el programa.

El término de ingeniería de software se comenzó a utilizar a partir del final de 1950 e inicios de 1960. Sus inicios y crecimiento fueron ampliamente nutridos por la crisis de software que se comenzó a presentar entre los años 1960 a 1980. La IS se comienza a acoplar elaborando principios metodológicos para estandarizar el proceso de desarrollo de los software y el mantenimiento de los sistemas.

Aunque en sus inicios tuvo que afrontar muchas dificultades con algunos accidentes relacionados con problemas de programación, uno de los más destacados y sonados por la prensa ocurrió cuando un error en el programa de una maquina de radioterapia Therac-25 emite una cantidad enorme de radiación provocando la muerte de tres personas. Poniendo en la mira del ojo público a la ingeniería de software de forma negativa.

A comienzos de 1980 la ingeniería en software comienza a establecerse como una profesión aunque se le vincula principalmente con carreras como la informática o el resto de las carreras de ingeniería, siendo considerada como una ramificación de estas. Desde el punto de vista técnico, el paradigma de programar cambia y se deja de utilizar las tarjetas perforadas para ser leídas en máquinas cuyos resultados eran arrojados por medio de una impresora. La razón principal es que estos métodos resultaban muy costosos y poco prácticos para la velocidad con la que se introducían al mercado nuevas tecnologías. Es así como empieza el nacimiento de la programación como la conocemos hoy en día, utilizando programas (conocidos como lenguajes de programación) para escribir una secuencia de códigos que al ser leídos en conjunto generarían un nuevo software.

Otra peculiaridad de interés es que para el año de 1980 resultaba dos veces mas caro el mantenimiento de infraestructura requerido para tener un software en comparación con su desarrollo. Estos costos se incrementaron un 30% aproximadamente para inicios de 1990, lo que generaba que muchos proyectos no fueran monetariamente rentables.

Además, los tiempos de entrega resultaban ser muy largos, sobrepasando las estimaciones que se les daba a los clientes y cuando era entregada la versión final, generalmente estaba llena de errores inesperados. Provocando que en muchas ocasiones ni siquiera se utilizará el software, esto ocurrió en alrededor de un 75% de los proyectos realizados en esa época. Hoy en día los expertos en el área afirman que la razón principal de estos fracasos se originódio debido a una falta de disciplina en los programadores.

Casi todos los esfuerzos en materia de informática para los años de 1970 a 1990 estuvieron enfocados en corregir todos los inconvenientes y problemas ocasionados por la crisis del software la década anterior. Durante este período comenzamos a ver esfuerzos más sistemáticos para obtener una fórmula para el éxito de la programación. El problema radicaba en que las personas encargadas de hacer esto intentaban obtener una clave universal que funcionará para cualquier problema. Pero la verdad es que esa idea era un ideal muy alejado de la realidad, ya que cada problema que se presentaba, traía desafíos únicos y sus soluciones solo abarcaban una pequeña parcela de la crisis del software.

A partir de aquí entramos en la era del internet y las reglas del juego cambiaron dramáticamente. Hubo un incremento en la demanda de Sistemas Internacionales de Despliegue de Información en la World Wide Web y los desarrolladores debieron evolucionar y aprender a una velocidad nunca antes vista para adaptarse al mercado. Se volvió un requisito indispensable manejar mapas, fotografías, animaciones e ilustraciones. Por otro lado, el internet abrió las puertas a la globalización, de modo que se hizo indispensable diseñar programas multilenguaje y sistemas universales que permitieran convertir la información de diferentes idiomas a un lenguaje común que pudiera ser entendido por cualquier programador.

Con la introducción del lenguaje HTML y los navegadores web la ingeniería en software comienza a ser más lucrativa de lo que no había sido nunca antes, generando ingresos de unos 90.000 millones de dólares al año. Pero no todo fueron éxitos, así como el internet abrió las puertas de un nuevo mercado, facilitó las actividades maliciosas de muchos programadores que desarrollaron una gran cantidad de virus informáticos. Iniciando una nueva etapa en el desarrollo de sistemas confiables y seguros capaces de prevenir el ataque de software maliciosos.

Para la época del 2000, cuando la demanda de software está en un crecimiento acelerado, comienza la necesidad de crear sistemas, programas y soluciones más económicas y rápidas de implementar. Lo que favorece enormemente al diseño de estrategias y metodologías más eficientes, con un enfoque más sencillo y rápido para el desarrollo de software y la estimación de algoritmos.

Objetivos de la Ingeniería de Software

Los principales objetivos que posee la carrera de ingeniería en software son:

  • Mejorar la estructura y diseño de los programas y aplicaciones para que se adapten a las necesidades y requerimientos de las empresas que lo solicitan (o en todo caso, que las crearon).
  • Establecer pautas y parámetros que fomenten la estandarización del ejercicio profesional en el desarrollo de software y mantenimiento de sistemas.
  • Crear lineamientos que promuevan la organización y el trabajo en equipo para el desarrollo y mantenimiento de programas.
  • Aumentar la exactitud al momento de realizar una estimación de recursos a nivel de capital y tiempo para la elaboración de un proyecto.
  • Desarrollar software complejos que tengan un mayor nivel de calidad.
  • Elaborar pruebas para medir el desempeño y rendimiento de los programas con la finalidad de detectar fallas u oportunidades para mejorar el software.

Etapas del Proceso de Desarrollo de Software

Como se mencionó en apartados anteriores, uno de los objetivos de la ingeniería de software consiste en elaborar procedimientos para el desarrollo de software que estén estandarizados y sigan toda una serie de lineamientos metodológicos, sistemáticos, repetibles y predecibles que permitan incrementar la calidad del producto final.

Aunque existe otra razón para hacerlo de esta forma, cualquier otro profesional IS es capaz de comprender un programa que haya sido realizado por otro colega y hacer alguna corrección en caso de ser necesario. Para el día de hoy no hay un único método universal desarrollado que satisfaga lo que acabamos de decir, pero una solución a este problema, ha sido estructurar el proceso de desarrollo de software en etapas que como conjunto se conoce como “Ciclo de Vida“, de esta forma se puede aislar un problema en alguna de esas etapas y agilizar la corrección del problema.

A continuación procederemos a explicar cada una de las etapas que comprende un ciclo de vida.

1- Obtención de Requisitos

Esta es la primera etapa por la que debe pasar cualquier software y se puede concebir como una fase exploratoria donde el ingeniero debe realizar un proceso de investigación para dar respuestas a preguntas como:

  • ¿Para qué será utilizado el software, cuál es su función?
  • ¿Quienes utilizarán el programa y cuál será el flujo de usuarios que tendrá que soportar el software?
  • ¿La solicitud de la empresa coincide con sus necesidades reales o se debe hace alguna sugerencia al programa que desean?
  • ¿Cuáles son los recursos que posee la empresa para el desarrollo y mantenimiento del software, tanto a nivel de talento humano, como de capital y hardware?
  • ¿Quién es el usuario que utilizará la herramienta?.

Estas preguntas permiten dar una idea de la finalidad de esta etapa, la cual busca poner en contexto al ingeniero en software sobre el trabajo que va a realizar. Debe dar respuesta a preguntas como esta, hasta que posea información suficiente para avanzar a la siguiente etapa.

Lo primero que hay que saber es sobre que se está trabajando, para que se necesita el software y porque el empleador lo desea, que busca obtener con el desarrollo del programa. Aunque esta etapa no es exclusiva para la creación de un programa desde cero, también es aplicable cuando se desean realizar cambios en un software ya existente. Por otro lado hay que saber cuáles son los recursos con los que se cuenta y obtener información suficiente para realizar una estimación de los recursos que harán falta.

Se debe diferenciar entre los aspectos ajenos al programa como los usuarios, sistemas rivales, equipos, etc. Con los aspectos intrínsecos de el, por ejemplo la interfaz a utilizar (o que utiliza), como es la estructura de las redes, la cantidad de información que debe manejar y cuanto de esa información debe almacenar, etc.

Otro aspecto vital en esta fase es el estudio de las posibles complicaciones y adversidades que tendrá que afrontar. Los cuales no necesariamente están relacionados con la dificultad para diseñar el código del programa. Por ejemplo, puede que el mayor desafío sea el tiempo de entrega solicitado por el cliente o la carencia de una infraestructura que soporte el software. Por último, hay que plantearse escenarios inesperados que puedan generar problemas al programa, por ejemplo: que haya un tráfico de información mucho mayor al previsto por el cliente. Sopesar estos retos permite al ingeniero plantear un proyecto que se ajuste a las necesidades y recursos del cliente.

2- Análisis de Requisitos

En la primera fase el ingeniero realiza un proceso de exploración por su cuenta intentando obtener una idea de lo que se necesita sin verse sesgado por lo que le pueda decir el cliente. Una vez completada la fase de obtención de requisitos llega el momento de reunirse con el empleador o cliente para escuchar que desea y plantee cuales son sus necesidades. Que indique para que quiere software, que espera que haga y bajo que condiciones quiere que funcione. En este momento el ingeniero debe asumir un rol de investigador e intentar obtener la mayor cantidad de información al respecto para poder entender la postura del cliente (en caso contrario puede ocurrir que el ingeniero no entienda porque cierto requisito o solicitud es tan importante para el cliente).

Habiendo obtenido toda la información necesaria el IS plantea un software tentativo indicando lo que hará, sus características y estableciendo la interfaz que considera más adecuada para utilizar. Es en este momento cuando se debe orientar al cliente (en caso de que sea necesario) si la solicitud que esta realizando no solucionará el problema que posee y ofrecer una alternativa que si lo haga considerando la repercusión que tendría con los usuarios finales. Esto es muy común sobre todo cuando los clientes poseen pocos conocimientos en informática, redes o la tecnología en general.

Para finiquitar esta fase se debe plasmar en un documento las especificaciones que tendrá el software, como será su estructura y cuales serán las funciones que realizará. Por otro lado, también se tiene que definir el “diagrama de entidad-relación” donde se indica quienes participarán en el proyecto (si se necesita de personal adicional o hay que trabajar con alguna entidad u organización). Para formalizar el documento lo mejor es seguir las pautas establecidas por la IEEE Std. 830-1998 donde se indican los lineamientos para hacer la captura, análisis y especificación de los requisitos dejando pruebas que constaten lo hablado.

A modo de síntesis, el análisis de requisitos busca:

  • Orientar al usuario en todo lo que necesita para que pueda cooperar con el IS para el desarrollo del programa permitiendo que se cumplan los requerimientos del cliente.
  • Permite al ingeniero realizar una estimación real y coherente en conjunto con el cliente sobre el tiempo y recursos necesarios para finalizar el proyecto.
  • Incrementar el desempeño del programa minimizando la posibilidad de conseguir fallas.
  • Implementar métodos eficientes para aumentar la calidad del software considerando la función que desempeñará.

No siempre en esta etapa se podrá realizar una estimación del tiempo y los recursos que serán necesarios para finalizar el proyecto. Habrá ocasiones donde el problema a resolver será muy complejo e impida esta parte del proceso en esta fase del ciclo de vida.

3- Limitaciones

Una de las cosas que se busca al momento de realizar un programa es que sea capaz de emular la inteligencia humana, pero debido a la naturaleza lógica de la programación, el mejor acercamiento que se puede realizar es la construcción de funciones predeterminadas que se activen bajo ciertas condiciones, donde a mayor cantidad de opciones, tendrá un catálogo de respuesta más variado dando una mayor sensación de inteligencia. Los ingenieros en software son conscientes de esta limitación y deben tomarla en cuenta al momento de planificar como desarrollar el programa. De manera que deben registrar, describir y catalogar el mayor número de comportamientos que el software deberá identificar para que pueda dar una responder que sea validad y acorde a la situación.

Otro aspecto que se debe tener en cuenta es la cantidad de cálculos, procesos y tareas que el programa deberá ejecutar, ya que mientras más grande sea la exigencia mayor será los recursos a nivel de hardware que se necesitarán. De modo que hará falta un equipo que con mejores componentes.

4- Especificaciones

Consiste en la descripción del funcionamiento y las tareas esperadas que realizará el software a desarrollar. Para esto es importante haber realizado de manera satisfactoria la etapa de obtención de requisitos y la etapa de análisis de requisitos, ya que a pesar que el ingeniero es quien indicará el funcionamiento del software, es imprescindible tener la aprobación del cliente (no hay que olvidar que es el quien paga). También se debe considerar la reacción de los usuarios ante la interacción con el posible programa, hacerlo incrementará las probabilidades de éxito del software. Se debe desarrollar un programa que cumpla con lo que exige el cliente, pero también que tome en cuenta las solicitudes de los usuarios, ya que son ellos quienes determinarán el triunfo de la aplicación.

Las dos técnicas más utilizadas para realizar las especificaciones de requisitos son:

  • Las Historias de Usuarios.
  • Los estudios de Casos de Uso. Esta técnica es más rigurosa y estructurada mientras que las historias de usuarios son más informales.

5- Arquitectura

Consiste en la planificación y asignación de tareas asociadas al desarrollo del programa, crear la base de datos, hacer la integración de la infraestructura, encargarse de las herramientas para administrar el software, etc. Esta tarea no es sencilla ya que es necesario tener conocimiento de cada una de estas tareas, liderazgo y saber como delegar funciones de manera que el trabajo se realice de forma armónica y en equipo.

La persona que realiza estas asignaciones se le conoce como arquitecto de software y agrega un valor a todos los procesos que se deben realizar debido a su experiencia para generar soluciones tecnológicas. Esta fase va orientada al diseño del plan de acción que se va a seguir para desarrollar el software, considerando los aspectos lógicos y físicos, las bases de datos, la información que va a manejar el sistema, el tiempo y los recursos disponibles.

Los arquitectos de software hacen uso de distintos diagramas para ayudarse en la planificación, algunos de ellos son:

  • Los diagramas de despliegue.
  • Diagramas de base de datos.
  • Diagramas de secuencia.
  • Diagrama de clases.

Tanto el diagrama de base de datos como el de clases, son los mínimos requeridos para enunciar como será la arquitectura de software que está por ser escrito su código fuente. La elección del diagrama a utilizar viene dado por la complejidad del proyecto. Para finalizar con este punto, queremos acotar que los arquitectos de programas utilizan el término CASE para referirse a las herramientas de diseño y modelado de software por su traducción al inglés: Computer Aided Software Engineering. Las dos casos más utilizadas son: Microsoft Visio for Enterprise Architects y Enterprise Architect.

6- Programación

Esta etapa consiste en transformar las ideas y requerimientos solicitados por el cliente en código. Es el trabajo insignia por el que es conocido el ingeniero de software, aunque no por esto resulta la tarea más complicada o la que requiere de mayor inversión de tiempo. Dependerá de lo complejo que sea el programa, del lenguaje de programación que se utilice y la experiencia del ingeniero para programar. Para muchos profesionales en el área, el ejercicio de programar es comparado con las habilidades que posee un pintor para crear arte o de un músico para hacer música debido a que no basta solo con tener conocimiento sobre los códigos o los lenguajes de programación, es necesario la práctica, la creatividad y la imaginación al momento de codificar un programa.

7- Desarrollo del Programa

Para tener un programa que sea considerado eficiente es necesario tomar en cuenta las siguientes fases:

  • Desarrollo de la Infraestructura: Se relaciona con la administración y organización de los elementos que estructurarán la aplicación. Esta fase permite desarrollar la aplicación de forma eficiente.
  • Adaptación del Paquete: Esta fase implica un estudio cuidadoso del paquete para tener una comprensión holística de su funcionamiento. De esta forma se puede lograr obtener un programa con eficiencia y con un óptimo desempeño en recursos para la empresa. Acá se revisan todos los componentes y características de forma minuciosa para disminuir las probabilidades de conseguir algún error.
  • Desarrollo de Unidades de Diseño de Interactivas: aquía se hacen todos los procedimientos relacionados con la interacción software-usuario. La finalidad de esta fase es:
    • Definir las acciones que deberá realzar la unidad de diseño.
    • Crear todos los componentes para los distintos procedimientos a utilizar.
    • Realizar los test de prueba o simulaciones de la integración del sistema para medir el desempeño de la unidad de diseño.
  • Desarrollo de Unidades de Diseño Batch: Esta sub-fase es de vital importancia pues es la manera como se le transmitirá al programador la estructura, secuencia, objetivos y funciones que realizará el software. Para hacerlo se hace uso de la combinación de una serie de técnicas como las tablas de decisiones, los diagramas de flujo, los diagramas de estructuras, entre muchos otros. Aunque se pueden realizar técnicas aisladas, lo común es que se utilicen varias en conjunto. Al finalizar esta etapa el programador debe ser capaz de entender cuales son las especificaciones del programa y comprender como se desea que funcione. Esto facilitará el proceso de programación del código.
  • Desarrollo de Unidades de Diseño Manuales: su finalidad es poder solucionar o resolver todas las tareas de tipo administrativas relacionadas con el uso de los componentes computarizados.

8- Pruebas de Software

Como el nombre lo indica, en este apartado se corrobora y garantiza que el producto final este en buen estado, cumpla con los requisitos y objetivos por el que fue desarrollado y no presente errores. Esta verificación se suele realizar de tres formas diferentes: la primera revisión es la que hace el programar cuando termina de codificar el código, es el primer chequeo que se realiza y busca detectar y corregir los errores en el instante que los detecta. Luego de que se supera este nivel de verificación, el software es probado de manera unitaria o de forma integral.

Verificar el programa de manera unitaria implica ir probando el software por partes, es decir; se va comprobando la integridad y funcionamiento de cada unidad del sistema, este método es muy útil para aislar posibles fallas que presente el software en fragmentos específicos del código. Por el contrario, realizar una prueba integral implica probar el software en su totalidad para verificar que el programa funcione bien en conjunto. Estas dos técnicas de prueba se suelen utilizar en conjunto en el orden mencionado.

Otro método para probar el programa consiste en hacerlo por medio de dos sesiones, donde en una de ellas se utiliza a personas inexpertas en el área o que no posean conocimientos sobre lo que hace el software y en la otra sesión se utiliza personal especializado que no haya trabajado en la programación y creación del programa (generalmente programadores expertos). Este método de prueba permite contrastar cuales son las fallas que visualizan los usuarios finales, que no necesariamente están relacionados con si se cumple o no los objetivos del programa.

En muchos casos los errores reportados por los usuarios giran en torno a la navegación, el diseño, incluso los colores. Aunque a simple vista estos aspectos quizás no se consideren tan relevantes pueden generar un gran impacto en el éxito del programa al salir al mercado. Cuando la revisión la realizan programadores expertos se busca detectar fallas a nivel de sistema, errores en el código, problemas con la navegación, etc. Fallas que a simple vista un usuario cualquier pasaría por alto.

Aprovechamos este apartado para definir “Compilar“. Término utilizado para expresar que un programa funciona cuando se realiza una test de prueba. Un programa que no compila significa que tiene un error en el código que evita que funcione como es esperado.

Algunos autores comentan que durante esta etapa de prueba es recomendable mostrar el producto obtenido a los clientes y usuarios finales para recibir una retroalimentación del funcionamiento, aspecto y rendimiento del software. Además, de debe velar por el funcionamiento interno del programa así como los procesos externos de este.

9- Implementación

Cuando hablamos de una especificación nos referimos a tener que agregar una característica adicional al software, bien sea a nivel técnico, de algoritmo, etc. Las especificaciones suelen ser dadas según un estándar el cual es dictaminado por el World Wide Web Consortium, aunque las herramientas para programar el software (los lenguajes de programación) poseen algunas implementaciones para facilitar el proceso. Los modelos de implementación se puede concebir como compendio de sub-sistemas y componentes, algunos de los más destacados son: ficheros de código fuente, ficheros ejecutables, etc.

En esta fase se busca transformar una especificación del sistema en un sistema ejecutable que pueda ser utilizado por el usuario final. Esta estrechamente vinculado con los procesos de diseño y programación.

10- Documentación

La documentación consiste en dejar un registro escrito que relacionado con el software que sirva como manual de instrucciones, manual de operaciones, manual de mantenimiento, modelaciones (UML), diagramas de casos, los test de prueba que se realizaron, transcripción del código fuente, etc. Todo esto con la finalidad de poder realizar correcciones o actualizaciones en un futuro, así como corregir posibles fallas que se presenten. La creación de muchos de estos manuales suele ser solicitado por el cliente al momento de hacer la solicitud del software,

11- Mantenimiento

Como el nombre lo indica, aquí se realizan todos los pasos y procesos que serán necesarios para brindar mantenimiento al software una vez que este en uso. Ya sea a nivel físico (mantenimiento de los servidores, limpieza de los equipos, etc), como a nivel de sistema (depuración de archivos, respaldo de la información, eliminar errores, etc).

El mantenimiento es una etapa crucial para garantizar la vida útil de un programa y puede requerir una inversión de tiempo incluso mayor a la requerida para la creación del software, debido a que en muchas ocasiones es un trabajo constante. Sobre todos en programas muy grandes, de mucho tráfico de gente o que manejan mucha información. Por ejemplo, las redes sociales.

Desde el punto de vista del ciclo de vida, se considera que dos terceras partes esta dedicada al mantenimiento del software.

Modelos y Ciclos de Vida de la Creación de un Programa

Como se mencionó al comienzo del artículo, uno de los grandes inconvenientes que tuvo la evolución de la programación durante sus etapas iniciales fue la falta de estandarización en su desarrollo. Que cada quien creaba los software como mejor lo consideraban hacía complicado para otras personas entender su funcionamiento y por ende dificultaba aspectos como el mantenimiento que se debía emplear o la corrección de errores. Para solucionar este inconveniente se buscó desarrollar distintos paradigmas y modelos que enmarcarán el ejercicio de programar. A esto se le conoce como los ciclos de vida del desarrollo de software. E indica distintos enfoques que ilustran un metodología sistemática para desarrollar, probar y entregar un programa, pasando por muchas de las etapas descritas en el apartado anterior. A continuación, procederemos a dar un breve explicación de los principales modelos que se utilizan en la actualidad.

Modelos Cascada

A este modelo también se le conoce como clásico o ciclo de vida clásico por ser uno de los primeros en desarrollarse. Se enfoca en una metodología que busca ordenar las etapas del ciclo de vida del programa de forma sistemática en secuencia, es decir, primero se realiza una etapa, luego otra y así consecutivamente hasta completar el desarrollo del software. Se suele comenzar con la fase de especificaciones del programa solicitado por el cliente para luego realizar la planificación y diseño, la programación del código, las revisiones de prueba, la creación de los manuales y se finaliza con el mantenimiento del software. Aunque es importante acotar que este orden no es el que necesariamente se debe seguir, puede haber alguna variación si el ingeniero en software así lo considera pertinente, aunque siempre se cumple la regla de completar una fase antes de iniciar con otra.

Modelo de Prototipos

Estos modelos se categorizan dentro de los modelos de desarrollo evolutivo. Su gran ventaja es que permite el desarrollo rápido de un software debido a que el cliente y el usuarios tienen claro cuáles son los requisitos y necesidades que desean satisfacer con el programa. Esto permite que desarrollador no pierda tanto tiempo en las fases iniciales al no tener tanta incertidumbre sobre lo que debe hacer y se enfoque en la escritura y prueba del código.

Resulta muy útil para diseñar software que permitan hacer análisis del comportamiento que tendría en el mercado, para probar nuevas especificaciones o medir su alcance. Aunque hay que tener cuidado, ya que esos estudios no garantizan el éxito al hacer un uso real del programa.

Modelo en espiral

Fue creado y propuesto por Barry Boehm en el año de 1986, pertenece al grupo de modelos evolutivos y funciona de la siguiente manera, el software que se desea realizar se conjuga de forma iterativa con el sistema en cascada. Es decir, a medida que se van avanzado en las etapas del ciclo de vida se van nutriendo cada una de las fases que ya fueron realizadas, de modo que se puede describir como un sistema de revisión y edición constante por medio de una serie de ciclos o iteraciones. En teoría, cada ciclo que se realice debe ser más complejo que el anterior.

Es un modelo que brinda mejores resultados que el modelo en cascada pero su uso es bastante complejo y se torna muy difícil realizar el cálculo de los riesgos del sistema, por lo que suele ser muy poco utilizado en la actualidad.

Modelo de Desarrollo por Etapas

Este modelo aborda el desarrollo de software descomponiendo en partes que se irán realizando una por una. Es muy útil cuando solo se tiene parte de las especificaciones por parte del cliente o se quiere priorizar algunas funciones del programa por encima de otras. En este modelo la entrega se realiza por etapas y durante cada una se incorporan funciones que se irán trabajando en simultáneo hasta completar todo el software (que se una las diferentes versiones del código).

Las fases que se utilizan en este modelo son: diseño inicial, especificación conceptual, análisis de requisitos y el diseño detallado (acá se incluye la codificación, depuración, prueba y liberación). El diseño detallado es una fase que se suele repetir durante cada etapa del desarrollo del software.

Sus principales ventajas son:

  • Facilitan que se alcance los tiempos de entrega con el cliente al realizar estimaciones de tiempo por etapas.
  • Se hace mucho más sencillo la detención y corrección de errores al haber una mayor frecuencia de etapas de prueba. No se debe esperar hasta que se tenga el producto final para compilar errores.
  • Hay una disminución del tiempo que se invierte realizando informes de desempeño ya que cada etapa implica un avance en el proyecto.

Modelo Incremental (Iterativo)

También es conocido como modelo creciente. Surge como una propuesta ante las debilidades del modelo clásico en cascada. Su funcionamiento se da de manera secuencial aunque lo hace de una forma iterativa o escalada. Esto quiere decir que a medida que se va avanzando por cada una de las etapas se obtiene un software con mejores resultados hasta llegar a la versión final.

Trabajar de esta manera implica hacer uso de prototipos, aunque la distinción en este modelo radica en que durante cada entrega el programa será más complejo y sofisticado. Este diseño es especialmente útil cuando no se cuenta con los recursos para hacer una complementación completa.

Modelo Estructurado

Hace uso de técnicas de diseño estructurado o dicho de otro modo, de la programación estructurada para desarrollar software. Además es muy útil cuando se crea algoritmos del programa. Permite una compresión más sencilla de la estructura de los datos y la manipulación de estos.

Sus principales características y bondades son:

  • Toma en cuenta la totalidad de los datos en vez de enfocarse en unos pocos como ocurre con algunos modelos.
  • Hay una mayor facilidad para discriminar procesos y las estructuras de los datos.
  • Se realiza una jerarquización de los datos y los procesos.
  • Se logra un nivel de abstracción mayor del software.

Aún así, este modelo cuenta con las siguientes desventajas:

  • La manipulación del código se torna complicada cuando es muy largo.
  • Puede ocurrir que se repitan los datos en distintos segmentos del software.

Por otro lado, las técnicas que generalmente se utilizan son:

  • El modelo de entidad y relación. Vinculada con los datos que utilice el sistema.
  • El diagrama de flujo de datos. Vinculada con los procesos que realice el software.

Modelo Orientado a Objetos

La base de este modelo es la programación orientada a objetos, por lo que su esencia es similar. Consiste en programar en función a características particulares del software que trabajan de manera independiente, es decir: los objetos son entidades que poseen una definición, comportamiento o identidad particular.

El concepto también se aplica al análisis de requisitos y al diseño. Esto permite que este modelo se nutra de las técnicas desarrolladas por el modelo estructurado al poder utilizar diagramas de estado y transiciones. Este modelo posee dos características principales:

  • Permite que se pueda volver a utilizar o reutilizar un programa.
  • Debido a lo sencillo que es su implementación, favorece el desarrollo de una notación orientada a objetos conocida como UML.

Modelo RAD

El modelo RAD conocido como Rapid Application Development o desarrollo rápido de aplicaciones en español, funciona como un modelo de procesos para el desarrollo de programas de forma incremental. El modelo fue propuesto por James Maslow para el año de 1980 y se caracteriza por hacer uso de un ciclo corto de desarrollo.

La implementación de este modelo permite al ingeniero en software construir sistemas donde se combinen técnicas y utilidades CASE (computer aided software engineering). Esto se traduce en la posibilidad de utilizar prototipos enfocados al usuario manteniendo un seguimiento para corroborar que se cumplan los objetivos por los que fue desarrollado el programa. Todo esto para incrementar la velocidad de elaboración del software haciendo uso de un enfoque que se basa en componentes.

Solo se necesita conocer bien los requisitos y trabajar en base a esas pautas para diseñar un software funcional en un período de tiempo muy corto sin desmejorar la calidad del producto. Al menos en comparación con la mayoría de los demás modelos citados acá.

Código de Ética del Ingeniero en Software

Así como ocurre con el resto de las disciplinas, los ingenieros en software deben seguir una serie de lineamientos éticos y morales que garanticen el buen ejercicio de su trabajo a nivel profesional. Además, describen que el IS usara los conocimientos adquiridos para realizar el bien y garantizar que la profesión sea respetada y beneficiosa para la sociedad.

Los principales principios éticos fundamentales por los que se rige el profesional de la ingeniería en software son:

  • El ejercicio de la ingeniería en software debe ser congruente con el interés social. Tomando responsabilidad por lo que sus acciones puedan llegar a ocasionar. Aceptando realizar proyectos que no agredan de ninguna forma a los demás.
  • El trato con el cliente debe ser respetuoso y se debe realizar el mejor esfuerzo posible por satisfacer las necesidades y requerimientos que posea. Siempre que su finalidad sea congruente con el interés social. Por otro lado, el IS se compromete a trabajar de forma responsable y honesta evitando hacer uso de software ilegales o que carezcan de ética. Además, se compromete a salvaguardar los recursos que le son puestos a su disposición.
  • Todos los programas que sean desarrollados deben cumplir con los requisitos y parámetros establecido por ley. Buscando siempre obtener un producto de la más alta calidad a un costo razonable de forma que será rentable para los clientes.
  • El ingeniero en software se compromete a estar en aprendizaje constante para que sus conocimientos estén al día y poder brindar el mejor servicio a sus clientes.

Recursos Utilizados en el Diseño de Software

Cuando una empresa solicita los servicios de un ingeniero en software y pide una cotización o presupuesto para evaluar los costos que saldría hacer el programa, debe considerar que serán necesario los siguientes recursos:

  • Recursos Humanos: Corresponde a las personas que serán necesarias para participar en cualquiera de las instancias de creación del software. Desde las personas encargadas de la planificación y diseño (ingenieros en software, sistemas, etc), hasta el gestor requerido para cubrir aspectos legales. En esta categoría se incluyen a todas las personas que participan de forma activa para que el proyecto se realice. En la actualidad cada vez se hace un menor uso del término recursos humanos y se menciona como capital humano o talento humano.
  • Recursos de Entorno: Alude a todos los equipos o hardware junto con los software necesarios para llevar acabo el proyecto. Por ejemplo, si se necesitan de N cantidad de equipos para que los ingenieros realicen la programación del programa o si hace falta que los equipos posean un tipo específico de sistema operativo.

Impacto Socioeconómico del Desarrollo de Software

A nivel Económico: Para darte una idea, solo en los Estados Unidos el desarrollo de software corresponde a una octava parte del incremento del producto interno bruto durante los años 1990 al 2000. Esto corresponde a una cifra de al rededor de 90.000 millones de dólares al año y una novena parte de todo el crecimiento productivo (una cifra que asciende a los 33.000 millones de dólares al año). Por otro lado, a nivel mundial el desarrollo de software supera el billón de dólares americanos durante toda la época de 1990. Ahora bien, ten en cuenta que estos datos tienen más de 20 años de antigüedad y para ese momento no había el mismo boom tecnológico que hay hoy en día así que esa cifra debe ser muy superior en la actualidad.

A nivel Social: Pocos avances tecnológicos han tenido un cambio tan drástico en la cultura global como el desarrollo de software en las últimas dos décadas. Han acelerado a pasos gigantescos la globalización permitiendo que la información vaya a cualquier sitio en cuestión de segundos. Fomenta el intercambio cultural y la comunicación haciendo posible conocer costumbres, modas, noticias y muchas cosas más en cosa de unos pocos click.

Su uso para mejorar la calidad de vida de las personas se puede apreciar en casi cualquier producto que sale al mercado en la actualidad. Desde juguetes, alarmas, hasta carros, celulares, electrodomésticos y prácticamente cualquier objeto que se te ocurra, posee un software para ayudarte a utilizarlo. Incluso en el área de la salud se han realizado muchos avances gracias a la implementación de programas de computadora.

Su uso también se ha extendido a las entidades gubernamentales, bancos y los servicios públicos disminuyendo la inversión de tiempo que antes se debía utilizar para hacer una solicitud o un trámite. Por ejemplo, ahora puedes realizar muchas de las operaciones bancarias desde la comodidad de tu casa, incluso en algunos países puedes realizar las compras de los alimentos desde tu teléfono, tablet o pc de escritorio. Así como estos ejemplos, existen muchos otros que demuestran como los software han tomado un papel importante en la vida de las personas en todos los rincones del mundo.

Si te ha resultado de utilidad la información que haz encontrado aquí, entonces te puede interesar leer también:

(Visited 256 times, 1 visits today)
Categorías España

Deja un comentario