G A C E T A   D E   L I N U X
...haciendo a Linux un poco más divertido!

Ingeniería de Software
Por: Gustavo Rondina
Traducción al español por Luis David Betanzos Oviedo
el día 28 de Octubre 2003, para La Gaceta de Linux

 

Resúmen

La llamada crisis de software puede generar serias y severas consecuencias a la computación y Tecnología Informática en el futuro, principalmente sobre puntos referidos al software libre. Este artículo intenta introducir rápidamente al lector en algunos de los problemas que pueden contribuir con esta crisis y quizá alentar a usuarios y programadores para adoptar las medidas necesarias para evitarlo.

1. Introduccíon

En Nuestros días los dispositivos de hardware se vuelven más poderosos y expanden sus capacidades y aspectos diariamente. Pero esos dispositivos son inútiles si no hay el software capaz de explorar esos aspectos lo más posible que sea, así es apropiado decir que el proceso de desarrollo de software, llamado Ingeniería de software, es una de las áreas más importantes de la computación.

Para alcanzar el rápido avance tecnológico en la industría de hardware, los diseñadores de software y programadores, cuyo trabajo es desarrollar el núcleo del software, deben tener la idea de lo que es necesario no simplemente crear y desarrollar un producto que trabaje, pero un producto que implementa buenas practicas de ingeniería de software, asegurando que la computadora o los esfuerzos del programador no sean derrochados.

2. Linux, el software libre y la Ingeniería de software

Usted podría preguntarse a si mismo: ¿Donde se adapta Linux en este escenario? Bien, el movimiento de software libre puede contestar esta pregunta. El Sistema Operativo Linux ha ido un gran y satisfactorio proyecto que ayudó a esparcir los principios,conceptos y filosofía del software libre.

En la Decada pasada podemos notar un importante crecimiento si miramos el número de usuarios de Linux. Los usuarios han adoptado el sistema en su hogar, el trabajo o en la escuela. Muchos de estos usuarios escojieron Linux debido a la disponibilidad del código: cualquier persona sobre el mundo puede obtener los fuentes, leerlos, hacer modificaciones, copiar y redistribuir este código. La mayoría de esos usuarios tienen ya un conocimiento previo de programación de computadoras y Sistemas Operativos con base en Unix.

Sin embargo había usuarios que han adoptado Linux simplemente por curiosidad, para conocer y explorar un diferente y nuevo sistema y tener una idea de como trabajan los sistemas Unix; a algunos de ellos no les gusto o no pudieron usar Linux y lo dejaron, pero la mayoría de ellos adoptó Linux como un modo de vida y una filosofía.

Estos nuevos entusiastas de Linux quieren aprender tanto como sea posible sobre el sistema,entonces, con el código fuente abierto a cualquiera y construido bajo los lenguajes de programación C y ensamblador, ellos decidieron aprender a programar comenzando por el buen camino estando bajo linux. Y esto fue lo que sucedió, los nuevos usuarios han comenzado a programar y modificar códigos voluntariamente, dando su tiempo y esfuerzos a proyectos que apuntan para contribuir con la comunidad del código Abierto.

Hoy son muchos los proyectos satisfactorios que muestran al mundo que la filosofia de desarrollo de software libre realmente funciona.

3. ¿Entonces, dónde está el problema?

Estos nuevos programadores habían aprendido los lenguajes de programación necesarios para el desarrollo de software y habían puesto en práctica su conocimiento desarrollando software que se adapte a sus necesidades, produciendo los resultados esperados. Sin embargo, no hay garantía que esos productos son totalmente confiables y que las ideas se han implementado de la mejor manera posible.

Esto sucede debido a la carencia de conocimiento en el área de Ingeníera de software. Hay muchos proyectos que son desarrollados por gente que no tienen mucha experiencia en la producción y desarrollo de software, hay una carencia de conceptos y teoría de estos programadores. Un programa no es simplemente ejecutar un editor de textos y comienzar a escribir código y compilarlo, esperando obtener los resultados esperados.

El conocer la sintaxis de un lenguaje de programación no significa que conozca como desarrollar un buen programa y un software de calidad. El desarrollo de software es un proceso complejo, desde el diseño del primer algoritmo hasta la depuración y fase de prueba. Un programador que no tiene los conceptos de los paradigmas del lenguaje y sus iferencias (Por Ejemplo: Programación Orientada a Objetos y procedimientos de programación); quien no sabe profundamente que los diferentes tipos de estructuras de datos, tales como pilas, colas, listas y árboles binarios; o el programador que no sabe como en la arquitectura del hardware se realizan las operaciones aritméticas y como trabajan los circuitos lógicos, puede desarrollar software que, regularmente trabajan, pero que no pueden ser implementados.

El software que no es implementado correctamente puede ocasionar la perdida de los recursos de hardware tales como tiempo procesador del CPU o la administración de memoria; también los esfuerzos del programador, una vez que puede resolver los problemas triviales usando un complejo y costoso metodo, entonces el no conoce una manera más fácil; desperdiciando también aspectos del lenguaje usándolo pobremente o incorrectamente. Todas estas cosas aumenta el costo final del proyecto.

4. ¿Como resolver este problema?

Este problema es conocido como "la crisis de software". Cada persona que empieza a modificar y producir nuevos códigos sin los conocimientos apropiados de un buen diseño de software contribuye a incrementar esta crisis.

En el futuro esto puede ser muy peligroso, principalmente a la comunidad de software libre debido a, en algunos casos, no hay un encargado de controlar y moderar las fase de desarrollo del proyecto, debido a que varios son desarrollados por programadores voluntarios.

La solución de este problema puede ser simple: los usuarios y los programadores deben estudiar profundamente ingenieria de software y modelado, analisis de algoritmos, probar el software y cada paradigma y los detalles del lenguaje. Los desarrolladores deberían leer documentos científicos y libros tecnicos sobre diseño de software. Muchos programadores simplemente buscan que su software produzca los resultados deseados, pero si un programador quiere ser desarrollador exitoso y tener gran calidad y software confiable, es esencial conocer las bases teoricas que se esconde bajo la practica. Teoricamente el conocimiento es la base de todo.

Muchos programas y los proyectos comienzan en el papel, no hay que avergonzarse al hacer un borrador de un algoritmo dificil. Algunas veces una idea puede lograr un alto nivel de abstracción que puede ser más comprensible mediante un dibujo. Probar el software antes de ponerlo en manos del consumidor también es importante, hay muchas tecnicas diferentes y temas relacionados a la prueba de software. El conocer varios lenguajes de programación y paradigmas del lenguaje dan al programados más flexibilidad mientras elije la mejor forma de resolver el problema, puesto que cada lenguaje tiene sus propios limites. también el espacio del código fuente es importante para aumentar la legibilidad de las fuentes. Todas estas cosas se relacionan con el buen diseño del software y mejora la calidad de sus productos.

5. Conclusión

Este artículo no intenta criticar ni desalentar a los programadores aficionados, pero los fomenta conocer más y profundamente los puntos relacionados con el proceso de desarrollo de software. Es la unica forma de tener buen software y confiable en las proximas generaciones.

Espero que usted haya disfrutado este artículo. Por favor perdona mi Ingles, este no es mi idioma nativo. Quizá sobre un futuro artículo se mejorará un poco. Los comentarios, preguntas y las sugerencias son siempre bienvenida. Sientase libre de enviarme un mail gustavorondina at uol dot com dot br

 

[BIO] Soy Gustavo, soy de Brazil, estoy cursando el 4o. Semestre de Ciencias de la Computación, pero Tengo mi toque con las computadoras y Linux cerca de 5 años.


Copyright © 2003, Gustavo Rondina. Licencia de copia http://www.linuxgazette.com/copying.html
Publicado en el número 95 de Linux Gazette, Octubre 2003