fbpx
Wikipedia

Ingeniería de software

La Ingeniería de Software es una de las ramas de las ciencias de la computación que estudia la creación de software confiable y de calidad, basándose en métodos y técnicas de ingeniería. Brindando soporte operacional y de mantenimiento, el campo de estudio de la ingeniería de software.[1]​ Integra ciencias de la computación, ciencias aplicadas y las ciencias básicas en las cuales se encuentra apoyada la ingeniería.[2]

Un ingeniero de software (Trevor Parscal) programando en la sede de San Francisco de la Fundación Wikimedia.

Se citan las definiciones más reconocidas, formuladas por los siguientes prestigiosos autores:

  • Ingeniería de software es el estudio de los principios y metodologías para el desarrollo y mantenimiento de sistemas software (Zelkovitz, 1978).
  • 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. Se conoce también como desarrollo de software o producción de software (Bohem, 1976).
  • La ingeniería de software trata del establecimiento de los principios y métodos de la ingeniería a fin de obtener software de modo rentable, que sea fiable y trabaje en máquinas reales (Bauer, 1972).
  • La ingeniería de software es la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación, y mantenimiento del software. Standard Glossary of Software Engineering Terminology[3]

En 2004, la U. S. Bureau of Labor Statistics (Oficina de Estadísticas del Trabajo de Estados Unidos) contó 760 840 ingenieros de software de computadora.[4][actualizar]

El término "ingeniero de software", sin embargo, se utiliza de manera genérica en el ambiente empresarial, y no todos los que se desempeñan en el puesto de ingeniero de software poseen realmente títulos de ingeniería de universidades reconocidas.[5]

Algunos autores consideran que "desarrollo de software" es un término más apropiado que "ingeniería de software" para el proceso de crear software. Personas como Pete McBreen (autor de Software Craftmanship) cree que el término IS implica niveles de rigor y prueba de procesos que no son apropiados para todo tipo de desarrollo de software.

Indistintamente se utilizan los términos "ingeniería de software" o "ingeniería del software"; aunque menos común también se suele referenciar como "ingeniería en software".[6][7][8]​ En Hispanoamérica los términos más comúnmente usados son los dos primeros.

La creación del software es un proceso intrínsecamente creativo y la ingeniería del software trata de sistematizar este proceso con el fin de acotar el riesgo de fracaso en la consecución del objetivo, por medio de diversas técnicas que se han demostrado adecuadas sobre la base de la experiencia previa.

La ingeniería de software se puede considerar como la ingeniería aplicada al software, esto es, por medios sistematizados y con herramientas preestablecidas, la aplicación de ellos de la manera más eficiente para la obtención de resultados óptimos; objetivos que siempre busca la ingeniería. No es solo de la resolución de problemas, sino más bien teniendo en cuenta las diferentes soluciones, elegir la más apropiada.

La producción de software utiliza criterios y normas de la ingeniería de software, lo que permite transformarlo en un producto industrial usando bases de la ingeniería como métodos, técnicas y herramientas para desarrollar un producto innovador regido por metodologías y las buenas prácticas. Dicho producto es un medio que interviene en las funciones de sus usuarios para obtener un proceso productivo más eficaz y eficiente; hoy en día las empresas no podrían funcionar sin software porque este es un producto de uso masivo; por lo cual, el nivel de una empresa está determinado por la calidad de su infraestructura tecnológica y los productos desarrollados o adquiridos de acuerdo a sus necesidades.

Historia

Cuando aparecieron las primeras computadoras digitales en la década de 1940,[9]​ el desarrollo de software era algo tan nuevo que era casi imposible hacer predicciones de las fechas estimadas de finalización del proyecto y muchos de ellos sobrepasaban los presupuestos y tiempo estimados. Los desarrolladores tenían que volver a escribir todos sus programas para correr en máquinas nuevas que salían cada uno o dos años, haciendo obsoletas las ya existentes.

El término ingeniería del software apareció por primera vez a finales de la década de 1950. La ingeniería de software fue estimulada por la crisis del software de las décadas de entre 1960 y 1980. La ingeniería del software viene a ayudar a identificar y corregir mediante principios y metodologías los procesos de desarrollo y mantenimiento de sistemas de software.

Aparte de la crisis del software de las décadas de entre 1960 y 1980, la ingeniería de software se ve afectada por accidentes que conllevaron a la muerte de tres personas; esto sucedió cuando la máquina de radioterapia Therac-25 emite una sobredosis masiva de radiación y afecto contra la vida de estas personas.[10]​ Esto remarca los riesgos de control por software,[11]​ afectando directamente al nombre de la ingeniería de software.

A principios de los 1980,[12]​ la ingeniería del software ya había surgido como una genuina profesión, para estar al lado de las ciencias de la computación y la ingeniería tradicional. Antes de esto, las tareas eran corridas poniendo tarjetas perforadas como entrada en el lector de tarjetas de la máquina y se esperaban los resultados devueltos por la impresora.

Debido a la necesidad de traducir frecuentemente el software viejo para atender las necesidades de las nuevas máquinas, se desarrollaron lenguajes de orden superior. A medida que apareció el software libre, las organizaciones de usuarios comúnmente lo liberaban.

Durante mucho tiempo, solucionar la crisis del software fue de suma importancia para investigadores y empresas que se dedicaban a producir herramientas de software.

Para la década de 1980, el costo de propiedad y mantenimiento del software fue dos veces más caro que el propio desarrollo del software, y durante la década de 1990, el costo de propiedad y mantenimiento aumentó 30 % con respecto a la década anterior. En 1995, muchos de los proyectos de desarrollo estaban operacionales, pero no eran considerados exitosos. El proyecto de software medio sobrepasaba en un 50 % la estimación de tiempo previamente realizada, además, el 75 % de todos los grandes productos de software que eran entregados al cliente tenían fallas tan graves, que no eran usados en lo absoluto o simplemente no cumplían con los requerimientos del cliente.[11]

Algunos expertos argumentaron que la crisis del software era debido a la falta de disciplina de los programadores.

Cada nueva tecnología y práctica de la década de 1970 a la de 1990 fue pregonada como la única solución a todos los problemas y el caos que llevó a la crisis del software. Lo cierto es que la búsqueda de una única clave para el éxito nunca funcionó. El campo de la ingeniería de software parece un campo demasiado complejo y amplio para una única solución que sirva para mejorar la mayoría de los problemas, y cada problema representa solo una pequeña porción de todos los problemas de software.

El auge del uso del Internet llevó a un vertiginoso crecimiento en la demanda de sistemas internacionales de despliegue de información en la World Wide Web. Los desarrolladores se vieron en la tarea de manejar ilustraciones, mapas, fotografías y animaciones, a un ritmo nunca antes visto, con casi ningún método para optimizar la visualización y almacenamiento de imágenes. También fueron necesarios sistemas para traducir el flujo de información en múltiples idiomas extranjeros a lenguaje natural humano, con muchos sistemas de software diseñados para uso multilenguaje, basado en traductores humanos.

La ingeniería de software contribuyó alrededor de 90 000 millones de dólares por año, ya que entró en juego el Internet. Esto hace que los desarrolladores tuviesen que manejar imágenes mapas y animaciones para optimizar la visualización/almacenamiento de imágenes (como el uso de imágenes en miniatura). El uso de los navegadores y utilización de lenguaje HTML cambia drásticamente la visión y recepción de la información.

Las amplias conexiones de red causaron la proliferación de virus informáticos y basura o spam en los correos electrónicos (E-mail). Esta situación puso en una carrera contra el tiempo a los desarrolladores con el fin de crear nuevos sistemas de bloqueo o seguridad de dichas anomalías en la informática, ya que se volvían sumamente tediosas y difíciles de arreglar[11]

Después de una fuerte y creciente demanda surge la necesidad de crear soluciones de software a bajo costo, lo que conlleva al uso de metodologías más simples y rápidas que desarrollan software funcional. Cabe señalar que los sistemas más pequeños tenían un enfoque más simple y rápido para poder administrar el desarrollo de cálculos y algoritmos de software.

Objetivos

La ingeniería de software aplica diferentes normas y métodos que permiten obtener mejores resultados, en cuanto al desarrollo y uso del software, mediante la aplicación correcta de estos procedimientos se puede llegar a cumplir de manera satisfactoria con los objetivos fundamentales de la ingeniería de software.

Entre los objetivos de la ingeniería de software están:

  • Mejorar el diseño de aplicaciones o software de tal modo que se adapten de mejor manera a las necesidades de las organizaciones o finalidades para las cuales fueron creadas.
  • Promover mayor calidad al desarrollar aplicaciones complejas.
  • Brindar mayor exactitud en los costos de proyectos y tiempo de desarrollo de los mismos.
  • Aumentar la eficiencia de los sistemas al introducir procesos que permitan medir mediante normas específicas, la calidad del software desarrollado, buscando siempre la mejor calidad posible según las necesidades y resultados que se quieren generar.
  • Una mejor organización de equipos de trabajo, en el área de desarrollo y mantenimiento de software.
  • Detectar a través de pruebas, posibles mejoras para un mejor funcionamiento del software desarrollado.[13]

Recursos

Recursos humanos

Son todas aquellas personas que intervienen en la planificación de cualquier instancias de software (por ejemplo: gestor, ingeniero de software experimentado, etc.), El número de personas requerido para un proyecto de software solo puede ser determinado después de hacer una estimación del esfuerzo de desarrollo...

Recursos de entorno

Es el entorno de las aplicaciones (software y hardware) el hardware proporciona el medio físico para desarrollar las aplicaciones (software), este recurso es indispensable.[14]

Implicaciones socioeconómicas

Económicamente

En los Estados Unidos, el software contribuyó a una octava parte de todo el incremento del PIB durante la década de 1990 (alrededor de 90 000 millones de dólares por año), y un noveno de todo el crecimiento de productividad durante los últimos años de la década (alrededor de 33.000 millones de dólares estadounidenses por año). La ingeniería de software contribuyó a US$ 1 billón de crecimiento económico y productividad en esa década. Alrededor del globo, el software contribuye al crecimiento económico de maneras similares, aunque es difícil de encontrar estadísticas fiables. [cita requerida]

Además, con la industria del lenguaje está hallando cada vez más campos de aplicación a escala global.

Socialmente

La ingeniería de software cambia la cultura del mundo debido al extendido uso de la computadora. El correo electrónico (e-mail), la WWW y la mensajería instantánea permiten a la gente interactuar de nuevas maneras. El software baja el costo y mejora la calidad de los servicios de salud, los departamentos de bomberos, las dependencias gubernamentales y otros servicios sociales. Los proyectos exitosos donde se han usado métodos de ingeniería de software incluyen a GNU/Linux, el software del transbordador espacial, los cajeros automáticos y muchos otros.

Notaciones

LUM (lenguaje unificado de modelado) o UML

Es un lenguaje de modelado muy reconocido y utilizado actualmente que se utiliza para describir o especificar métodos. También es aplicable en el desarrollo de software.

Las siglas UML significan lenguaje unificado de modelado esto quiere decir que no pretende definir un modelo estándar de desarrollo, sino únicamente un lenguaje de modelado.[15]

Un lenguaje de modelado consta de vistas, elementos de modelo y un conjunto de reglas sintácticas, semánticas y pragmáticas que indican cómo utilizar los elementos.

En esta materia nos encontramos con varios diagramas que se pueden usar tales como: casos de uso, de clases, componentes, despliegue, etc.

BPMN (notación para el modelado de procesos de negocios)

El objetivo de la notación para el modelado de procesos de negocios es proporcionar de una manera fácil de definir y analizar los procesos de negocios públicos y privados simulando un diagrama de flujo. La notación ha sido diseñada específicamente para coordinar la secuencia de los procesos y los mensajes que fluyen entre los participantes del mismo, con un conjunto de actividades relacionadas. Características básicas de los elementos de BPMN

  • Objetos de flujo: eventos, actividades, rombos de control de flujo (gateways).
  • Objetos de conexión: flujo de secuencia, flujo de mensaje, asociación.
  • Swimlanes (carriles de piscina): pool, lane.
  • Artefactos: objetos de datos, grupo, anotación.[15]

Diagrama de flujo de datos (DFD)

Un diagrama de flujo de datos permite representar el movimiento de datos a través de un sistema por medio de modelos que describen los flujos de datos, los procesos que transforman o cambian los datos, los destinos de datos y los almacenamientos de datos a la cual tiene acceso el sistema.

Su inventor fue Larry Constantine, basado en el modelo de computación de Martin y Estrin: flujo gráfico de datos. Con los diagramas de flujo de datos determina la manera en que cualquier sistema puede desarrollarse, ayuda en la identificación de los datos de la transacción en el modelo de datos y proporciona al usuario una idea física de cómo resultarán los datos a última instancia.[16]

Herramienta CASE

Las Herramienta CASE son herramientas computacionales (software) que están destinadas a asistir en los procesos de ciclo de vida de un software, facilitan la producción del software, varias se basan principalmente en la idea de un modelo gráfico.[17]

Metodología

Un objetivo de décadas ha sido el encontrar procesos y metodologías, que sean sistemáticas, predecibles y repetibles, a fin de mejorar la productividad en el desarrollo y la calidad del producto software, en pocas palabras, determina los pasos a seguir y como realizarlos para finalizar una tarea.

