domingo, 15 de febrero de 2009

Glosario

¿ Que es el control de calidad del software ?

El control de calidad del software incluye desde el monitoreo de desarrollo de
procesos haciendo respetar los estandares y procedimientos concordados
asegurandose un buen seguimiento de programa y la deteccion y correccion de
errores. El control de calidad del software esta orientado a la prevención.

¿ Que es prueba de software ?
La prueba de software involucra las operaciones del sistema bajo condiciones
controladas y evaluando los resultados.
Las condiciones controladas pueden ser normales o anormales. La prueba
puede intencionalmente esforzar al programa y producir errores en las
respuestas para determinar si los sucesos ocurren cuando no tendrían que
ocurrir o cuando los hechos no suceden cuando deberían suceder.
La prueba de software esta detectada a la deteccion.

Ingeniería de software
es la aplicación práctica del conocimiento científico al diseño y construcción de programas de computadora y a la documentación asociada requerida para desarrollar, operar y mantenerlos. Se conoce también como Desarrollo de Software o Producción de Software ( Bohem, 1976).

¿Qué es Testing?
El Testing es una práctica profesional dentro de la ingeniería de sistemas, que se aplica como parte del proceso de desarrollo, cuyo objetivo principal es verificar el cumplimiento de las especificaciones y requerimientos definidos para un determinado producto o servicio, para aumentar la confianza en los mismos y disminuir los riesgos del proceso de negocio que estos soportan.

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.

Especificación


Es la tarea de describir detalladamente el software a ser escrito, en una forma matemáticamente rigurosa. En la realidad, la mayoría de las buenas especificaciones han sido escritas para entender y afinar aplicaciones que ya estaban desarrolladas. Las especificaciones son más importantes para las interfaces externas, que deben permanecer estables.

Prueba
Consiste en comprobar que el software realice correctamente las tareas indicadas en la especificación del problema. Una técnica de prueba es probar por separado cada módulo del software, y luego probarlo de forma integral, para así llegar al objetivo


MÉTODOS DE CAJA NEGRA

se llevan a cabo sobre la interfaz del software. Los casos de prueba pretenden demostrar que las funciones del software se verifican, que la entrada se acepta de forma adecuada y que se produce una salida correcta, así como que la integridad de la información externa se mantiene.

MÉTODOS DE CAJA BLANCA
se basan en un examen minucioso de los detalles procedimentales para comprobar los diferentes caminos lógicos del software, través de casos de prueba que los recorren.

Referencias

En las direcciones web siguientes, se encontró excelente información:

http://www.monografias.com/trabajos16/objetivos-educacion/objetivos-educacion.html



http://www.monografias.com/trabajos12/romandos/romandos.shtml#PRUEBAS



http://www.monografias.com/trabajos7/sisinf/sisinf.html



http://www.monografias.com/trabajos12/desorgan/desorgan.html



http://siul02.si.ehu.es/alfredo/iso/Calidaddelsoftwarecompleto_final_2006-2007.pdf



http://siul02.si.ehu.es/~alfredo/iso/Tema3.pdf



http://www.ingenierosoftware.com/pruebas/gestionerrores.php



http://es.wikipedia.org/w/index.php?title=Desarrollo_de_software&redirect=no



ftp://ftp.bls.gov/pub/news.release/ocwage.txt



http://iwarrior.uwaterloo.ca/?module=displaystory&story_id=1051&format=html&edition_id=15



En los libros siguientes:
• Libro general sobre Ingeniería del Software:
Ingeniería del Software. Un enfoque práctico.
Roger S. Pressman. MacGraw-Hill, 2001. 5ª Edición.

• Libros sobre UML y proceso unificado de desarrollo de software:
El Lenguaje Unificado de Modelado.
El Proceso Unificado de Desarrollo de Software
Jacobson, Booch, Rumbaugh. Editorial Addison Wesley, 1999

Conclusiones

Todos los elementos anteriormente enumerados indican herramientas que se deben tener en cuenta al momento de desarrollar un software, agrupando en una definición estos elementos se afirma que : Un software debe estar desarrollado "En concordancia con los requisitos funcionales y de rendimiento explícitamente establecidos, con los estándares de desarrollo explícitamente documentados y con las características implícitas que se espera de todo software" , si cumple los aspectos señalados se puede afirmar que se posee un software de calidad.


