domingo, 15 de febrero de 2009

Otros Subtemas (Temas relacionados con la Ingenieria de pruebas)

La ingeniería de software afecta a la economía y las sociedades de variadas formas.


Económicamente
En los EEUU, el software contribuyó a 1/4 de todo el incremento del PIB durante los 90's (alrededor de 90,000 millones de dólares por año), y 1/6 de todo el crecimiento de productividad durante los últimos años de la década (alrededor de 33,000 millones de dólares por año). La ingeniería de software contribuyó a $1 billón de crecimiento económico y productividad en esa década. Alrededor del globo, el software contribuye al crecimiento económico en formas similares, aunque es difícil de encontrar estadísticas fiables.


Socialmente
La ingeniería de software cambia la cultura del mundo debido al extendido uso de la computadora. El correo electrónico (E-mail), la WWW y la mensajería instantánea permiten a la gente interactuar en nuevas formas. El software baja el costo y mejora la calidad de los servicios de salud, los departamentos de bomberos, las dependencias gubernamentales y otros servicios sociales. Los proyectos exitosos donde se han usado métodos de ingeniería de software incluyen a Linux, el software del transbordador espacial, los cajeros automáticos y muchos otros.
La ingeniería de software se puede considerar como la ingeniería aplicada al software, esto es, por medios sistematizados y con herramientas preestablecidas, la aplicación de ellos de la forma más eficiente para la obtención de resultados óptimos; objetivos que siempre busca la ingeniería. No es sólo de la resolución de problemas, sino más bien teniendo en cuenta las diferentes soluciones, elegir la más apropiada.


Modelos de desarrollo de software
La ingeniería de software tiene varios modelos o paradigmas de desarrollo en los cuales se puede apoyar para la realización de software, de los cuales podemos destacar a éstos por ser los más utilizados y los más completos:
• Modelo en cascada o Clásico (modelo tradicional)
• Modelo en espiral (modelo evolutivo)
• Modelo de prototipos
• Desarrollo por etapas
• Desarrollo iterativo y creciente o Interativo Incremental
• RAD (Rapid Application Development)



Naturaleza de la Ingenieria de Software

La Ingeniería de Software tiene que ver con varios campos en diferentes formas:
Matemáticas
Los programas tienen muchas propiedades matemáticas. Por ejemplo la corrección y la complejidad de muchos algoritmos son conceptos matemáticos que pueden ser rigurosamente probados. El uso de matemáticas en la IS es llamado métodos formales.
Creación
Los programas son construidos en una secuencia de pasos. El hecho de definir propiamente y llevar a cabo estos pasos, como en una línea de ensamblaje, es necesario para mejorar la productividad de los desarrolladores y la calidad final de los programas. Este punto de vista inspira los diferentes procesos y metodologías que encontramos en la IS.


Gestión de Proyectos
El software comercial (y mucho no comercial) requiere gestión de proyectos. Hay presupuestos y establecimiento de tiempos. Gente para liderar. Recursos (espacio de oficina, computadoras) por adquirir. Todo esto encaja apropiadamente con la visión de la Gestión de Proyectos.


Responsabilidad
La responsabilidad en la Ingeniería del Software es un concepto complejo, sobretodo porque al estar los sistemas informáticos fuertemente caracterizados por su complejidad, es difícil apreciar sus consecuencias.
En la Ingeniería del Software la responsabilidad será compartida por un grupo grande de personas, que comprende desde el ingeniero de requisitos, hasta el arquitecto software, y contando con el diseñador, o el encargado de realizar las pruebas. Por encima de todos ellos destaca el director del proyecto. El software demanda una clara distribución de la responsabilidad entre los diferentes roles que se dan en el proceso de producción.
El ingeniero del Sofware tiene una responsabilidad moral y legal limitada a las consecuencias directas


Reingeniería e ingeniería inversa
Los conceptos de reingeniería e ingeniería inversa están ligados al desarrollo de software a gran escala, donde una mejora en proceso de este desarrollo supone un aumento en la competitividad de la empresa.
Aunque hay que tener en cuenta que esta mejora es, en general a largo plazo (normalmente de uno a dos años) ambas actividades, están orientadas a automatizar el mantenimiento de aplicaciones. Esta es una tarea que consume gran cantidad de recursos, por lo que cualquier reducción en el tiempo y recursos empleados en ella supone una importante mejora en la productividad del proceso. Este es el principal objetivo de la reingeniería. Se trata, de analizar el código o el diseño actual y modificarlo con la ayuda de herramientas automáticas para traducirlos a códigos mas estructurados, y más eficientes.
Dentro de la reingeniería, el proceso de pasar del código a una descripción de mas alto nivel es lo que se denomina:


Ingeniería inversa.
La reingeniería e ingeniería inversa prolongan la vida del software.
Dado que es una labor estratégica, es conveniente conocer cuando conviene realizar la tarea de reingeniería para una aplicación y cuándo es más rentable sustituirla e implementar una nueva. Las aplicaciones para el primer paso, son aquellas en la que se produce las siguientes situaciones:
• Fallos frecuentes, que son difíciles de localizar
• Son poco eficientes, pero realizan la función esperada
• Dificultades en la integración con otros sistemas
• Calidad pobre del software final
• Resistencia a introducir cambios
• Pocas personas capacitadas para realizar modificaciones
• Dificultades para realizar pruebas
• El mantenimiento consume muchos recursos
• Es necesario incluir nuevos requisitos, pero los básicos se mantienen.


Desarrollo de software con y para reuso
El desarrollo de software con reúso consiste en desarrollar una aplicación usando software ya existente. Cualquier profesional lo utiliza
El desarrollo de software para reuso consiste en la construcción de un sistema con la intención de reutilizar partes de él en futuros desarrollos. Con software a gran escala, un buen profesional con experiencia puede desarrollarlo.
Estudios realizados determinan que la práctica de reutilización del software en un proyecto aumenta la productividad durante el desarrollo de dicho proyecto.
Sin embargo, la reutilización del software no cubre solo el rehusó de códigos, abarca todo un amplio de posibilidades en los diferentes niveles, metodología, ciclos de vida, planes del proyecto, especificaciones de requisitos, diseños, arquitectura software, planes de validación, juegos de prueba y documentación.
Eficiencia y verificabilidad del software. Otro aspecto que no debe pasar por alto es el de la verificabilidad, puesto que es imprescindible contar con los requerimientos, y sobre todo en aquellos sistemas donde se obtengan resultados que no sean visibles.


Exactitud de los procesos. Un programa no será utilizado por un usuario si sus resultados no son exactos. Tampoco se puede garantizar el uso de un programa que no presta las utilidades que el usuario requiere, es decir, que sea incompleto. Además, un programa ineficiente que no cumpla con los requerimientos de tiempo, memoria o flexibilidad no podrá satisfacer las expectativas de quienes lo utilizan.

No hay comentarios:

Publicar un comentario