Etapas del proceso

La ingeniería de software requiere llevar a cabo numerosas tareas agrupadas en etapas, al conjunto de estas etapas se le denomina ciclo de vida. Las etapas comunes a casi todos los modelos de ciclo de vida son las siguientes:

Obtención de los requisitos

Se debe identificar sobre qué se está trabajando, es decir, el tema principal que motiva el inicio del estudio y creación del nuevo software o modificación de uno ya existente. A su vez identificar los recursos que se tienen, en esto entra el conocer los recursos humanos y materiales que participan en el desarrollo de las actividades. Es importante entender el contexto del negocio para identificar adecuadamente los requisitos.

Se tiene que tener dominio de la información de un problema, lo cual incluye los datos fuera del software (usuarios finales, otros sistemas o dispositivos externos), los datos que salen del sistema (por la interfaz de usuario, interfaces de red, reportes, gráficas y otros medios) y los almacenamientos de datos que recaban y organizan objetos persistentes de datos (por ejemplo, aquellos que se conservan de manera permanente).

También hay que ver los puntos críticos, lo que significa tener de una manera clara los aspectos que entorpecen y limitan el buen funcionamiento de los procedimientos actuales, los problemas más comunes y relevantes que se presentan, los motivos que crean insatisfacción y aquellos que deben ser cubiertos a plenitud. Por ejemplo: ¿El contenido de los reportes generados, satisface realmente las necesidades del usuario? ¿Los tiempos de respuesta ofrecidos, son oportunos?, etc.

Hay que definir las funciones que realizará el software ya que estas ayudan al usuario final y al funcionamiento del mismo programa.

Se tiene que tener en cuenta cómo será el comportamiento del software ante situaciones inesperadas como lo son por ejemplo una gran cantidad de usuarios usando el software o una gran cantidad de datos entre otros.

Análisis de requisitos

Extraer los requisitos de un producto software es la primera etapa para crearlo. Durante la fase de análisis, el cliente plantea las necesidades que se presenta e intenta explicar lo que debería hacer el software o producto final para satisfacer dicha necesidad mientras que el desarrollador actúa como interrogador, como la persona que resuelve problemas. Con este análisis, el ingeniero de sistemas puede elegir la función que debe realizar el software y establecer o indicar cuál es la interfaz más adecuada para el mismo.[18]

El análisis de requisitos puede parecer una tarea sencilla, pero no lo es debido a que muchas veces los clientes piensan que saben todo lo que el software necesita para su buen funcionamiento, sin embargo se requiere la habilidad y experiencia de algún especialista para reconocer requisitos incompletos, ambiguos o contradictorios. Estos requisitos se determinan tomando en cuenta las necesidades del usuario final, introduciendo técnicas que nos permitan mejorar la calidad de los sistemas sobre los que se trabaja.[19]

El resultado del análisis de requisitos con el cliente se plasma en el documento ERS (especificación de requisitos del sistema), cuya estructura puede venir definida por varios estándares, tales como CMMI. Asimismo, se define un diagrama de entidad/relación, en el que se plasman las principales entidades que participarán en el desarrollo del software.

La captura, análisis y especificación de requisitos (incluso pruebas de ellos), es una parte crucial; de esta etapa depende en gran medida el logro de los objetivos finales. Se han ideado modelos y diversos procesos metódicos de trabajo para estos fines. Aunque aún no está formalizada, ya se habla de la ingeniería de requisitos.

La IEEE Std. 830-1998 normaliza la creación de las especificaciones de requisitos de software (Software Requirements Specification).

Finalidades del análisis de requisitos:

  • Brindar al usuario todo lo necesario para que pueda trabajar en conjunto con el software desarrollado obteniendo los mejores resultados posibles.
  • Tener un control más completo en la etapa creación del software, en cuanto a tiempo de desarrollo y costos.
  • Utilización de métodos más eficientes que permitan el mejor aprovechamiento del software según sea la finalidad de uso del mismo.
  • Aumentar la calidad del software desarrollado al disminuir los riesgos de mal funcionamiento.[19]

No siempre en la etapa de "análisis de requisitos" las distintas metodologías de desarrollo llevan asociado un estudio de viabilidad y/o estimación de costes. El más conocido de los modelos de estimación de coste del software es el modelo COCOMO

Limitaciones[20]

Los software tienen la capacidad de emular inteligencia creando un modelo de ciertas características de la inteligencia humana pero solo posee funciones predefinidas que abarcan un conjunto de soluciones que en algunos campos llega a ser limitado. Aun cuando tiene la capacidad de imitar ciertos comportamientos humanos no es capaz de emular el pensamiento humano porque actúa bajo condiciones.

Otro aspecto limitante de los software proviene del proceso totalmente mecánico que requiere de un mayor esfuerzo y tiempos elevados de ejecución lo que lleva a tener que implementar el software en una máquina de mayor capacidad.

Especificación

La especificación de requisitos describe el comportamiento esperado en el software una vez desarrollado. Gran parte del éxito de un proyecto de software radicará en la identificación de las necesidades del negocio (definidas por la alta dirección), así como la interacción con los usuarios funcionales para la recolección, clasificación, identificación, priorización y especificación de los requisitos del software.

Entre las técnicas utilizadas para la especificación de requisitos se encuentran:

Siendo los primeros más rigurosas y formales, los segundas más ágiles e informales.

Arquitectura

La integración de infraestructura, desarrollo de aplicaciones, bases de datos y herramientas gerenciales, requieren de capacidad y liderazgo para poder ser conceptualizados y proyectados a futuro, solucionando los problemas de hoy. El rol en el cual se delegan todas estas actividades es el del Arquitecto.

El arquitecto de software es la persona que añade valor a los procesos de negocios gracias a su valioso aporte de soluciones tecnológicas.

La arquitectura de sistemas en general, es una actividad de planeación, ya sea a nivel de infraestructura de red y hardware, o de software.

Lo principal en este punto es poner en claro los aspectos lógicos y físicos de las salidas, modelos de organización y representación de datos, entradas y procesos que componen el sistema, considerando las bondades y limitaciones de los recursos disponibles en la satisfacción de las pacificaciones brindadas para el análisis.

Hay que tener en consideración la arquitectura del sistema en la cual se va a trabajar, elaborar un plan de trabajo viendo la prioridad de tiempo y recursos disponibles. En los diseños de salidas entra los que es la interpretación de requerimientos lo cual es el dominio de información del problema, las funciones visibles para el usuario, el comportamiento del sistema y un conjunto de clases de requerimientos que agrupa los objetos del negocio con los métodos que les dan servicio.

La arquitectura de software consiste en el diseño de componentes de una aplicación (entidades del negocio), generalmente utilizando patrones de arquitectura. El diseño arquitectónico debe permitir visualizar la interacción entre las entidades del negocio y además poder ser validado, por ejemplo por medio de diagramas de secuencia. Un diseño arquitectónico describe en general el cómo se construirá una aplicación de software. Para ello se documenta utilizando diagramas, por ejemplo:

Los diagramas de clases y de base de datos son los mínimos necesarios para describir la arquitectura de un proyecto que iniciará a ser codificado. Dependiendo del alcance del proyecto, complejidad y necesidades, el arquitecto elegirá cuales de los diagramas se requiere elaborar.

Las herramientas para el diseño y modelado de software se denominan CASE (Computer Aided Software Engineering) entre las cuales se encuentran:

  • Enterprise Architect
  • Microsoft Visio for Enterprise Architects

Programación

Implementar un diseño en código puede ser la parte más obvia del trabajo de ingeniería de software, pero no necesariamente es la que demanda mayor trabajo y ni la más complicada. La complejidad y la duración de esta etapa está íntimamente relacionada al o a los lenguajes de programación utilizados, así como al diseño previamente realizado.

Desarrollo de la aplicación

Para el desarrollo de la aplicación es necesario considerar cinco fases para tener una aplicación o programa eficiente, estas son:

  • Desarrollo de la infraestructura: Esta fase permite el desarrollo y la organización de los elementos que formaran la infraestructura de la aplicación, con el propósito de finalizar la aplicación eficientemente.
  • Adaptación del paquete: El objetivo principal de esta fase es entender de una manera detallada el funcionamiento del paquete, esto tiene como finalidad garantizar que el paquete pueda ser utilizado en su máximo rendimiento, tanto para negocios o recursos. Todos los elementos que componen el paquete son inspeccionados de manera detallada para evitar errores y entender mejor todas las características del paquete.
  • Desarrollo de unidades de diseño de interactivas: En esta fase se realizan los procedimientos que se ejecutan por un diálogo usuario-sistema. Los procedimientos de esta fase tienen como objetivo principal:
  1. Establecer específicamente las acciones que debe efectuar la unidad de diseño.
  2. La creación de componentes para sus procedimientos.
  3. Ejecutar pruebas unitarias y de integración en la unidad de diseño.
  • Desarrollo de unidades de diseño batch: En esta fase se utilizan una serie de combinación de técnicas, como diagrama de flujo, diagramas de estructuras, tablas de decisiones, etc. Cualquiera a utilizar será beneficioso para plasmar de manera clara y objetiva las especificaciones y que así el programador tenga mayor comprensión a la hora de programar y probar los programas que le corresponden.
  • Desarrollo de unidades de diseño manuales: En esta fase el objetivo central es proyectar todos los procedimientos administrativos que desarrollarán en torno a la utilización de los componentes computarizados.[21]

Pruebas de software

Consiste en comprobar que el software realice correctamente las tareas indicadas en la especificación del problema. Una técnica es probar por separado cada módulo del software (prueba unitaria), y luego probarlo de manera integral (pruebas de integración), para así llegar al objetivo. Se considera una buena práctica el que las pruebas sean efectuadas por alguien distinto al desarrollador que la programó, idealmente un área de pruebas; sin perjuicio de lo anterior el programador debe hacer sus propias pruebas. En general hay dos grandes maneras de organizar un área de pruebas, la primera es que esté compuesta por personal inexperto y que desconozca el tema de pruebas, de esta manera se evalúa que la documentación entregada sea de calidad, que los procesos descritos son tan claros que cualquiera puede entenderlos y el software hace las cosas tal y como están descritas. El segundo enfoque es tener un área de pruebas conformada por programadores con experiencia, personas que saben sin mayores indicaciones en qué condiciones puede fallar una aplicación y que pueden poner atención en detalles que personal inexperto no consideraría.

De acuerdo con Roger S. Pressman, el proceso de pruebas se centra en los procesos lógicos internos del software, asegurando que todas las sentencias se han comprobado, y en los procesos externos funcionales, es decir, la realización de pruebas para la detección de errores. Se requiere poder probar el software con sujetos reales que puedan evaluar el comportamiento del software con el fin de proporcionar realimentación a los desarrolladores. Es importante que durante el proceso de desarrollo del software no se pierda contacto con los interesados o solicitantes del desarrollo de software, de esta manera los objetivos del proyecto se mantendrán vigentes y se tendrá una idea clara de los aspectos que tienen que probarse durante el período de pruebas.[22]

Implementación

Una implementación es la realización de una especificación técnica o algoritmos con un programa, componente software, u otro sistema de cómputo. Muchas especificaciones son dadas según a su especificación o un estándar. Las especificaciones recomendadas según el World Wide Web Consortium, y las herramientas de desarrollo del software contienen implementaciones de lenguajes de programación. El modelo de implementación es una colección de componentes y los subsistemas que contienen. Componentes tales como: ficheros ejecutables, ficheros de código fuente y todo otro tipo de ficheros que sean necesarios para la implementación y despliegue del sistema.

La etapa de implementación del diseño de software es el proceso de convertir una especificación del sistema en un sistema ejecutable. Siempre implica los procesos de diseño y programación de software, pero, si se utiliza un enfoque evolutivo de desarrollo, también puede implicar un refinamiento de la especificación del software. Esta etapa es una descripción de la estructura del software que se va a implementar, los datos que son parte del sistema, las interfaces entre los componentes del sistema, y algunas veces los algoritmos utilizados.[23]

Documentación

Es todo lo concerniente a la documentación del propio desarrollo del software y de la gestión del proyecto, pasando por modelaciones (UML), diagramas de casos de uso, pruebas, manuales de usuario, manuales técnicos, etc; todo con el propósito de eventuales correcciones, usabilidad, mantenimiento futuro y ampliaciones al sistema.

Mantenimiento

Fase dedicada a mantener y mejorar el software para corregir errores descubiertos e incorporar nuevos requisitos. Esto puede llevar más tiempo incluso que el desarrollo del software inicial. Alrededor de 2/3 del tiempo de ciclo de vida de un proyecto[14]​ está dedicado a su mantenimiento. Una pequeña parte de este trabajo consiste eliminar errores (bugs); siendo que la mayor parte reside en extender el sistema para incorporarle nuevas funcionalidades y hacer frente a su evolución.

El mantenimiento de software, según la investigación de Lehman, el 80% del mantenimiento no son acciones correctivas. Son mejoras de funcionalidad (e incorporación de nuevos requisitos), según Lehman el software evoluciona con el tiempo. Teniendo en cuenta eso, la etapa de mantenimiento en sí misma puede incluir las etapas anteriores entre el despliegue de cada nueva versión, reutilizando el software ya existente, reformandolo y adaptandolo.

Ventajas[24]

