Diversidad en desarrollo de software

El desarrollo de software es un enfoque sistemático para la producción de software que tiene en cuenta los costos prácticos, el cronograma y los problemas de confiabilidad, así como las necesidades de los clientes y productores de software. La forma en que este enfoque sistemático se implementa realmente varía dramáticamente dependiendo de la organización que desarrolla el software, el tipo de software y las personas involucradas en el proceso de desarrollo. No existen métodos y técnicas de ingeniería de software universales que sean adecuados para todos los sistemas y todas las empresas. Por el contrario, un conjunto diverso de herramientas y métodos de ingeniería de software ha evolucionado en los últimos 50 años. Quizás el factor más importante para determinar qué métodos y técnicas de ingeniería de software son más importantes es el tipo de aplicación que se está desarrollando. Existen muchos tipos diferentes de aplicaciones, que incluyen:

Aplicaciones independientes. Estos son sistemas de aplicación que se ejecutan en una computadora local, como una PC. Incluyen toda la funcionalidad necesaria y no necesitan estar conectados a una red. Ejemplos de tales aplicaciones son aplicaciones de oficina en una PC, programas CAD, software de manipulación de fotos, etc.

Aplicaciones interactivas basadas en transacciones. Estas son aplicaciones que se ejecutan en una computadora remota y a las que acceden los usuarios desde sus propias PC o terminales. Obviamente, estas incluyen aplicaciones web como aplicaciones de comercio electrónico donde puede interactuar con un sistema remoto para comprar bienes y servicios. Esta clase de aplicación también incluye sistemas empresariales, donde una empresa proporciona acceso a sus sistemas a través de un navegador web o un programa de cliente especial y servicios basados en la nube, como el correo y el intercambio de fotos. Las aplicaciones interactivas a menudo incorporan un gran almacén de datos al que se accede y se actualiza en cada transacción.

Sistemas de control integrados. Estos son sistemas de control de software que controlan y administran dispositivos de hardware. Numéricamente, probablemente haya más sistemas integrados que cualquier otro tipo de sistema. Los ejemplos de sistemas integrados incluyen el software en un teléfono móvil (celular), el software que controla el frenado antibloqueo en un automóvil y el software en un horno de microondas para controlar el proceso de cocción.

Sistemas de procesamiento por lotes. Estos son sistemas comerciales diseñados para procesar datos en grandes lotes. Procesan grandes cantidades de entradas individuales para crear salidas correspondientes. Los ejemplos de sistemas por lotes incluyen sistemas de facturación periódica, como los sistemas de facturación telefónica y los sistemas de pago de salarios.

Sistemas de entretenimiento. Estos son sistemas que son principalmente para uso personal y están destinados a entretener al usuario. La mayoría de estos sistemas son juegos de un tipo u otro. La calidad de la interacción del usuario ofrecida es la característica distintiva más importante de los sistemas de entretenimiento.

Sistemas de modelado y simulación. Estos son sistemas desarrollados por científicos e ingenieros para modelar procesos o situaciones físicas, que incluyen muchos objetos separados e interactivos. Estos a menudo son computacionalmente intensivos y requieren sistemas paralelos de alto rendimiento para su ejecución.

Sistemas de recolección de datos. Estos son sistemas que recopilan datos de su entorno utilizando un conjunto de sensores y envían esos datos a otros sistemas para su procesamiento. El software tiene que interactuar con los sensores y, a menudo, se instala en un entorno hostil, como dentro de un motor o en una ubicación remota.

Sistemas de sistemas. Estos son sistemas que se componen de varios otros sistemas de software. Algunos de estos pueden ser productos de software genéricos, como un programa de hoja de cálculo. Otros sistemas en el ensamblaje pueden estar especialmente escritos para ese entorno.

Por supuesto, los límites entre estos tipos de sistemas son borrosos. Si desarrolla un juego para un teléfono móvil, debe tener en cuenta las mismas restricciones (potencia, interacción de hardware) que los desarrolladores del software del teléfono. Los sistemas de procesamiento por lotes a menudo se usan junto con sistemas basados en la web. Por ejemplo, en una empresa, los gastos de viaje pueden enviarse a través de una aplicación web, pero procesarse en una aplicación por lotes para el pago mensual.

Se utilizan diferentes técnicas de ingeniería de software para cada tipo de sistema porque el software tiene características bastante diferentes. Por ejemplo, un sistema de control integrado en un automóvil es crítico para la seguridad y se graba en la ROM cuando se instala en el vehículo. Por lo tanto, es muy costoso cambiar. Tal sistema necesita una verificación y validación muy amplia para minimizar las posibilidades de tener que retirar automóviles después de la venta para solucionar problemas de software. La interacción del usuario es mínima (o tal vez inexistente), por lo que no es necesario utilizar un proceso de desarrollo que se base en la creación de prototipos de la interfaz de usuario.

Para un sistema basado en la web, un enfoque basado en el desarrollo iterativo y la entrega puede ser apropiado, con el sistema compuesto de componentes reutilizables. Sin embargo, este enfoque puede no ser práctico para un sistema de sistemas, donde las especificaciones detalladas de las interacciones del sistema tienen que especificarse de antemano para que cada sistema pueda desarrollarse por separado.