Conceptos básicos de ingeniería de software

 

 

Introducción

Este capítulo tiene por objetivo hacer una definición de los conceptos básicos de ingeniería de software y de programación en gran escala. La sección primera describe brevemente el problema de la industria de software resaltando por qué es importante encontrar soluciones a este problema. La sección 2 presenta una definición de ingeniería de software y un poco de historia sobre el origen de la disciplina.

Arriba

La industria de software

Cada día son más las actividades en las que intervienen aplicaciones de software. Estas aplicaciones van desde el sistema financiero de un banco hasta el sistema de control de un avión pasando por software educativo, software de ayuda a la construcción de X o Y artefacto, sistemas de apoyo al trabajo cooperativo, etc. Además, con la popularización de Internet y, en particular, de la Web, las posibilidades de aplicación han aumentado considerablemente.

Así como los dominios de aplicación de software han aumentado, también ha aumentado la complejidad y el tamaño de los sistemas. Esto es debido, en parte, a que las necesidades de los usuarios son cada vez más exigentes, en términos de interacción, seguridad, retroalimentación, etc., y también, debido a los avances tecnológicos que hacen posible que un sistema esté compuesto de múltiples subsistemas en los que intervienen bases de datos, interfaces gráficas, comunicación entre componentes, recuperación ante fallas, interacción con dispositivos multimedia, sistemas complejos de seguridad, etc.

Si bien este crecimiento es un contexto prometedor para el desarrollo y fortalecimiento de una industria de software, los problemas relacionados con el desarrollo y mantenimiento de estos sistemas son muchos y muy grandes. Desafortunadamente, no es raro encontrar usuarios y/o clientes de software insatisfechos con el software que usan debido a que este no satisface sus necesidades, es ineficiente, no es amigable, no es seguro, etc.

Las cifras de estos casos no son muy alentadoras. Algunos ejemplos hablan por si solos :

La importancia de este problema está, no sólo en las grandes perdidas económicas directas de las empresas y organizaciones, sino también en los costos de oportunidad, la seguridad de las personas, el retraso científico y tecnológico, etc.

Desde un punto de vista más positivo, es claro que una buena industria de software, en especial en un país como el nuestro, puede ayudar, entre otros, a la modernización de la economía, al mejoramiento de la calidad de vida, a la creación de empleo calificado, al desarrollo de un renglón de exportación importante, etc.

Esto será posible sólo si entendemos que la construcción de software no se limita a conocer la tecnología, tener la máquina más potente y la última herramienta de desarrollo. Antes que la tecnología, las máquinas y las herramientas están las personas y los procesos que esas personas utilizan para la construcción de sus sistemas. La construcción y el mantenimiento de software requiere del esfuerzo y colaboración de equipos de personas, en empresas donde la rotación de personal es muy alta si consideramos que el software debe "vivir" durante muchos años. Es por esto y por la complejidad de las tareas que se realizan, que las actividades de desarrollo deben ser planificadas, evaluadas, coordinadas, etc. Estas son las razones que hacen de la ingeniería de software una disciplina fundamental para los profesionales de la computación.

Arriba

Definición de Sistema 



Representa una combinación de elementos, atributos, relaciones reciprocas, organizadas para la búsqueda de un objetivo común.

La información lo definimos como conocimientos comunicados y expresados de una que los haga independientemente útiles para la toma de decisiones.

Un sistema de información es un sistema de conjuntos de información necesarios para la decisión y el señalamiento en un sistema más amplio que contiene subsistemas para: almacenar, procesar, distribuir conjuntos de información.

Es decir que sistema de información es un conjunto de procedimientos organizados que, cuando se ejecutan; proporcionan información para la toma de decisiones y /o el control de la organización .

Arriba

¿Qué es la ingeniería de software?

La ingeniería de software es una disciplina que trata los problemas prácticos del desarrollo de software y tiene por objetivo mejorar la calidad del software produciéndolo dentro de los costos y los plazos previstos. La ingeniería de software ofrece una serie de procesos, metodología y herramientas para dar soporte a las actividades de desarrollo y mantenimiento. Esta disciplina está en evolución permanente a causa de los constantes cambios tecnológicos, el afán de estandarización y también, gracias a las experiencias adquiridas y documentadas de desarrollos, exitosos o no, de software.

El término ingeniería de software fue utilizado por primera vez en una conferencia organizada por la OTAN en 1968. Esta fue la primera conferencia en la que se trato el tema de la "crisis del software". Esta crisis permitió identificar un gran número de problemas derivados de la utilización de métodos Ad Hoc para la construcción de software.

La ingeniería de software puede ser dividida en dos grandes áreas: Programación detallada (Programming-in-the-Small) vs. Programación en gran escala (Programming-in-the-Large, Programming-in-the-Many) . Esta distinción es importante para poder entender que la complejidad de desarrollar un sistema de gran tamaño no es lineal a la complejidad de desarrollar un programa pequeño. Es decir, que si desarrollar un programa de 10 líneas cuesta 1 unidad, desarrollar un programa de 1000 líneas no cuesta 100 unidades. A continuación presentamos cada una de estas áreas.