Desde el punto de vista de gestión

  • Facilitar la tarea de seguimiento del proyecto
  • Optimizar el uso de recursos
  • Facilitar la comunicación entre usuarios y desarrolladores
  • Facilitar la evaluación de resultados y cumplimiento de objetivos

Desde el punto de vista de los ingenieros de software

  • Ayudar a comprender el problema
  • Permitir la reutilización
  • Facilitar el mantenimiento del producto final
  • Optimizar el conjunto y cada una de las fases del proceso de desarrollo

Desde el punto de vista de cliente o usuario final

  • Garantizar el nivel de calidad del producto final
  • Obtener el ciclo de vida adecuado para el proyecto
  • Confianza en los plazos del tiempo mostrados en la definición del proyecto

Modelos y ciclos de vida del desarrollo de software

La ingeniería de software, con el fin de ordenar el caos que era anteriormente el desarrollo de software, dispone de varios modelos, paradigmas y filosofías de desarrollo, estos los conocemos principalmente como modelos o ciclos de vida del desarrollo de software, esto incluye el proceso que se sigue para construir, entregar y hacer evolucionar el software, desde la concepción de una idea hasta la entrega y el retiro del sistema y representa todas las actividades y artefactos (productos intermedios) necesarios para desarrollar una aplicación.[25]

El ciclo de vida de un software contiene los siguientes procedimientos:

  • Definición de objetivos: definir el resultado del proyecto y su papel en la estrategia global.[26]
  • Análisis de los requisitos y su viabilidad: recopilar, examinar y formular los requisitos del cliente y examinar cualquier restricción que se pueda aplicar.[26]
  • Diseño general: requisitos generales de la arquitectura de la aplicación.[26]
  • Diseño en detalle: definición precisa de cada subconjunto de la aplicación.[26]
  • Programación (programación e implementación): es la implementación de un lenguaje de programación para crear las funciones definidas durante la etapa de diseño.[26]
  • Prueba de unidad: prueba individual de cada subconjunto de la aplicación para garantizar que se implementaron de acuerdo con las especificaciones.[26]
  • Integración: para garantizar que los diferentes módulos se integren con la aplicación. Este es el propósito de la prueba de integración que está cuidadosamente documentada.[26]
  • Prueba beta (o validación), para garantizar que el software cumple con las especificaciones originales.[26]
  • Documentación: sirve para documentar información necesaria para los usuarios del software y para desarrollos futuros.[26]
  • Implementación
  • Mantenimiento: para todos los procedimientos correctivos (mantenimiento correctivo) y las actualizaciones secundarias del software (mantenimiento continuo).[26]

Modelo en cascada o clásico

En ingeniería de software el modelo en cascada ―también llamado desarrollo en cascada o ciclo de vida clásico― se basa en un enfoque metodológico que ordena rigurosamente las etapas del ciclo de vida del software, esto sugiere una aproximación sistemática secuencial hacia el proceso de desarrollo del software, que se inicia con la especificación de requisitos del cliente y continúa con la planificación, el modelado, la construcción y el despliegue para culminar en el soporte del software terminado.[27]

Modelo de prototipos

En ingeniería de software, el modelo de prototipos pertenece a los modelos de desarrollo evolutivo. Este permite que todo el sistema, o algunos de sus partes, se construyan rápidamente para comprender con facilidad y aclarar ciertos aspectos en los que se aseguren que el desarrollador, el usuario, el cliente estén de acuerdo en lo que se necesita así como también la solución que se propone para dicha necesidad y de esta manera minimizar el riesgo y la incertidumbre en el desarrollo, este modelo se encarga del desarrollo de diseños para que estos sean analizados y prescindir de ellos a medida que se adhieran nuevas especificaciones, es ideal para medir el alcance del producto, pero no se asegura su uso real.

Este modelo principalmente se aplica cuando un cliente define un conjunto de objetivos generales para el software a desarrollarse sin delimitar detalladamente los requisitos de entrada procesamiento y salida, es decir cuando el responsable no está seguro de la eficacia de un algoritmo, de la adaptabilidad del sistema o de la manera en que interactúa el hombre y la máquina.

Este modelo se encarga principalmente de ayudar al ingeniero de sistemas y al cliente a entender de mejor manera cuál será el resultado de la construcción cuando los requisitos estén satisfechos.[28]

Modelo en espiral

El modelo en espiral, que Barry Boehm propuso originalmente en 1986, es un modelo de proceso de software evolutivo que conjuga la naturaleza iterativa de la construcción de prototipos con los aspectos controlados y sistemáticos del modelo en cascada, es decir, cuando se aplica este modelo, el software se desarrolla en una serie de entregas evolutivas (ciclos o iteraciones), cada una de estas entregando prototipos más completas que el anterior, todo esto en función del análisis de riesgo y las necesidades del cliente. Aunque el modelo espiral representa ventajas por sobre el desarrollo lineal, el cálculo de los riesgos puede ser muy complicado y por lo cual su uso en el ámbito real es muy escaso.[29]

Modelo de desarrollo por etapas

Es un modelo en el que el software se muestra al cliente en etapas refinadas sucesivamente. Con esta metodología se desarrollan las capacidades más importantes reduciendo el tiempo necesario para la construcción de un producto; el modelo de entrega por etapas es útil para el desarrollo de la herramienta debido a que su uso se recomienda para problemas que pueden ser tratados descomponiéndolos en problemas más pequeños y se caracteriza principalmente en que las especificaciones no son conocidas en detalle al inicio del proyecto y por tanto se van desarrollando simultáneamente con las diferentes versiones del código.

En este modelo pueden distinguirse las siguientes fases:

  • Especificación conceptual.
  • Análisis de requisitos.
  • Diseño inicial.
  • Diseño detallado (codificación, depuración, prueba y liberación).

Cuando es por etapas, en el diseño global estas fases pueden repetirse según la cantidad de etapas que sean requeridas.

Entre sus ventajas tenemos:

  • Detección de problemas antes y no hasta la única entrega final del proyecto.
  • Eliminación del tiempo en informes debido a que cada versión es un avance.
  • Estimación de tiempo por versión, evitando errores en la estimación del proyecto general.
  • Cumplimiento a la fecha por los desarrolladores.

Modelo incremental o iterativo

Desarrollo iterativo y creciente (o incremental) es un proceso de desarrollo de software, creado en respuesta a las debilidades del modelo tradicional de cascada, es decir, este modelo aplica secuencias lineales como el modelo en cascada, pero de una manera iterativa o escalada según como avance el proceso de desarrollo y con cada una de estas secuencias lineales se producen incrementos (mejoras) del software.[30]

Se debe tener en cuenta que el flujo del proceso de cualquier incremento puede incorporar el paradigma de construcción de prototipos, ya que como se mencionó anteriormente, este tipo de modelo es iterativo por naturaleza, sin embargo se diferencia en que este busca la entrega de un producto operacional con cada incremento que se le realice al software.

Modelo estructurado

Este modelo ―como su nombre lo indica― utiliza las técnicas del diseño estructurado o de la programación estructurada para su desarrollo, también se utiliza en la creación de los algoritmos del programa. Este formato facilita la comprensión de la estructura de datos y su control.[31]​ Entre las principales características de este modelo se encuentran las siguientes:

  • Generalmente se puede diferenciar de una manera más clara los procesos y las estructuras de datos.
  • Existen métodos que se enfocan principalmente en ciertos datos.
  • La abstracción del programa es de un nivel mucho mayor.
  • Los procesos y estructuras de datos son representados jerárquicamente.[31]

Este modelo también presenta sus desventajas entre las cuales podemos mencionar algunas:

  • Se podía encontrar datos repetidos en diferentes partes del programa.[31]
  • Cuando el código se hace muy extenso o grande su manejo se complica demasiado.[32]

En el modelo estructurado las técnicas que comúnmente se utilizan son:

Modelo orientado a objetos

Estos modelos tienen sus raíces en la programación orientada a objetos y como consecuencia de ella gira en torno al concepto de clase, también lo hacen el análisis de requisitos y el diseño. Esto además de introducir nuevas técnicas, también aprovecha las técnicas y conceptos del desarrollo estructurado, como diagramas de estado y transiciones. El modelo orientado a objetos tiene dos características principales, las cuales ha favorecido su expansión:

  • Permite la reutilización de software en un grado significativo.
  • Su simplicidad facilita el desarrollo de herramientas informáticas de ayuda al desarrollo, el cual es fácilmente implementada en una notación orientada a objetos llamado UML.[34]

Modelo RAD (rapid application development)

El RAD (rapid application development: ‘desarrollo rápido de aplicaciones’), es un modelo de proceso de software incremental, desarrollado inicialmente por James Maslow en 1980, que resalta principalmente un ciclo corto de desarrollo.

Esta es una metodología que posibilita la construcción de sistemas computacionales que combinen técnicas y utilidades CASE (Computer Aided Software Engineering), la construcción de prototipos centrados en el usuario y el seguimiento lineal y sistemático de objetivos, incrementando la rapidez con la que se producen los sistemas mediante la utilización de un enfoque de desarrollo basado en componentes.[35]

Si se entienden bien los requisitos y se limita el ámbito del proyecto, el proceso RAD permite que un equipo de desarrollo cree un producto completamente funcional dentro de un periodo muy limitado de tiempo sin reducir en lo más mínimo la calidad del mismo.[36]

Modelo de desarrollo concurrente

El modelo de desarrollo concurrente es un modelo de tipo de red donde todas las personas actúan simultáneamente o al mismo tiempo. Este tipo de modelo se puede representar a manera de esquema como una serie de actividades técnicas importantes, tareas y estados asociados a ellas.

El modelo de proceso concurrente define una serie de acontecimientos que dispararan transiciones de estado a estado para cada una de las actividades de la ingeniería del software. Por ejemplo, durante las primeras etapas del diseño, no se contempla una inconsistencia del modelo de análisis. Esto genera la corrección del modelo de análisis de sucesos, que disparara la actividad de análisis del estado hecho al estado cambios en espera. Este modelo de desarrollo se utiliza a menudo como el paradigma de desarrollo de aplicaciones cliente/servidor. Un sistema cliente/servidor se compone de un conjunto de componentes funcionales. Cuando se aplica a cliente/servidor, el modelo de proceso concurrente define actividades en dos dimensiones: una división de sistemas y una división de componentes. Los aspectos del nivel de sistemas se afrontan mediante dos actividades: diseño y realización.

La concurrencia se logra de dos maneras:

  • Las actividades del sistema y de componente ocurren simultáneamente y pueden modelarse con el enfoque orientado a objetos descrito anteriormente;
  • Una aplicación cliente/servidor típica se implementa con muchos componentes, cada uno de los cuales se pueden diseñar y realizar concurrentemente.

En realidad, el modelo de desarrollo concurrente es aplicable a todo tipo de desarrollo de software y proporciona una imagen exacta del estado actual de un proyecto. En vez de confinar actividades de ingeniería de software a una secuencia de sucesos, define una red de actividades, todas las actividades de la red existen simultáneamente con otras. Los sucesos generados dentro de una actividad dada o algún otro lado de la red de actividad inicia las transiciones entre los estados de una actividad.

Proceso unificado del desarrollo de software

El proceso unificado es un proceso de software genérico que puede ser utilizado para una gran cantidad de tipos de sistemas de software, para diferentes áreas de aplicación, diferentes tipos de organizaciones, diferentes niveles de competencia y diferentes tamaños de proyectos.

Provee un enfoque disciplinado en la asignación de tareas y responsabilidades dentro de una organización de desarrollo. Su meta es asegurar la producción de software de muy alta calidad que satisfaga las necesidades de los usuarios finales, dentro de un calendario y presupuesto predecible.[37]

El proceso unificado tiene dos dimensiones:

  • Un eje horizontal que representa el tiempo y muestra los aspectos del ciclo de vida del proceso a lo largo de su desenvolvimiento
  • Un eje vertical que representa las disciplinas, las cuales agrupan actividades de una manera lógica de acuerdo a su naturaleza.

La primera dimensión representa el aspecto dinámico del proceso conforme se va desarrollando, se expresa en términos de fases, iteraciones e hitos (milestones).

La segunda dimensión representa el aspecto estático del proceso: cómo es descrito en términos de componentes del proceso, disciplinas, actividades, flujos de trabajo, artefactos y roles.

El refinamiento más conocido y documentado del proceso unificado es el RUP (proceso unificado racional).

El proceso unificado no es simplemente un proceso, sino un marco de trabajo extensible que puede ser adaptado a organizaciones o proyectos específicos. De la misma manera, el proceso unificado de rational, también es un marco de trabajo extensible, por lo que muchas veces resulta imposible decir si un refinamiento particular del proceso ha sido derivado del proceso unificado o del RUP. Por dicho motivo, los dos nombres suelen utilizarse para referirse a un mismo concepto.[38]

Producto

El software se ha convertido en algo muy necesario en nuestra sociedad actual, es la máquina que conduce a la toma de decisiones comerciales, sirve para la investigación científica moderna, es un factor clave que diferencia productos y servicios modernos. Esto se da porque el software está inmerso en sistemas de todo tipo alrededor de nosotros.

El software de computadora es el producto que diseñan y construyen los ingenieros de software. Esto abarca programas que se ejecutan dentro de una computadora de cualquier tamaño y arquitectura, después de estar construido casi cualquier persona en el mundo industrializado, ya sea directa o indirectamente.

