Christian A. Estay-Niculcar's research blog

Espacio de reflexión personal dedicado a la investigación aplicada cuando se vincula la ciencia proyectual con la disciplina informática, y se aplican al desarrollo de las personas y de la gestión empresarial.

Ingeniería del proyecto: el problema del desarrollo de software (1/7): la naturaleza del software

¿Qué caracteriza al objeto de estudio de la Ingeniería de Software: el software?

Lo que le caracteriza es que se modifica continuamente por factores externos e internos. En un intento de caracterizar esto, se presentan esta idea de modificación continua desde dos ideas:

  • el software cambia porque debe adaptarse a la sociedad y sus avances industriales y tecnológicos; y,
  • el software evoluciona debido a fenómenos propios de su propia producción.

a.- La naturaleza cambiante del software en función de su adaptación a la sociedad y los avances industriales y tecnológicos

El software responde a necesidades de la sociedad. Por este motivo, los primitivos software centrados en realizar simples operaciones ahora responden a sectores industriales, tipos de procesos, etc. No es sencillo hoy en día establecer tipos de software que faciliten ver cómo el software debe tratarse hoy en día, pero se puede arriesgar una tipología sencilla. La idea es mostrar tipos de software pero con el interés de mostrar hasta donde se ha llegado o se llegará con la variedad de software que se está produciendo. Es un cambio continuo.

A continuación una breve descripción de posibles categorías tomadas de autores diversos.

  • Software de sistema. Es una colección de programas escritos para servir otros programas. Se caracterizan por tener una alta interacción con el hardware, gran uso de múltiples usuarios, operaciones concurrentes, distribución de recursos, estructuras de datos complejas e interfases externas múltiples.
  • Aplicación de software. Programas independientes que resuelven una necesidad específica de negocio. Además del procesamiento convencional de datos, es usado para controlar las funciones del negocio en tiempo real.
  • Software de ingeniería/científico. Antiguamente caracterizados por sus algoritmos numéricos, estas aplicaciones van desde la astronomía a la vulcanología, o desde la biología molecular a la manufactura automática. Con el tiempo, los algoritmos numéricos están siendo reemplazados por aplicaciones interactivas.
  • Software incrustado (embebed). Es usado para implementar y controlar características y funciones para el usuario final del producto o sistema en el que reside, o para el sistema mismo.
  • Software de línea de producción. Es diseñado para proveer de una capacidad específica para el uso de muchos consumidores diferentes.
  • Aplicaciones Web. En su forma más simple puede ser algo más que un grupo de archivos de hipertexto que presentan información usando texto y gráficos. Sin embargo, mientras el e-Commerce y las aplicaciones B2B adquieren importancia, las aplicaciones web han evolucionado en ambientes sofisticados que también se integran con las bases de datos empresariales y las demás aplicaciones existentes en el negocio.
  • Software de inteligencia artificial. Hace uso de algoritmos no numéricos para resolver problemas complejos que no son disponibles para un análisis computacional. En esta área se incluyen la robótica, los sistemas expertos, el reconocimiento de datos, las redes neurales artificiales, entre otros.

Proyectando por donde se están los cambios, hay que observar, aparte de las necesidades sociales, los cambios en la propia tecnología. Así se puede identificar nuevos retos que producirán cambios en los software.

  • Computación ubicua. El rápido crecimiento de las redes inalámbricas pronto establecerá una computación distribuida real. El reto para los ingenieros de software es desarrollar sistemas que permitan comunicarse a través de enormes redes de datos a computadoras personales, sistemas empresariales y dispositivos móviles, dispositivos cada vez más pequeños y portátiles, hasta llegar a la Internet de las Cosas.
  • Netsourcing. La World Wide Web es una máquina computacional, una plataforma de trabajo, y ya no sólo un proveedor de contenido. El reto para los ingenieros de software es diseñar aplicaciones simples y sofisticadas que provean beneficios para usuarios finales en todo el mundo donde la Web es la plataforma.
  • Código abierto. Lo que fue tendencia es casi una alternativa a la producción de software. Usar software hecho por otras personas y poderlo modificar supone un cambio importante. El reto para los ingenieros de software es el de construir código fuente que sea auto descriptivo, y más que nada, desarrollar técnicas que permitan al consumidor y al desarrollador conocer los cambios que han sido hechos y las consecuencias de su uso.
  • La nueva economía. Los nuevos mercados globales y mundiales demandan software global. El reto para los ingenieros de software es el de construir aplicaciones que faciliten la comunicación y distribución de productos en masa, utilizando conceptos que recién se están creando.

b.- La naturaleza evolutiva del software en función de su propio proceso de producción

El software inevitablemente evoluciona. El cambio (referido como mantenimiento de software) conduce este proceso y ocurre cuando se corrigen errores, se hacen adaptaciones para nuevos ambientes, cuando el usuario solicita cambios funcionales, y cuando se realiza una reingeniería de la aplicación para modernizarla.

La evolución no es regulable, simplemente ocurre. Como una forma de comprender esta evolución, parecer tener sentido aquí introducir el trabajo de Manny Lehman y  colegas, quienes han efectuado analizado la industria del software, y propusieron una Teoría Unificada de la (Unified Theory of Software Evolution). Esta teoría no es más que un conjunto de leyes que ellos recopilaron y condensaron en su teoría unificada. Estas leyes se manifiestan de forma natural en el software y su conocimiento permite comprender y gestionar todo el proceso de evolución.

  • 1• La ley del cambio continuo (1974). Un software “que se utiliza debe adaptarse continuamente, en caso contrario, el programa se hace progresivamente menos satisfactorio. Estas adaptaciones son el resultado del cambio en la operación del entorno en el cual la aplicación cumple una función.” En este caso se asume que el software debe evolucionar para aportar un valor organizacional. O, los sistemas se deben adaptar de manera continua porque si no dejan de ser satisfactorios.
  • 2• La ley de la complejidad creciente (1974). “A medida que evoluciona un programa, su complejidad se incremente, a menos que se trabaje para mantenerla o reducirla. […] Esto a su vez implica un aumento progresivo del esfuerzo de mantenimiento, a menos que se realice algún tipo de mantenimiento perfectivo a este respecto.” En este caso se asume que todo cambio en el software aumenta de manera normal su complejidad, lo cual conlleva un ciclo continuo de aumento continuo de complejidad pues toda complejidad requerirá nuevos cambios que aportarán más complejidad, a pesar de que puede minimizarse esta complejidad creciente con esfuerzos de mantenimiento. O, suando un sistema se encuentra evolucionando su complejidad aumenta, así que es mejor reducirla.
  • 3• La ley de la auto regulación (1974). El proceso de evolución del [software] se autorregula mediante indicadores de valores esperados que son en el fondo medidas de atributos de producto y procesos cercano a lo que considera un funcionamiento normal. Aquí se da el caso de que la evolución del software es llevada a cabo por un equipo que opera el desarrollo desde una organización más grande. Las decisiones de gestión respecto a los cambios en el programa constituyen una dinámica que determina las características de crecimiento del producto. En este caso se asume que el software evoluciona debido a las decisiones que se toman sobre él. O, la evolución de un sistema se regula con la distribución y medida del producto para que sean lo más cercanas a la normal.
  • 4• La ley de la conservación de la estabilidad organizacional (1980). “La velocidad de actividad global efectiva media en un sistema en evolución es invariante a lo largo del ciclo de vida del producto. Se considera que el esfuerzo gastado en la evolución del sistema se determina por decisiones de dirección. Esto es por supuesto así en un cierto grado, pero su influencia está limitada por factores externos respecto al empleo, la disponibilidad de personal competente, etc. NO obstante, también influyen los atributos del sistema, por ejemplo, la complejidad. Los datos empíricos sugieren que la actividad lleva a una estabilización de actividad aproximadamente constante.” En este caso se asume que el software evoluciona, aparte de las decisiones de gestión, por otros factores externos. O, la actividad global de un sistema en evolución no varía con respecto al el ciclo de vida de un producto.
  • 5• La ley de la conservación de la familiaridad (1980). “Durante la vida activa de un [software en evolución], el contenido de las versiones sucesivas es estadísticamente invariante. Uno de los factores que determina el progreso de un desarrollo de software es la familiaridad de todos los implicados. Cuantos más cambios y adiciones se hacen a una versión, es más difícil que todos los implicados la conozcan. Debido a que el crecimiento está limitado por la capacidad de adquirir información de los participantes, una evolución “grande” dificultaría ese aprendizaje, por lo que los cambios tienden a ser de un tamaño parecido y limitado. En este caso el software evoluciona introduciendo cambios que son limitados a lo que se pueda pedir como requerimientos. O, si el sistema se encuentra en continua evolución las personas involucrados en dicho proyecto deben estar afines al dominio del mismo, es decir, no salirse del contexto.
  • 6• La ley del crecimiento continuo (1980). “El contenido funcional [de un software] debe incrementarse continuamente para mantener la satisfacción del usuario durante su ciclo de vida. Esta ley refleja un aspecto del mismo fenómeno que refleja la primera [ley]. Habitualmente, los sistemas se crean con una limitación en cuanto a la funcionalidad del dominio cubierta, por motivos de tiempo o recursos. Esto hace que con el tiempo, los requisitos que se descartaron vuelvan a aparecer como necesidades.” En este caso la evolución aparece porque un software nunca se libera satisfaciendo todo lo pedido y/o lo esperado. O, el contenido (programación) de los sistemas debe estar en crecimiento continuo para satisfacer necesidades del cliente.
  • 7• La ley del decrecimiento de la calidad (1996). “Los [software] serán percibidos como de calidad decreciente a menos que se mantengan de manera rigurosa y se adapten al entorno operativo cambiante.Esta percepción de la calidad decreciente tiene que ver con los cambios en los criterios de aceptabilidad de los usuarios.” En este caso la evolución se da por la percepción de las personas de exigir más y más a productos que perciben fácilmente modificables. O, los sistemas podrían perder su calidad, a menos que se adapten y mantengan de acuerdo a los cambios en su ambiente operacional.
  • 8• La ley del sistema de retroalimentación (1996). Los procesos evolutivos constituyen sistemas de retroalimentación multiniveles, multilazos, y multiagentes y deben ser tratados como tales para adquirir una mejoría significativa. En este caso la evolución aparece porque el propio proceso que introduce cambios en los software evoluciona y el propio proceso introduce cambios, por ejemplo, cambiar de versión de software, introducir mecanismos de seguimiento de usuarios, acatar normas internacionales de seguridad, etc. O, todo sistema al momento de evolucionar debe estar constituido por sistemas de retroalimentación con niveles, ciclos y agentes de diversos tipos para que así se den mejoras en dicho sistema.

____________________________________

Este post se relaciona con otros más, todos vinculados al tema de estudiar y comprender el problema del desarrollo de software desde una fuerte óptica de la gestión de proyectos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

CEO & Co-Founder de EstayConsulting – Consultoría Estratégica

Miembro de Red

//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js (adsbygoogle = window.adsbygoogle || []).push({});

Categorías

A %d blogueros les gusta esto: