Documentos de Académico
Documentos de Profesional
Documentos de Cultura
IMPLEMENTACION
5.1.1 CARACTERISTICAS.
Los lenguajes de programacin son un vehculo entre los humanos y las computadoras. Las
caractersticas de ingeniera de un lenguaje tienen un impacto importante sobre el xito de un proyecto de
desarrollo de software. Las caracterstics tcnicas pueden influenciar la calidad del diseo. A continuacin se
manifiestan algunas de ellas:
Uniformidad: indica el grado en que un lenguaje usa una notacin consistente, aplica restricciones
aparentemente arbitrarias incluye excepciones a reglas sintcticas semnticas. Ejemplo: uso de parntesis y
corchetes.
Ambigedad: de un lenguaje es percibida por el programador. Un compilador siempre interpreta una
sentencia de una nica forma, pero el lector humano puede interpretar la sentencia de formas diferentes ( sobre
todo aritmticas ).
Compacto: es un indicativo de la cantidad de informacin orientada al cdigo que se debe retener en
la memoria humana. Entre los atributos del lenguaje que miden lo compacto que es, se encuentran: el grado en
que soporta construcciones estructuradas, los tipos de palabras clave y abreviaturas utilizadas, la variedad de
tipos de datos y caractersticas implcitas, el nmero de operadores aritmticos y lgicos, el nmero de
funciones incorporadas.
La memoria y reconociiento humano se pueden dividir en campos sinesttico y secuencial. La
memoria sinesttica nos permite recordar y reconocer las cosas como un todo (cara). La memoria secuencial
proporciona una forma de reconocer el siguiente elemento de una secuencia (cancin).
Localizacin: es caracterstica sinesttica de un lenguaje, se potencia cuando las sentencias se pueden
combinar en bloques, cuando las construcciones estructuradas se pueden implementar directamente y cuando el
diseo y el cdigo resultante son altamente modulares y cohesivos. Una caracterstica que viola la localizacin
es aquella que aporta o induce al manejo de excepciones.
Linealidad: se asocia con el concepto de mantenimiento de un
mbito funcional. Da facilidad al encontrarse secuencias lineales de operadores lgicos.
Tradicin: afecta la capacidad de aprender un nuevo lenguaje, asi como al grado de innovacin
durante el diseo de un lenguaje de programacin.
5.1.2 FUNDAMENTOS.
Un planteamiento de ingeniera del software sobre las caractersticas de los lenguajes de programacin
se centra en las necesidades que puede tener un proyecto especfico de desarrollo de software. Se puede
establecer el siguiente conjunto:
(1) facilidad de traduccin del diseo al cdigo: proporciona una indicacin de como se aproxima un lenguaje a
la representacin del diseo.
(2) eficiencia del compilador.
(3) portabilidad del cdigo fuente: considera si el cdigo fuente puede ser transportado de un procesador a otro
y un compilador a otro, sin ninguna o pocas modificaciones; si el cdigo fuente permanece inalterado cuando
cambia su entorno de funcionamiento (nuevo sistema operativo); si el cdigo fuente puede ser integrado en
diferentes paquetes de software sin requerir modificacin.
(4) disponibilidad de herramientas de desarrollo: puede acortar el tiempo requerido para la generacin del
cdigo fuente y puede mejorar la calidad del cdigo.
(5) facilidad de mantenimiento.
Entre los criterios para la eleccin de un lenguaje de programacin para un proyecto especfico se
tienen:
(1) Area de aplicacin general.
(2) Complejidad algortmica y computacional.
(3) Entorno en el que se ejecutar el software.
(4) Consideraciones de rendimiento.
(5) Complejidad de las estructuras de datos.
(6) Conocimiento de la plantilla de desarrollo de software.
(7) Disponibilidad de un buen compilador.
La calidad de un diseo de software viene dada por su independencia de las caractersticas de los lenguajes de
programacin. Sin embargo, los atributos del lenguaje juegan su papel en la calidad de un diseo acabado y
afectan a la forma de especificar el diseo.
5.1.3 EFICIENCIA.
En los sistemas catalogados como buenos bajo el punto de vista de ingeniera, existe una tendencia
natural a usar los recursos crticos de forma eficiente. Los ciclos del procesador y las posiciones de memoria, a
menudo, se tratan como recursos crticos y el paso de codificacin se considera el ltimo punto donde se le
pueden arrancar segundos o bits al software.
Aunque la eficiencia es un fin recomendable, se deben establecer tres mximas. En primer lugar, la
eficiencia es un requisito de rendimiento y, como tal, se debe establecer durante el anlisis de requerimientos.
El software debe ser tan eficiente como se requiera, no tan eficiente como sea humanamente posible.
En segundo lugar, la eficiencia se incrementa con un buen diseo. En tercer lugar, la eficiencia del
cdigo y la simplicidad del mismo van de la mano. En general, no sacrificar la claridad, legibilidad o correccin
en pos de una mejor eficiencia no esencial.
EFICIENCIA EN CODIGO:
Esta directamente unida a la eficiencia de los algoritmos definidos durante el diseo detallado. Algunas
directrices a seguir son:
* Simplificar las expresiones aritmticas y lgicas antes de convertirlas en cdigo.
* Evaluar cuidadosamente los bucles anidados para determinar si se pueden sacar fuera de ellos algunas
sentencias o expresiones.
* Cuando sea posible, evitar el uso de arreglos multidimensionales.
* Cuando sea posible, evitar el uso de apuntadores y listas complejas.
* Usar "rpidas" operaciones aritmticas.
* No mezclar tipos de datos, aunque el lenguaje lo permita.
* Usar, cuando sea posible, aritmtica entera y expresiones lgicas.
EFICIENCIA EN MEMORIA:
EFICIENCIA EN LA ENTRADA/SALIDA:
La entrada suministrada por un usuario y salida producida para un usuario son eficientes cuando la
informacin se puede suministrar o se puede comprender con el mnimo esfuerzo intelectual.
La eficiencia de E/S dirigida a otros dispositivos es un tema complejo, mas hay que tomar en cuenta
los siguientes puntos: debe minimizarse el nmero de peticiones de E/S ; toda E/S debe tratarse con buffer para
reducir embotellamiento en la comunicacin; para memorias secundarias debe seleccionarse y usar el mtodo
de acceso ms simple dentro de los aceptables; E/S a memoria secundaria debe hacerse por bloques; E/S a
impresoras debe tener en cuenta las posibilidades del dispositivo que puedan afectar la calidad o a la velocidad.
5.2 TECNICAS DE PRUEBAS DE SOFTWARE.
Por lo tanto hay que disear pruebas que saque a la luz diferentes clases de errores, hacindolo con la
menor cantidad de tiempo y esfuerzo. Inclusive tiene como ventaja ver hasta qu punto las funciones parecen
funcionar de acuerdo con las especificaciones y cumplir as los requisitos de rendimiento. Las tcnicas se
fundamentas en los siguientes principios:
(1) A todas las pruebas se les debera poder hacer un seguimiento hasta los requisitos del cliente
(2) Las pruebas deberan planificarse mucho antes de que empiecen
(3) Las pruebas deberan empezar por lo "pequeo" y progresar hacia "lo grande" ( mdulos )
(4) No son posibles las pruebas exhaustivas ( imposible ejecutar todas las combinaciones de
caminos )
(5) Pasa ser mas eficaces, las pruebas deberian ser realizadas por un equipo independiente
La facilidad de prueba es la facilidad con que se puede probar un programa de computadora. Las
caractersticas que llevan a un software fcil de probar son:
(a) Operatividad: cuanto mejor funcione, mas eficentemente se puede probar, el sistema tiene pocos
errores, ningun error bloquea la ejecucin de pruebas
(b) Observabilidad: lo que ves es lo que pruebas, se genera una salida distinta para cada entrada, los
estados y variables estan visibles y se pueden consultar durante la ejecucion, un resultado incorrecto se
identifica fcilmente, se informa de los errores internos, el codigo fuente es accesible
(c) Controlabilidad: cuanto mejor podamos controlar el software, mas se puede automatizar y optimizar,
todos los resultados posibles se generan con alguna combinacion de entrada, los formatos de entrada y
resultados son consistentes y estructurados, las pruebas se pueden automatizas
(d) Capacidad de descomposicin : controlando el ambito de las pruebas podemos aislas los problemas y
llevar a cabo mejores pruebas, modularidad, se pueden probar independientemente
(e) Simplicidad : cuanto menos haya que probar, mas rapidamente podremos probarlo, minimo de
caracteristicas para cumplir con los requisitos, ( funcional, estructural y codigo )
(f) Estabilidad: cuanto menos cambios, menos interrupciones a las pruebas, los cambios son
infrecuentes, controlados y no invalidan las pruebas existentes, el software se recupera bien de los
fallos
(g) Facilidad de comprensin : cuanta mas informacion tengamos, mas inteligentes seran las pruebas,
entendible el diseo, las dependencias, la documentacin, si es especifica, detallada y exacta
Cualquier producto puede probarse de una de estas dos formas : conociendo la funcin especfica
para la que fue diseado el producto llevando a cabo pruebas que demuestren que cada funcin es operativa y
conociendo el funcionamiento del producto llevando a cabo pruebas que aseguren que todas las piezas encajen.
El software debe probarse desde dos perspectivas diferentes:
(1) la lgica interna del programa utilizando tcnicas de diseo de casos de prueba de "caja blanca"
(2) los requisitos del software utilizando tcnicas de diseo de casos de prueba de "caja negra"
5.2.3.1 PRUEBA DE LA CAJA BLANCA.
Se basa en el minucioso examen de los detalles procedimentales, de los caminos lgicos. Utiliza la
estructura de control del diseo procedural para derivar los casos de prueba. Este mtodo obtiene
casos de prueba que:
* garanticen que se ejercitan por lo menos una vez todos los caminos independientes de cada mdulo.
* ejerciten todas las decisiones lgicas en sus vertientes verdadera y falsa.
* ejecuten todos los bucles en sus lmites y con sus lmites operacionales.
* y ejerciten las estructuras internas de datos para asegurar su validez.
Se proporcionan dos entradas al proceso de prueba: la configuracin del software que incluye la
especificacin de requisitos del software, especificacin del diseo y el cdigo fuente; y la configuracin de
prueba que incluye un plan y procedimiento de prueba, algunas herramientas de prueba y casos de prueba con
resultados esperados.
Se llevan a cabo las pruebas y se evalan los resultados. Al descubrir datos errneos comienza la
depuracin. Si se encuentran con regularidad serios errores requiere modificaciones en el diseo siendo
necesarias posteriores pruebas. Si el funcionamiento parece ser correcto y los errores son fcilmente
corregibles, se puede obtener una de dos conclusiones: la calidad y la fiabilidad del software son aceptables,
las pruebas son inadecuadas para descubrir errores serios. Si no se descubren errores, los defectos sern
eventualmente descubiertos por el usuario y corregidos durante la fase de mantenimiento (60-100% mayor
costo).
5.3 ESTRATEGIAS DE PRUEBAS DE SOFTWARE.
El proceso de ingeniera del software se puede ver como una espiral. Inicialmente, la ingeniera del
sistema define el papel del software y conduce al anlisis de requisitos, donde se establece el campo de
informacin, la funcin, el comportamiento, el rendimiento, las restricciones y criterios de validacin del
software. Al movernos hacia adentro de la espiral, llegamos al diseo y por ltimo a la codificacin.
Las pruebas del software aplican similar estrategia moviendonos de adentro hacia afuera de la espiral.
la prueba de unidad comienza en el vrtice de la espiral y se centra en cada unidad del software, tal como est
implementada en cdigo fuente. La prueba avanza para llegar a la prueba de integracin, donde el foco de
atencin es el diseo y construccin de la arquitectura del software. Otra vuelta hacia afuera encontramos la
prueba de validacin, donde se validadn los requisitos establecidos como parte del anlisis de requisitos del
software, comparndolos con el sistema que ha sido construido. Finalmente, llegamos a la prueba del sistema
en la que se prueban como un todo el software y otros elementos del sistema.
La prueba de unidad centra el proceso de verificacin en la menor unidad del diseo: el mdulo.
Usando la descripcin del diseo detallado como gua, se prueban los caminos de control importantes, con el
fin de descubrir errores dentro del mdulo.
Se prueba la interface para asegurar que la informacin fluye de forma adecuada hacia y desde la
unidad del programa que est siendo probada. Se examinan las estructuras de datos locales para asegurar que
los datos que se mantienen temporalmente conservan su integridad durante la ejecucin del algoritmo. Se
prueban las condiciones lmite para asegurar que el mdulo funciona correctamente con los lmites
establecidos. Se ejercitan todos los caminos independientes de la estructura de control para asegurar que todas
las sentencias del mdulo se ejecuten por lo menos una vez. Y finalmente se prueban todos los caminos de
manejo de errores.
Si todos los modulos funcionan bien por qu dudar de que funcionen bien juntos ?. El problema es
"ponerlos juntos". La prueba de integracin detecta errores de interaccin. El procedimiento adecuado se llama
integracin incremental con el cual se construye y se prueba en pequeos segmentos en los que los errores
son ms fciles de aislar y corregir.
Un plan general de integracin y una descripcin de las pruebas especficas deben quedar
documentados en una especificacin de prueba, es parte esencial del proceso de ingeniera de software y
forma parte de la configuracin del software.
I. Alcance de la prueba.
II. Plan de prueba.
A. Fases de prueba.
B. Agenda.
C. Software adicional.
D. Entorno y recursos.
III. Procedimiento de prueba N.
A. Orden de integracin.
1. Propsito.
2. Mdulos a ser probados.
B. Pruebas de unidad para los mdulos de la subfase.
1. Descripcin de pruebas para el mdulo M.
2. Descripcin del software adicional.
3. Resultados esperados.
C. Entorno de prueba.
1. Herramientas o tcnicas especiales.
2. Descripcin del software adicional.
D. Datos de los casos de prueba.
E. Resultados esperados para la subfase N.
IV. Resultados de prueba obtenidos.
V. Referencias.
VI. Apndices.
Una vez ensamblado como paquete probamos la validacin, la cual se logra cuando el software
funciona de acuerdo con las expectativas razonables del cliente. Estas espectativas estn definidas en la
especificacin de requisitos que describe los atributos del software visibles al usuario, basado en los criterios de
validacin de dicho documento.
La prueba de validacin se lleva a cabo con pruebas de la caja negra que demuestran la conformidad
con los requisitos. Una vez probado cada caso pueden darse dos condiciones: las caractersticas de
funcionamiento de rendimiento estn de acuerdo con las especificaciones y son aceptables, se descubre una
desviacin de las especificaciones y se crea una lista de deficiencias.
Se pueden realizar pruebas alfa beta, la prueba alfa es conducida por un cliente en el lugar de
desarrollo; la prueba beta en uno ms lugares de clientes y usuarios finales. Como resultado el equipo de
desarrollo de software lleva a cabo modificaciones y as prepara una versin del producto de software para toda
la base de clientes.
La prueba del sistema es constituida por una serie de pruebas diferentes cuyo propsito es ejercitar
profundamente el sistema basado en computadora. Entre pruebas de sistema tenemos:
Prueba de recuperacin: forza el fallo del software de muchas formas y verifica que la recuperacin
se lleva a cabo apropiadamente. Se evala la correccin de reinicializacin, mecanismos de recuperacin del
estado del sistema, recuperacin de datos y rearranque.
Prueba de seguridad: intenta verificar que los mecanismos de proteccin del sistema lo protegern
adecuadamente.
Prueba de resistencia: est diseada para enfrentar a los programas con situaciones anormales, es
decir, ejecuta un sistema de forma que demande recursos en cantidad, frecuencia volmenes anormales. Una
variacin de esta prueba es la prueba de sensibilidad, utilizando datos que produzcan inestabilidad
procesamiento incorrecto.
Prueba de rendimiento: prueba el rendimiento del software en tiempo de ejecucin. Se da en todos
los pasos del proceso de prueba.
VI. TOPICOS DE INGENIERIA DE SOFTWARE
6.1 MANTENIMIENTO.
6.1.3 MANTENIBILIDAD.
Se define como la facilidad de comprender, corregir, adaptar y/o mejorar el software: facilidad de
mantenimiento.
Gilb da un nmero de mtricas de facilidad de mantenimiento relacionadas con el esfuerzo gastado durante el
mantenimiento:
1. Tiempo de reconocimiento del problema.
2. Tiempo de retraso administrativo.
3. Tiempo de recoleccin de herramientas de mantenimiento.
4. Tiempo de anlisis del problema.
5. Tiempo de especificacin de los cambios.
6. Tiempo activo de correccin ( modificacin ).
7. Tiempo de prueba local.
8. Tiempo de prueba global.
9. Tiempo de revisin del mantenimiento.
10. Tiempo total de recuperacin.
Adems de stas medidas orientadas al tiempo, se puede medir indirectamente considerando medidas
de la estructura del diseo y mtricas de la complejidad del software.
6.1.4 OPERACIONES DE MANTENIMIENTO.
Las operaciones tareas asociadas con el mantenimiento comienzan mucho ants de que se haga una
peticin de mantenimiento. Inicialmente se debe establecer una organizacin de mantenimiento; se deben
prescribir procedimientos de evaluacin y de informacin, y se debe definir una secuencia estndar de sucesos
para cada peticin de mantenimiento. Adems debe establecerse un sistema de registro de informacin de las
actividades de mantenimiento y definir criterios de revisin y de evaluacin.
La documentacin del diseo y una cuidadosa prueba de regresin ayudan a eliminar errores, pero
seguirn apareciendo efectos secundarios del mantenimiento.
Efectos secundarios sobre el cdigo: un subprograma eliminado cambiado, eliminacin
modificacin de una sentencia de etiqueta, eliminacin modificacin de un identificador, cambios para
mejorar el rendimiento en ejecucin, modificacin de operadores lgicos, cambios sobre las pruebas de lmites.
Efectos secundarios sobre los datos: redefinicin de constantes locales globales, redefinicin de
formatos de registros de archivos, aumento disminucin del tamao de arreglos de otras estructuras de
datos de mayor orden, modificacin de datos globales, reinicializacin de indicadores de control de
apuntadores, reorganizacin de argumentos de E/S de subprogramas.
Efectos secundarios sobre la documentacin: siempre que se haga un cambio en el flujo de datos,
arquitectura, procedimientos sistema, debe actualizarse la documentacin tcnica de soporte.
El resultado del proceso de ingeniera de software es una informacin que se puede dividir en tres
categoras (1) programas de computadora; (2) documentos que describen los programas y (3) estructuras de
datos.
Los elementos que componen toda la informacin producida como parte del proceso de ingeniera del
software se denominan colectivamente configuracin del software. En forma ms realista un Elemento de
Configuracin del Software (ECS) es un documento, un conjunto completo de casos de prueba un
componente de programa identificado.
Por lo tanto los siguientes ECS son el objeto de las tcnicas de gestin de configuraciones y forman un
conjunto de lneas base:
Construir diversos diseos de software en base a un Proyecto Propuesto por el alumno durante el
curso, aplicando diferentes tcnicas de diseo y realizando la documentacin adecuada.
6.2 CALIDAD.
Los factores que afectan a la calidad del software se pueden clasificar en dos grandes grupos:
Correctividad: el grado en que un programa satisface sus especificaciones y consigue los objetivos de la
misin encomendada por el cliente.
Fiabilidad: el grado en que se puede esperar que un programa lleva a cabo sus funcionese esperadas con la
precisin requerida.
Eficiencia: la cantidad de recursos de computadora y de cdigo requeridos por un programa para llevar a cabo
sus funciones.
Integridad: el grado en que puede controlarse el acceso al software o a los datos, por personal no autorizado.
Facilidad de Uso: el esfuerzo requerido para aprender un programa, trabajar con l, preparar su entrada e
interpretar su salida.
Facilidad de prueba: el esfuerzo requerido para probar un programa de forma que se asegure que realiza su
funcin requerida.
Portabilidad: El esfuerzo requerido para transferir el programa desde un hardware y/o un entorno de sistemas
de software a otro.
Es difcil medir los factores anteriores por lo que McCall propone una serie de mtricas: facilidad de
auditora, exactitud, normalizacin de las comunicaciones, completitud, concisin, consistencia,
estandarizacin en los datos, tolerancia de errores, eficiencia en la ejecucin, facilidad de expansin,
generalidad, independencia del hardware, modularidad, facilidad de operacin, seguridad, autodocumentacin,
simplicidad, independencia del sistema de software, facilidad de traza, formacin.
Las revisiones son un "filtro" para el proceso de ingeniera de software. El beneficio de las revisiones
es el descubrimiento rpido de los defectos del software. Los objetivos de la revision tcnica formal (RTF) son: