Ingeniero en software lo que hace el profesional

Ingeniero en software lo que hace el profesional

Ingeniero en software lo que hace el profesional. Muchas carreras juegan hoy en día un papel fundamental dada su importancia en el desarrollo tecnológico. Una de estas es la Ingeniería de sistemas. En este artículo, se explica en detalle todo lo referente a lo que hace un Ingeniero en software, así como también cuánto gana un Ingeniero en software. Si tienes alguna inquietud recuerda contactarnos a través de nuestras redes sociales, o regístrate y déjanos un comentario en esta página. También puedes participar en el WhatsApp. Si usas Telegram ingresa al siguiente enlace.

ingeniero

Que es un Ingeniero en Software

Un ingeniero en software es un profesional capacitado, que se ocupa de analizar, crear, diseñar, y probar el conjunto de sistemas informáticos y de software que se puedan presentar en un momento dado. Aunado a ello, se encargan de escribir y diseñar programas de software que serán implementados en pro de satisfacer las necesidades de sus clientes, o bien para dar solución a un problema en específico.

Actividades que realiza

Un Ingeniero en software interviene directamente en todas las etapas que se relacionan con el desarrollo de cualquier software y también aplican todas las tecnologías y métodos establecidos para resolver un problema o satisfacer necesidades específicas. Así se pueden señalar las siguientes como las actividades primordiales que desempeña un ingeniero en software:

  • Analizar y diseñar aplicaciones de software.
  • Analizar e implementar las nuevas tendencias, técnicas y tecnologías asociadas al desarrollo de software.
  • Supervisar y controlar cada una de las etapas que requiere un proyecto de desarrollo de software.
  • Dirigir proyectos de diseño y mantenimiento relacionados al área.
  • Controlar, de ser el caso, los equipos de trabajo conformados por los programadores y los diseñadores de proyectos.
  • Realizar tests de verificación e integración, para evaluar el rendimiento de las aplicaciones.
  • Administrar sistemas de bases de datos.
  • Asesorar a los clientes y usuarios en cuanto a la resolución de los problemas asociados a sus sistemas.
  • Integrar los sistemas existentes que puedan interrelacionarse para mejorar los resultados.
  • Realizar consultorías independientes o con la colaboración de otros profesionales de áreas similares.
  • Formular políticas de seguridad y técnicas criptográficas en las empresas o instituciones donde desempeñe sus funciones.
  • Verificar que los sistemas de software diseñados estén en total armonía con las normas y leyes vigentes en el lugar.

Perfil del Ingeniero en software

En general, un ingeniero en software debe cumplir con el siguiente perfil, para que sea considerado un profesional preparado y dispuesto para resolver los problemas informáticos que se presenten:

  • Habilidades de comunicación escrita para presentar los informes respectivos a sus clientes, así como para redactar las instrucciones y los manuales de cada programa.
  • Trabajar adecuadamente de manera independiente como también siendo parte de un equipo junto a otros profesionales.
  • Capacidad para la resolución de conflictos.
  • Mantenerse actualizado en cuanto los cambios y las nuevas tendencias tecnológicas.
  • Poseer un alto nivel de conocimientos técnicos y profesionales, inherentes al campo de aplicación.
  • Poseer habilidades comunicativas para poder explicar a los clientes y usuarios todo lo relacionado a la utilización de los nuevos programas, de manera adecuada y clara.

Tener un enfoque metódico y lógico en la ejecución de sus funciones.

  • Comprometerse con los trabajos adquiridos para cumplirlos en su totalidad.
  • Excelentes habilidades interpersonales para llevar a cabo el trabajo en equipo de la menor manera posible.
  • Prestar a atención a los pequeños detalles necesarios para el correcto funcionamiento de los sistemas.
  • Comprender totalmente el tipo de actividades empresariales que realizan sus clientes, así como cuáles son sus necesidades de tecnologías de la información, para cubrir a cabalidad con sus requerimientos.
  • Organizar correctamente su trabajo para poder entregar los proyectos en el tiempo previsto.
  • Saber trabajar bajo presión y lidiar con todo tipo de personas.
  • Ser proactivo, es decir, capaz de tomar la iniciativa para el cumplimiento de sus funciones.
  • Capacidad de dar información compleja de un modo sencillo y entendible.
  • Saber trabajar con tiempos de entrega específicos.
  • Comprobar los errores presentes en los sistemas de software.

ingeniero

Competencias

Ahora bien, como parte de todas aquellas habilidades necesarias para desempeñarse como Ingeniero en software, hay que mencionar las siguientes características que debe poseer la persona para que su trabajo sea realmente apropiado y eficiente:

  • Tener buena concentración.
  • Saber trabajar en equipo.
  • Mantener un enfoque flexible y profesional.
  • Desarrollar una propuesta para dar a conocer cómo va a ser el software una vez que esté terminado.
  • Desarrollar conocimientos acerca del negocio del cliente y sus necesidades particulares.
  • Diseñar proyectos acorde a las necesidades del cliente para dar respuesta a sus problemas específicos.
  • Escribir textos de ayuda técnica e instructivos.
  • Habilidad para responder rápida y acertadamente si surgen imprevistos.
  • Ser detallista.
  • Trabajar bajo presión.
  • Ser puntual y responsable.
  • Improvisar cuando la situación lo amerita.
  • Ser paciente, preciso y flexible.
  • Adecuarse a un presupuesto fijo.
  • Trabajar de manera apropiada con otros profesionales.
  • Habilidades comunicativas para proporcionar a los clientes y usuarios información suficiente en cuanto al uso y mantenimiento de los sistemas.

Ingeniería de software

Los ingenieros de software son profesionales que se dedican a una rama de la ciencia de la computación, denominada Ingeniería de Software. Esta importante rama también conocida como desarrollo de software, se refiere primordialmente al riguroso proceso de crear software.

En este orden de ideas, para crear un software se requiere de un proceso mayoritariamente creativo, y por medio de esta ingeniería se pretende sistematizar dicho proceso mediante una serie de técnicas que son adecuadas y se basan en la experiencia, todo ello en aras de disminuir el riesgo del fracaso en la consecución de los objetivos.

De igual manera, esta se puede considerar como una ingeniería que de aplica al software, a través de herramientas preestablecidas y medios sistematizados; que como principal objetivo busca la eficiente aplicación de estos para obtener resultados óptimos. En tal sentido, no solo es la resolución de problemas, si no la elección de las solución más apropiada dentro de un conjunto de diferentes posibilidades.

Mediante la ingeniería de software.

Se busca transformar la producción de software en un producto más industrial, todo ello a través de técnicas, métodos y herramientas que permitan desarrollar un producto innovador, el cual se basa en criterios metodológicos y buenas prácticas. Esto a su vez lo vuelve un producto de uso masivo, pues hoy en día ninguna empresa podría funcionar sin software. Así, es un elemento de suma importancia para que los usuarios puedan modificar su proceso productivo de manera más eficiente y eficaz.

En la actualidad, es tanto el auge de los medios tecnológicos y digitales que las compañías deben emplear cada vez más métodos e inversiones para no quedarse atrás en este crecimiento, pues corren el riesgo de perder su competitividad. Es tal la envergadura de la situación, que hoy en día el nivel de una empresa va directamente asociado a la calidad de su infraestructura tecnológica, así como también al conjunto de los productos que desarrolla o adquiere según sean sus necesidades.

ingeniero

Historia

Como toda ciencia, rama o ámbito de aplicación al que tenemos acceso actualmente, es pertinente conocer un poco acerca de sus orígenes y su historia, en pro de entender de manera más apropiada los acontecimientos presentes. Para ello, hay que remontarse al pasado, específicamente al momento en que surgieron las computadoras, en el año 1940. Este fue el punto de partida para todo lo que hoy conocemos que tiene que ver con la tecnología. Tan común, pero que antes era apenas posible de asimilar.

En esos tiempos iniciales.

Los desarrolladores de software tenían que escribir nuevamente todos sus programas para que pudieran emplearse en las máquinas nuevas que surgían aproximadamente cada dos años, por lo que se volvían obsoletas las máquinas anteriores. Fue a finales de la década de los años 50′ que el término «ingeniería» de software se comenzó a escuchar, y fue propiciada durante los años posteriores debido a la crisis del software. Esta nueva figura surge para ayudar a identificar y a corregir los procesos de mantenimiento y desarrollo de sistemas de software, a través de la aplicación de un conjunto de principios y metodologías.

Durante estos años, las tareas eran corridas mediante tarjetas perforadas que eran colocadas como entrada en el lector de las tarjetas de la máquina, y se esperaba que por la impresora fuesen devueltos los resultados. No es sino hasta los inicios de la década de los 80′, que la ingeniería del software fue considerada como una profesión más, a la par de las ingenierías tradicionales y las ciencias de la computación. Esto significó un gran avance, pues ya había un grupo de personas que podría dedicarse a aprender este arte.

La crisis del software

La llamada crisis del software representó un serio problema por varios años, por lo que muchos investigadores y empresas se abocaron a la búsqueda exhaustiva de soluciones viables. Así, como cada vez era más frecuente la necesidad de traducir los software más antiguos para instaurarse en las nuevas máquinas, progresivamente se fueron desarrollando lenguajes de orden superior.

Posteriormente, en el transcurso de la década de los 80’y 90′, los costos por mantenimiento y propiedad de software se volvieron inclusive más altos que los del propio desarrollo, por lo que muchos proyectos se consideraban operacionales, pero no eran exitosos. Aunado a ellos, los tiempos eran mucho mayores que los pronosticados y más de la mitad de los grandes productos de software que eran entregados a los clientes, poseían notorias fallas que generaban su descarte absoluto, ya que no cumplían con los parámetros y requerimientos establecidos.

A pesar de los esfuerzos para sobreponerse a esta crisis, algunos alegaban que se debía a falta de disciplina por parte de los programadores; pero lo cierto es que cada nueva tecnología o solución hallada para solventar estas fallas se consideraba como única y absoluta, lo que llevaba a caer en el mismo error una y otra vez pues no había una única clave para el éxito en este complejo campo. Así pues, cada problema representa solo una pequeña porción de todo el conglomerado, y este ámbito es muy amplio para que una sola alternativa sea suficiente.

Fue entonces cuando surgió el Internet.

Cuyo auge representó un gran crecimiento en la demanda de sistemas internacionales para desplegar información en la World Wide Web. Para lograr esto, los programadores se vieron en la imperiosa necesidad de manejar mapas, fotografías, ilustraciones y animaciones a un acelerado ritmo sin ningún método preestablecido, para así poder optimizar la visualización y el almacenamiento de imágenes.

Además, se hizo necesario el diseño de sistemas de Software multilenguaje para traducir el flujo de información en un sinfín de idiomas extranjeros, al lenguaje natural humano.

Aunado a ello, los desarrolladores tuvieron que crear nuevos sistemas de bloqueo y seguridad informática para contrarrestar las anomalías generadas por las amplias conexiones de red, como la proliferación de los virus informáticos y la basura o spam en los correos electrónicos. Estos problemas resultaron ser tediosos y difíciles de arreglar.

Este acelerado aumento en la demanda conllevó a la creación de soluciones de software a bajo costo, implementando así el uso de metodologías más rápidas y simples para desarrollar un software funcional. En pertinente destacar que los sistemas más pequeños tengan un enfoque un poco más simple, para poder desarrollar más rápidamente los cálculos y algoritmos de software.

Objetivos

Como se ha explicado previamente, un ingeniero en software es un profesional dedicado a implementar metodologías, procedimientos y principios para crear software, basándose en la ciencia de la ingeniería. Todo ello, en aras de alcanzar los objetivos que se describen a continuación:

  • Lograr una mejor organización de los equipos de trabajo, en el ámbito de desarrollo y mantenimiento de software.
  • Mejorar el diseño de las aplicaciones o del software implementado, para que se adapten en una mejor manera a las necesidades de las organizaciones y cumplan con las finalidades para las que fueron creadas.
  • Ser más exactos con los costos de los proyectos y el tiempo necesario para el desarrollo de los mismos.
  • Implementar una mayor calidad al desarrollo de las aplicaciones más complejas.
  • Introducir procesos que permitan medir la calidad del software desarrollado mediante normas específicas, buscando siempre cumplir con los requerimientos y objetivos que se buscan, todo ello en aras de aumentar la eficiencia de los sistemas.
  • Realizar tests para detectar posibles errores en los software desarrollados, en pro de implementar métodos para mejorar su funcionamiento y aplicación.

Recursos necesarios

Como todo proceso bien sea tecnológico o no, se emplean una serie de recursos para poder llevar a cabo sus funciones y objetivos. Al tratarse de la ingeniería de software, hay que destacar que se utiliza una serie de recursos del entorno, y otros humanos para poder lograr lo que se requiere. Ambos se explican en las líneas siguientes.

Humanos

Se refiere a todo el conjunto de personas que están directa e indirectamente involucradas en el desarrollo de software, en cualquiera de sus instancias. Esto hace alusión, por ejemplo, al ingeniero en software propiamente dicho, los gestores, intermediarios, entre otros. En este orden de ideas, luego de realizar una estimación del esfuerzo de desarrollo para un proyecto de software, se puede determinar el número de personas que se requieren. El mismo puede ir desde una sola persona a un equipo de más de 40, según sea la magnitud.

Entorno

Este recurso es indispensable para el desarrollo de software, pues se refiere al entorno en el cual se aplican los procesos. En este sentido, el término software va siempre asociado al de Hardware, el cual es el medio físico en el cual se desarrollan los proyectos. Así, como el software es algo que no se puede palpar pues consiste en programas informáticos, existe el medio físico constituido por el equipo, la computadora, los cd’s, las impresoras, y todos aquellos dispositivos que permiten la implementación del mismo.

Este es el recurso del entorno, que junto al personal especializado hacen posible la consecución de los objetivos.

Efectos Socioeconómicos

Al tratarse de un proceso innovador que está asociado a los avances tecnológicos e informáticos, que además va en auge con el paso de los años; es razonable que se deriven ciertos efectos según sea su ámbito de aplicación y el conjunto de personas que estén asociadas, ya que su uso o desuso genera una serie de implicaciones socioeconómicas.

En este orden de ideas, el Ingeniero en software se dedica a una rama que ofrece valiosos aportes tanto a la economía, como a la ciencia y a las sociedades, para que estas vayan a la par de los progresos derivados de la era digital y tecnológica. A continuación se explica un poco acerca de estos efectos.

Económicos

La Ingeniería de software contribuyó notablemente con el crecimiento económico durante la década de los 90′, y los años posteriores. Para ejemplo de ello en los Estados Unidos el software contribuyó, durante esos años, a una octava parte del incremento del Producto Interno Bruto (PIB) y en un noveno a todo el crecimiento de la productividad al finalizar esa década.

Esto significa a un aproximado de noventa millones de dólares al año. También hay que resaltar que este crecimiento en la economía está presente en muchos países a nivel mundial, pues la tecnología global crece diariamente, y cada vez hay más campos de aplicación con la industria del lenguaje.

Sociales