Arriba

 

Programación Detallada

La programación detallada (Programming-in-the-Small) es la parte de la ingeniería de software que enfatiza las actividades de construcción de componentes de software pequeños y autónomos. Por ejemplo, un programa para: invertir una matriz, implementar un TAD (pila, conjunto, etc.), buscar una palabra en un texto, etc.

Los conceptos básicos que se manejan en la programación detallada son:

  • Algoritmos
  • Estructuras de datos
  • Pequeñas entidades: identificadores, constantes, variables, expresiones, instrucciones
  • Relaciones de composición: por ejemplo, instrucciones compuestas de expresiones.
  • Flujo de control: secuencia, instrucciones repetitivas, instrucciones condicionales
  • Flujo de datos: asignación de variables, paso de parámetros, etc.

Arriba

 

Programación en Gran Escala

"… many people using many tools to make many versions of many modules for use in many configurations at many sites by many users over many years …" 

La programación en gran escala es una disciplina que se ocupa de los procesos de desarrollo, evolución y mantenimiento de un producto de software de gran tamaño (cientos, miles o millones de líneas de código).

Características de un producto de software

Procesos de software

Las actividades necesarias para la fabricación de un producto de software se conocen con el nombre de procesos de software. Los siguientes son algunos elementos relacionados con estos procesos y que son importantes porque de una u otra forma afectan su realización:

Las características del producto de software y los elementos relacionados con los procesos hacen que la fabricación de software (desarrollo, evolución, mantenimiento) sea una actividad compleja que requiere de la aplicación de prácticas de muchas disciplinas y en particular de ingeniería y de administración.

Arriba

 

Conclusión

Si se considera el orden de magnitud de las cifras de inversión mundial en tecnología de la información, es claro que, desde un punto de vista económico, la industria del software tiene una importancia crucial. Además, la importancia que tienen los sistemas de información en la mayoría de las actividades hoy en día, hace que los esfuerzos en tratar de mejorar la productividad del desarrollo del software y de aumentar su calidad sean más que justificados.

Según estudios recientes la industria de software en Colombia padece graves problemas que se reflejan en fracasos de proyectos, males estimaciones y en que no hay procesos de desarrollo definidos. Se cree que la causa de estos problemas son los malos hábitos de los programadores, la falta de rigurosidad y desconocimiento de metodologías, la mala coordinación del trabajo, la deficiente estimación en tiempos de desarrollo y utilización de recursos, la falta de herramientas (a causa de su alto costo o de su desconocimiento), etc.

Las metas de la ingeniería de software son, por un lado, mejorar la calidad de los procesos de fabricación de software y mejorar la calidad de los productos de software y, por otro lado, aumentar la productividad y satisfacción profesional de los ingenieros de esta disciplina.

Arriba

 

Ejercicios

Con base en la lectura ,  y su propia experiencia responda las siguientes preguntas:

Aplicaciones de software

     

  1. Enumere actividades o áreas de trabajo en las cuales se utiliza software. En cuales de ellas es vital? En cuales se podría prescindir?

     

    Mala calidad de software

     

  2. Conoce casos de organizaciones o personas que se hayan visto afectadas por el mal funcionamiento de un software? Ud. ha sido "víctima"? Enumere algunos de estos casos y las consecuencias.
  3. En casos de mal funcionamiento de software de quien cree usted que es la responsabilidad?

     

    Buena calidad de software

     

  4. Posibilidades de desarrollar una industria de software en Colombia. Ventajas y desventajas

     

    Complejidad del problema

     

  5. Diga cuáles son las consecuencias de las características del producto de software y del proceso de software listadas en 1.2.2 sobre la complejidad de desarrollas un sistema grande.

    El problema del mantenimiento

     

  6. Qué tiene que ver el hecho que los sistemas deben durar muchos años? Que relación hay con la larga vida de los sistemas y el problema del año que se pensaba ocurriría en el 2000?
  7. Qué tiene que ver que en las empresas haya rotación de personal?
  8. Qué responsabilidad tienen los clientes con respecto al desarrollo y al mantenimiento de los sistemas?

    Arriba

     

Referencias bibliográficas

  1. A. Fuggetta. A Classification of CASE Technology. IEEE Computer, 25-38, Diciembre 1993.
  2. F. DeRember, H. Kron. Programming-in-the-Large versus Programming-in-the-Small. IEEE Transactions on Software Engineering, 2:80-86, Junio de 1976.
  3. R. Adomeit, W. Deiters, F. Shulke, H. Weber, B. Holtkamp, R. Rockwell. Software Engineering Environments. Encyclopedia of Software Engineering, John Wiley and Sons, 1994.
  4. Pressman Roger, Ingeniería del Software " Un Enfoque Práctico", Mc Grawhill, 1998

Extracto de: http://www.sanmartinbaq.edu.co/cursos/sistemas/01051/guia01.html

 

Arriba