Problemas y calidad del software

Problemas del software

La ingeniería del software: Trata de ser la respuesta a la crisis y a los problemas del software.


La ingeniería de software se crea debido a las siguientes características:

• El producto debe ser confiable y realizar sólo las tareas especificadas en los requerimientos. 

• El producto debe ser robusto. Esto quiere decir que el software se comporta de manera razonable, incluso en circunstancias no anticipadas desde el principio. 

• El producto de software debe ser lo más reutilizable posible, de manera tal que pueda ser incorporado en otro producto de software si se requiere. 

• El producto de software debe ser eficiente en el uso de los recursos del sistema. 

• Se requiere desarrollar el software en una manera que lo haga evolutivo, de forma tal que se pueda agregar funcionalidad adicional sin efectos perjudiciales. 

• El producto de software debe cumplir con los requerimientos de rendimiento especificados, es decir, debe cumplir algunas de las restricciones relacionadas al rendimiento. 

• El producto de software tendrá mayor valor si es portable, es decir que puede trabajar bajo diferentes plataformas de software y ambientes (hardware, sistemas operativos, etc.). 

• El producto de software debe ser utilizable, es decir, el aprendizaje de su uso debe ser los suficientemente sencillo por parte de personas no especialistas.

Factores que afectan la calidad del software

Algunas deficiencias comunes en el desarrollo de software son:

1. Escasa o tardía validación con el cliente.
2. Inadecuada gestión de los requisitos.
3. No existe medición del proceso ni registro de datos históricos.
4. Estimaciones imprevistas de plazos y costos.
5. Excesiva e irracional presión en los plazos.
6. Escaso o deficiente control en el progreso del proceso de desarrollo.
7. No se hace gestión de riesgos formalmente.
8. No se realiza un proceso formal de pruebas.
9. No se realizan revisiones técnicas formales e inspecciones de código.

Complejidad 

• El sistema es tan complejo que ningún programador puede entenderlo.
• La introducción de una solo corrección de error puede hacer que otro se genere

Cambios 

• La "Entropía" de un sistema de software se incrementa con cada cambio: Cada cambio implementado erosiona la estructura del sistema lo cual hace que el siguiente cambio sea aún más costoso ("Segunda Ley de la Dinámica de Software"). 

• Conforme pasa el tiempo, el costo de implementar un cambio será demasiado alto, y el sistema entonces no podrá soportar la tarea prevista.

Por que el software es tan complejo

El dominio del problema es difícil

El dominio del problema es a veces difícil, simplemente porque no somos expertos en ello.

1. Es decir, puede que no sea un desafío intelectual, sino porque usted no es un experto en ella, hay que aprenderlo.

2. Si unimos esto con el aprendizaje de varios dominios de problemas, y eso es lo que usted tendrá que hacer como ingeniero de software, y el problema se hace evidente.

El proceso de desarrollo es muy difícil de gestionar

Uno de los supuestos que los administradores han hecho en el pasado, es que el desarrollo de software puede ser gestionado como un conjunto de pasos en forma lineal, por ejemplo: Especificación de Requisitos, seguido de Diseño de Sistemas seguido de Ejecución seguido de pruebas y de entrega.

En realidad esto no es tan fácil. Desarrollo de software no se sigue un proceso lineal. Es altamente no lineal. Hay dependencias entre la forma en que se diseña un sistema y la funcionalidad. Por otra parte, y eso hace que sea muy difícil, algunas de estas dependencias no se pueden formular a menos que pruebe el diseño.

Uno de los supuestos que los administradores han hecho en el pasado, es que el desarrollo de software puede ser gestionado como un conjunto de pasos en forma lineal, por ejemplo: Especificación de Requisitos, seguido de Diseño de Sistemas seguido de Ejecución seguido de pruebas y de entrega.

En realidad esto no es tan fácil. Desarrollo de software no se sigue un proceso lineal. Es altamente no lineal. Hay dependencias entre la forma en que se diseña un sistema y la funcionalidad. Por otra parte, y eso hace que sea muy difícil, algunas de estas dependencias no se pueden formular a menos que pruebe el diseño.

El software ofrece una flexibilidad extrema

Podemos cambiar casi todo lo que hemos diseñado en el software. 

Si bien es difícil de cambiar el diseño de una lavadora, es muy fácil de cambiar el programa antes de ejecutarlo.

El software es un sistema discreto (formas particulares de codificación) 

Cuando usted está sentado en un avión en un asiento de la ventana, y oprime un botón para llamar a la azafata para tomar una bebida, no espera que el sistema de un giro y usted termine en la tierra.

Esto puede suceder con los sistemas digitales. Una de las razones:

1.Si bien se puede descomponer el sistema en subsistemas (Azafata, Control de Vuelo), si usted no sigue las buenas reglas de diseño, que podrían haber utilizado alguna variable global para cada uno de estos subsistemas. 

2.Una de estas variables utilizadas por el subsistema de control de vuelo podrían haber sido sobrescritos por el módulo de Azafata.

Comentarios

Entradas más populares de este blog

Tipos Métricas de Software

SWEBOK

Tipos de Sistemas de Información