domingo, 21 de abril de 2013

Página 4. Estructura de datos en C++


  • 1.2.6. Depuración
La depuración es el proceso de fijación o localización de errores. La detección de una entrada de prueba que produce un error es sólo parte del problema de prueba y depuración. Después de que se encuentra una entrada de prueba errónea se debe determinar exactamente por qué ocurre el error y, a continuación, depurar el programa. Una vez que se ha corregido un error debe volver a ejecutar el programa.

En programas sencillos la depuración se puede realizar con mayor o menor dificultad, pero en programas grandes el seguimiento (traza o rastreo) de errores es casi imposible sin ayuda de una herramienta de software denominada depurador (debugger). Un depurador ejecuta el código del programa línea a línea, o puede ejecutar el código hasta que se produzca una cierta condición. El uso de un depurador puede especificar cuáles son las condiciones que originan la ejecución anómala de un programa. Los errores más frecuentes de un programa son:

  • Errores de sintaxis: faltas gramaticales de la sintaxis del lenguaje de programación.
  • Errores de tiempo de ejecución: se producen durante la ejecución del programa.
  • Errores lógicos: normalmente errores de diseño del algoritmo.
EJEMPLOS

Errores de sintaxis:          double presupuesto //error, falta el ;
                   cin presupuesto;   //error, falta >>
Error de ejecución:          Cálculo de división por cero, obtener raíces de números negativos,
                   valores fuera de rango.
Error lógico:                      Mal planteamiento en el diseño de un algoritmo.
  • 1.2.7. Documentación
El desarrollo de software requiere un gran esfuerzo de documentación de las diferentes etapas. En la práctica, mucho de los documentos clave (críticos) se crean durante las fases de análisis, diseño, codificación y prueba. La documentación completa del software presenta todos los documentos en un manual que sea útil a los programadores y a su organización.

Aunque el número de documentos puede variar de un proyecto a otro, y de una organización a otra, esencialmente existen cinco documentos imprescindibles en la documentación final de un programa:

  1. Descripción del problema (especificaciones).
  2. Cambio y desarrollo de algoritmos.
  3. Listados de programas, bien comentados.
  4. Ejecución de las pruebas de muestra.
  5. Manual del usuario.
La documentación del software comienza en la fase de análisis y especificación del problema y continua en la fase de mantenimiento y evolución.
  • 1.2.8. Mantenimiento
Una vez que el software se ha depurado completamente y el conjunto de programas, biblioteca de funciones y clases, etc., se han terminado y funciona correctamente, el uso de los mismos se puede extender en el tiempo durante grandes períodos (normalmente meses o años).

La fase de mantenimiento del software esta relacionada con corrección futura de problemas, revisión de especificaciones, adición de nuevas características, etc. El mantenimiento requiere, normalmente, un esfuerzo importante ya que si bien el desarrollo de un programa puede durar, días, meses, años, el mantenimiento se puede extender a años e incluso décadas. Un ejemplo típico estudiado en numerosos cursos de ingeniería de software fue el esfuerzo realizado para asegurar que los programas existentes funcionan correctamente al terminar el siglo XX conocido como el efecto del año 2000.

Estadísticamente está demostrado que los sistemas de software, especialmente los desarrollados para resolver problemas complejos presentan errores que no fueron detectados en las diferentes pruebas y que se detectan cuando el software se pone en funcionamiento de modo comercial o profesional. La reparación de estos errores es una etapa importante y muy costosa del mantenimiento de un programa.

Además de estas tareas de mantenimiento existen muchas otras tareas dentro de esta etapa: "mejoras en la eficiencia, añadir nuevas características (por ejemplo, nuevas funcionalidades), cambios en el hardware, en el sistema operativo, ampliar número máximo de usuarios...", otros cambios pueden venir derivados de cambios de normativas legales, en la organización de la empresa, en la difusión del producto a otros países, etc.

Estudios de la ingeniería del software demuestran que el porcentaje de presupuesto de un proyecto software y del tiempo de programador/analista/ingeniero de software ha ido creciendo por décadas. Así en la década de los setenta, se estimaba el porcentaje de mantenimiento entre un 35-40 por 100, en la década de los ochenta, del 40 al 60 por 100, y se estima que en la década actual del siglo XXI, puede llegar en aplicaciones para la web, videojuegos, software de inteligencia de negocios, de gestión de relaciones con los clientes (CRM), etc., hasta un 80 o 90 por 100 del presupuesto total del desarrollo de un producto software.

Por lo anterior, es muy importante que los programadores diseñen programas legibles, bien documentados y bien estructurados, bibliotecas de funciones y de clases con buena documentación, de modo que los programas sean fáciles de comprender y de modificar y en consecuencia fáciles de mantener. 


  • 1.3. CALIDAD DEL SOFTWARE

El software de calidad debe de cumplir con las siguientes características:

Corrección: Capacidad de los productos de software de realizar exactamente las tareas definidas por su especificación.

Legibilidad y comprensibilidad: Un sistema debe ser fácil de leer y lo más sencillo posible. Estas características se ven favorecidas con el empleo de abstracciones, sangrado y uso de comentarios.

Extensibilidad: Facilidad que tienen los productos de adaptarse a cambios en su especificación. Existen dos principios fundamentales para conseguir esto, diseño simple y descentralización.

Robustez: Capacidad de los productos software de funcionar incluso en situaciones anormales.

Eficiencia: La eficiencia de un software es su capacidad para hacer un buen uso de los recursos del computador. Un sistema eficiente es aquél cuya velocidad es mayor con el menor espacio de memoria ocupada. Las grandes velocidades de los microprocesadores (unidades centrales de proceso) actuales, junto con el aumento considerable de las memorias centrales (cifras típicas usuales superan siempre 1-4 GB), hacen que disminuya algo la importancia concedida a ésta, debiendo existir un compromiso entre legibilidad, modificabilidad y existencia.

Facilidad de uso: La utilidad de un sistema está relacionada con su facilidad de uso. Un software es fácil de utilizar cuando el usuario puede comunicarse con él de manera cómoda.

Transportabilidad (portabilidad): La transportabilidad o portabilidad es la facilidad con la que un software puede ser transportado sobre diferentes sistemas físicos o lógicos.

Verificabilidad: La verificabilidad, "facilidad de verificación" de un software, es su capacidad para soportar los procedimientos de validación y de aceptar juegos de test o ensayo de programas.

Reutilización: Capacidad de los productos de ser reutilizados, en su totalidad o que en parte, en nuevas aplicaciones.

Integridad: La integridad es la capacidad de un software para proteger sus propios componentes contra los procesos que no tengas el derecho de acceso.

Compatibilidad: Facilidad de los productos para ser combinados con otros y usados en diferentes plataformas hardware o software.







No hay comentarios:

Publicar un comentario