Teniendo en cuenta esto, se puede afirmar la importancia de la ingeniería de pruebas para validar el control de cada una de las etapas de desarrollo de un programa. Los requisitos del software son la base de las medidas de la calidad.
Los estándares especificados definen un conjunto de criterios de desarrollo que guían la forma en que se aplica la ingeniería del software, Si no se distinguen esos criterios no habrá calidad del software.

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.

Plan De Implementación

PLAN DE CÓMO INPLEMENTARLO EN UNA EMPRESA
La ingeniería de software requiere llevar a cabo numerosas tareas para los cuales se lleva un control de cada etapa, donde cada una de ellas es indispensable para garantizar la verdadera prueba del software dentro de la empresa, las etapas son las siguientes:


Análisis de requisitos
Extraer los requisitos de un producto de software es la primera etapa para crearlo. Mientras que los clientes piensan que ellos saben lo que el software tiene que hacer, se requiere de habilidad y experiencia en la ingeniería de software para reconocer requisitos incompletos, ambiguos o contradictorios. El resultado del análisis de requisitos con el cliente se plasma en el documento ERS, Especificación de Requerimientos del Sistema, cuya estructura puede venir definida por varios estándares, tales como CMM-I. Asimismo, se define un diagrama de Entidad/Relación, en el que se plasman las principales entidades que participarán en el desarrollo del software.

La captura, análisis y especificación de requisitos (incluso pruebas de ellos), es una parte crucial; de esta etapa depende en gran medida el logro de los objetivos finales. Se han ideado modelos y diversos procesos de trabajo para estos fines. Aunque aún no está formalizada, ya se habla de la Ingeniería de Requisitos.
La IEEE Std. 830-1998 normaliza la creación de las Especificaciones de Requisitos Software (Software Requirements Specification).


Especificación
Es la tarea de describir detalladamente el software a ser escrito, en una forma matemáticamente rigurosa. En la realidad, la mayoría de las buenas especificaciones han sido escritas para entender y afinar aplicaciones que ya estaban desarrolladas. Las especificaciones son más importantes para las interfaces externas, que deben permanecer estables.



Diseño y arquitectura
Se refiere a determinar como funcionará de forma general sin entrar en detalles. Consiste en incorporar consideraciones de la implementación tecnológica, como el hardware, la red, etc. Se definen los Casos de Uso para cubrir las funciones que realizará el sistema, y se transforman las entidades definidas en el análisis de requisitos en clases de diseño, obteniendo un modelo cercano a la programación orientada a objetos.


Programación
Reducir un diseño a código puede ser la parte más obvia del trabajo de ingeniería de software, pero no necesariamente es la que demanda mayor trabajo y ni la más complicada. La complejidad y la duración de esta etapa está íntimamente relacionada al o a los lenguajes de programación utilizados, así como al diseño previamente realizado.


Prueba
Consiste en comprobar que el software realice correctamente las tareas indicadas en la especificación del problema. Una técnica de prueba es probar por separado cada módulo del software, y luego probarlo de forma integral, para así llegar al objetivo. Se considera una buena práctica el que las pruebas sean efectuadas por alguien distinto al desarrollador que la programó, idealmente un área de pruebas; sin perjuicio de lo anterior el programador debe hacer sus propias pruebas. En general hay dos grandes formas de organizar un área de pruebas, la primera es que esté compuesta por personal inexperto y que desconozca el tema de pruebas, de esta forma se evalúa que la documentación entregada sea de calidad, que los procesos descritos son tan claros que cualquiera puede entenderlos y el software hace las cosas tal y como están descritas. El segundo enfoque es tener un área de pruebas conformada por programadores con experiencia, personas que saben sin mayores indicaciones en qué condiciones puede fallar una aplicación y que pueden poner atención en detalles que personal inexperto no consideraría.


Documentación
Todo lo concerniente a la documentación del propio desarrollo del software y de la gestión del proyecto, pasando por modelaciones (UML), diagramas, pruebas, manuales de usuario, manuales técnicos, etc; todo con el propósito de eventuales correcciones, usabilidad, mantenimiento futuro y ampliaciones al sistema.
Mantenimiento Mantener y mejorar el software para enfrentar errores descubiertos y nuevos requisitos. Esto puede llevar más tiempo incluso que el desarrollo inicial del software. Alrededor de 2/3 de toda la ingeniería de software tiene que ver con dar mantenimiento. Una pequeña parte de este trabajo consiste en arreglar errores, o bugs. La mayor parte consiste en extender el sistema para hacer nuevas cosas.
La evaluación de un sistema se lleva a cabo para identificar puntos débiles y fuertes. La evaluación ocurre a lo largo de cualquiera de las siguientes dimensiones:

Evaluación operacional
Valoración de la forma en que funciona el sistema, incluyendo su facilidad de uso, tiempo de respuesta, lo adecuado de los formatos de información, confiabilidad global y nivel de utilización.
Impacto organizacional
Identificación y medición de los beneficios para la organización en áreas como finanzas (costos, ingresos y ganancias), eficiencia operacional e impacto competitivo.
- Opinión de los administradores
Evaluación de las actitudes de directivos y administradores dentro de la organización así como de los usuarios finales.
Desempeño del desarrollo
La evaluación del proceso de desarrollo de acuerdo con criterios tales como tiempo y esfuerzo de desarrollo, concuerdan con presupuestos y estándares, y otros criterios de administración de proyectos.
Cuando la evaluación de sistema se conduce en forma adecuada proporciona mucha información que puede ayudar a mejorar la efectividad de los esfuerzos cuando la evaluación de sistemas se conduce en forma adecuada proporciona mucha información que puede ayudar a mejorar la efectividad de los esfuerzos de desarrollo de aplicaciones subsecuentes.
Flujo de información de la ingeniería de pruebas para poner lo en práctica dentro de la empresa
Se proporcionan dos clases de entrada al proceso de prueba:
1.) Configuración del software: * Especificación de requerimientos.
* Documento de Diseño.
* Código fuente.
2.) Configuración de prueba: * Plan y procedimiento de prueba.
* Casos de prueba.
* Resultados esperados.
Se lleva a cabo la prueba y se evalúan los resultados obtenidos frente a los resultados esperados. Si se descubren datos erróneos implica que hay un error y hay que corregirlo y empieza el proceso de depuración de errores.
A medida que se van obteniendo los resultados de la prueba se empieza a disponer de una medida cualitativa de la calidad y fiabilidad del software. Las situaciones posibles que pueden aparecer son:


1.) Se encuentran con regularidad serios errores que requieren modificación en el diseño. La calidad y fiabilidad no parecen ser idóneas.


2.) El funcionamiento del software parece ser correcto y los errores que se detectan son fácilmente corregibles. En ese caso puede suceder que:
La calidad y fiabilidad del software sean aceptables.
Las pruebas son inadecuadas para descubrir serios errores.


3.) La prueba no descubre errores. Puede darse el caso de que no se ha llevado a cabo una prueba correcta y los errores siguen presentes en el software.




Diseño de casos de prueba del Software
Se deben de diseñar métodos de prueba que tengan la mayor probabilidad de encontrar el mayor número de errores con la mínima cantidad de esfuerzo y tiempo. Existen gran cantidad de métodos de diseño de casos de prueba que pretenden garantizar la obtención de un producto correcto. Se clasifican en:


MÉTODOS DE CAJA NEGRA: se llevan a cabo sobre la interfaz del software. Los casos de prueba pretenden demostrar que las funciones del software se verifican, que la entrada se acepta de forma adecuada y que se produce una salida correcta, así como que la integridad de la información externa se mantiene.


MÉTODOS DE CAJA BLANCA: se basan en un examen minucioso de los detalles procedimentales para comprobar los diferentes caminos lógicos del software, través de casos de prueba que los recorren.
Puede parecer que con una prueba de caja blanca profunda se obtendrían programas totalmente correctos ya que se diseñan casos de prueba para recorrer todos los caminos lógicos. Pero hay un problema para poder realizar esta prueba exhaustiva, el número de caminos lógicos de un programa suele ser enorme.
La solución estriba en elegir y recorrer una serie de importantes caminos lógicos y probar las estructuras de datos más importantes.
Lo normal es combinar las pruebas de caja blanca con pruebas de caja negra para garantizar la corrección del software.

Conceptos o Componentes

CONCEPTOS O COMPONENTES
Ingeniería de software es la disciplina o área de la informática que ofrece métodos y técnicas para desarrollar y mantener software de calidad.


Una definición precisa aún no ha sido contemplada en los diccionarios, sin embargo se pueden citar las enunciadas por algunos de los más prestigiosos autores:


1 - Ingeniería de Software es el estudio de los principios y metodologías para el desarrollo y mantenimiento de sistemas software (Zelkovitz, 1978)