Los productos se pueden clasificar en:

  • Productos genéricos: Son los producidos por una organización para ser vendidos al mercado.
  • Productos hechos a medida: Sistemas que son desarrollados bajo pedido a un desarrollador específico.

Estos productos deben cumplir varias características al ser entregados, estas son:

  • Mantenibles: El software debe poder evolucionar mientras cumple con sus funciones.
  • Confiabilidad: No debe producir daños en caso de errores.
  • Eficiencia: El software no debe desperdiciar los recursos.
  • Utilización adecuada: Debe contar con una interfaz de usuario adecuada y su documentación.

Lo que constituye el producto final es diferente para el ingeniero y los usuarios, para el ingeniero son los programas, datos y documentos que configuran el software pero para el usuario el producto final es la información que de cierto modo soluciona el problema planteado por el usuario.

Naturaleza de la ingeniería de software

La ingeniería de software es una disciplina que está orientada a aplicar conceptos y métodos de ingeniería al desarrollo de software de calidad.

Matemáticas

Los programas tienen muchas propiedades matemáticas. Por ejemplo la corrección y la complejidad de muchos algoritmos son conceptos matemáticos que pueden ser rigurosamente probados. El uso de matemáticas en la IS es llamado métodos formales.

Creación

Los programas son construidos en una secuencia de pasos. El hecho de definir propiamente y llevar a cabo estos pasos, como en una línea de ensamblaje, es necesario para mejorar la productividad de los desarrolladores y la calidad final de los programas. Este punto de vista inspira los diferentes procesos y metodologías que se encuentran en la IS.

Gestión de Proyecto

El desarrollo de software de gran porte requiere una adecuada gestión del proyecto. Hay presupuestos, establecimiento de tiempos de entrega, un equipo de profesionales que liderar. Recursos (espacio de oficina, insumos, equipamiento) por adquirir. Para su administración se debe tener una clara visión y capacitación en gestión de proyectos.

Participantes y papeles

Para el desarrollo de un sistema de software es necesaria la colaboración de muchas personas con diversas competencias, capacidades e intereses. Al conjunto de personas involucradas en el proyecto se les conoce como participantes.

Al conjunto de funciones y responsabilidades que hay dentro del proyecto o sistema se le conoce como roles o papeles. Los roles están asociados a las tareas que son asignadas a los participantes, en consecuencia, una persona puede desempeñar uno o múltiples roles, así también un mismo rol puede ser representado por un equipo.[39]

Cliente

Es frecuente el uso de los términos "usuarios", "usuarios finales" y "clientes" como sinónimos, lo cual puede provocar confusión; estrictamente, el cliente (persona, empresa u organización) es quién especifica los requisitos del sistema,[40]​ en tanto que el usuario es quien utiliza u opera finalmente el producto software, pudiendo ser o no el cliente.

Desarrolladores

Esta clase de participantes están relacionados con todas las facetas del proceso de desarrollo del software. Su trabajo incluye la investigación, diseño, implementación, pruebas y depuración del software.[41]

Gestores

En el contexto de ingeniería de software, el gestor de desarrollo de software es un participante, que reporta al director ejecutivo de la empresa que presta el servicio de desarrollo. Es responsable del manejo y coordinación de los recursos y procesos para la correcta entrega de productos de software, mientras participa en la definición de la estrategia para el equipo de desarrolladores, dando iniciativas que promuevan la visión de la empresa.[42]

Usuarios finales

El usuario final es quien interactúa con el producto de software una vez es entregado.[40]​ Generalmente son los usuarios los que conocen el problema, ya que día a día operan los sistemas.

Código ético de un ingeniero de software

Un ingeniero de software debe tener un código donde asegura, en la medida posible, que los esfuerzos realizados se utilizarán para realizar el bien y deben comprometerse para que la ingeniería de software sea una profesión benéfica y respetada. Para el cumplimiento de esta norma, se toman en cuenta ocho principios relacionados con la conducta y las decisiones tomadas por el ingeniero; donde estos principios identifican las relaciones éticamente responsables de los individuos, grupos y organizaciones donde participen. Los principios a los que deben sujetarse son sobre la sociedad, cliente y empresario, producto, juicio, administración, profesión, colegas y por último el personal.

  • Sociedad: Los ingenieros de software deben actuar de manera congruente con el interés social, aceptando la responsabilidad total de su trabajo, moderando los intereses con el bienestar social, aprobando el software solamente si se tiene una creencia bien fundamentada, cooperando en los esfuerzos para solucionar asuntos importantes de interés social, ser justo y veraz en todas las afirmaciones relativas al software o documentos asociados.
  • Cliente y empresario: Se debe actuar de manera tal que se llegue a conciliar los mejores intereses de los clientes y empresarios, congruentemente con el interés social. Estos deberán prestar servicios en sus áreas de competencia, siendo honestos y francos sobre las limitaciones, no utilizar un software que se obtenga ilegalmente o sin ética, usar la propiedad de los clientes o empresarios de manera autorizada, mantener secreto cualquier documento de información confidencial.
  • Producto: Hay que asegurarse que los productos y sus modificaciones cumplan con los estándares profesionales más altos posibles, procurando la alta calidad, costos aceptables y una agenda razonable asegurando que los costos y beneficios sean claros y aceptados por el empresario y el cliente. Asegurar que las metas y objetivos de cualquier proyecto sean adecuados y alcanzables.
  • Juicio: Se debe mantener una integridad e independencia en el juicio profesional, moderando todo juicio técnico por la necesidad de apoyar y mantener los valores humanos, mantener la objetividad profesional con respecto a cualquier software o documento relacionado, no involucrarse en prácticas financieras fraudulentas.
  • Administración: Se deberá asegurar una buena administración para cualquier proyecto en el cual se trabaje, utilizando procedimientos efectivos para promover la calidad y reducir riesgos, asegurándose también que se conozcan las políticas y procedimientos del empresario para proteger contraseñas, archivos e información confidencial.
  • Profesión: Se debe incrementar la integridad y reputación de la profesión en conjunto con el interés social, ayudando al desarrollo de un ambiente organizacional favorable para actuar, promoviendo el conocimiento público de la ingeniería de software, extendiendo el conocimiento de la ingeniería de software por medio de participaciones en organizaciones, reuniones y publicaciones profesionales.
  • Colegas: Cada ingeniero deberá apoyar y ser justos con los colegas, motivando a sus colegas sujetándose al código, ayudando también a su desarrollo profesional, reconocer los trabajos de otros y abstenerse a atribuirse de méritos indebidos, revisar los trabajos de manera objetiva, sincera y propiamente documentada.
  • Personal: Los ingenieros de software participaran toda su vida en el aprendizaje con la práctica y promoverán un enfoque ético de la profesión, mejorando su conocimiento de los avances en el análisis, especificación, diseño, desarrollo, mantenimiento, pruebas del software y documentos relacionados en conjunto con administración del proceso de desarrollo.[43]

Educación ética

Organizaciones

Véase también

Referencias

  1. SWEBOK executive editors, Alain Abran, James W. Moore; editors, Pierre Bourque, Jonathan Aguilar, Robert Dupuis. (2004). Pierre Bourque and Robert Dupuis, ed. Guide to the Software Engineering Body of Knowledge - 2004 Version. IEEE Computer Society. pp. 1-1. ISBN 0-7695-2330-7. 
  2. ACM (2006). . ACM. Archivado desde el original el 17 de junio de 2011. Consultado el 23 de noviembre de 2010. 
  3. IEEE Standard Glossary of Software Engineering Terminology, IEEE std 610.12-1990, 1990.
  4. Bureau of Labor Statistics, U.S. Department of Labor, USDL 05-2145: Occupational Employment and Wages, November 2004 (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última)., Table 1.
  5. «La ciencia de hoy es la tecnología del mañana». 
  6. Universidad Siglo XXI,Argentina
  7. . Archivado desde el original el 25 de marzo de 2014. Consultado el 11 de marzo de 2014. 
  8. Tecnológico de Antioquía, Colombia (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).
  9. Leondes (2002). intelligent systems: technology and applications. CRC Press. ISBN 978-0-8493-1121-5. 
  10. . Archivado desde el original el 2 de mayo de 2014. Consultado el 11 de abril de 2014. 
  11. Association for Computing Machinery. «The Risks Digest» (en inglés). Consultado el 10 de noviembre de 2018. 
  12. Sommerville, Ian (1985) [1982]. Software Engineering (en inglés). Addison-Wesley. ISBN 0-201-14229-5. «Software engineering... has recently emerged as a discipline in its own right.» 
  13. Universidad Politécnica de Madrid. «Objetivos de ingeniería del software». 
  14. Pressman, Roger S. (2003). «El proceso». Ingeniería del software, un enfoque práctico. México: Mc Graw Hill, quinta edición. 
  15. Monografias.com. «Ingenieria de Software UML». Consultado el 10 de noviembre de 2018. 
  16. Notaciones de Ingenieria de Software,.
  17. Monografias.com Ingeniería del software
  18. . Archivado desde el original el 31 de marzo de 2014. Consultado el 9 de abril de 2014. 
  19. [1]
  20. «Limitaciones de los software», artículo en el sitio web Mundo Kramer.
  21. «Unidad 2: Fundamentos de la ingeniería del software», artículo en el sitio web Ing Software.
  22. [2]
  23. Sommerville, Ian. Ingenieria de Software. 
  24. Metodologia de ingeniería de software, artículo en el sitio web Slide Share.
  25. , artículo publicado en el sitio web de la Facultad de Ingeniería de la Universidad de Los Andes.
  26. «Ciclo de vida del software». Consultado el 14/12/16. 
  27. Pressman, Roger S.: Ingeniería del software: un enfoque práctico. Sexta edición, pág. 50-51.
  28. Lawrence Peleeger, Shari: Ingeniería de software: modelo de prototipos. Universidad Estatal de Milagro.
  29. Pressman, Roger S.: Ingeniería del software: un enfoque práctico. Sexta edición, pág. 58-60.
  30. Pressman, Roger S.: Ingeniería del software: un enfoque práctico. Sexta edición, pág. 52-53.
  31. Diseño estructurado, artículo en el sitio web Slide Share.
  32. [3], cuadro comparativo de programación estructurada y programación orientada objeto .
  33. [4], Benet Campderrich Falgueras, Editorial UOC, 2002 - 320 páginas.
  34. Campderrich Falgueras, Benet (2002): Ingeniería de software. Barcelona: Editorial UOC, 2002. 320 páginas.
  35. [5] el 24 de agosto de 2014 en Wayback Machine., What is Rapid Application Development?
  36. Pressman, Roger S.: Ingeniería del software: un enfoque práctico. Sexta edición, pág. 53-54.
  37. «Proceso unificado del desarrollo de software» el 29 de marzo de 2014 en Wayback Machine., artículo en el sitio web Yaqui.
  38. Pressman, Roger S.: Ingeniería del software: un enfoque práctico. Sexta edición, pág. 67-72.
  39. Bernd Bruegge & Allen H.Dutoit. Object-Oriented Software Engineering, Prentice Hall, Pag. 11.
  40. Pressman, 2002, p. 39
  41. «O*NET Code Connector - Software Developers, Systems Software - 15-1133.00». Onetcodeconnector.org. Consultado el 4 de agosto de 2014. 
  42. «Software Development Manager Position Description». interfacing.com. Consultado el 4 de agosto de 2014. 
  43. «Ingeniería de Software Código de Ética y Práctica Profesional». SEERI, East Tennessee State University. 1999. 

Bibliografía

Enlaces externos

  •   Wikiversidad alberga proyectos de aprendizaje sobre Ingeniería de software.
  • «Is software engineering actually engineering?», artículo publicado en The Iron Warrior, publicación de la University of Waterloo Engineering Society.
  • Algoritmos no colonizadores. Una manera de desarrollar software multicultural, Revista Tecnología Humanizada volumen 3 del 2020, por Gustavo Reimondo .


  •   Datos: Q80993
  •   Multimedia: Software engineering
  •   Libros y manuales: Ingeniería de software
  •   Recursos didácticos: Ingeniería de Software

