Ingeniería de software

A medida que apareció el software libre, las organizaciones de usuarios comúnmente lo liberaban.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.[cita requerida] Además, con la industria del lenguaje está hallando cada vez más campos de aplicación a escala global.El correo electrónico (e-mail), la WWW y la mensajería instantánea permiten a la gente interactuar de nuevas maneras.Las etapas comunes a casi todos los modelos de ciclo de vida son las siguientes: 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.Por ejemplo: ¿El contenido de los reportes generados, satisface realmente las necesidades del usuario?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.El análisis de requisitos puede parecer una tarea sencilla, pero no lo se debe 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.[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.Se han ideado modelos y diversos procesos metódicos de trabajo para estos fines.Un diseño arquitectónico describe en general el cómo se construirá una aplicación de software.Las herramientas para el diseño y modelado de software se denominan CASE (Computer Aided Software Engineering) entre las cuales se encuentran: 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.Para el desarrollo de la aplicación es necesario considerar cinco fases para tener una aplicación o programa eficiente, estas son: Consiste en comprobar que el software realice correctamente las tareas indicadas en la especificación del problema.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.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.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]​ 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.Los aspectos del nivel de sistemas se afrontan mediante dos actividades: diseño y realización.[38]​ 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.Por ejemplo la corrección y la complejidad de muchos algoritmos son conceptos matemáticos que pueden ser rigurosamente probados.Este punto de vista inspira los diferentes procesos y metodologías que se encuentran en la IS.Para su administración se debe tener una clara visión y capacitación en gestión de proyectos.Al conjunto de personas involucradas en el proyecto se les conoce como participantes.[39]​ 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 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.Su trabajo incluye la investigación, diseño, implementación, pruebas y depuración del 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.
Un ingeniero de software (Trevor Parscal) programando en la sede de San Francisco de la Fundación Wikimedia .