2 - Ingeniería de software es la aplicación práctica del conocimiento científico al diseño y construcción de programas de computadora y a la documentación asociada requerida para desarrollar, operar y mantenerlos. Se conoce también como Desarrollo de Software o Producción de Software ( Bohem, 1976).


3 - Ingeniería de Software trata del establecimiento de los principios y métodos de la ingeniería a fin de obtener software de modo rentable, que sea fiable y trabaje en máquinas reales (Bauer, 1972).


4 - Es la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento del software; es decir, la aplicación de la ingeniería al software (IEEE, 1993).


La ingeniería del software pretende utilizar los recursos computacionales de tal manera que se produzcan soluciones eficientes y eficaces a los problemas informáticos, el éxito de un proyecto involucra elementos como la planeación, la administración y la utilización de metodologías de desarrollo de software. A través de la planeación se determinan los recursos necesarios para el desarrollo del proyecto, la factibilidad del mismo y el tiempo estimado de desarrollo; unido a ello con la administración se controla, evalúa y corrige la dirección de acuerdo a las contingencias y demás elementos que se vayan presentando durante el desarrollo; finalmente, a través del uso de una metodología se busca lograr el acople de los participantes y la garantía de una determinada calidad. Debe notarse que las metodologías de desarrollo de software sólo constituyen uno de los mecanismos que actualmente se utilizan para alcanzar software de calidad; no debemos dejar de lado aspectos de la dirección de proyectos que también buscan calidad en el proceso de desarrollo y en el producto final.


Un software de calidad debe ser eficaz, es decir, que debe realizar las funciones establecidas, debe ser amigable. Un usuario debe utilizar el software porque produce resultados confiables, realiza todas las operaciones que se requieren, ejecuta las operaciones en un tiempo aceptado y es fácilmente usado por el grupo de usuarios a quien este dirigido.
Un software de calidad debe ser eficiente, es decir el costo de su desarrollo tomando todos los recursos y el costo de su operación debe ser tal que las organizaciones involucradas en su desarrollo y uso obtengan el máximo beneficio o por lo menos un beneficio aceptable en un período de tiempo establecido.


¿Qué es Testing?
El Testing es una práctica profesional dentro de la ingeniería de sistemas, que se aplica como parte del proceso de desarrollo, cuyo objetivo principal es verificar el cumplimiento de las especificaciones y requerimientos definidos para un determinado producto o servicio, para aumentar la confianza en los mismos y disminuir los riesgos del proceso de negocio que estos soportan.
Todo lo que es importante o pueda implicar algún riesgo, amerita una atención especial y las pruebas de software (Software Testing) o comprobación de las características de un software, son las prácticas más sanas de verificación.


¿Sobre qué se aplica el Testing?
El Software Testing se aplica tanto al desarrollo del software hecho a la medida del cliente, como al genérico, dentro de un proceso que va desde el levantamiento de los requerimientos del cliente, hasta la implantación y operación.


¿Por qué el Software Testing como práctica profesional independiente?
Las pruebas hacen parte del proceso de desarrollo de software y como tales deben ser realizadas por un experto, cuyo único objetivo sea el acompañamiento efectivo dentro del proceso, para la verificación independiente y especializada como garantía de objetividad y de amplitud de observación. El proceso de desarrollo de software tiene riesgos inherentes, especialmente de definición y ejecución. Esto hace, que sin demeritar la calidad de los desarrollos, la verificación o prueba sea una práctica prudente, necesaria y conveniente para la protección de los resultados y para la mitigación de los riesgos.


¿Para quién es el Testing de Software?
El Testing de Software es una práctica sana para todo aquel que desarrolla y/o utiliza software como producto o herramienta para el soporte de sus operaciones. Es así como es útil y necesario tanto para las Empresas del sector productivo, consumidoras o desarrolladoras de sus propios productos de software, como para las Empresas desarrolladoras del software.


Los desafíos asociados al testing

Objetivos

Objetivos de la ingeniería de software
En la construcción y desarrollo de proyectos se aplican métodos y técnicas para resolver los problemas, la informática aporta herramientas y procedimientos sobre los que se apoya la ingeniería de software.
• mejorar la calidad de los productos de software
• aumentar la productividad y trabajo de los ingenieros del software.
• Facilitar el control del proceso de desarrollo de software.
• Suministrar a los desarrolladores las bases para construir software de alta calidad en una forma eficiente.
• Definir una disciplina que garantice la producción y el mantenimiento de los productos software desarrollados en el plazo fijado y dentro del costo estimado.