ingeniería, software, ingeniería, software, ramas, ciencias, computación, estudia, creación, software, confiable, calidad, basándose, métodos, técnicas, ingeniería, brindando, soporte, operacional, mantenimiento, campo, estudio, ingeniería, software, integra, . La Ingenieria de Software es una de las ramas de las ciencias de la computacion que estudia la creacion de software confiable y de calidad basandose en metodos y tecnicas de ingenieria Brindando soporte operacional y de mantenimiento el campo de estudio de la ingenieria de software 1 Integra ciencias de la computacion ciencias aplicadas y las ciencias basicas en las cuales se encuentra apoyada la ingenieria 2 Ingenieria de softwareAreas del saberInformaticaCampo de aplicacionDesarrollo de software de aplicacion Desarrollo de software de sistema Desarrollo web Desarrollo de aplicaciones moviles Desarrollo de software de graficos Desarrollo de aplicaciones de escritorio Desarrollo de bot conversacional Desarrollo de cadena de bloques Desarrollo de software de fisica computacional Desarrollo de software de quimica computacional Desarrollo de vision artificial Desarrollo de software robotico Desarrollo de software biomedico Desarrollo de software operativo industrial Desarrollo de software de ingenieria Aplicaciones de la inteligencia artificialSubarea deCiencias de la computacion editar datos en Wikidata Un ingeniero de software Trevor Parscal programando en la sede de San Francisco de la Fundacion Wikimedia Se citan las definiciones mas reconocidas formuladas por los siguientes prestigiosos autores Ingenieria de software es el estudio de los principios y metodologias para el desarrollo y mantenimiento de sistemas software Zelkovitz 1978 Ingenieria de software es la aplicacion practica del conocimiento cientifico al diseno y construccion de programas de computadora y a la documentacion asociada requerida para desarrollar operar y mantenerlos Se conoce tambien como desarrollo de software o produccion de software Bohem 1976 La ingenieria de software trata del establecimiento de los principios y metodos de la ingenieria a fin de obtener software de modo rentable que sea fiable y trabaje en maquinas reales Bauer 1972 La ingenieria de software es la aplicacion de un enfoque sistematico disciplinado y cuantificable al desarrollo operacion y mantenimiento del software Standard Glossary of Software Engineering Terminology 3 En 2004 la U S Bureau of Labor Statistics Oficina de Estadisticas del Trabajo de Estados Unidos conto 760 840 ingenieros de software de computadora 4 actualizar El termino ingeniero de software sin embargo se utiliza de manera generica en el ambiente empresarial y no todos los que se desempenan en el puesto de ingeniero de software poseen realmente titulos de ingenieria de universidades reconocidas 5 Algunos autores consideran que desarrollo de software es un termino mas apropiado que ingenieria de software para el proceso de crear software Personas como Pete McBreen autor de Software Craftmanship cree que el termino IS implica niveles de rigor y prueba de procesos que no son apropiados para todo tipo de desarrollo de software Indistintamente se utilizan los terminos ingenieria de software o ingenieria del software aunque menos comun tambien se suele referenciar como ingenieria en software 6 7 8 En Hispanoamerica los terminos mas comunmente usados son los dos primeros La creacion del software es un proceso intrinsecamente creativo y la ingenieria del software trata de sistematizar este proceso con el fin de acotar el riesgo de fracaso en la consecucion del objetivo por medio de diversas tecnicas que se han demostrado adecuadas sobre la base de la experiencia previa La ingenieria de software se puede considerar como la ingenieria aplicada al software esto es por medios sistematizados y con herramientas preestablecidas la aplicacion de ellos de la manera mas eficiente para la obtencion de resultados optimos objetivos que siempre busca la ingenieria No es solo de la resolucion de problemas sino mas bien teniendo en cuenta las diferentes soluciones elegir la mas apropiada La produccion de software utiliza criterios y normas de la ingenieria de software lo que permite transformarlo en un producto industrial usando bases de la ingenieria como metodos tecnicas y herramientas para desarrollar un producto innovador regido por metodologias y las buenas practicas Dicho producto es un medio que interviene en las funciones de sus usuarios para obtener un proceso productivo mas eficaz y eficiente hoy en dia las empresas no podrian funcionar sin software porque este es un producto de uso masivo por lo cual el nivel de una empresa esta determinado por la calidad de su infraestructura tecnologica y los productos desarrollados o adquiridos de acuerdo a sus necesidades Indice 1 Historia 2 Objetivos 3 Recursos 3 1 Recursos humanos 3 2 Recursos de entorno 4 Implicaciones socioeconomicas 4 1 Economicamente 4 2 Socialmente 5 Notaciones 5 1 LUM lenguaje unificado de modelado o UML 5 2 BPMN notacion para el modelado de procesos de negocios 5 3 Diagrama de flujo de datos DFD 6 Herramienta CASE 7 Metodologia 7 1 Etapas del proceso 7 1 1 Obtencion de los requisitos 7 1 2 Analisis de requisitos 7 1 3 Limitaciones 20 7 1 4 Especificacion 7 1 5 Arquitectura 7 1 6 Programacion 7 1 7 Desarrollo de la aplicacion 7 1 8 Pruebas de software 7 1 9 Implementacion 7 1 10 Documentacion 7 1 11 Mantenimiento 7 2 Ventajas 24 7 2 1 Desde el punto de vista de gestion 7 2 2 Desde el punto de vista de los ingenieros de software 7 2 3 Desde el punto de vista de cliente o usuario final 8 Modelos y ciclos de vida del desarrollo de software 8 1 Modelo en cascada o clasico 8 2 Modelo de prototipos 8 3 Modelo en espiral 8 4 Modelo de desarrollo por etapas 8 5 Modelo incremental o iterativo 8 5 1 Modelo estructurado 8 5 2 Modelo orientado a objetos 8 6 Modelo RAD rapid application development 8 7 Modelo de desarrollo concurrente 8 8 Proceso unificado del desarrollo de software 9 Producto 10 Naturaleza de la ingenieria de software 10 1 Matematicas 10 2 Creacion 10 3 Gestion de Proyecto 11 Participantes y papeles 11 1 Cliente 11 2 Desarrolladores 11 3 Gestores 11 4 Usuarios finales 11 5 Codigo etico de un ingeniero de software 12 Educacion etica 12 1 Organizaciones 13 Vease tambien 14 Referencias 15 Bibliografia 16 Enlaces externosHistoria EditarArticulo principal Historia de la ingenieria del software Cuando aparecieron las primeras computadoras digitales en la decada de 1940 9 el desarrollo de software era algo tan nuevo que era casi imposible hacer predicciones de las fechas estimadas de finalizacion del proyecto y muchos de ellos sobrepasaban los presupuestos y tiempo estimados Los desarrolladores tenian que volver a escribir todos sus programas para correr en maquinas nuevas que salian cada uno o dos anos haciendo obsoletas las ya existentes El termino ingenieria del software aparecio por primera vez a finales de la decada de 1950 La ingenieria de software fue estimulada por la crisis del software de las decadas de entre 1960 y 1980 La ingenieria del software viene a ayudar a identificar y corregir mediante principios y metodologias los procesos de desarrollo y mantenimiento de sistemas de software Aparte de la crisis del software de las decadas de entre 1960 y 1980 la ingenieria de software se ve afectada por accidentes que conllevaron a la muerte de tres personas esto sucedio cuando la maquina de radioterapia Therac 25 emite una sobredosis masiva de radiacion y afecto contra la vida de estas personas 10 Esto remarca los riesgos de control por software 11 afectando directamente al nombre de la ingenieria de software A principios de los 1980 12 la ingenieria del software ya habia surgido como una genuina profesion para estar al lado de las ciencias de la computacion y la ingenieria tradicional Antes de esto las tareas eran corridas poniendo tarjetas perforadas como entrada en el lector de tarjetas de la maquina y se esperaban los resultados devueltos por la impresora Debido a la necesidad de traducir frecuentemente el software viejo para atender las necesidades de las nuevas maquinas se desarrollaron lenguajes de orden superior A medida que aparecio el software libre las organizaciones de usuarios comunmente lo liberaban Durante mucho tiempo solucionar la crisis del software fue de suma importancia para investigadores y empresas que se dedicaban a producir herramientas de software Para la decada de 1980 el costo de propiedad y mantenimiento del software fue dos veces mas caro que el propio desarrollo del software y durante la decada de 1990 el costo de propiedad y mantenimiento aumento 30 con respecto a la decada anterior En 1995 muchos de los proyectos de desarrollo estaban operacionales pero no eran considerados exitosos El proyecto de software medio sobrepasaba en un 50 la estimacion de tiempo previamente realizada ademas el 75 de todos los grandes productos de software que eran entregados al cliente tenian fallas tan graves que no eran usados en lo absoluto o simplemente no cumplian con los requerimientos del cliente 11 Algunos expertos argumentaron que la crisis del software era debido a la falta de disciplina de los programadores Cada nueva tecnologia y practica de la decada de 1970 a la de 1990 fue pregonada como la unica solucion a todos los problemas y el caos que llevo a la crisis del software Lo cierto es que la busqueda de una unica clave para el exito nunca funciono El campo de la ingenieria de software parece un campo demasiado complejo y amplio para una unica solucion que sirva para mejorar la mayoria de los problemas y cada problema representa solo una pequena porcion de todos los problemas de software El auge del uso del Internet llevo a un vertiginoso crecimiento en la demanda de sistemas internacionales de despliegue de informacion en la World Wide Web Los desarrolladores se vieron en la tarea de manejar ilustraciones mapas fotografias y animaciones a un ritmo nunca antes visto con casi ningun metodo para optimizar la visualizacion y almacenamiento de imagenes Tambien fueron necesarios sistemas para traducir el flujo de informacion en multiples idiomas extranjeros a lenguaje natural humano con muchos sistemas de software disenados para uso multilenguaje basado en traductores humanos La ingenieria de software contribuyo alrededor de 90 000 millones de dolares por ano ya que entro en juego el Internet Esto hace que los desarrolladores tuviesen que manejar imagenes mapas y animaciones para optimizar la visualizacion almacenamiento de imagenes como el uso de imagenes en miniatura El uso de los navegadores y utilizacion de lenguaje HTML cambia drasticamente la vision y recepcion de la informacion Las amplias conexiones de red causaron la proliferacion de virus informaticos y basura o spam en los correos electronicos E mail Esta situacion puso en una carrera contra el tiempo a los desarrolladores con el fin de crear nuevos sistemas de bloqueo o seguridad de dichas anomalias en la informatica ya que se volvian sumamente tediosas y dificiles de arreglar 11 Despues de una fuerte y creciente demanda surge la necesidad de crear soluciones de software a bajo costo lo que conlleva al uso de metodologias mas simples y rapidas que desarrollan software funcional Cabe senalar que los sistemas mas pequenos tenian un enfoque mas simple y rapido para poder administrar el desarrollo de calculos y algoritmos de software Objetivos EditarLa ingenieria de software aplica diferentes normas y metodos que permiten obtener mejores resultados en cuanto al desarrollo y uso del software mediante la aplicacion correcta de estos procedimientos se puede llegar a cumplir de manera satisfactoria con los objetivos fundamentales de la ingenieria de software Entre los objetivos de la ingenieria de software estan Mejorar el diseno de aplicaciones o software de tal modo que se adapten de mejor manera a las necesidades de las organizaciones o finalidades para las cuales fueron creadas Promover mayor calidad al desarrollar aplicaciones complejas Brindar mayor exactitud en los costos de proyectos y tiempo de desarrollo de los mismos Aumentar la eficiencia de los sistemas al introducir procesos que permitan medir mediante normas especificas la calidad del software desarrollado buscando siempre la mejor calidad posible segun las necesidades y resultados que se quieren generar Una mejor organizacion de equipos de trabajo en el area de desarrollo y mantenimiento de software Detectar a traves de pruebas posibles mejoras para un mejor funcionamiento del software desarrollado 13 Recursos EditarRecursos humanos Editar Vease tambien Recursos humanos Son todas aquellas personas que intervienen en la planificacion de cualquier instancias de software por ejemplo gestor ingeniero de software experimentado etc El numero de personas requerido para un proyecto de software solo puede ser determinado despues de hacer una estimacion del esfuerzo de desarrollo Recursos de entorno Editar Es el entorno de las aplicaciones software y hardware el hardware proporciona el medio fisico para desarrollar las aplicaciones software este recurso es indispensable 14 Implicaciones socioeconomicas EditarEconomicamente Editar En los Estados Unidos el software contribuyo a una octava parte de todo el incremento del PIB durante la decada de 1990 alrededor de 90 000 millones de dolares por ano y un noveno de todo el crecimiento de productividad durante los ultimos anos de la decada alrededor de 33 000 millones de dolares estadounidenses por ano La ingenieria de software contribuyo a US 1 billon de crecimiento economico y productividad en esa decada Alrededor del globo el software contribuye al crecimiento economico de maneras similares aunque es dificil de encontrar estadisticas fiables cita requerida Ademas con la industria del lenguaje esta hallando cada vez mas campos de aplicacion a escala global Socialmente Editar La ingenieria de software cambia la cultura del mundo debido al extendido uso de la computadora El correo electronico e mail la WWW y la mensajeria instantanea permiten a la gente interactuar de nuevas maneras El software baja el costo y mejora la calidad de los servicios de salud los departamentos de bomberos las dependencias gubernamentales y otros servicios sociales Los proyectos exitosos donde se han usado metodos de ingenieria de software incluyen a GNU Linux el software del transbordador espacial los cajeros automaticos y muchos otros Notaciones EditarLUM lenguaje unificado de modelado o UML Editar Articulo principal Lenguaje unificado de modelado Es un lenguaje de modelado muy reconocido y utilizado actualmente que se utiliza para describir o especificar metodos Tambien es aplicable en el desarrollo de software Las siglas UML significan lenguaje unificado de modelado esto quiere decir que no pretende definir un modelo estandar de desarrollo sino unicamente un lenguaje de modelado 15 Un lenguaje de modelado consta de vistas elementos de modelo y un conjunto de reglas sintacticas semanticas y pragmaticas que indican como utilizar los elementos En esta materia nos encontramos con varios diagramas que se pueden usar tales como casos de uso de clases componentes despliegue etc BPMN notacion para el modelado de procesos de negocios Editar Articulo principal Business Process Model and Notation El objetivo de la notacion para el modelado de procesos de negocios es proporcionar de una manera facil de definir y analizar los procesos de negocios publicos y privados simulando un diagrama de flujo La notacion ha sido disenada especificamente para coordinar la secuencia de los procesos y los mensajes que fluyen entre los participantes del mismo con un conjunto de actividades relacionadas Caracteristicas basicas de los elementos de BPMN Objetos de flujo eventos actividades rombos de control de flujo gateways Objetos de conexion flujo de secuencia flujo de mensaje asociacion Swimlanes carriles de piscina pool lane Artefactos objetos de datos grupo anotacion 15 Diagrama de flujo de datos DFD Editar Un diagrama de flujo de datos permite representar el movimiento de datos a traves de un sistema por medio de modelos que describen los flujos de datos los procesos que transforman o cambian los datos los destinos de datos y los almacenamientos de datos a la cual tiene acceso el sistema Su inventor fue Larry Constantine basado en el modelo de computacion de Martin y Estrin flujo grafico de datos Con los diagramas de flujo de datos determina la manera en que cualquier sistema puede desarrollarse ayuda en la identificacion de los datos de la transaccion en el modelo de datos y proporciona al usuario una idea fisica de como resultaran los datos a ultima instancia 16 Herramienta CASE EditarLas Herramienta CASE son herramientas computacionales software que estan destinadas a asistir en los procesos de ciclo de vida de un software facilitan la produccion del software varias se basan principalmente en la idea de un modelo grafico 17 Metodologia EditarUn objetivo de decadas ha sido el encontrar procesos y metodologias que sean sistematicas predecibles y repetibles a fin de mejorar la productividad en el desarrollo y la calidad del producto software en pocas palabras determina los pasos a seguir y como realizarlos para finalizar una tarea Etapas del proceso Editar La ingenieria de software requiere llevar a cabo numerosas tareas agrupadas en etapas al conjunto de estas etapas se le denomina ciclo de vida Las etapas comunes a casi todos los modelos de ciclo de vida son las siguientes Obtencion de los requisitos Editar Se debe identificar sobre que se esta trabajando es decir el tema principal que motiva el inicio del estudio y creacion del nuevo software o modificacion de uno ya existente A su vez identificar los recursos que se tienen en esto entra el conocer los recursos humanos y materiales que participan en el desarrollo de las actividades Es importante entender el contexto del negocio para identificar adecuadamente los requisitos Se tiene que tener dominio de la informacion de un problema lo cual incluye los datos fuera del software usuarios finales otros sistemas o dispositivos externos los datos que salen del sistema por la interfaz de usuario interfaces de red reportes graficas y otros medios y los almacenamientos de datos que recaban y organizan objetos persistentes de datos por ejemplo aquellos que se conservan de manera permanente Tambien hay que ver los puntos criticos lo que significa tener de una manera clara los aspectos que entorpecen y limitan el buen funcionamiento de los procedimientos actuales los problemas mas comunes y relevantes que se presentan los motivos que crean insatisfaccion y aquellos que deben ser cubiertos a plenitud Por ejemplo El contenido de los reportes generados satisface realmente las necesidades del usuario Los tiempos de respuesta ofrecidos son oportunos etc Hay que definir las funciones que realizara el software ya que estas ayudan al usuario final y al funcionamiento del mismo programa Se tiene que tener en cuenta como sera el comportamiento del software ante situaciones inesperadas como lo son por ejemplo una gran cantidad de usuarios usando el software o una gran cantidad de datos entre otros Analisis de requisitos Editar Extraer los requisitos de un producto software es la primera etapa para crearlo Durante la fase de analisis el cliente plantea las necesidades que se presenta e intenta explicar lo que deberia hacer el software o producto final para satisfacer dicha necesidad mientras que el desarrollador actua como interrogador como la persona que resuelve problemas Con este analisis el ingeniero de sistemas puede elegir la funcion que debe realizar el software y establecer o indicar cual es la interfaz mas adecuada para el mismo 18 El analisis de requisitos puede parecer una tarea sencilla pero no lo es debido a que muchas veces los clientes piensan que saben todo lo que el software necesita para su buen funcionamiento sin embargo se requiere la habilidad y experiencia de algun especialista para reconocer requisitos incompletos ambiguos o contradictorios Estos requisitos se determinan tomando en cuenta las necesidades del usuario final introduciendo tecnicas que nos permitan mejorar la calidad de los sistemas sobre los que se trabaja 19 El resultado del analisis de requisitos con el cliente se plasma en el documento ERS especificacion de requisitos del sistema cuya estructura puede venir definida por varios estandares tales como CMMI Asimismo se define un diagrama de entidad relacion en el que se plasman las principales entidades que participaran en el desarrollo del software La captura analisis y especificacion de requisitos incluso pruebas de ellos es una parte crucial de esta etapa depende en gran medida el logro de los objetivos finales Se han ideado modelos y diversos procesos metodicos de trabajo para estos fines Aunque aun no esta formalizada ya se habla de la ingenieria de requisitos La IEEE Std 830 1998 normaliza la creacion de las especificaciones de requisitos de software Software Requirements Specification Finalidades del analisis de requisitos Brindar al usuario todo lo necesario para que pueda trabajar en conjunto con el software desarrollado obteniendo los mejores resultados posibles Tener un control mas completo en la etapa creacion del software en cuanto a tiempo de desarrollo y costos Utilizacion de metodos mas eficientes que permitan el mejor aprovechamiento del software segun sea la finalidad de uso del mismo Aumentar la calidad del software desarrollado al disminuir los riesgos de mal funcionamiento 19 No siempre en la etapa de analisis de requisitos las distintas metodologias de desarrollo llevan asociado un estudio de viabilidad y o estimacion de costes El mas conocido de los modelos de estimacion de coste del software es el modelo COCOMO Limitaciones 20 Editar Los software tienen la capacidad de emular inteligencia creando un modelo de ciertas caracteristicas de la inteligencia humana pero solo posee funciones predefinidas que abarcan un conjunto de soluciones que en algunos campos llega a ser limitado Aun cuando tiene la capacidad de imitar ciertos comportamientos humanos no es capaz de emular el pensamiento humano porque actua bajo condiciones Otro aspecto limitante de los software proviene del proceso totalmente mecanico que requiere de un mayor esfuerzo y tiempos elevados de ejecucion lo que lleva a tener que implementar el software en una maquina de mayor capacidad Especificacion Editar La especificacion de requisitos describe el comportamiento esperado en el software una vez desarrollado Gran parte del exito de un proyecto de software radicara en la identificacion de las necesidades del negocio definidas por la alta direccion asi como la interaccion con los usuarios funcionales para la recoleccion clasificacion identificacion priorizacion y especificacion de los requisitos del software Entre las tecnicas utilizadas para la especificacion de requisitos se encuentran Caso de uso Historias de usuarioSiendo los primeros mas rigurosas y formales los segundas mas agiles e informales Arquitectura Editar Articulo principal Arquitectura de software La integracion de infraestructura desarrollo de aplicaciones bases de datos y herramientas gerenciales requieren de capacidad y liderazgo para poder ser conceptualizados y proyectados a futuro solucionando los problemas de hoy El rol en el cual se delegan todas estas actividades es el del Arquitecto El arquitecto de software es la persona que anade valor a los procesos de negocios gracias a su valioso aporte de soluciones tecnologicas La arquitectura de sistemas en general es una actividad de planeacion ya sea a nivel de infraestructura de red y hardware o de software Lo principal en este punto es poner en claro los aspectos logicos y fisicos de las salidas modelos de organizacion y representacion de datos entradas y procesos que componen el sistema considerando las bondades y limitaciones de los recursos disponibles en la satisfaccion de las pacificaciones brindadas para el analisis Hay que tener en consideracion la arquitectura del sistema en la cual se va a trabajar elaborar un plan de trabajo viendo la prioridad de tiempo y recursos disponibles En los disenos de salidas entra los que es la interpretacion de requerimientos lo cual es el dominio de informacion del problema las funciones visibles para el usuario el comportamiento del sistema y un conjunto de clases de requerimientos que agrupa los objetos del negocio con los metodos que les dan servicio La arquitectura de software consiste en el diseno de componentes de una aplicacion entidades del negocio generalmente utilizando patrones de arquitectura El diseno arquitectonico debe permitir visualizar la interaccion entre las entidades del negocio y ademas poder ser validado por ejemplo por medio de diagramas de secuencia Un diseno arquitectonico describe en general el como se construira una aplicacion de software Para ello se documenta utilizando diagramas por ejemplo Diagrama de clases Diagrama de base de datos Diagrama de despliegue Diagrama de secuenciaLos diagramas de clases y de base de datos son los minimos necesarios para describir la arquitectura de un proyecto que iniciara a ser codificado Dependiendo del alcance del proyecto complejidad y necesidades el arquitecto elegira cuales de los diagramas se requiere elaborar Las herramientas para el diseno y modelado de software se denominan CASE Computer Aided Software Engineering entre las cuales se encuentran Enterprise Architect Microsoft Visio for Enterprise ArchitectsProgramacion Editar Articulo principal Programacion Implementar un diseno en codigo puede ser la parte mas obvia del trabajo de ingenieria de software pero no necesariamente es la que demanda mayor trabajo y ni la mas complicada La complejidad y la duracion de esta etapa esta intimamente relacionada al o a los lenguajes de programacion utilizados asi como al diseno previamente realizado Desarrollo de la aplicacion Editar Para el desarrollo de la aplicacion es necesario considerar cinco fases para tener una aplicacion o programa eficiente estas son Desarrollo de la infraestructura Esta fase permite el desarrollo y la organizacion de los elementos que formaran la infraestructura de la aplicacion con el proposito de finalizar la aplicacion eficientemente Adaptacion del paquete El objetivo principal de esta fase es entender de una manera detallada el funcionamiento del paquete esto tiene como finalidad garantizar que el paquete pueda ser utilizado en su maximo rendimiento tanto para negocios o recursos Todos los elementos que componen el paquete son inspeccionados de manera detallada para evitar errores y entender mejor todas las caracteristicas del paquete Desarrollo de unidades de diseno de interactivas En esta fase se realizan los procedimientos que se ejecutan por un dialogo usuario sistema Los procedimientos de esta fase tienen como objetivo principal Establecer especificamente las acciones que debe efectuar la unidad de diseno La creacion de componentes para sus procedimientos Ejecutar pruebas unitarias y de integracion en la unidad de diseno Desarrollo de unidades de diseno batch En esta fase se utilizan una serie de combinacion de tecnicas como diagrama de flujo diagramas de estructuras tablas de decisiones etc Cualquiera a utilizar sera beneficioso para plasmar de manera clara y objetiva las especificaciones y que asi el programador tenga mayor comprension a la hora de programar y probar los programas que le corresponden Desarrollo de unidades de diseno manuales En esta fase el objetivo central es proyectar todos los procedimientos administrativos que desarrollaran en torno a la utilizacion de los componentes computarizados 21 Pruebas de software Editar Articulo principal Pruebas de software Consiste en comprobar que el software realice correctamente las tareas indicadas en la especificacion del problema Una tecnica es probar por separado cada modulo del software prueba unitaria y luego probarlo de manera integral pruebas de integracion para asi llegar al objetivo Se considera una buena practica el que las pruebas sean efectuadas por alguien distinto al desarrollador que la programo idealmente un area de pruebas sin perjuicio de lo anterior el programador debe hacer sus propias pruebas En general hay dos grandes maneras de organizar un area de pruebas la primera es que este compuesta por personal inexperto y que desconozca el tema de pruebas de esta manera se evalua que la documentacion entregada sea de calidad que los procesos descritos son tan claros que cualquiera puede entenderlos y el software hace las cosas tal y como estan descritas El segundo enfoque es tener un area de pruebas conformada por programadores con experiencia personas que saben sin mayores indicaciones en que condiciones puede fallar una aplicacion y que pueden poner atencion en detalles que personal inexperto no consideraria De acuerdo con Roger S Pressman el proceso de pruebas se centra en los procesos logicos internos del software asegurando que todas las sentencias se han comprobado y en los procesos externos funcionales es decir la realizacion de pruebas para la deteccion de errores Se requiere poder probar el software con sujetos reales que puedan evaluar el comportamiento del software con el fin de proporcionar realimentacion a los desarrolladores Es importante que durante el proceso de desarrollo del software no se pierda contacto con los interesados o solicitantes del desarrollo de software de esta manera los objetivos del proyecto se mantendran vigentes y se tendra una idea clara de los aspectos que tienen que probarse durante el periodo de pruebas 22 Implementacion Editar Articulo principal Implementacion Una implementacion es la realizacion de una especificacion tecnica o algoritmos con un programa componente software u otro sistema de computo Muchas especificaciones son dadas segun a su especificacion o un estandar Las especificaciones recomendadas segun el World Wide Web Consortium y las herramientas de desarrollo del software contienen implementaciones de lenguajes de programacion El modelo de implementacion es una coleccion de componentes y los subsistemas que contienen Componentes tales como ficheros ejecutables ficheros de codigo fuente y todo otro tipo de ficheros que sean necesarios para la implementacion y despliegue del sistema La etapa de implementacion del diseno de software es el proceso de convertir una especificacion del sistema en un sistema ejecutable Siempre implica los procesos de diseno y programacion de software pero si se utiliza un enfoque evolutivo de desarrollo tambien puede implicar un refinamiento de la especificacion del software Esta etapa es una descripcion de la estructura del software que se va a implementar los datos que son parte del sistema las interfaces entre los componentes del sistema y algunas veces los algoritmos utilizados 23 Documentacion Editar Es todo lo concerniente a la documentacion del propio desarrollo del software y de la gestion del proyecto pasando por modelaciones UML diagramas de casos de uso pruebas manuales de usuario manuales tecnicos etc todo con el proposito de eventuales correcciones usabilidad mantenimiento futuro y ampliaciones al sistema Mantenimiento Editar Articulo principal Mantenimiento de software Fase dedicada a mantener y mejorar el software para corregir errores descubiertos e incorporar nuevos requisitos Esto puede llevar mas tiempo incluso que el desarrollo del software inicial Alrededor de 2 3 del tiempo de ciclo de vida de un proyecto 14 esta dedicado a su mantenimiento Una pequena parte de este trabajo consiste eliminar errores bugs siendo que la mayor parte reside en extender el sistema para incorporarle nuevas funcionalidades y hacer frente a su evolucion El mantenimiento de software segun la investigacion de Lehman el 80 del mantenimiento no son acciones correctivas Son mejoras de funcionalidad e incorporacion de nuevos requisitos segun Lehman el software evoluciona con el tiempo Teniendo en cuenta eso la etapa de mantenimiento en si misma puede incluir las etapas anteriores entre el despliegue de cada nueva version reutilizando el software ya existente reformandolo y adaptandolo Ventajas 24 Editar Desde el punto de vista de gestion Editar Facilitar la tarea de seguimiento del proyecto Optimizar el uso de recursos Facilitar la comunicacion entre usuarios y desarrolladores Facilitar la evaluacion de resultados y cumplimiento de objetivosDesde el punto de vista de los ingenieros de software Editar Ayudar a comprender el problema Permitir la reutilizacion Facilitar el mantenimiento del producto final Optimizar el conjunto y cada una de las fases del proceso de desarrolloDesde el punto de vista de cliente o usuario final Editar Garantizar el nivel de calidad del producto final Obtener el ciclo de vida adecuado para el proyecto Confianza en los plazos del tiempo mostrados en la definicion del proyectoModelos y ciclos de vida del desarrollo de software EditarLa ingenieria de software con el fin de ordenar el caos que era anteriormente el desarrollo de software dispone de varios modelos paradigmas y filosofias de desarrollo estos los conocemos principalmente como modelos o ciclos de vida del desarrollo de software esto incluye el proceso que se sigue para construir entregar y hacer evolucionar el software desde la concepcion de una idea hasta la entrega y el retiro del sistema y representa todas las actividades y artefactos productos intermedios necesarios para desarrollar una aplicacion 25 El ciclo de vida de un software contiene los siguientes procedimientos Definicion de objetivos definir el resultado del proyecto y su papel en la estrategia global 26 Analisis de los requisitos y su viabilidad recopilar examinar y formular los requisitos del cliente y examinar cualquier restriccion que se pueda aplicar 26 Diseno general requisitos generales de la arquitectura de la aplicacion 26 Diseno en detalle definicion precisa de cada subconjunto de la aplicacion 26 Programacion programacion e implementacion es la implementacion de un lenguaje de programacion para crear las funciones definidas durante la etapa de diseno 26 Prueba de unidad prueba individual de cada subconjunto de la aplicacion para garantizar que se implementaron de acuerdo con las especificaciones 26 Integracion para garantizar que los diferentes modulos se integren con la aplicacion Este es el proposito de la prueba de integracion que esta cuidadosamente documentada 26 Prueba beta o validacion para garantizar que el software cumple con las especificaciones originales 26 Documentacion sirve para documentar informacion necesaria para los usuarios del software y para desarrollos futuros 26 Implementacion Mantenimiento para todos los procedimientos correctivos mantenimiento correctivo y las actualizaciones secundarias del software mantenimiento continuo 26 Modelo en cascada o clasico Editar Articulo principal Desarrollo en cascada En ingenieria de software el modelo en cascada tambien llamado desarrollo en cascada o ciclo de vida clasico se basa en un enfoque metodologico que ordena rigurosamente las etapas del ciclo de vida del software esto sugiere una aproximacion sistematica secuencial hacia el proceso de desarrollo del software que se inicia con la especificacion de requisitos del cliente y continua con la planificacion el modelado la construccion y el despliegue para culminar en el soporte del software terminado 27 Modelo de prototipos Editar Articulo principal Modelo de prototipos En ingenieria de software el modelo de prototipos pertenece a los modelos de desarrollo evolutivo Este permite que todo el sistema o algunos de sus partes se construyan rapidamente para comprender con facilidad y aclarar ciertos aspectos en los que se aseguren que el desarrollador el usuario el cliente esten de acuerdo en lo que se necesita asi como tambien la solucion que se propone para dicha necesidad y de esta manera minimizar el riesgo y la incertidumbre en el desarrollo este modelo se encarga del desarrollo de disenos para que estos sean analizados y prescindir de ellos a medida que se adhieran nuevas especificaciones es ideal para medir el alcance del producto pero no se asegura su uso real Este modelo principalmente se aplica cuando un cliente define un conjunto de objetivos generales para el software a desarrollarse sin delimitar detalladamente los requisitos de entrada procesamiento y salida es decir cuando el responsable no esta seguro de la eficacia de un algoritmo de la adaptabilidad del sistema o de la manera en que interactua el hombre y la maquina Este modelo se encarga principalmente de ayudar al ingeniero de sistemas y al cliente a entender de mejor manera cual sera el resultado de la construccion cuando los requisitos esten satisfechos 28 Modelo en espiral Editar Articulo principal Desarrollo en espiral El modelo en espiral que Barry Boehm propuso originalmente en 1986 es un modelo de proceso de software evolutivo que conjuga la naturaleza iterativa de la construccion de prototipos con los aspectos controlados y sistematicos del modelo en cascada es decir cuando se aplica este modelo el software se desarrolla en una serie de entregas evolutivas ciclos o iteraciones cada una de estas entregando prototipos mas completas que el anterior todo esto en funcion del analisis de riesgo y las necesidades del cliente Aunque el modelo espiral representa ventajas por sobre el desarrollo lineal el calculo de los riesgos puede ser muy complicado y por lo cual su uso en el ambito real es muy escaso 29 Modelo de desarrollo por etapas Editar Articulo principal Desarrollo por etapas Es un modelo en el que el software se muestra al cliente en etapas refinadas sucesivamente Con esta metodologia se desarrollan las capacidades mas importantes reduciendo el tiempo necesario para la construccion de un producto el modelo de entrega por etapas es util para el desarrollo de la herramienta debido a que su uso se recomienda para problemas que pueden ser tratados descomponiendolos en problemas mas pequenos y se caracteriza principalmente en que las especificaciones no son conocidas en detalle al inicio del proyecto y por tanto se van desarrollando simultaneamente con las diferentes versiones del codigo En este modelo pueden distinguirse las siguientes fases Especificacion conceptual Analisis de requisitos Diseno inicial Diseno detallado codificacion depuracion prueba y liberacion Cuando es por etapas en el diseno global estas fases pueden repetirse segun la cantidad de etapas que sean requeridas Entre sus ventajas tenemos Deteccion de problemas antes y no hasta la unica entrega final del proyecto Eliminacion del tiempo en informes debido a que cada version es un avance Estimacion de tiempo por version evitando errores en la estimacion del proyecto general Cumplimiento a la fecha por los desarrolladores Modelo incremental o iterativo Editar Articulo principal Desarrollo iterativo y creciente Desarrollo iterativo y creciente o incremental es un proceso de desarrollo de software creado en respuesta a las debilidades del modelo tradicional de cascada es decir este modelo aplica secuencias lineales como el modelo en cascada pero de una manera iterativa o escalada segun como avance el proceso de desarrollo y con cada una de estas secuencias lineales se producen incrementos mejoras del software 30 Se debe tener en cuenta que el flujo del proceso de cualquier incremento puede incorporar el paradigma de construccion de prototipos ya que como se menciono anteriormente este tipo de modelo es iterativo por naturaleza sin embargo se diferencia en que este busca la entrega de un producto operacional con cada incremento que se le realice al software Modelo estructurado Editar Este modelo como su nombre lo indica utiliza las tecnicas del diseno estructurado o de la programacion estructurada para su desarrollo tambien se utiliza en la creacion de los algoritmos del programa Este formato facilita la comprension de la estructura de datos y su control 31 Entre las principales caracteristicas de este modelo se encuentran las siguientes Generalmente se puede diferenciar de una manera mas clara los procesos y las estructuras de datos Existen metodos que se enfocan principalmente en ciertos datos La abstraccion del programa es de un nivel mucho mayor Los procesos y estructuras de datos son representados jerarquicamente 31 Este modelo tambien presenta sus desventajas entre las cuales podemos mencionar algunas Se podia encontrar datos repetidos en diferentes partes del programa 31 Cuando el codigo se hace muy extenso o grande su manejo se complica demasiado 32 En el modelo estructurado las tecnicas que comunmente se utilizan son El modelo entidad relacion esta tecnica se relaciona principalmente con los datos El diagrama de flujo de datos esta es utilizada principalmente para los procesos 33 Modelo orientado a objetos Editar Estos modelos tienen sus raices en la programacion orientada a objetos y como consecuencia de ella gira en torno al concepto de clase tambien lo hacen el analisis de requisitos y el diseno Esto ademas de introducir nuevas tecnicas tambien aprovecha las tecnicas y conceptos del desarrollo estructurado como diagramas de estado y transiciones El modelo orientado a objetos tiene dos caracteristicas principales las cuales ha favorecido su expansion Permite la reutilizacion de software en un grado significativo Su simplicidad facilita el desarrollo de herramientas informaticas de ayuda al desarrollo el cual es facilmente implementada en una notacion orientada a objetos llamado UML 34 Modelo RAD rapid application development Editar Articulo principal Desarrollo rapido de aplicaciones El RAD rapid application development desarrollo rapido de aplicaciones es un modelo de proceso de software incremental desarrollado inicialmente por James Maslow en 1980 que resalta principalmente un ciclo corto de desarrollo Esta es una metodologia que posibilita la construccion de sistemas computacionales que combinen tecnicas y utilidades CASE Computer Aided Software Engineering la construccion de prototipos centrados en el usuario y el seguimiento lineal y sistematico de objetivos incrementando la rapidez con la que se producen los sistemas mediante la utilizacion de un enfoque de desarrollo basado en componentes 35 Si se entienden bien los requisitos y se limita el ambito del proyecto el proceso RAD permite que un equipo de desarrollo cree un producto completamente funcional dentro de un periodo muy limitado de tiempo sin reducir en lo mas minimo la calidad del mismo 36 Modelo de desarrollo concurrente Editar El modelo de desarrollo concurrente es un modelo de tipo de red donde todas las personas actuan simultaneamente o al mismo tiempo Este tipo de modelo se puede representar a manera de esquema como una serie de actividades tecnicas importantes tareas y estados asociados a ellas El modelo de proceso concurrente define una serie de acontecimientos que dispararan transiciones de estado a estado para cada una de las actividades de la ingenieria del software Por ejemplo durante las primeras etapas del diseno no se contempla una inconsistencia del modelo de analisis Esto genera la correccion del modelo de analisis de sucesos que disparara la actividad de analisis del estado hecho al estado cambios en espera Este modelo de desarrollo se utiliza a menudo como el paradigma de desarrollo de aplicaciones cliente servidor Un sistema cliente servidor se compone de un conjunto de componentes funcionales Cuando se aplica a cliente servidor el modelo de proceso concurrente define actividades en dos dimensiones una division de sistemas y una division de componentes Los aspectos del nivel de sistemas se afrontan mediante dos actividades diseno y realizacion La concurrencia se logra de dos maneras Las actividades del sistema y de componente ocurren simultaneamente y pueden modelarse con el enfoque orientado a objetos descrito anteriormente Una aplicacion cliente servidor tipica se implementa con muchos componentes cada uno de los cuales se pueden disenar y realizar concurrentemente En realidad el modelo de desarrollo concurrente es aplicable a todo tipo de desarrollo de software y proporciona una imagen exacta del estado actual de un proyecto En vez de confinar actividades de ingenieria de software a una secuencia de sucesos define una red de actividades todas las actividades de la red existen simultaneamente con otras Los sucesos generados dentro de una actividad dada o algun otro lado de la red de actividad inicia las transiciones entre los estados de una actividad Proceso unificado del desarrollo de software Editar Articulos principales Proceso Unificadoy Rational Unified Process El proceso unificado es un proceso de software generico que puede ser utilizado para una gran cantidad de tipos de sistemas de software para diferentes areas de aplicacion diferentes tipos de organizaciones diferentes niveles de competencia y diferentes tamanos de proyectos Provee un enfoque disciplinado en la asignacion de tareas y responsabilidades dentro de una organizacion de desarrollo Su meta es asegurar la produccion de software de muy alta calidad que satisfaga las necesidades de los usuarios finales dentro de un calendario y presupuesto predecible 37 El proceso unificado tiene dos dimensiones Un eje horizontal que representa el tiempo y muestra los aspectos del ciclo de vida del proceso a lo largo de su desenvolvimiento Un eje vertical que representa las disciplinas las cuales agrupan actividades de una manera logica de acuerdo a su naturaleza La primera dimension representa el aspecto dinamico del proceso conforme se va desarrollando se expresa en terminos de fases iteraciones e hitos milestones La segunda dimension representa el aspecto estatico del proceso como es descrito en terminos de componentes del proceso disciplinas actividades flujos de trabajo artefactos y roles El refinamiento mas conocido y documentado del proceso unificado es el RUP proceso unificado racional El proceso unificado no es simplemente un proceso sino un marco de trabajo extensible que puede ser adaptado a organizaciones o proyectos especificos De la misma manera el proceso unificado de rational tambien es un marco de trabajo extensible por lo que muchas veces resulta imposible decir si un refinamiento particular del proceso ha sido derivado del proceso unificado o del RUP Por dicho motivo los dos nombres suelen utilizarse para referirse a un mismo concepto 38 Producto EditarEl software se ha convertido en algo muy necesario en nuestra sociedad actual es la maquina que conduce a la toma de decisiones comerciales sirve para la investigacion cientifica moderna es un factor clave que diferencia productos y servicios modernos Esto se da porque el software esta inmerso en sistemas de todo tipo alrededor de nosotros El software de computadora es el producto que disenan y construyen los ingenieros de software Esto abarca programas que se ejecutan dentro de una computadora de cualquier tamano y arquitectura despues de estar construido casi cualquier persona en el mundo industrializado ya sea directa o indirectamente Los productos se pueden clasificar en Productos genericos Son los producidos por una organizacion para ser vendidos al mercado Productos hechos a medida Sistemas que son desarrollados bajo pedido a un desarrollador especifico Estos productos deben cumplir varias caracteristicas al ser entregados estas son Mantenibles El software debe poder evolucionar mientras cumple con sus funciones Confiabilidad No debe producir danos en caso de errores Eficiencia El software no debe desperdiciar los recursos Utilizacion adecuada Debe contar con una interfaz de usuario adecuada y su documentacion Lo que constituye el producto final es diferente para el ingeniero y los usuarios para el ingeniero son los programas datos y documentos que configuran el software pero para el usuario el producto final es la informacion que de cierto modo soluciona el problema planteado por el usuario Naturaleza de la ingenieria de software EditarLa ingenieria de software es una disciplina que esta orientada a aplicar conceptos y metodos de ingenieria al desarrollo de software de calidad Matematicas Editar Los programas tienen muchas propiedades matematicas Por ejemplo la correccion y la complejidad de muchos algoritmos son conceptos matematicos que pueden ser rigurosamente probados El uso de matematicas en la IS es llamado metodos formales Creacion Editar Los programas son construidos en una secuencia de pasos El hecho de definir propiamente y llevar a cabo estos pasos como en una linea de ensamblaje es necesario para mejorar la productividad de los desarrolladores y la calidad final de los programas Este punto de vista inspira los diferentes procesos y metodologias que se encuentran en la IS Gestion de Proyecto Editar El desarrollo de software de gran porte requiere una adecuada gestion del proyecto Hay presupuestos establecimiento de tiempos de entrega un equipo de profesionales que liderar Recursos espacio de oficina insumos equipamiento por adquirir Para su administracion se debe tener una clara vision y capacitacion en gestion de proyectos Participantes y papeles EditarPara el desarrollo de un sistema de software es necesaria la colaboracion de muchas personas con diversas competencias capacidades e intereses Al conjunto de personas involucradas en el proyecto se les conoce como participantes Al conjunto de funciones y responsabilidades que hay dentro del proyecto o sistema se le conoce como roles o papeles Los roles estan asociados a las tareas que son asignadas a los participantes en consecuencia una persona puede desempenar uno o multiples roles asi tambien un mismo rol puede ser representado por un equipo 39 Cliente Editar Es frecuente el uso de los terminos usuarios usuarios finales y clientes como sinonimos lo cual puede provocar confusion estrictamente el cliente persona empresa u organizacion es quien especifica los requisitos del sistema 40 en tanto que el usuario es quien utiliza u opera finalmente el producto software pudiendo ser o no el cliente Desarrolladores Editar Esta clase de participantes estan relacionados con todas las facetas del proceso de desarrollo del software Su trabajo incluye la investigacion diseno implementacion pruebas y depuracion del software 41 Gestores Editar En el contexto de ingenieria de software el gestor de desarrollo de software es un participante que reporta al director ejecutivo de la empresa que presta el servicio de desarrollo Es responsable del manejo y coordinacion de los recursos y procesos para la correcta entrega de productos de software mientras participa en la definicion de la estrategia para el equipo de desarrolladores dando iniciativas que promuevan la vision de la empresa 42 Usuarios finales Editar El usuario final es quien interactua con el producto de software una vez es entregado 40 Generalmente son los usuarios los que conocen el problema ya que dia a dia operan los sistemas Codigo etico de un ingeniero de software Editar Un ingeniero de software debe tener un codigo donde asegura en la medida posible que los esfuerzos realizados se utilizaran para realizar el bien y deben comprometerse para que la ingenieria de software sea una profesion benefica y respetada Para el cumplimiento de esta norma se toman en cuenta ocho principios relacionados con la conducta y las decisiones tomadas por el ingeniero donde estos principios identifican las relaciones eticamente responsables de los individuos grupos y organizaciones donde participen Los principios a los que deben sujetarse son sobre la sociedad cliente y empresario producto juicio administracion profesion colegas y por ultimo el personal Sociedad Los ingenieros de software deben actuar de manera congruente con el interes social aceptando la responsabilidad total de su trabajo moderando los intereses con el bienestar social aprobando el software solamente si se tiene una creencia bien fundamentada cooperando en los esfuerzos para solucionar asuntos importantes de interes social ser justo y veraz en todas las afirmaciones relativas al software o documentos asociados Cliente y empresario Se debe actuar de manera tal que se llegue a conciliar los mejores intereses de los clientes y empresarios congruentemente con el interes social Estos deberan prestar servicios en sus areas de competencia siendo honestos y francos sobre las limitaciones no utilizar un software que se obtenga ilegalmente o sin etica usar la propiedad de los clientes o empresarios de manera autorizada mantener secreto cualquier documento de informacion confidencial Producto Hay que asegurarse que los productos y sus modificaciones cumplan con los estandares profesionales mas altos posibles procurando la alta calidad costos aceptables y una agenda razonable asegurando que los costos y beneficios sean claros y aceptados por el empresario y el cliente Asegurar que las metas y objetivos de cualquier proyecto sean adecuados y alcanzables Juicio Se debe mantener una integridad e independencia en el juicio profesional moderando todo juicio tecnico por la necesidad de apoyar y mantener los valores humanos mantener la objetividad profesional con respecto a cualquier software o documento relacionado no involucrarse en practicas financieras fraudulentas Administracion Se debera asegurar una buena administracion para cualquier proyecto en el cual se trabaje utilizando procedimientos efectivos para promover la calidad y reducir riesgos asegurandose tambien que se conozcan las politicas y procedimientos del empresario para proteger contrasenas archivos e informacion confidencial Profesion Se debe incrementar la integridad y reputacion de la profesion en conjunto con el interes social ayudando al desarrollo de un ambiente organizacional favorable para actuar promoviendo el conocimiento publico de la ingenieria de software extendiendo el conocimiento de la ingenieria de software por medio de participaciones en organizaciones reuniones y publicaciones profesionales Colegas Cada ingeniero debera apoyar y ser justos con los colegas motivando a sus colegas sujetandose al codigo ayudando tambien a su desarrollo profesional reconocer los trabajos de otros y abstenerse a atribuirse de meritos indebidos revisar los trabajos de manera objetiva sincera y propiamente documentada Personal Los ingenieros de software participaran toda su vida en el aprendizaje con la practica y promoveran un enfoque etico de la profesion mejorando su conocimiento de los avances en el analisis especificacion diseno desarrollo mantenimiento pruebas del software y documentos relacionados en conjunto con administracion del proceso de desarrollo 43 Educacion etica EditarOrganizaciones Editar 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 Tecnica en Informatica CONCITI Vease tambien EditarAnexo Filosofias del desarrollo de software Ingenieria de sistemas Ingenieria informatica Gestion de la configuracion Proceso para el desarrollo de software Mantenimiento de software Fragilidad del software Error de software Usabilidad METRICA Historia de la ingenieria del software Crisis del software No hay balas de plataReferencias Editar SWEBOK executive editors Alain Abran James W Moore editors Pierre Bourque Jonathan Aguilar Robert Dupuis 2004 Pierre Bourque and Robert Dupuis ed Guide to the Software Engineering Body of Knowledge 2004 Version IEEE Computer Society pp 1 1 ISBN 0 7695 2330 7 ACM 2006 Computing Degrees amp Careers ACM Archivado desde el original el 17 de junio de 2011 Consultado el 23 de noviembre de 2010 IEEE Standard Glossary of Software Engineering Terminology IEEE std 610 12 1990 1990 Bureau of Labor Statistics U S Department of Labor USDL 05 2145 Occupational Employment and Wages November 2004 enlace roto disponible en Internet Archive vease el historial la primera version y la ultima Table 1 La ciencia de hoy es la tecnologia del manana Universidad Siglo XXI Argentina Universidad Autonoma de Guadalajara Mexico Archivado desde el original el 25 de marzo de 2014 Consultado el 11 de marzo de 2014 Tecnologico de Antioquia Colombia enlace roto disponible en Internet Archive vease el historial la primera version y la ultima Leondes 2002 intelligent systems technology and applications CRC Press ISBN 978 0 8493 1121 5 An Investigation of Therac 25 Accidents Archivado desde el original el 2 de mayo de 2014 Consultado el 11 de abril de 2014 a b c Association for Computing Machinery The Risks Digest en ingles Consultado el 10 de noviembre de 2018 Sommerville Ian 1985 1982 Software Engineering en ingles Addison Wesley ISBN 0 201 14229 5 Software engineering has recently emerged as a discipline in its own right Universidad Politecnica de Madrid Objetivos de ingenieria del software a b Pressman Roger S 2003 El proceso Ingenieria del software un enfoque practico Mexico Mc Graw Hill quinta edicion a b Monografias com Ingenieria de Software UML Consultado el 10 de noviembre de 2018 Notaciones de Ingenieria de Software Monografias com Ingenieria del software Copia archivada Archivado desde el original el 31 de marzo de 2014 Consultado el 9 de abril de 2014 a b 1 Limitaciones de los software articulo en el sitio web Mundo Kramer Unidad 2 Fundamentos de la ingenieria del software articulo en el sitio web Ing Software 2 Sommerville Ian Ingenieria de Software fechaacceso requiere url ayuda Metodologia de ingenieria de software articulo en el sitio web Slide Share Ingenieria de software ciclos de vida y metodologias articulo publicado en el sitio web de la Facultad de Ingenieria de la Universidad de Los Andes a b c d e f g h i j Ciclo de vida del software Consultado el 14 12 16 Pressman Roger S Ingenieria del software un enfoque practico Sexta edicion pag 50 51 Lawrence Peleeger Shari Ingenieria de software modelo de prototipos Universidad Estatal de Milagro Pressman Roger S Ingenieria del software un enfoque practico Sexta edicion pag 58 60 Pressman Roger S Ingenieria del software un enfoque practico Sexta edicion pag 52 53 a b c Diseno estructurado articulo en el sitio web Slide Share 3 cuadro comparativo de programacion estructurada y programacion orientada objeto 4 Benet Campderrich Falgueras Editorial UOC 2002 320 paginas Campderrich Falgueras Benet 2002 Ingenieria de software Barcelona Editorial UOC 2002 320 paginas 5 Archivado el 24 de agosto de 2014 en Wayback Machine What is Rapid Application Development Pressman Roger S Ingenieria del software un enfoque practico Sexta edicion pag 53 54 Proceso unificado del desarrollo de software Archivado el 29 de marzo de 2014 en Wayback Machine articulo en el sitio web Yaqui Pressman Roger S Ingenieria del software un enfoque practico Sexta edicion pag 67 72 Bernd Bruegge amp Allen H Dutoit Object Oriented Software Engineering Prentice Hall Pag 11 a b Pressman 2002 p 39 O NET Code Connector Software Developers Systems Software 15 1133 00 Onetcodeconnector org Consultado el 4 de agosto de 2014 Software Development Manager Position Description interfacing com Consultado el 4 de agosto de 2014 Ingenieria de Software Codigo de Etica y Practica Profesional SEERI East Tennessee State University 1999 Bibliografia EditarSWEBOK IEEE IEC ISO ROGER S PRESSMAN IAN SOMMERVILLE Enlaces externos Editar Wikiversidad alberga proyectos de aprendizaje sobre Ingenieria de software Is software engineering actually engineering articulo publicado en The Iron Warrior publicacion de la University of Waterloo Engineering Society Algoritmos no colonizadores Una manera de desarrollar software multicultural Revista Tecnologia Humanizada volumen 3 del 2020 por Gustavo Reimondo Datos Q80993 Multimedia Software engineering Libros y manuales Ingenieria de software Recursos didacticos Ingenieria de SoftwareObtenido de https es wikipedia org w index php title Ingenieria de software amp oldid 137846472, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos