Ingeniería de software para niños
Datos para niños Ingeniería de software |
||
---|---|---|
Áreas del saber | Informática | |
Campo de aplicación | Desarrollo de software de aplicación, Desarrollo de software de sistema, Desarrollo web, Desarrollo de aplicaciones móviles, Desarrollo de software de gráficos, Desarrollo de aplicaciones de escritorio, Desarrollo de bot conversacional, Desarrollo de cadena de bloques, Desarrollo de software de física computacional, Desarrollo de software de química computacional, Desarrollo de visión artificial, Desarrollo de software robótico, Desarrollo de software biomédico, Desarrollo de software operativo industrial, Desarrollo de software de ingeniería, Aplicaciones de la inteligencia artificial |
|
Subárea de | Ciencias de la computación | |

La Ingeniería de Software es una rama de las ciencias de la computación. Se encarga de crear programas de computadora (software) que sean confiables y de buena calidad. Para lograrlo, usa métodos y técnicas de ingeniería. También ayuda a mantener y mejorar el software una vez que está funcionando.
Esta área de estudio combina conocimientos de ciencias de la computación, ciencias aplicadas y ciencias básicas. Es como construir algo complejo, pero en lugar de edificios, se construyen programas.
Algunos expertos han definido la ingeniería de software de varias maneras:
- Es el estudio de cómo desarrollar y mantener sistemas de software (Zelkovitz, 1978).
- Es aplicar el conocimiento científico para diseñar y construir programas de computadora. También incluye la documentación necesaria para usarlos y mantenerlos (Bohem, 1976).
- Se trata de establecer principios y métodos de ingeniería para crear software de forma eficiente. Este software debe ser confiable y funcionar bien en computadoras reales (Bauer, 1972).
- Es aplicar un enfoque organizado y medible al desarrollo, uso y mantenimiento del software (Standard Glossary of Software Engineering Terminology).
En 2004, había más de 760,000 ingenieros de software en Estados Unidos. Es importante saber que no todas las personas que trabajan como "ingenieros de software" tienen un título universitario específico en ingeniería.
Algunos prefieren el término "desarrollo de software" en lugar de "ingeniería de software". Esto se debe a que la palabra "ingeniería" puede sonar muy estricta. Sin embargo, ambos términos se usan para describir el proceso de crear programas.
Crear software es un proceso muy creativo. La ingeniería de software busca organizar este proceso. Así se reduce el riesgo de que un proyecto falle. Para ello, se usan técnicas que han funcionado bien en el pasado.
La ingeniería de software aplica principios de ingeniería al mundo de los programas. Esto significa usar métodos y herramientas de forma eficiente. El objetivo es obtener los mejores resultados posibles. No solo se trata de resolver problemas, sino de elegir la mejor solución entre varias opciones.
La creación de software sigue normas de ingeniería para convertirse en un producto industrial. Usa métodos, técnicas y herramientas para desarrollar productos innovadores. Hoy en día, muchas empresas no podrían funcionar sin software. La calidad de su tecnología y los programas que usan son muy importantes para su éxito.
Contenido
- Historia de la Ingeniería de Software
- Objetivos de la Ingeniería de Software
- Recursos Necesarios
- Impacto Socioeconómico
- Notaciones y Modelado
- Herramientas CASE
- Metodología de Desarrollo
- Modelos y Ciclos de Vida del Desarrollo de Software
- Producto de Software
- Naturaleza de la Ingeniería de Software
- Participantes y Roles
- Educación Ética
- Véase también
Historia de la Ingeniería de Software
Cuando surgieron las primeras computadoras en los años 40, desarrollar software era muy nuevo. Era difícil saber cuánto tiempo y dinero se necesitaría. Muchos proyectos se pasaban de presupuesto y tiempo. Además, los programas debían reescribirse para cada nueva máquina.
El término "ingeniería de software" apareció a finales de los años 50. Se hizo más importante por la "crisis del software" entre los años 60 y 80. Esta crisis se refería a los problemas para crear programas a tiempo, dentro del presupuesto y sin errores. La ingeniería de software surgió para ayudar a identificar y corregir estos problemas. Para ello, usó principios y métodos para desarrollar y mantener sistemas de software.
Un incidente importante que destacó la necesidad de la ingeniería de software fue el de la máquina de radioterapia Therac-25. Este suceso mostró los riesgos de un software con fallos. Subrayó la importancia de la seguridad y el control en el desarrollo de programas.
A principios de los años 80, la ingeniería de software ya era una profesión reconocida. Antes, los programas se ejecutaban con tarjetas perforadas. Los resultados se obtenían por una impresora.
Para facilitar el uso de programas en nuevas máquinas, se crearon lenguajes de programación más avanzados. También surgió el software libre, que las organizaciones compartían con los usuarios.
Resolver la crisis del software fue muy importante para investigadores y empresas. En los años 80, mantener el software costaba el doble que desarrollarlo. En los 90, este costo aumentó un 30%. En 1995, muchos proyectos de software no se consideraban exitosos. Superaban el tiempo estimado en un 50%. Además, el 75% de los grandes programas entregados tenían fallos graves. Algunos no se usaban o no cumplían lo que el cliente pedía.
Algunos expertos pensaban que la crisis se debía a la falta de disciplina de los programadores. Cada nueva tecnología de los años 70 a los 90 se presentaba como la solución. Pero no hubo una única clave para el éxito. La ingeniería de software es un campo muy complejo. No hay una sola solución para todos los problemas.
El auge de Internet aumentó la demanda de sistemas de información en la World Wide Web. Los desarrolladores tuvieron que manejar imágenes, mapas y animaciones. También se necesitaron sistemas para traducir información a varios idiomas.
La ingeniería de software contribuyó con miles de millones de dólares al año gracias a Internet. El uso de navegadores y HTML cambió la forma de ver la información.
Las conexiones de red también causaron la aparición de virus informáticos y spam (correo no deseado). Esto obligó a los desarrolladores a crear nuevos sistemas de seguridad.
Debido a la gran demanda, surgió la necesidad de crear soluciones de software a bajo costo. Esto llevó al uso de métodos más simples y rápidos. Los sistemas más pequeños se beneficiaron de enfoques más sencillos para gestionar cálculos y algoritmos.
Objetivos de la Ingeniería de Software
La ingeniería de software usa normas y métodos para mejorar el desarrollo y uso de los programas. Al aplicar estos procedimientos correctamente, se logran sus metas principales:
- Mejorar el diseño de aplicaciones para que se adapten mejor a las necesidades de las empresas o a su propósito.
- Promover una mayor calidad al desarrollar aplicaciones complejas.
- Ofrecer mayor precisión en los costos y tiempos de desarrollo de los proyectos.
- Aumentar la eficiencia de los sistemas. Esto se logra midiendo la calidad del software con normas específicas. Siempre se busca la mejor calidad posible según las necesidades.
- Mejorar la organización de los equipos que desarrollan y mantienen el software.
- Detectar posibles mejoras a través de pruebas para que el software funcione mejor.
Recursos Necesarios
Recursos Humanos
Son todas las personas que participan en la planificación de un proyecto de software. Por ejemplo, el gestor del proyecto o los ingenieros de software. El número de personas se define después de estimar el esfuerzo que requiere el desarrollo.
Recursos de Entorno
Se refiere al ambiente de las aplicaciones, que incluye el software y el hardware. El hardware (la parte física de la computadora) es esencial para desarrollar las aplicaciones.
Impacto Socioeconómico
Impacto Económico
En Estados Unidos, el software contribuyó a una octava parte del aumento del PIB en los años 90. Esto fue alrededor de 90 mil millones de dólares al año. También aportó un noveno del crecimiento de la productividad. La ingeniería de software contribuyó con un billón de dólares al crecimiento económico en esa década. A nivel mundial, el software también impulsa la economía de manera similar.
Además, la industria del lenguaje (como los traductores automáticos) encuentra cada vez más usos a nivel global.
Impacto Social
La ingeniería de software ha cambiado la forma en que vivimos. El correo electrónico, la World Wide Web y la mensajería instantánea permiten a las personas interactuar de nuevas maneras. El software reduce costos y mejora la calidad de servicios como la salud o los servicios gubernamentales. Ejemplos de proyectos exitosos que usaron ingeniería de software son GNU/Linux, el software del transbordador espacial y los cajeros automáticos.
Notaciones y Modelado
Las notaciones son formas de representar ideas y procesos en la ingeniería de software.
Lenguaje Unificado de Modelado (UML)
UML es un lenguaje muy usado para describir o especificar métodos. También se aplica en el desarrollo de software. UML no busca definir un modelo estándar de desarrollo, sino un lenguaje para modelar.
Un lenguaje de modelado tiene vistas, elementos y reglas. Estas reglas indican cómo usar los elementos. En UML, se usan varios diagramas como:
- Casos de uso
- Clases
- Componentes
- Despliegue
Notación para el Modelado de Procesos de Negocios (BPMN)
BPMN busca definir y analizar procesos de negocios de forma sencilla. Simula un diagrama de flujo de datos. Esta notación coordina la secuencia de procesos y los mensajes entre los participantes.
Sus elementos básicos incluyen:
- Objetos de flujo: eventos, actividades, rombos de control (gateways).
- Objetos de conexión: flujo de secuencia, flujo de mensaje, asociación.
- Carriles (Swimlanes): pool, lane.
- Artefactos: objetos de datos, grupo, anotación.
Diagrama de Flujo de Datos (DFD)
Un diagrama de flujo de datos muestra cómo se mueven los datos en un sistema. Describe los flujos de datos, los procesos que los transforman, sus destinos y dónde se guardan.
Fue creado por Larry Constantine. Los DFD ayudan a entender cómo se desarrollará un sistema. También identifican los datos importantes y muestran cómo se verán los datos al final.
Herramientas CASE
Las herramientas CASE son programas de computadora. Ayudan en las diferentes etapas del ciclo de vida de un software. Facilitan la producción de programas. Muchas de ellas se basan en la idea de un modelo gráfico.
Metodología de Desarrollo
Durante décadas, se ha buscado encontrar procesos y metodologías que sean organizadas y predecibles. El objetivo es mejorar la productividad y la calidad del software. En resumen, una metodología define los pasos a seguir y cómo realizarlos para terminar una tarea.
Etapas del Proceso de Desarrollo
La ingeniería de software implica muchas tareas. Estas se agrupan en etapas, que forman el ciclo de vida. Las etapas comunes a casi todos los modelos son:
Obtención de los Requisitos
Aquí se identifica el problema principal que el nuevo software resolverá. También se identifican los recursos disponibles, como el personal y los materiales. Es clave entender el contexto del negocio para definir bien lo que se necesita.
Se debe conocer la información del problema. Esto incluye datos de los usuarios, otros sistemas o dispositivos externos. También los datos que salen del sistema (por ejemplo, reportes) y dónde se guardan los datos.
Es importante ver los puntos críticos. Esto significa identificar lo que dificulta el funcionamiento actual. Por ejemplo, si los reportes satisfacen las necesidades del usuario o si los tiempos de respuesta son adecuados.
También hay que definir las funciones que el software realizará. Estas funciones deben ayudar al usuario final y al programa mismo. Se debe considerar cómo se comportará el software en situaciones inesperadas, como muchos usuarios a la vez.
Análisis de Requisitos
Extraer los requisitos es el primer paso para crear un software. En esta fase, el cliente explica lo que necesita. El desarrollador hace preguntas para entender el problema. Con este análisis, el ingeniero de sistemas elige las funciones del software y su interfaz.
El análisis de requisitos puede parecer fácil, pero no lo es. A veces, los clientes creen saber todo lo que el software necesita. Pero se requiere la experiencia de un especialista para encontrar requisitos incompletos o confusos. Estos requisitos se definen según las necesidades del usuario final. Se usan técnicas para mejorar la calidad de los sistemas.
El resultado del análisis se escribe en un documento llamado ERS (especificación de requisitos del sistema). También se crea un diagrama de entidad/relación. Este diagrama muestra las partes principales que participarán en el desarrollo.
La captura, análisis y especificación de requisitos es crucial. De esta etapa depende mucho el éxito del proyecto. Se han creado modelos y procesos para este fin. Incluso se habla de la ingeniería de requisitos como una disciplina.
La norma IEEE Std. 830-1998 estandariza la creación de las especificaciones de requisitos de software.
Los objetivos del análisis de requisitos son:
- Dar al usuario todo lo necesario para trabajar con el software y obtener buenos resultados.
- Tener más control sobre el tiempo y los costos de desarrollo.
- Usar métodos más eficientes para aprovechar mejor el software.
- Aumentar la calidad del software y reducir los riesgos de fallos.
A veces, en esta etapa, se hace un estudio de viabilidad y una estimación de costos. El modelo más conocido para estimar costos es COCOMO.
Limitaciones del Software
El software puede imitar la inteligencia humana, pero solo tiene funciones predefinidas. Sus soluciones pueden ser limitadas en algunos campos. Aunque imita ciertos comportamientos, no puede imitar el pensamiento humano.
Otra limitación es que el proceso mecánico del software puede requerir mucho esfuerzo y tiempo. Esto a veces obliga a usar el software en máquinas más potentes.
Especificación
La especificación de requisitos describe cómo se espera que funcione el software una vez terminado. El éxito de un proyecto depende mucho de identificar las necesidades del negocio. También de interactuar con los usuarios para recolectar, clasificar y priorizar los requisitos.
Algunas técnicas para especificar requisitos son:
- Caso de uso
- Historias de usuario
Los casos de uso son más formales, mientras que las historias de usuario son más ágiles e informales.
Arquitectura
La arquitectura de software implica integrar la infraestructura, las aplicaciones, las bases de datos y las herramientas de gestión. Requiere habilidad para planificar y resolver problemas futuros. El arquitecto de software es quien aporta soluciones tecnológicas a los procesos de negocio.
La arquitectura de sistemas es una actividad de planificación. Puede ser a nivel de red, hardware o software. Lo principal es definir los aspectos lógicos y físicos de las entradas, salidas, modelos de datos y procesos del sistema. Se deben considerar los recursos disponibles para cumplir con las especificaciones.
Es importante tener en cuenta la arquitectura del sistema en el que se trabajará. Se debe elaborar un plan de trabajo, priorizando el tiempo y los recursos. El diseño de salidas incluye entender los requisitos, las funciones visibles para el usuario y el comportamiento del sistema.
La arquitectura de software diseña los componentes de una aplicación. Generalmente usa patrones de arquitectura. El diseño arquitectónico debe mostrar cómo interactúan las partes del negocio. Se documenta con diagramas como:
- Diagrama de clases
- Diagrama de base de datos
- Diagrama de despliegue
- Diagrama de secuencia
Los diagramas de clases y de base de datos son los mínimos para describir la arquitectura de un proyecto. El arquitecto elige qué diagramas hacer según el alcance y la complejidad del proyecto.
Las herramientas para diseñar y modelar software se llaman CASE (Computer Aided Software Engineering). Ejemplos son Enterprise Architect y Microsoft Visio.
Programación
Implementar un diseño en código es la parte más visible del trabajo. Pero no siempre es la más larga o complicada. La complejidad y duración de esta etapa dependen del lenguaje y del diseño previo.
Desarrollo de la Aplicación
Para desarrollar una aplicación eficiente, se consideran cinco fases:
- Desarrollo de la infraestructura: Organiza los elementos que formarán la base de la aplicación.
- Adaptación del paquete: Entender cómo funciona un paquete de software para usarlo al máximo. Se revisan todos sus elementos para evitar errores.
- Desarrollo de unidades de diseño interactivas: Se crean los procedimientos que el usuario ejecutará. Se definen las acciones, se crean componentes y se hacen pruebas.
- Desarrollo de unidades de diseño batch: Se usan técnicas como diagrama de flujo o tablas de decisiones. Esto ayuda al programador a entender y probar los programas.
- Desarrollo de unidades de diseño manuales: Se diseñan los procedimientos administrativos que se usarán con los componentes computarizados.
Pruebas de Software
Consiste en verificar que el software haga correctamente lo que se pidió. Una técnica es probar cada parte del software por separado (prueba unitaria). Luego, se prueba todo junto (pruebas de integración).
Es buena práctica que las pruebas las haga alguien diferente al programador. Idealmente, un equipo de pruebas. Sin embargo, el programador también debe hacer sus propias pruebas.
Hay dos formas de organizar un equipo de pruebas:
- Con personal sin experiencia en pruebas. Esto evalúa si la documentación es clara y si el software funciona como se describe.
- Con programadores experimentados. Ellos saben dónde puede fallar una aplicación y prestan atención a detalles que otros no verían.
Según Roger S. Pressman, las pruebas se enfocan en la lógica interna del software y en sus funciones externas. Es importante probar el software con usuarios reales. Ellos pueden dar su opinión a los desarrolladores. Mantener contacto con los interesados asegura que los objetivos del proyecto se cumplan.
Implementación
Una implementación es la creación de un programa o sistema a partir de una especificación técnica. Muchas especificaciones se basan en estándares. Las herramientas de desarrollo de software contienen implementaciones de lenguajes de programación.
La implementación es el proceso de convertir un diseño de sistema en un sistema que funcione. Siempre incluye el diseño y la programación. Si se usa un enfoque evolutivo, también puede implicar mejorar la especificación del software. Esta etapa describe la estructura del software, los datos, las conexiones entre sus partes y, a veces, los algoritmos.
Documentación
Es todo lo relacionado con la documentación del desarrollo del software y la gestión del proyecto. Incluye modelos (UML), diagramas, pruebas, manuales de usuario y manuales técnicos. Todo esto sirve para futuras correcciones, mejoras, mantenimiento y ampliaciones del sistema.
Mantenimiento
Esta fase se dedica a mantener y mejorar el software. Se corrigen errores y se añaden nuevas funciones. Esto puede llevar más tiempo que el desarrollo inicial. Alrededor de dos tercios del tiempo de vida de un proyecto se dedica al mantenimiento. La mayor parte de este trabajo es añadir nuevas funcionalidades y adaptar el sistema a su evolución.
Según Meir M. Lehman, el 80% del mantenimiento no es para corregir errores. Son mejoras de funcionalidad y nuevos requisitos. El software evoluciona con el tiempo. Por eso, la etapa de mantenimiento puede incluir las etapas anteriores entre cada nueva versión. Se reutiliza, reforma y adapta el software existente.
Ventajas de la Ingeniería de Software
Desde la Gestión
- Facilita el seguimiento del proyecto.
- Optimiza el uso de los recursos.
- Mejora la comunicación entre usuarios y desarrolladores.
- Facilita la evaluación de resultados y el cumplimiento de objetivos.
Para los Ingenieros de Software
- Ayuda a entender mejor el problema.
- Permite reutilizar partes del software.
- Facilita el mantenimiento del producto final.
- Optimiza cada fase del proceso de desarrollo.
Para el Cliente o Usuario Final
- Garantiza la calidad del producto final.
- Asegura un ciclo de vida adecuado para el proyecto.
- Genera confianza en los plazos de entrega.
Modelos y Ciclos de Vida del Desarrollo de Software
La ingeniería de software usa varios modelos y filosofías para organizar el desarrollo. Estos se conocen como modelos o ciclos de vida del desarrollo de software. Incluyen todo el proceso para construir, entregar y mejorar el software. Desde la idea inicial hasta la entrega y el retiro del sistema.
Un ciclo de vida del software contiene los siguientes pasos:
- Definición de objetivos: Qué se quiere lograr con el proyecto.
- Análisis de requisitos y viabilidad: Recopilar lo que el cliente necesita y ver si es posible hacerlo.
- Diseño general: La estructura principal de la aplicación.
- Diseño en detalle: Definir cada parte de la aplicación.
- Programación: Escribir el código en un lenguaje de programación.
- Prueba de unidad: Probar cada parte de la aplicación por separado.
- Integración: Asegurar que las diferentes partes funcionen juntas.
- Prueba beta (o validación): Verificar que el software cumple con las especificaciones originales.
- Documentación: Crear manuales para usuarios y para futuros desarrolladores.
- Implementación: Poner el software en funcionamiento.
- Mantenimiento: Corregir errores y hacer actualizaciones.
Modelo en Cascada o Clásico
Este modelo organiza las etapas del desarrollo de software de forma estricta y secuencial. Comienza con la especificación de requisitos del cliente. Luego sigue con la planificación, el diseño, la construcción y la entrega. Termina con el soporte del software finalizado.
Modelo de Prototipos
Este modelo permite construir rápidamente todo el sistema o partes de él. Ayuda a entender y aclarar aspectos importantes. Así, el desarrollador, el usuario y el cliente se ponen de acuerdo en lo que se necesita. Esto reduce los riesgos y la incertidumbre. Se crean diseños para analizar y se descartan a medida que se añaden nuevas especificaciones. Es ideal para medir el alcance del producto.
Se usa cuando un cliente tiene objetivos generales, pero no requisitos detallados. También cuando no se está seguro de la eficacia de un algoritmo o de cómo interactuará el usuario con la máquina. Este modelo ayuda al ingeniero y al cliente a entender mejor el resultado final.
Modelo en Espiral
El modelo en espiral, propuesto por Barry Boehm en 1986, combina el desarrollo por prototipos con el modelo en cascada. El software se desarrolla en varias entregas evolutivas (ciclos). Cada ciclo entrega prototipos más completos que el anterior. Esto se basa en el análisis de riesgos y las necesidades del cliente. Aunque tiene ventajas, calcular los riesgos puede ser complicado, por lo que su uso es limitado.
Modelo de Desarrollo por Etapas
En este modelo, el software se entrega al cliente en fases sucesivas. Se desarrollan primero las funciones más importantes. Esto reduce el tiempo de construcción del producto. Es útil para problemas que se pueden dividir en partes más pequeñas. Las especificaciones se desarrollan al mismo tiempo que las versiones del código.
Las fases pueden repetirse según la cantidad de etapas. Sus ventajas son:
- Detectar problemas antes de la entrega final.
- Reducir el tiempo en informes, ya que cada versión es un avance.
- Estimar el tiempo por versión, evitando errores en la estimación general.
- Ayudar a los desarrolladores a cumplir las fechas.
Modelo Incremental o Iterativo
Este proceso se creó para mejorar el modelo en cascada. Aplica secuencias lineales, pero de forma repetitiva. Con cada secuencia, se producen mejoras (incrementos) en el software.
El flujo de cada incremento puede incluir el desarrollo de prototipos. Se diferencia en que busca entregar un producto funcional con cada mejora.
Modelo Estructurado
Este modelo usa técnicas de diseño estructurado o programación estructurada. También se usa para crear los algoritmos del programa. Facilita la comprensión de la estructura de datos y su control.
Sus características principales son:
- Procesos y estructuras de datos más claros.
- Métodos enfocados en ciertos datos.
- Mayor nivel de abstracción del programa.
- Procesos y estructuras de datos representados jerárquicamente.
Algunas desventajas son:
- Datos repetidos en diferentes partes del programa.
- Dificultad para manejar el código cuando es muy extenso.
Las técnicas comunes en este modelo son:
- El modelo entidad-relación, para los datos.
- El diagrama de flujo de datos, para los procesos.
Modelo Orientado a Objetos
Estos modelos se basan en la programación orientada a objetos. Giran en torno al concepto de "clase". También usan técnicas del desarrollo estructurado, como diagramas de estado.
Sus dos características principales son:
- Permite reutilizar el software de forma significativa.
- Su simplicidad facilita el desarrollo de herramientas de ayuda. Se implementa fácilmente con la notación UML.
Modelo RAD (Rapid Application Development)
RAD (desarrollo rápido de aplicaciones) es un modelo incremental. Fue desarrollado por James Maslow en 1980. Destaca por tener ciclos de desarrollo cortos.
Esta metodología combina técnicas CASE, prototipos centrados en el usuario y un seguimiento organizado. Aumenta la rapidez de creación de sistemas usando un enfoque basado en componentes. Si los requisitos se entienden bien y el proyecto es limitado, RAD permite crear un producto funcional en poco tiempo sin reducir la calidad.
Modelo de Desarrollo Concurrente
Este modelo es de tipo red. Todas las personas trabajan al mismo tiempo. Se representa como una serie de actividades, tareas y estados.
Define eventos que activan cambios de estado en cada actividad de ingeniería de software. Por ejemplo, si se detecta una inconsistencia en el diseño, se activa una corrección.
Este modelo se usa a menudo para aplicaciones cliente/servidor. Un sistema cliente/servidor tiene componentes funcionales. El modelo concurrente define actividades en dos dimensiones: división de sistemas y división de componentes.
La concurrencia se logra de dos maneras:
- Las actividades del sistema y de los componentes ocurren al mismo tiempo.
- Una aplicación cliente/servidor se implementa con muchos componentes que se pueden diseñar y realizar al mismo tiempo.
El modelo concurrente es aplicable a todo tipo de desarrollo de software. Muestra el estado actual de un proyecto. En lugar de una secuencia de eventos, define una red de actividades que existen al mismo tiempo. Los eventos inician transiciones entre los estados de una actividad.
Proceso Unificado del Desarrollo de Software
El proceso unificado es un proceso de software general. Se puede usar para muchos tipos de sistemas, áreas, organizaciones y tamaños de proyectos.
Ofrece un enfoque organizado para asignar tareas y responsabilidades. Su meta es asegurar la producción de software de alta calidad. Este software debe satisfacer las necesidades de los usuarios, dentro de un tiempo y presupuesto predecibles.
El proceso unificado tiene dos dimensiones:
- Un eje horizontal: Representa el tiempo y las fases del ciclo de vida.
- Un eje vertical: Representa las disciplinas, que agrupan actividades por su naturaleza.
La primera dimensión muestra cómo el proceso se desarrolla con el tiempo. La segunda describe el proceso en términos de componentes, disciplinas, actividades y roles.
El refinamiento más conocido es el RUP (proceso unificado racional). El proceso unificado es un marco de trabajo flexible que se adapta a proyectos específicos. Por eso, a menudo se usan los dos nombres para referirse al mismo concepto.
Producto de Software
El software es muy necesario en nuestra sociedad. Impulsa decisiones comerciales, la investigación científica y diferencia productos y servicios. Está presente en sistemas de todo tipo a nuestro alrededor.
El software de computadora es el producto que diseñan y construyen los ingenieros de software. Incluye programas que se ejecutan en cualquier computadora. Una vez construido, casi cualquier persona en el mundo industrializado lo usa directa o indirectamente.
Los productos de software se clasifican en:
- Productos genéricos: Creados por una organización para venderlos al mercado.
- Productos a medida: Sistemas desarrollados bajo pedido para un cliente específico.
Estos productos deben cumplir varias características:
- Mantenibles: El software debe poder evolucionar y seguir funcionando.
- Confiabilidad: No debe causar problemas si hay errores.
- Eficiencia: El software no debe desperdiciar recursos.
- Utilización adecuada: Debe tener una interfaz de usuario apropiada y buena documentación.
Lo que es el producto final es diferente para el ingeniero y para los usuarios. Para el ingeniero, son los programas, datos y documentos. Para el usuario, el producto final es la información que resuelve su problema.
Naturaleza de la Ingeniería de Software
La ingeniería de software es una disciplina que aplica conceptos y métodos de ingeniería para desarrollar software de calidad.
Matemáticas en el Software
Los programas tienen muchas propiedades matemáticas. Por ejemplo, la corrección y la complejidad de muchos algoritmos se pueden probar con matemáticas. El uso de matemáticas en la ingeniería de software se llama "métodos formales".
Proceso de Creación
Los programas se construyen en una secuencia de pasos. Definir y seguir estos pasos correctamente es necesario para mejorar la productividad y la calidad de los programas. Esto inspira los diferentes procesos y metodologías en la ingeniería de software.
Gestión de Proyectos
Desarrollar software grande requiere una buena gestión del proyecto. Hay presupuestos, plazos de entrega y un equipo de profesionales que liderar. También hay recursos (oficinas, materiales, equipos) que adquirir. Para administrar todo esto, se necesita una visión clara y capacitación en gestión de proyectos.
Participantes y Roles
Para desarrollar un sistema de software, se necesita la colaboración de muchas personas. Cada una tiene diferentes habilidades e intereses. Al grupo de personas involucradas en el proyecto se les llama participantes.
Las funciones y responsabilidades dentro del proyecto se conocen como roles. Los roles se asocian a las tareas asignadas a los participantes. Una persona puede tener uno o varios roles, y un rol puede ser desempeñado por un equipo.
Cliente
A menudo se usan "usuarios", "usuarios finales" y "clientes" como sinónimos. Pero, el cliente es quien define lo que el sistema necesita. El usuario es quien usa el producto final. El cliente y el usuario pueden ser la misma persona o no.
Desarrolladores
Estos participantes están relacionados con todas las partes del proceso de desarrollo del software. Su trabajo incluye investigar, diseñar, programar, probar y corregir el software.
Gestores
En ingeniería de software, el gestor de desarrollo es quien reporta al director de la empresa. Es responsable de manejar y coordinar los recursos y procesos para entregar productos de software correctamente. También participa en la definición de la estrategia del equipo de desarrolladores.
Usuarios Finales
El usuario final es quien interactúa con el producto de software una vez entregado. Generalmente, los usuarios son quienes conocen el problema, ya que usan los sistemas a diario.
Código Ético de un Ingeniero de Software
Un ingeniero de software debe asegurarse de que su trabajo se use para el bien. Debe comprometerse a que la ingeniería de software sea una profesión útil y respetada. Para esto, hay ocho principios que guían su conducta y decisiones. Estos principios identifican las relaciones responsables de los individuos, grupos y organizaciones. Los principios se refieren a la sociedad, el cliente y empresario, el producto, el juicio, la administración, la profesión, los colegas y el personal.
- Sociedad: Actuar pensando en el interés social. Aceptar la responsabilidad de su trabajo. Aprobar el software solo si se tiene buena razón para creer que es seguro. Cooperar para resolver problemas importantes. Ser justo y veraz en todo lo relacionado con el software.
- Cliente y empresario: Actuar para beneficiar a clientes y empresarios, siempre de acuerdo con el interés social. Ofrecer servicios en sus áreas de conocimiento. Ser honesto sobre las limitaciones. No usar software obtenido de forma ilegal. Usar la propiedad de clientes o empresarios solo con permiso. Mantener la confidencialidad.
- Producto: Asegurar que los productos y sus cambios cumplan con los más altos estándares. Buscar alta calidad, costos aceptables y plazos razonables. Asegurar que los costos y beneficios sean claros y aceptados. Asegurar que los objetivos del proyecto sean adecuados y alcanzables.
- Juicio: Mantener la integridad e independencia en el juicio profesional. Basar el juicio técnico en la necesidad de apoyar los valores humanos. Ser objetivo con el software y documentos relacionados. No participar en prácticas financieras deshonestas.
- Administración: Asegurar una buena administración en cualquier proyecto. Usar procedimientos efectivos para promover la calidad y reducir riesgos. Asegurarse de que se conozcan las políticas para proteger contraseñas y información confidencial.
- Profesión: Aumentar la integridad y reputación de la profesión. Ayudar a crear un ambiente de trabajo favorable. Promover el conocimiento público de la ingeniería de software. Ampliar el conocimiento de la ingeniería de software participando en organizaciones y publicaciones.
- Colegas: Apoyar y ser justo con los colegas. Motivarlos a seguir el código ético. Ayudar en su desarrollo profesional. Reconocer el trabajo de otros y no atribuirse méritos ajenos. Revisar los trabajos de forma objetiva y sincera.
- Personal: Participar en el aprendizaje continuo y promover un enfoque ético de la profesión. Mejorar el conocimiento sobre los avances en el análisis, diseño, desarrollo, mantenimiento y pruebas del software.
Educación Ética
Organizaciones Relevantes
- IEEE Computer Society
- Association for Computing Machinery (ACM)
- Software Engineering Institute (SEI)
- British Computer Society (BCS)
- RUSSOFT Association
- Consejo General de Colegios Oficiales de Ingeniería Técnica en Informática (CONCITI)
Véase también
En inglés: Software engineering Facts for Kids