En cuanto a lo social, es necesario señalar que la tecnología de software logra que las corrientes mundiales varían en virtud del amplio uso de las computadoras en la mayoría de los hogares. Así, las personas pueden interactuar de distintas maneras a través del correo electrónico, la World Wide Web y la mensajería instantánea, a lo que se debe agregar, además, el poder de las redes sociales en la actualidad.

Aunado a ello, gracias a la implementación de software es posible bajar los costos y mejorar la calidad de los servicios sociales y de salud, los departamentos de bomberos y las dependencias gubernamentales, solo por poner algunos ejemplos; por lo que no son solamente las compañías privadas las que se benefician de estos desarrollos. Vale acotar que los métodos de ingeniería de software han sido aplicados de manera exitosa en un sinnúmero de proyectos, como por ejemplo los cajeros automáticos, el GNU/Linux, el software instalado en el transbordador espacial, y muchos otros.

Notaciones

Son variados los tipos de lenguajes y notaciones que utiliza el Ingeniero en software para desempeñar sus funciones. Estos son universales y los manejan todos los profesionales del área. Dichas notaciones son explicadas seguidamente.

Lenguaje Unificado de Modelado

Este es un lenguaje de modelado muy reconocido que se aplica en el desarrollo de software, y se utiliza en la actualidad para describir o especificar métodos. Esta compuesto por vistas, elementos de modelo y una serie de reglas semánticas, sintácticas y pragmáticas que explican cómo se deben utilizar los elementos. De igual menaje, posee varios diagramas que se pueden utilizar, como por ejemplo clases de uso, de clases, componentes, despliegues, y otros.

Notación para el Modelado de Procesos de Negocios

La notación para el modelado de procesos de negocios tiene como objetivo proporcionar los procesos de negocios públicos y privados simulando un diagrama de flujo, de una manera sencilla y fácil de analizar. Esta busca coordinar la secuencia de los procesos y los mensajes que fluyen entre los participantes, mediante un conjunto de actividades relacionadas, y posee las siguientes características:

Objetos de conexión: Tales como flujos de secuencias, flujos de mensajes y asociación.
Objetos de flujo: Como eventos, actividades, y rombos de control de flujo denominados Gateways.
Swimlanes: Son los carriles de piscina, tales como pool y lane.
Artefactos: Tales como objetos de datos, grupos y anotaciones.

Diagrama de Flujo de Datos

Este tipo de notación fue creada por Larry Constantine y se basa en el modelo de computación del flujo gráfico de datos. Esta notación permite representar el movimiento de los datos mediante un sistema el cual utiliza modelos que describen el flujo de los datos, los procesos que cambian o transforman los datos y los destinos y almacenamientos de los mismos, a los que el sistema pueda acceder.

Aunado a ello, gracias a los diagramas de flujos de datos, se puede determinar la manera en que cualquier sistema se desarrolla, lo cual ayuda a identificar los datos de la transacción en el modelo de los datos, y así el usuario puede tener una idea concreta acerca de cómo van a resultar los datos en el último momento.

ingeniero

Herramientas CASE

Esta figura conocida como Herramientas CASE, están basadas primordialmente en la idea de un modelo gráfico, y las mismas son herramientas de computación cuya función es asistir en los procesos de ciclo de vida de un software, facilitando así la producción y desarrollo del mismo.

Ciclos de vida y Modelos del Desarrollo de software

Un Ingeniero en Software emplea distintos modelos, paradigmas y filosofías de desarrollo para ordenar y dar solución a todos los problemas que se derivan de estos sistemas. En este sentido, se hace referencia al proceso necesario para construir, diseñar y hacer evolucionar el software, desde la concepción de la idea hasta la concreción de la misma, aunado al conjunto de elementos intervinientes en el proceso.

Como se ha mencionado, dicho proceso es metódico y se basa en una metodología.

Por ello han surgido modelos de desarrollo o también conocidos como ciclos de vida. En este orden de ideas, el ciclo de vida de un software está basado en el conjunto de procedimientos que se especifican a continuación:

  • Definición de Objetivos: Lo primero a realizar para desarrollar un software, es definir qué es lo que se quiere con el mismo, así como su funcionalidad en la estrategia global.
  • Análisis de requisitos y viabilidad: Una vez planteados los objetivos, se debe examinar cuáles son los requisitos necesarios para que el cliente los cumpla, así como también las restricciones que puedan obstaculizar el proceso.
  • Diseño general: Luego corresponde formular cuáles son los requisitos generales en la arquitectura de la aplicación.
  • Diseño detallado: Posterior a la formulación del diseño general, se debe definir cada subconjunto de la aplicación, para realizar el trabajo por partes.
  • Programación e implementación: Se refiere a la aplicación de algún lenguaje de programación que permita crear las funciones requeridas en la etapa de diseño, para luego ser instalado.

Prueba de Unidad:

Es un test particular que se realiza a cada subconjunto de la aplicación para garantizar su implementación según las especificaciones requeridas.

  • Integración: En este punto corresponde hacer una prueba de integración, para garantizar que los diferentes módulos han de interrelacionarse adecuadamente.
  • Prueba Beta: También denominada Validación, se realiza para garantizar que el software cumple con las especificaciones.
  • Documentación: Consiste en la recopilación de toda la información útil y necesaria para los usuarios del software, así como para los desarrollos futuros.
  • Implementación: Tal como el nombre lo indica, consiste en implementar el software que ha sido desarrollado.
  • Mantenimiento: Es la etapa post implementación, y se refiere a todos los mantenimientos correctivos y a las actualizaciones de software a que haya lugar.

Modelo Clásico o en Cascada

Este modelo utilizado por un Ingeniero en Software consiste en un enfoque metodológico que ordena de manera rigurosa cada una de las etapas del ciclo de vida del software, anteriormente descritas, y el mismo sugiere una aproximación secuencial y sistemática hacia el propio proceso de desarrollo. El mismo se inicia con la delimitación de los requisitos del cliente, para posteriormente desarrollar una planificación, modelado, construcción y despliegue, todo ello para dar origen al soporte de software terminado

Modelo de Prototipos

Uno de los modelos de desarrollo evolutivo es el de Prototipos. Y permite que todo el sistema, o partes de este se construyan de manera rápida para comprender con facilidad cada uno de sus aspectos. En este sentido, se pretende que tanto el desarrollador, como el usuario y el cliente estén de acuerdo en cuanto a las necesidades específicas y a sus respectivas soluciones, para así minimizar el riesgo y la incertidumbre durante el desarrollo de software.

Ahora bien, vale acotar que este modelo consiste en desarrollar diseños que posteriormente van a ser analizados, para ir descartandolos a medida que se involucren nuevas especificaciones. Es decir, no se asegura el uso real del producto pero sirve para medir el alcance y eficiencia del mismo, por eso son prototipos que sirven para el posterior desarrollo definitivo del mismo.

Este modelo se emplea cuando la persona responsable no está segura de la eficacia de un algoritmo determinado, de la adaptabilidad que tendrá el sistema ni de la manera más apropiada de interacción entre el hombre y la máquina. Por ende, se define un conjunto de objetivos generales para el software que se pretende desarrollar, sin especificar en detalle los aspectos inherentes a la entrada, procesamiento y salida del mismo.

En si, estos prototipos se encargan de dilucidar un poco ante el ingeniero en sistemas y el cliente o usuario, cuáles van a ser los resultados de la construcción una vez que los requisitos se encuentren satisfechos.

Modelo en Espiral

Otro modelo empleado por un Ingeniero en software para la ejecución de sus tareas, es el propuesto por Barry Boehm en el año 1986 llamado Modelo en Espiral, el cual conjuga aspectos de la naturaleza interactiva derivada de los prototipos, junto con puntos sistémicos y controlados del modelo en cascada. Así, el software se desarrolla mediante una serie de entregas evolutivas, cada una de estas con prototipos más completos que los anteriores, según sea el análisis de riesgo y las necesidades del cliente.

Modelo de desarrollo por etapas

Como su nombre lo indica, bajo este modelo el Ingeniero en software muestra su producto a través de etapas sucesivas. Así se desarrollan las capacidades más importantes disminuyendo el tiempo empleado para la creación del software, y es una herramienta muy útil para la resolución de problemas que pueden descomponerse en partes más pequeñas.

Este modelo también posee como característica principal, que los requerimientos no se dan a conocer detalladamente al momento de iniciar el proyecto, si no que van saliendo a relucir en la misma medida que surgen las diferentes versiones de códigos.

Ahora bien, esta metodología consta de una serie de fases que se señalan a continuación:

  • Especificación conceptual.
  • Análisis de requisitos.
  • Diseño inicial.
  • Diseño detallado; este consiste en la codificación, depuración, prueba y liberación del software.
  • Ahora bien, entre las ventajas de este modelo se destacan las siguientes:

Detección de los problemas y errores a medida que se van cubriendo las etapas, y no hasta la entrega final del proyecto; lo que permite ir corrigiendo los mismos sobre la marcha del desarrollo.
Se elimina el tiempo de presentación de informes, puesto que cada versión representa un avance.
Se evitan los errores al estimar el tiempo del proyecto en general, pues este se estima en base a las versiones o a las etapas cubiertas.
Los desarrolladores pueden cumplir con las entregas en las fechas pautadas.

Modelo incremental

Este tipo de modelo también denominado creciente o iterativo, consiste en la aplicación de sistemas manuales como el modelo en cascada, pero de una forma escalonada según cómo sea el avance en el proceso del desarrollo; en este sentido, con cada una de estas secuencias lineales, se obtienen mejoras en el software en curso. Hay que destacar que el flujo del proceso de cualquier incremento puede incorporar la construcción de algún prototipo, ya que se busca la entrega de un producto operacional con cada incremento que se le realice al software.

Este modelo es idóneo en aquellos casos en que el personal requerido para la completa implementación del software no se encuentra disponible.

ingeniero

Modelo estructurado

Este es otro de los modelos que ejecuta un Ingeniero en software, y consiste en la utilización de las diferentes técnicas de la programación estructurada para el desarrollo del mismo; además, es útil para crear los algoritmos del programa y al mismo tiempo facilita la comprensión de la estructura de datos así como su respectivo control. Dentro de las principales características que posee este modelo, se pueden destacar las siguientes:

  • El programa puede abstraerse en un mayor nivel.
  • Se permite diferenciar de una manera más clara los procesos y las estructuras de los datos.
  • Hay algunos métodos que se orientan primordialmente a datos específicos.
  • Los procesos y la estructuración de los datos se presentan en un orden jerárquico.
  • Además, este modelo cuenta con ciertas desventajas, a las que se hace alusión próximamente:
  • Se pueden encontrar algunos datos repetidos en diferentes partes del programa.
  • El manejo del código tiende a complicarse demasiado cuando se vuelve muy grande o extenso.

Además, este modelo utiliza una serie de técnicas, descritas a continuación:

  • Modelo entidad-relación: Es una técnica que guarda relación principalmente con los datos.
  • Diagrama de flujo de datos: Es una técnica utilizada generalmente para los procesos.
  • Modelo orientado a objetos

Este es otro modelo empleado por un ingeniero en software, y el mismo se basa en la programación orientada a objetos, cuya conceptualización gira en torno a la clase, como también lo hacen el análisis de los requisitos y el diseño. Esto coadyuva a la introducción de nuevas técnicas y al mismo tiempo se aprovechan los procesos y las técnicas del desarrollo estructurado, tales como los diagramas de estado y las transiciones. Dicho modelo posee como características fundamentales:

  • Se permite la reutilización del software significativamente.
  • Gracias a su simplicidad, es posible desarrollar herramientas informáticas de ayuda al desarrollo, las cuales se pueden implementar a una notación de lenguaje unificado de modelado.
  • Modelo RAD
  • Este modelo significa Rapid Aplication Development y literalmente consiste en el desarrollo rápido de aplicaciones; este fue iniciado por James Maslow en el año 1980 y se basa mayoritariamente en un ciclo de desarrollo corto. Gracias a esta metodología, es posible la construcción de sistemas de computación combinando técnicas y utilidades CASE, cuyo significado es Computer Aided Software Engineering.

La creación de prototipos enfocados en el usuario.

Así como también el seguimiento lineal y sistemático de los objetivos. Todo esto ayuda a incrementar la rapidez de producción de los sistemas, utilizando un enfoque de desarrollo basado en los componentes. Bajo esta percepción, una vez que los requisitos se entienden y se limita el ámbito del proyecto, el modelo Rad le permite a un equipo de desarrollo la creación de un producto completamente operativo y funcional, dentro de un periodo de tiempo muy corto, sin afectar con ello la calidad del mismo.

Modelo de desarrollo concurrente

Este es un modelo de tipo de red que emplea el Ingeniero en software, en el cual todas las personas actúan al mismo tiempo. Se puede representar esquemáticamente como una serie de actividades técnicas importantes, así como todas las tareas y estados que se encuentran asociados a ellas.

Aunado a ello, este modelo define una serie de acontecimientos que disparan transiciones de estado a estado para cada uno de los aspectos de la ingeniería de software, es decir, si durante las primeras etapas del proceso no se contemplan inconsistencias en el modelo de análisis, se genera la corrección del modelo de análisis de los sucesos, lo cual incrementa la actividad de análisis del estado hecho al estado de cambios en espera.

En este sentido, dicho modelo de desarrollo es utilizado con frecuencia como el paradigma de desarrollo de aplicaciones cliente/servidor, el cual está constituido por una gran cantidad de componentes funcionales. Cabe destacar que el modelo de proceso concurrente, cuando se aplica al cliente/servidor, puede definir las actividades en dos dimensiones, como lo son: Una división de sistemas, por una parte, y una división de componentes, por la otra. Los aspectos del nivel de sistemas se basan en dos actividades: Diseño y realización. Esta concurrencia se logra de dos maneras:

Las tareas de sistemas y componentes pueden ocurrir de forma simultánea, y además se pueden modelar con el enfoque orientado a objetos que de describió en apartados anteriores.

Por lo general, una aplicación cliente/servidor de implementa mediante muchos componentes, cada uno de los cuales se puede diseñar y realizar de manera concurrente.

Para finalizar, este modelo de desarrollo concurrente se puede aplicar a cualquier tipo de desarrollo de software, y esgrime una imagen exacta del estado actual de un proyecto determinado. Así, en lugar de confinar las actividades de ingeniería de software a una secuencia de sucesos, se define una red de actividades, existiendo así todas las actividades de la red de forma simultánea. Además, todos los sucesos que se generen dentro de una actividad dada o algún otro lado de la red de actividad, pueden iniciar las transiciones entre los estados de una actividad.

Proceso unificado del desarrollo de software

Este es un proceso de software genérico que se utiliza para una gran variedad de tipos de sistemas, en diferentes áreas de aplicación y tipos de organización diferentes, así como también aplica a los distintos niveles de competencias y proyectos de cualquier tamaño.

Se caracteriza por proveer un enfoque estructurado para asignar las tareas y responsabilidades dentro de una organización del desarrollo. Busca crear un producto de software de excelente calidad, para satisfacer las necesidades de los usuarios finales dentro del presupuesto y el plazo establecido. Dicho proceso abarca dos dimensiones:

Un eje horizontal

Que representa el tiempo, y muestra los aspectos del ciclo de vida del proceso en el transcurso de su desenvolvimiento.
Un eje vertical que representa las disciplinas, que agrupan las actividades de una forma lógica según sea su naturaleza.
El eje horizontal representa un aspecto dinámico del proceso conforme se va desarrollando, y se expresa en términos de fases, interacciones e hitos.

Ahora bien, la segunda dimensión es la que se encarga de representar el aspecto estático del proceso, como se describe en términos de componentes, las disciplinas, flujos de trabajo, artefactos y roles. De cualquier forma, el refinamiento más conocido y documentado es el proceso unificado racional.

Por otra partes este proceso unificado es un marco de trabajo extensible que se puede adaptar a organizaciones o proyectos específicos; así como también el proceso unificado racional es un marco de trabajo extensible, por lo que en la mayoría de los casos es imposible afirmar si un refinamiento del proceso en particular ha sido derivado del proceso unificado o del unificado racional. Por ende, ambas connotaciones suelen emplearse para un mismo concepto.

Producto

Todo el proceso, métodos y técnicas que implementa un Ingeniero en software, se enfoca en la obtención de un solo producto, el cual es el software propiamente dicho. En la actualidad, el software es algo sumamente necesario para las sociedades, ya que es el motor que conduce a la toma de las decisiones comerciales y ayuda a la investigación científica moderna. A su vez es un elemento clave para diferenciar productos y servicios modernos. Todo esto se debe a que el software está involucrado en todos los sistemas que rodean a los humanos.

El producto que diseña e implementa un Ingeniero en software es el software para computadoras, y el mismo está compuesto por programas que se ejecutan dentro de una computadora de cualquier tamaño y arquitectura, una vez formulado y se puede manejar por cualquier persona en el mundo actual, bien sea directa o indirectamente. En tal orden de ideas, estos productos se pueden clasificar de la siguiente manera:

Productos genéricos:

Son aquellos que produce una organización con el fin de ser vendidos en el mercado.
Productos hechos a medida: Son aquellos sistemas que se desarrollan bajo pedido, para un cliente con necesidades específicas.
Tanto los productos genéricos como los específicos, deben poseer una serie de características para que se consideren operativos y válidos, las mismas se señalan a continuación:

  • Mantenibles: Debe ser posible que el software evolucione mientras cumple con sus funciones.
  • Confiabilidad: En caso de poseer errores, no debe producir ningún tipo de daño a la máquina.
  • Eficiencia: En su desarrollo y ejecución, el software no debe desperdiciar los recursos.
  • Utilización adecuada: El producto debe contar con una interfaz de usuario adecuada y su respectiva documentación.
  • Es pertinente mencionar que el producto final en si, es diferente para el ingeniero en sistemas como para los usuarios; en este aspecto, para el ingeniero está constituido por los programas, datos y documentos que configuran el software. Sin embargo, para el usuario es la información que de cierto modo soluciona su problema en específico.

Metodología de la Ingeniería de software

Con el paso de los años, las personas han comprendido que es imprescindible hallar procesos y metodologías, que sean sistemáticas, predecibles y repetibles, en aras de mejorar la productividad del desarrollo y calidad del producto; es decir, el conjunto de pasos que se deben seguir para cumplir con una tarea. En el caso particular de la Ingeniería de software, hay que subrayar que se requiere ejecutar numerosas tareas que se agrupan en etapas, a las que en conjunto se les denomina Ciclo de Vida; en este sentido, los ciclos de vida por lo general, constan de las siguientes etapas:

Obtención de los Requisitos

Es menester identificar desde el primer momento cuál es el tema principal que induce a la creación de un nuevo software o a la modificación de uno ya existente, lo que le compete al ingeniero en software. Al mismo tiempo hay que definir cuáles son los recursos con los que se cuenta, tanto los humanos como los materiales para dar fin a la consecución del proyecto. Por otra parte, se debe comprender en su totalidad el contexto del negocio para identificar de manera adecuada los requisitos.

Aunado a ello, es necesario dominar toda la información relativa al problema, tal y como los datos que salen del sistema: por la interfaz de usuario, interfaces de redes, gráficas, reportes y otros medios; y datos externos al software como los usuarios finales y otros sistemas o dispositivos externos. También lo referente a los almacenamientos de los datos que recopilan y organizan objetos persistentes de datos, como por ejemplo aquellos que se conservan de forma permanente.

Dentro de esta etapa.

También es importante conocer cuales son los puntos álgidos, es decir, aquellos puntos que pueden interferir y limitar el buen funcionamiento de los procedimientos actuales, los problemas más frecuentes que se presenten así como los motivos que generen insatisfacción, y aquellos que deben ser cubiertos en su totalidad. Por ejemplo hay que hacer énfasis en asegurarse de que los contenidos de los reportes satisfagan realmente las necesidades de sus usuarios, y si los tiempos empleados para generar respuesta son los más idóneos.

En este punto el Ingeniero en software también debe definir cuáles son las funciones que va a llevar a cabo el software que se pretende desarrollar, ya que esto va a ayudar al propio funcionamiento del programa y al usuario final. También hay que prever cómo va a ser el comportamiento del software ante ciertas situaciones inesperadas, como por ejemplo la saturación derivada de un elevado número de personas usando el software en un elemento dado, o una gran cantidad de datos.

Análisis de los requisitos

Una vez obtenidos los requisitos, corresponde al Ingeniero en software realizar un análisis donde el ingeniero en software elige y define las funciones que va a ejecutar el software, y también ha de indicar cual es la interfaz más adecuada para el mismo. Esta parece ser una etapa sencilla, pero no lo es puesto que muchas veces, los clientes consideran que saben todo lo necesario para el buen funcionamiento del software, pero se requiere de la habilidad y la experiencia de un especialista para poder reconocer los requisitos incompletos, ambiguos y contradictorios.

Para identificar estos requisitos, se deben tomar en cuenta las necesidades del usuario final, mediante la introducción de técnicas que permitan mejorar la calidad de los sistemas que se están desarrollando. Como resultado del análisis de los requisitos, se formula un documento ERS (Especificación de los requisitos del sistema), cuya estructura es estándar.

De igual manera, se define un diagrama de entidad/relación.

Para plasmar las principales entidades que van a participar en el desarrollo del software. Esta parte que corresponde a la captura, análisis y especificación de los requisitos es crucial, y de esta depende en gran medida la consecución de los objetivos finales. Por ende, ha surgido gran variedad de modelos y procesos metódicos de trabajo para tales fines, y si bien aún no está formalizada, algunos investigadores ya hablan de una ingeniería de requisitos.

El análisis de los requisitos tiene las siguientes finalidades:

  • Brindar al usuario todo lo necesario para que pueda trabajar en conjunto con el software desarrollado, en pro de obtener los mejores resultados posibles.
  • Tener un mayor control en la etapa de creación del software, en lo referente a los tiempos y costos de desarrollo.
  • Utilizar métodos más eficientes que permitan aprovechar mejor el software según sea la finalidad de uso del mismo.
  • Disminuir los riesgos de mal funcionamiento para así aumentar la calidad del software desarrollado.
  • Es necesario señalar que no siempre en esta etapa de análisis de requisitos, las distintas metodologías de desarrollo llevan asociados un estudio de la viabilidad y estimación de los costos. De igual manera, vale mencionar que la IEEE Std. 830-1998 normaliza la creación de las especificaciones para los requisitos de software. Todo ello en aras de estipular un conjunto de normas claras y universales, que no permitan ambigüedades.

Limitaciones

Al momento de desarrollar un software, este tiene la capacidad de emular inteligencia mediante la creación de un modelo que posee ciertas características de la inteligencia humana, pero estas funciones son predefinidas y limitadas, ya que abarcan un conjunto de soluciones que en algunos campos no son tan extensas. Para explicarlo mejor, aún cuando se tiene la capacidad de imitar algunos comportamientos humanos, no es capaz de emular el pensamiento humano en si ya que trabajo bajo condiciones específicas.

Como otra limitación se tiene que estos sistemas provienen de procesos totalmente mecánicos, los cuales conllevan mayor esfuerzo y elevados tiempos de ejecución, por lo que se genera la necesidad de implementar el software en máquinas que posean una mayor capacidad.

ingeniero

Especificación

Esta etapa se refiere a la especificación de los requisitos, y se basa en que la tarea del ingeniero en software busca describir el comportamiento que se espera del software una vez que haya sido desarrollado. Hay que acotar que han parte del éxito va a depender de la correcta identificación de las necesidades del negocio, las cuales van a ser definidas por los altos gerentes; y además en la interacción con los usuarios funcionales para recolectar, identificar, clasificar, priorizar y especificar cuáles son los requisitos del software.

Para la especificación de los requisitos se utilizan dos técnicas fundamentales: Caso de Usos e Historia de usuarios. Respecto a la primera técnica, es más rigurosa y formal, mientras que las segundas son más ágiles e informales.

Arquitectura

Posteriormente a todas estas etapas, entra en juego el rol del arquitecto de software, quien es una persona que aporta valor agregado a los procesos de negocios gracias a sus considerables soluciones tecnológicas. En este sentido, se ocupa de la integración de infraestructura, desarrollo de aplicaciones, bases de datos, y herramientas gerenciales, todos estos aspectos requieren de liderazgo y capacidades para que se puedan conceptualizar y proyectar a futuro, solucionando los problemas de hoy.

Al hablar de arquitectura de sistemas en general, se hace referencia a una actividad de planeación, bien sea a nivel de infraestructura de red y hardware, o de software. Ahora bien, lo más importante es aclarar los puntos lógicos y físicos de las salidas, modelos de organización y representación de datos, entradas y todos los procesos que componen el sistema, tomando en consideración las bondades y limitaciones de los recursos disponibles para satisfacer los requisitos brindados para el análisis.

Es importante considerar la arquitectura del sistema en el cual se va a trabajar, elaborar un plan de trabajo según el tiempo y los recursos disponibles. Por otra parte, en los diseños de salidas se deben interpretar los requerimientos, lo cual consiste en el dominio y manejo de la información del problema, las funciones visibles para el usuario, el comportamiento del sistema así como el conjunto de las clases de requerimientos, que agrupan los objetos del negocio con los métodos que les dan servicio.

Ahora bien, en sí, la arquitectura de software.

Consiste básicamente en diseñar los componentes de una aplicación, mediante la utilización de patrones de arquitectura. En este orden de ideas, el diseño arquitectónico busca dilucidar la interacción entre las entidades del negocio, y debe poder ser validado mediante diagramas de secuencia, por poner un ejemplo. En pocas palabras, un diseño arquitectónico en este ámbito describe, básicamente, como se va a construir una aplicación de software. Para ello se utilizan algunos diagramas, como lo son:

  • Diagrama de clases.
  • De bases de datos.
  • Diagrama de despliegue.
  • De secuencia.

Los primeros dos tipos de diagramas, son los mínimos necesarios para describir la arquitectura de un proyecto que va a comenzar a ser codificado. Por otra parte, el arquitecto tiene la potestad de elegir cuáles diagramas necesita elaborar, teniendo en cuenta el alcance, complejidad y necesidades particulares del proyecto. Entre las herramientas empleadas para el diseño y modelado de software, denominadas Computer Aided Software Engineering, destacan las siguientes:

  • Enterprise Architect.
  • Microsoft Visio for Enterprise Architect.

Programación

Ahora corresponde la utilización de los lenguajes de programación para implementar un diseño en código. A este respecto hay que mencionar que es la parte más importante, pero ello no implica que sea la más complicada. La complejidad y duración de esta etapa va a estar determinada por el tipo de lenguaje empleado así como al diseño previamente estructurado.

Desarrollo de la aplicación

Luego de cubrir todas las etapas anteriores, corresponde desarrollar la aplicación propiamente, y para que dicho programa o aplicación sea eficiente, es menester cumplir con las siguientes cinco fases:

Desarrollo de la infraestructura

En aras de finalizar la aplicación de manera eficiente, en primer lugar hay que desarrollar y organizar todos y cada uno de los elementos que van a conformar la infraestructura de la aplicación.

Adaptación del paquete

Posteriormente, es menester entender detalladamente el funcionamiento del paquete, si adaptabilidad en pro de garantizar que el mismo pueda ser utilizado aprovechando el máximo de su rendimiento, bien sea tanto en los negocios como en recursos. Aunado a ello, en esta fase se busca entender mejor cada una de las características del paquete, por lo que todos los elementos que lo componen son sometidos a inspección de una forma detallada para evitar errores, o al menos minimizarlos.

Desarrollo de unidades de diseño de interactivas

Esta fase consiste en realizar los procedimientos que se ejecutan por un diálogo usuario-sistema, y busca obtener los siguientes objetivos:

  • Establecer cuales son las acciones específicas que debe ejecutar la unidad de diseño.
  • Crear los componentes necesarios para su funcionamiento.
  • Efectuar el conjunto de pruebas unitarias y de integración en la unidad de diseño.
  • Desarrollo de unidades de diseño batch
  • A lo largo de esta fase el Ingeniero en software utiliza una serie de combinación de técnicas, tales como diagramas de flujo, diagramas de estructura, tablas de decisiones, entre otros. En este sentido, cualquiera de las técnicas que sean empleadas, van a ser aprovechadas para plasmar de forma clara y objetiva las especificaciones a que haya lugar. Todo esto para que el programador tenga una mayor comprensión al momento de realizar su trabajo y probar todos los programas que sean correspondientes.

Desarrollo de unidades de diseño manuales

Posteriormente corresponde esta fase, en la cual el principal objetivo es proyectar todos los procedimientos administrativos que se van a desarrollar en torno a la utilización de los componentes computarizados.

Pruebas de Software

Esta fase es sumamente importante, puesto que en ella se realizan las comprobaciones pertinentes en cuanto al software y al cumplimiento de sus indicaciones según sean las especificidades del problema. En este sentido, se utilizan diferentes técnicas como por ejemplo probar por separado cada uno de los módulos del software, y luego probarlo de manera integral; esto es lo que se conoce como prueba unitaria y pruebas de integración respectivamente. Todo ello para evaluar si el sistema está en capacidad de alcanzar y cumplir con el objetivo estipulado, satisfaciendo así las necesidades del cliente y usuario.

Es común en la realización de las pruebas.

Que las mismas sean efectuadas por una persona distinta al desarrollador que creó el programa, para garantizar la objetividad de los resultados y a su vez comprobar, que cualquier persona puede manejar el sistema. No obstante, el rooh ganador también debe hacer sus propias pruebas.

Un área de pruebas, generalmente se puede organizar de dos maneras, la primera de ellas es contar con personal inexperto y que no posea conocimientos acerca del tema de pruebas, así se puede evaluar que la documentación entregada sea de calidad, y que los procesos descritos son claros y sencillos para que cualquier persona pueda entenderlos, así como también demuestra que el software cumple con sus funciones tal y como se describen.

La segunda manera de plantear el área de pruebas.

Consiste en conformar la misma por programadores experimentados, personas que saben y conocen sin demasiadas indicaciones bajo qué condiciones una aplicación puede fallar, además prestan especial atención a los detalles basándose en su experiencia, situación que no sucede con las personas inexpertas.

Ahora bien, el proceso de pruebas se enfoca en los procesos lógicos internos del software, para asegurarse de que todas las sentencias se han comprobado. También se centra en los procesos externos funcionales, lo que se refiere a la realización de pruebas para detectar errores. Es necesario probar el software con sujetos reales que sean capaces de evaluar el comportamiento del mismo, en aras de proporcionar retroalimentación a los desarrolladores.

Además, es muy importante que en el transcurso del proceso de desarrollo del software no se pierda la comunicación con los interesados que solicitaron las creación del mismo, en pro de verificar que los objetivos del proyectos mantengan su vigencia, y al mismo tiempo se tenga una idea concisa acerca de los procesos que deben probarse durante el periodo de pruebas.

Implementación

Una vez que el software haya sido probado y se haya comprobado que cumple con los objetivos que se plantearon, llega el momento de la implementación del mismo, lo cual consiste en realizar una especificación técnica o algoritmos con un programa, componente software u otro sistema de cómputo. Cabe destacar que muchas de estas especificaciones son dadas según en estándar, y se puede tomar como referencia el World Wide Web Consortium que establece un conjunto de recomendaciones a este respecto.

Este modelo de implementación consiste en una colección de componentes y de sus subsistemas; dichos componentes son, por ejemplo, ficheros ejecutables, ficheros de código fuente, y cualquier otro tipo de ficheros que sean necesarios para la correcta implementación y también el despliegue del sistema. Se debe acotar además que esta etapa de implementación del diseño de software, es un proceso que se basa en convertir una especificación de sistema en un sistema ejecutable.

También se debe resaltar, que esta etapa implica los procesos de diseño y programación de software, pero si se utiliza un enfoque evolutivo del desarrollo, puede significar un refinamiento de la especificación de software. Esta etapa es básicamente una descripción de la estructura del software que se va a implementar, los datos que van a formar parte del sistema, las interfaces entre los componentes del mismo y, en algunos casos, también abarca los algoritmos utilizados.

Documentación

Esta etapa consiste en todos los aspectos relacionados con la documentación del propio desarrollo del software y de la gestión del proyecto, pasando por remodelaciones de lenguaje unificado, diagramas de casos de uso, pruebas, manuales de usuario, manuales técnicos y muchos más. Todo aquello que se pueda utilizar con el propósito de realizar correcciones eventuales, usabilidad, mantenimiento a futuro y ampliaciones del sistema.

Mantenimiento

Esta es una fase post-implementación, cuya razón de ser consiste en mantener y mejorar el software para corregir los errores que puedan surgir, y la posterior incorporación de nuevos requisitos. Se debe mencionar que esto puede necesitar un tiempo incluso mayor al requerido para el desarrollo del software inicial, puesto que alrededor de dos tercios del tiempo del ciclo de vida de un proyecto se dedica a su mantenimiento.

Una parte de este trabajo se orienta a eliminar los errores.

Denominados bugs, y la mayor parte consiste en realizar extensiones del sistema en aras de nuevas funcionalidades y hacer frente a su evolución. Esta etapa enfocada en el mantenimiento del sistema implementado, genera las siguientes ventajas desde el punto de vista de la gestión, desde la perspectiva del Ingeniero en software y posteriormente desde el punto de vista del cliente:

  • Se facilita las tareas para realizar los respectivos seguimientos al proyecto.
  • Permite la optimización en el uso de los recursos.
  • Facilita la comunicación entre los usuarios y los desarrolladores del sistema.
  • Coadyuva a la evaluación de los resultados y el cumplimiento de los objetivos.
  • Ayuda a comprender ampliamente el problema.
  • Permite la reutilización de los recursos disponibles.
  • Se facilita el mantenimiento y las respectivas mejoras del producto final.
  • Permite la optimización del producto y de cada una de las fases que componen el proceso de desarrollo.
  • Se garantiza un alto nivel de calidad del producto final.
  • Logra obtener un adecuado ciclo de vida para el proyecto.
  • Y finalmente se genera suficiente confianza en cuanto avlos plazos de tiempo establecidos, una vez que de define el proyecto.

ingeniero

Ingeniería de software: Naturaleza

Como toda disciplina, la Ingeniería de software está orientada a aplicar un conjunto de conceptos y métodos relacionados con la ingeniería de desarrollo de software de alta calidad. En este orden de ideas, posee un conjunto de propiedades que coadyuvan a la correcta ejecución de los procesos, y los mismos se explican seguidamente.

Matemáticas

Todos los programas y sistemas informáticos poseen una serie de propiedades matemáticas. Por colocar ciertos ejemplos, la corrección y la complejidad de una gran cantidad de algoritmos son conceptos matemáticos, que pueden ser probados de manera rigurosa. Así, el uso de las matemáticas en la Ingeniería de software en conjunto de denomina como métodos formales.

Creación

Como se ha visto en toda la información anterior, los programas son construidos mediante el seguimiento de una serie de pasos secuenciales. El simple hecho de definir las propiedades y ejecutar esta serie de pasos, como en una línea de ensamblaje, se necesario para mejorar la productividad de los desarrolladores y la calidad final de los programas. Es en este punto donde inspira los diferentes procesos y metodologías, en los que se basa la Ingeniería de software.

Gestión de Proyecto

El desarrollo de un software de alta calidad necesita de una adecuada gestión del proyecto. En este aspecto, hay que tomar en cuenta los presupuestos, los tiempos de entrega pautados al inicio del proyecto, y el equipo de profesionales que va a ejecutar el trabajo. De igual manera se deben tomar en cuenta los recursos disponibles, tanto humanos como materiales, tales como el espacio, los insumos y los equipos con los que se va a trabajar, y se debe limitar su disponibilidad o el proceso necesario para su adquisición.

Aunado a eso, para lograr una administración eficiente, corresponde tener una visión clara desde el primer momento, así como también una elevada capacitación referente a la gestión de proyectos.

Participantes

Tal y como se ha planteado con anterioridad, el desarrollo de un proyecto de software es un proceso que requiere de muchos actores, adicional al Ingeniero en software, los cuales están conectados y son interdependientes para concretar la creación del mismo acorde a las necesidades. En este orden de ideas, se necesitan muchas persona que posean distintas competencias, intereses y capacidades, las cuales se les conocen como participantes del mismo y ellas interactúan en pro de crear un sistema de calidad.

Cabe destacar que cada una de estas personas poseen un conjunto de funciones y responsabilidades dentro del proceso, lo que constituye sus roles o papeles. Estos roles se asocian con las asignaciones y tareas que le corresponden a los participantes, y consecuentemente, una persona puede desempeñar solo uno o múltiples roles, así como también un mismo rol lo puede desempeñar un equipo conformado por varias personas.

Los participante que intervienen en el proceso de desarrollo de un software, son variados y en las siguientes líneas se explican en detalle:

Clientes

Por lo general, los términos «usuarios», «usuarios finales» y «clientes» se utilizan como sinónimos, y en algunos casos esto puede generar cierta confusión. En este orden de ideas, el cliente dentro de este contexto se refiere a aquel que especifica cuales son los requisitos del sistema, y puede ser tanto una persona natural, como una empresa u organización, es decir se puede prestar bajo cualquiera de estas figuras. Por otra parte, la connotación de usuario corresponde a aquella persona que opera y utiliza finalmente el producto software, que bien puede ser o no ser el cliente como tal.

Desarrolladores

Estos participantes están directamente relacionados con todas y cada una de las facetas del proceso de desarrollo del software, y su trabajo está enfocado en la investigación, diseño, implementación, pruebas y depuración del software, para que este pueda ser un sistema de alta calidad que satisfaga las necesidades de los clientes, y que pueda también solventar los problemas a que haya lugar. Por lo general, el desarrollador por excelencia es el Ingeniero en software.

Gestores

En el ámbito de la Ingeniería de software, el gestor del desarrollo del mismo es un participante que se ocupa de reportar al director ejecutivo de la empresa que presta el servicio del desarrollo. Es decir, esta es la persona responsable de manejar los recursos y procesos para la entrega adecuada de los productos de software, mientras que al mismo tiempo participa en la definición de la estrategia para el equipo de desarrolladores, dando iniciativas que coadyuven a promover la visión general de la empresa.

Usuarios

Los usuarios finales son aquellas personas que interactúan directamente con el producto de software una vez que este ha sido entregado. Por lo general son quienes conocen a cabalidad el problema, ya que son quienes manejan a diario los sistemas. En este sentido, si el cliente es una empresa de telecomunicaciones, los usuarios pueden ser sus trabajadores del área de sistemas, que son quienes van a manejar el software en sí.

Código Ético de un Ingeniero en software

Un Ingeniero en software debe poseer un Código en el cual se garantice, en la medida de las posibilidades, que los esfuerzos a realizar van a estar enfocados en el bien, y que al mismo tiempo la ingeniería en software va a ser una profesión benéfica y respetada.

Hay que destacar que para el cumplimiento de esta norma, se deben tomar en cuenta los ocho principios que guardan relación con la conducta y las decisiones que toma el ingeniero en software, los cuales son los principios fundamentales que identifican las relaciones éticamente responsables de los individuos, grupos y organizaciones en las cuales participan.

Estos ocho principios que constituyen la ética del Ingeniero en software, son los relativos a la sociedad, cliente y empresario, producto, juicio, administración, profesión, colegas y finalmente el personal. Todos estos son explicados próximamente:

Sociedad

El Ingeniero en software debe actuar de manera coherente con el interés social, aceptando la total responsabilidad de su trabajo y enfocando los interés al bienestar social. En este sentido, el software sólo debe ser aprobado una vez que se posea una creencia bien fundamentada, y que los esfuerzos sean cooperados para dar solución a asuntos importantes de interés social. Del mismo modo, se debe ser justo y veraz en todas las afirmaciones relacionadas con el software o con los documentos asociados.

Cliente y empresario

Es pertinente actuar de forma tal que se puedan conciliar los mejores intereses de los clientes y los empresarios, manteniendo la congruencia con el interés social. Cabe destacar que éstos deben prestar sus servicios en las áreas competentes, manteniendo los valores de honestidad y franqueza total en cuanto a las limitaciones.

Hay que mencionar además que no se puede utilizar un software que haya sido obtenido de manera ilegal o sin ética, ni usar la propiedad de los clientes o usuarios sin la debida autorización, así como también se debe mantener en secreto cualquier documento de identificación confidencial, inherente a la empresa.

Producto

Es menester asegurarse de que los productos y sus respectivas modificaciones cumplan a cabalidad con los más altos estándares de profesionalismo que sean posibles, procurando una gran calidad, costos razonables y una agenda flexible cuyos costos y beneficios sean claros y sean aceptados por los empresarios y el cliente. Aunado a ello, hay que asegurarse de que las metas y los objetivos de todo proyecto sean accesibles y adecuados.

Juicio

Es necesario mantener la integridad y la independencia en el juicio del Ingeniero en software, manteniendo la moderación en sus juicios técnicos en pro de mantener y apoyar los valores humanos, mantener la objetividad profesional respecto de cualquier software p documento relacionado, y no involucrarse en prácticas financieras que sean fraudulentas.

Administración

Se debe asegurar una correcta administración para llevar a cabo cualquier proyecto en el cual se trabaje, mediante la utilización de procedimientos que sean efectivos para promover la calidad y reducir los riesgos. También hay que prestar especial atención a dar a conocer las políticas y procedimientos a los empresarios, para proteger contraseñas, archivos e información confidencial.

Profesión

Se vuelve necesario además incrementar la integridad y la reputación de la profesión siempre en concordancia con el interés social, procurando el desarrollo de un ambiente organizacional que sea favorable para actuar, promoviendo el conocimiento público de la Ingeniería de software. A este respecto, dicha promoción se puede hacer mediante la activa participación en organizaciones, reuniones y publicaciones de carácter profesional.

Colegas

El Ingeniero en software debe apoyar a sus colegas y ser justo con ellos, motivándolos a ajustarse a las disposiciones del código y coadyuvando a su desarrollo profesional, reconocer los trabajos de los demás y abstenerse de atribuirse méritos que no sean debidos, y revisar de manera objetiva, sincera y apropiada los trabajos realizados así como su respectiva documentación.

Personal

El ingeniero en software es un profesional que toda la vida participa en el aprendizaje mediante la práctica, y se ocupa de promover un enfoque ético de la profesión, interesándose por mejorar sus conocimientos sobre los avances relacionados con el análisis, diseño, especificación, desarrollo, mantenimiento y pruebas a que haya lugar, en conjunto con los documentos relacionados a la administración del proceso en desarrollo.

Educación Ética

Existe una serie de organizaciones a nivel mundial que establecen el conjunto de disposiciones que el Ingeniero en software debe seguir, pues las mismas son normas estándares comúnmente utilizadas. Dichas organizaciones se mencionan a continuación:

  • IEEE Computer Society.
  • Association for Computing Machinery (ACM).
  • Software Engineering Institute (SEI).
  • British Computer Society (BCS).
  • RUSSOFT Association.
  • Society of Software Engineers (SES).
  • Consejo General de Colegios Oficiales de
  • Ingenieria Técnica en Informática (CONCITI).

Bien, luego de revisar toda esta información, se debe acotar que el Ingeniero en software es un profesional que debe poseer una gran preparación en relación al área, pues la creación de un software no es una tarea tan sencilla. En este sentido, hay que prestar atención a cada uno de los detalles y entender que no es una carrera que se ejerce de forma aislada, pues se basa en un trabajo en equipo que requiere de la participación de un gran número de personas.

El desarrollo de un software se va a realizar bajo el seguimiento de ciertos parámetros delineados desde el primer momento, cuando solo es un proyecto, y se debe subdividir el trabajo en etapas para que las mismas puedan ser cubiertas progresivamente. De igual manera, se debe prestar especial atención a los plazos establecidos y a los objetivos planteados, en pro de cumplir a cabalidad en el tiempo y con los recursos predefinidos.

El mismo consiste en un trabajo altamente organizado.

Cuya magnitud debe ser visualizada desde el primer momento para que no se pierda detalle alguno. Por tal motivo, debe estar liderado por un profesional capacitado y experimentado.

La Ingeniería en software abarca muchos aspectos que la pueden hacer un poco compleja en un primer momento.

Por lo que puede representar un desafío para las personas.

Sin embargo, esta es hoy en día una de las carreras más demandadas, tanto por las empresas como por los jóvenes estudiantes.

Pues el software es algo necesario para que cualquier negocio lleve a cabo sus funciones.

Aunado a ello, todas estas carreras inmiscuidas en el campo de la informática y la tecnología, son consideradas las profesiones del futuro.

Pues siempre se va a ir avanzando en este ámbito y el campo laboral es amplio.

Finalmente, es pertinente mencionar que el Ingeniero en software cuenta como uno de los profesionales mejor pagados en la actualidad.

Dada la importancia de las funciones que desempeña, y en virtud del auge de la tecnología.

Además, esta es una carrera que nunca se detiene y va en constante avance.

Por lo que se requiere una constante actualización para ser competente y estar informado.

Sobre las últimas innovaciones que surjan con respecto a la materia.

Son muchas las carreras que hoy en día marcan la pauta de los profesionales.

Y se pueden ejercer en todos los países ya que se establecen normas y lenguajes de uso general.

Por lo que ser un Ingeniero en software puede ser una de las mejores iniciativas a tomar.

Por alguien que desee desarrollarse en este interesante campo de trabajo.