Vous êtes sur la page 1sur 59

PRIMERA EDICIN: 2008

ASOCIACIN ESPAOLA PARA LA CALIDAD


Claudio Coello 92
28006 Madrid
www.aec.es
publi@aec.es
ISBN: 978-84-691-6898-1
Este librose publica bajo licencia Creative Commons del tipo:
Reconocimiento-NoCormercial-SinObraDerivada.
Se permite su copia y distribucin por cualquier medio siempre que mantenga el
reconocimiento de sus autores, no se haga uso comercial de las obras y no realice
ninguna modificacin de ellas.
La licencia completa puede consultarse en:
http://creativecommons.org/licenses/by-nc-nd/2.5/es/legalcode.es
Comit de Confiabilidad
- 3 -
PRESENTACIN
Esta publicacin se enmarca dentro de las actividades que realiza el Comit de Confiabilidad de la
Asociacin Espaola para la Calidad (AEC) en su afn de divulgar los conocimientos de este campo de la
ingeniera.
El concepto de Confiabilidad, entendida sta como la integracin conjunta de las caractersticas de
Fiabilidad, Disponibilidad, Mantenibilidad y Seguridad de un dispositivo, es aplicable a cualquier tipo de
componente, equipo, sistema o instalacin.
Cada da ms, el software constituye un elemento bsico en la configuracin de los ms diversos
dispositivos, siendo primordial en muchos casos. Su papel operativo es relevante en la automocin, la ae-
ronutica, las instalaciones energticas y la prctica totalidad de los sectores industriales. Las funciones en-
comendadas al software tambin son significativas en trminos de criticidad: control, optimizacin,
seguridad, etc.
Sus especiales caractersticas requieren que los conceptos generales y los mtodos de anlisis de
la Ingeniera de Confiabilidad deban adaptarse de forma apropiada con el fin de disponer de un cuerpo
metodolgico que sea aplicable eficazmente para el desarrollo de sistemas informticos confiables.
El profesor Lus Fernndez Sanz, especialista en este campo, colabor con el Comit de Confia-
bilidad de la AEC, impartiendo un tutorial sobre la Calidad del Software en el VIII Congreso de Confiabilidad,
organizado por dicho Comit, que constituy la base documental para la elaboracin de la presente publi-
cacin.
A lo largo de esta obra y entre otros aspectos, se analizan los conceptos de defecto, error y fallo
aplicados al software, los atributos que confieren Confiabilidad al mismo, los medios que se deben emplear
para conseguir los niveles adecuados de Confiabilidad, as como el concepto de Calidad del Software y sus
mtricas asociadas.
Con el deseo de que esta publicacin contribuya, desde la humildad con la que debe plantearse
cualquier accin humana, a ampliar la inacabable senda del conocimiento y desde el agradecimiento al
autor por su meritorio y ejemplar esfuerzo, les presentamos esta publicacin.
Siguiendo nuestro deseo de mejora continua, la AEC est interesada en conocer su opinin, comen-
tarios o sugerencias acerca de esta publicacin. Para ello, no dude en enviarnos todos sus comentarios a
la siguiente direccin de correo electrnico: publi@aec.es.
Antonio Jos Fernndez Prez
Presidente del Comit de Confiabilidad
Doctor Ingeniero Industrial
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 4 -
NDICE
1. Introduccin 7
1.1 Definiciones sobre amenazas: defectos, errores y fallos 9
1.2 Atributos de la confiabilidad 13
1.3 Peculiaridades del software 17
2. Medios para obtener la confiabilidad del software 17
2.1 Prevencin de defectos 17
2.2 Tolerancia de defectos 18
2.3 Eliminacin de defectos 20
2.4 Prediccin de defectos 23
2.4.1 Modelos de fiabilidad 26
3. Calidad en el desarrollo del software 31
3.1 Mejora en los recursos humanos 32
3.2 Evolucin y mejora tecnolgica 33
3.3 Mejora de procesos de desarrollo 34
3.4 Mejora de procesos de aseguramiento de calidad de software 36
4. Algunas consideraciones adicionales 53
5. Referencias 55
6. Sobre el autor 59
Comit de Confiabilidad
- 5 -
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 6 -
1. INTRODUCCIN
El concepto de confiabilidad es habitual en los diversos sectores industriales y tambin en el mbito
del diseo y desarrollo de sistemas. Sin embargo, no ha sido tan ampliamente aplicado en una gran parte
del desarrollo de software ya que slo ciertos sectores que trabajan con sistemas crticos (por ejemplo, el
aeroespacial, el de defensa, el de transporte, etc.) han profundizado en el anlisis de la dependability y de
las tcnicas especficas para su consecucin y evaluacin. Desde el punto de vista de la ingeniera del
software se suele integrar cualquiera de las caractersticas relacionadas con la bondad del producto bajo
el mbito de la calidad del software. No obstante, el concepto de confiabilidad (dependability) no se ha
establecido como concepto diferenciado en los diccionarios de trminos de ingeniera de software o en los
modelos de evaluacin de calidad mediante rboles de descomposicin de caractersticas. As, el estndar
IEEE Std. 610 [1] no contempla el trmino dependability. En cuanto a los modelos de calidad estandarizados
como ISO 9126 [2] (y, por supuesto, ISO 14598 [3]) no se opta por la caracterstica de confiabilidad sino
que, como factor de primer nivel, se menciona la fiabilidad (reliability).
En general, se toma como referencia la obra de J.C.Laprie [4] a la hora de definir y establecer los
principios de la confiabilidad en el software. As, se define confiabilidad como la propiedad de un sistema
informtico que nos permite tener justificadamente confianza sobre el servicio que proporciona. En el
trabajo de Avizienis et al. [5] se aclara que dicho servicio es el comportamiento del sistema tal como el
usuario lo percibe bien sea una persona, otra aplicacin o sistema que interacta mediante la interfaz.
Se considera que el adjetivo confiable abarca varios aspectos:
Respecto de estar preparado para el uso, significa disponible (availability).
Respecto de continuidad de servicio, significa fiable (reliable).
Respecto de eludir consecuencias catastrficas, significa fuera de peligro (safe)
Respecto de la prevencin de acceso y/o manejo de informacin no autorizados, significa seguro
(secure).
- 7 - Comit de Confiabilidad
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 8 -
En cuanto al desarrollo de sistemas informticos confiables supone la utilizacin combinada de un
conjunto de mtodos que abarcan:
Prevencin de la ocurrencia o introduccin de defectos.
Tolerancia a fallos o cmo proporcionar el servicio especificado a pesar de los defectos
Eliminacin de defectos o cmo reducir la presencia (gravedad o nmero) de los mismos.
Prediccin de defectos o cmo estimar el nmero actual, la incidencia futura y las consecuencias
de los defectos.
En algunos casos, se suele resumir el mbito de la confiabilidad con el siguiente diagrama de
Avizienis et al. [5] incluyendo algunos detalles ms en cuanto a caractersticas:
Figura 1. Esquema de definicin de la confiabilidad de sistemas informticos
Comit de Confiabilidad - 9 -
1.1 Definiciones sobre amenazas: defectos, errores y fallos
Para una correcta comprensin de este esquema es fundamental tener claras las definiciones de,
y las posibles diferencias entre, algunos de los conceptos que se incluyen. As, debemos contar con que el
servicio correcto se proporciona al usuario cuando l mismo implementa las funciones requeridas por el
usuario, es decir, los objetivos de accin del sistema que deben estar recogidos en su especificacin.
Un fallo del sistema es un acontecimiento que ocurre cuando el sistema se desva del servicio
correcto
1
. Esta desviacin puede producirse por no cumplir la especificacin acordada o porque la
especificacin no describe correctamente la funcin requerida por el usuario. En el glosario IEEE
Std. 610 [1] se matiza la definicin indicando que el fallo es la incapacidad de un sistema o
componente para realizar las funciones requeridas dentro de los requisitos de rendimiento
especificados.
Error es la parte del estado del sistema que puede causar el correspondiente fallo: el fallo ocurre
cuando el error alcanza la interfaz y altera el servicio. En el glosario del IEEE [1] se define defecto
como un defecto en un hardware o dispositivo (por ejemplo, un cortocircuito o un cable roto) o
como paso, proceso o definicin de datos incorrecta en un programa o software.
El defecto (fault) es la causa comprobada o hipottica de un error. Un defecto est activo cuando
produce un error; en caso contrario, est aletargado.
Tambin se comenta en el glosario del IEEE [1] la distincin entre accin humana (error como
meter la pata
2
: mistake), su manifestacin en el sistema (defecto: fault, defect
3
), las consecuencias de un
defecto (fallo: failure) y el grado de desviacin por el cual el resultado es incorrecto (error: error). Se puede
ver la relacin causal entre estos trminos en la figura 2.
1
Un fallo se podra considerar como una transicin desde un servicio correcto a uno incorrecto. La restauracin del
servicio (service restoration) es la transicin inversa: de incorrecto a correcto. El perodo intermedio se denomina
cada del servicio (service outage).
2
Por ejemplo, un programador se equivoca en el diseo de un programa.
3
Se utiliza tambin la palabra bug ya que existe una ancdota situada en uno de los primeros ordenadores en los
aos cuarenta/cincuenta donde un insecto es la causa de los fallos aleatorios de funcionamiento al quedar atrapado
en su interior.
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 10 -
A modo de ejemplo, el resultado de un error de un programador lleva a equivocarse en escribir una
instruccin de cdigo o una definicin de datos incorrecta. Al activarse (se ejecuta dicha instruccin), el
defecto pasa a estado activo y produce un error; siempre y cuando dicho error afecta al servicio entregado
al usuario (en informacin o en tiempo de entrega), se produce un fallo del sistema. Por supuesto, este
ejemplo no se restringe a defectos accidentales: un programador puede crear un virus que puede
permanecer dormido hasta que se active (por ejemplo, en cierta fecha) y producir un error que suponga un
desbordamiento de memoria y, como consecuencia, la entrega del servicio sufra lo que se llama un fallo
de denegacin de servicio (denial-of-service).
Por supuesto tambin se puede representar el mecanismo de propagacin de los errores a lo largo
de un sistema ya que el error producido en un componente puede suponer un fallo de servicio hacia otro
componente que reciba resultados del primero. El fallo del sistema se producir cuando esta cadena
alcance la interfaz de servicio del sistema y el usuario (humano u otro sistema) reciba un servicio incorrecto
(ver figura 3).
Figura 2. Cadena causal que relaciona error, defecto y fallo
Comit de Confiabilidad - 11 -
Desde el punto de vista de los fallos, existen distintas clasificaciones que ayudan a analizar y
catalogar los datos sobre los mismos. As, en la publicacin de Avizienis et al. [5] se habla de modos de fallo
donde las tres vistas principales son (ver fig. 4):
El dominio
La percepcin por parte de los usuarios
Las consecuencias en el entorno
Figura 3. Propagacin de errores a travs del sistema
Figura 4. Esquema de clasificacin de fallos
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 12 -
Sin embargo, existen clasificaciones ms complejas como la recogida en el estndar IEEE Std.
1044 [6] [7], centrada en el registro de anomalas de software: siguiendo la terminologa ya presentada, los
errores o manifestaciones de desviaciones de lo especificado o requerido. En este caso, se sugiere tratar
con los siguientes datos
4
:
Actividad del proyecto que lo detect
Fase del proyecto en la que se detect
Causa sospechada
Repetibilidad: una vez, intermitente, recurrente, reproducible, desconocida
Sntoma
Estado del producto: no utilizable, degradado, afectado, no afectado
En cuanto a los defectos, tambin se proponen categoras para la clasificacin elemental de los
mismos como causas de fallos tanto en dos trabajos de Avizienis et al. [5] [9].
Figura 5. Esquema de clasificacin de defectos
Comit de Confiabilidad - 13 -
1.2 Atributos de la confiabilidad
Por otra parte, es importante contrastar la definicin de los atributos explicativos de la confiabilidad
(ver figura 1) y situarlos dentro del contexto general de la calidad del software. Desde este punto de vista,
los atributos asignados a la confiabilidad cuentan con las siguientes relaciones con los modelos generales
de evaluacin de calidad del software
Disponibilidad
~Integracin en modelos: no es mencionado como atributo de ningn nivel, ni en ISO
9126 [2] ni en el modelo de McCall et al. [8].
~Definicin: en la referencia de Avizienis et al. [5] se define como la preparacin para
proporcionar el servicio correcto.
Fiabilidad
~Integracin en modelos: se trata de un factor de primer nivel de descomposicin tanto
en ISO [2] como en el modelo de McCall [8]. En ISO 9126 cuenta con los siguientes
subatributos: madurez (capacidad para evitar fallos), tolerancia a defectos (mantener
prestaciones en caso de fallo o de violar el uso especificado de sus interfaces) y capacidad
de recuperacin (restablecer nivel de prestaciones y recuperar datos afectados).
~Definicin: Avizienis [5] la define como continuidad del servicio correcto. En ISO [2] se
identifica con un conjunto de atributos que soportan la capacidad del software para
mantener su nivel de rendimiento en las condiciones especificadas durante un perodo
fijado de tiempo.
Proteccin
5
(safeness)
~Integracin en modelos: no es mencionado como atributo de ningn nivel, en ISO [2]
ni en el modelo de McCall et al. [8].
~Definicin: en el trabajo de Avizienis [5] se define como la ausencia de consecuencias
catastrficas para el usuario o el entorno.
5 Se opta por el trmino proteccin para safeness para distinguir mejor con la seguridad (security) siguiendo reco-
mendaciones ya existentes de traduccin al espaol.
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 14 -
Confidencialidad
~Integracin en modelos: en el modelo de ISO [2] se menciona la seguridad de acceso
como subatributo del factor funcionalidad de primer nivel refirindose a la proteccin de
informacin de tal forma que usuarios o sistemas no autorizados no accedan a ella ni
tampoco accedan al uso del sistema. En el de MCCall [8] se menciona el trmino integrity
precisamente como control de acceso a la informacin.
~Definicin: Avizienis [5] la define como la ausencia de revelacin no autorizada de
informacin.
Integridad
~Integracin en modelos: no es mencionado como atributo de ningn nivel en, ISO [2]
pero s aparece en el modelo de McCall [8] como factor de primer nivel con los subatributos
de control de accesos y facilidad para la auditora.
~Definicin: en el trabajo de Avizienis [5] se define como la ausencia de alteraciones
inadecuadas del estado del sistema, lo que supone un concepto claramente diferente al
recogido en el de McCall [8]: control de acceso al software o datos por personas no
autorizadas (ms afn al de confidencialidad).
Facilidad de mantenimiento
~Integracin en modelos: es un factor de primer nivel en el modelo de ISO [2] donde
incluye como subatributos la facilidad para ser analizado, la facilidad de prueba, la
estabilidad y la facilidad de modificacin. En el de McCall [8] tambin es un factor de primer
nivel con los subatributos de consistencia (en diseo e implementacin), simplicidad
(facilidad de comprensin), concisin (minimizacin de cdigo), modularidad
(independencia de componentes) y autodescripcin (autodocumentacin de la
implementacin).
~Definicin: para Avizienis [5] se define como la capacidad de realizar reparaciones y
modificaciones, lo que es similar a los indicadores en ISO [2] y en el de McCall [8].
Comit de Confiabilidad - 15 -
Por otra parte, hay que recordar que, en general, los distintos atributos de calidad de software no
son independientes. Existen, de hecho, relaciones de sinergia y de antagonismo entre ellos. Este hecho se
document ya en [8] identificando relaciones entre los distintos factores de la calidad (ver fig. 6). Como
ejemplo podemos apreciar que si pretendemos incrementar mucho la portabilidad debemos esperar que la
eficiencia sufra mientras que una mejora en facilidad de prueba contribuir a la fiabilidad del software.
Adems, en el caso de la confiabilidad, puede considerarse que la integridad es un prerrequisito
para otros atributos como la disponibilidad, la fiabilidad o la seguridad pero quizs no lo sea para la
confidencialidad toda vez que puede haber ataques mediante canales encubiertos o mediante escucha
pasiva.
Por tanto, es importante recordar que los proyectos de desarrollo no deben buscar un objetivo
absoluto de excelencia en todos los atributos de calidad. La idea es personalizar los niveles requeridos en
cada caso a las necesidades del usuario, normalmente en funcin del tipo de proyecto y de los posibles
Figura 6. Sinergia y antagonismo entre factores de calidad en el modelo de Mc Call et al.
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 16 -
riesgos. Este acuerdo de requisitos debe documentarse claramente como parte de la especificacin del
software desde el inicio del proyecto con la validacin del cliente y/o usuario. En el caso de la confiabilidad,
se sugiere en la propuesta de Avizienis [5] que la disponibilidad debe estar siempre presente, aunque podra
haber matices, mientras que el resto de atributos podran ser esenciales o, por el contrario, no necesarios
en determinados proyectos. Adems, resulta especialmente conflictivo hablar de niveles absolutos de
confiabilidad debido a que no existe la total ausencia de defectos
6
.
En el caso del trmino seguridad (security), en el trabajo de Avizienis [5] se vincula a la agrupacin
de disponibilidad slo para usuarios autorizados, a la confidencialidad y a la integridad ante accesos no
autorizados. En resumen, la seguridad significa la ausencia de accesos no autorizados al, o el manejo del
estado del sistema. En las definiciones, la seguridad y la proteccin enfatizan la capacidad para evitar una
clase especfica de fallos (catastrficos o acceso no autorizado) mientras que la disponibilidad y la fiabilidad
se centran ms en evitar fallos en general. Por ello, hay tendencia a agrupar estas dos ltimas
caractersticas y definirlas colectivamente como la evitacin o minimizacin de las cadas de servicio.
Existen otros trminos afines al de confiabilidad y que habitualmente han sido contemplados en el
mbito del desarrollo de software y sistemas informticos, especialmente por la importancia otorgada a la
proteccin ante todo tipo de amenazas en la proteccin de infraestructuras complejas controladas por
sistemas de informacin empotrados. Por una parte, hacemos referencia a trminos como la capacidad
para proporcionar confianza
7
(trustworthiness) y capacidad de supervivencia (survivability). Como se indica
en la referencia de Avizienis [5], el primero omite explcitamente los defectos internos aunque los considera
implcitamente. Tambin dichos defectos son contemplados implcitamente en la capacidad de
supervivencia mediante los fallos de componentes. El trmino de capacidad de supervivencia fue acuado
en mbitos militares en la dcada de los sesenta del siglo XX para definir la capacidad del sistema para
resistir entornos hostiles manteniendo el cumplimiento de sus objetivos de servicio. Por tanto, se incluye
en ambos trminos explcitamente las amenazas que tratan a diferencia de lo que ocurre con la
confiabilidad.
6
Se suele comentar que los costes de la calidad siguen esta ecuacin: coste = 1/defectos de tal manera que preten-
der cero defectos supone costes inmanejables. Suele trabajarse ms bien con la bsqueda del nivel de riesgo acep-
table equilibrndolo con los recursos y plazos disponibles.
7
La capacidad para proporcionar confianza es muy similar, a efectos de traduccin al espaol, al trmino de confia-
bilidad.
Comit de Confiabilidad - 17 -
Por otra parte, es habitual el trmino RAMS (Reliability, Availability, Maintainability and Safety), por
ejemplo, en el mbito de software crtico en la Agencia Europea del Espacio (ESA). En el caso de la ESA
[10], el propio trmino de confiabilidad se contempla con una definicin ms restringida que la de la
confiabilidad (limitada a la fiabilidad, disponibilidad y facilidad de mantenimiento) mientras que la proteccin
(safety) se considera aparte.
1.3 Peculiaridades del software
Una de las dificultades para aplicar las tcnicas de confiabilidad y de calidad, en general, al software
es la peculiar naturaleza del software respecto de otros productos industriales. Esto dificulta el
aprovechamiento de las experiencias que otros sectores productivos han podido desarrollar desde hace
muchos aos ya que la aplicacin al desarrollo de software no es directa y requiere cuidadosas
adaptaciones (incluso, en algunos casos, no es posible dicha adaptacin, lo que lleva a desechar ciertas
tcnicas).
Las peculiaridades del software se pueden resumir as segn Pressman [11]:
Se desarrolla, no se fabrica en el sentido clsico del trmino. Todo el coste de su produccin se
centra en el diseo de la primera copia, ya que la replicacin de un programa es una tarea trivial.
Se trata de un producto lgico, sin existencia fsica. El verdadero producto del software es el
diseo de una serie de instrucciones para el ordenador. Su existencia en papel (listado) o en soporte
magntico (fichero) no es ms que una representacin en un cdigo o lenguaje de su autntica
naturaleza, las instrucciones. De hecho, est protegido por leyes de propiedad intelectual al igual
que la msica o las obras escritas.
No se degrada o desgasta con el uso. La naturaleza lgica del software permite que permanezca
inalterable por muy intensa que sea su utilizacin. Se puede degradar su representacin magntica
pero no su esencia. Por ello, la reparacin no consiste en devolverlo al estado original en el que
estaba cuando se entreg (como un automvil cuando sale de fbrica). Si hay que repararlo, eso
significa que ya contaba con algn defecto en origen por lo que una correccin significa rectificar
el diseo.
La complejidad del software, la ausencia de controles adecuados y el mercado actual lleva a que
sea un producto que muchas veces se entrega conscientemente con defectos, incluso pblicamente
declarados (p. ej., la lista de errores conocidos de ciertos paquetes informticos). Eso es algo
inaceptable en el resto de sectores productivos (p. ej., no se entrega una lista de defectos conocidos
cuando se compra una nevera o un televisor). En el sector informtico, incluso, se llega a cobrar una
cuota de mantenimiento para reparar los defectos que el propio productor del software ha entregado
con el mismo.
Un porcentaje muy grande de la produccin se hace an a medida, en vez de emplear
componentes existentes y ensamblarlos, aunque las bibliotecas de funciones o componentes estn
ya cambiando en parte esta situacin.
Es extraordinariamente flexible. Se puede cambiar con facilidad e, incluso, se pueden reutilizar
trozos de un producto para construir otro. Sin embargo, la facilidad para cambiarlo (basta con un
editor para alterar el cdigo donde una simple coma es suficiente para alterar enormemente un
programas) es tambin un peligro que hay que controlar.
No obstante, como se comenta en la referencia de Pressman [11] en relacin a la aplicacin de
modelos probabilsticos para el software, como se ha indicado en uno de los puntos anteriores, el hardware
se desgasta pero el software no; esto es una media verdad ya que la ejecucin del software es ciertamente
determinstica pero su desarrollo es probabilstico y permanecen muchos tipos de errores residuales. Por
otra parte, slo una pequea parte de los fallos en hardware se deben al desgaste ya que se identifican
hasta cuatro tipos de modos de fallo: mala calidad de fabricacin, errores de diseo, sobrecarga de
componentes y desgaste o edad. Los tres primeros son comunes con el software.
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 18 -
El desarrollo de software confiable supone la utilizacin combinada de un conjunto de 4 tipos de
acciones distintas:
Prevencin de la introduccin u ocurrencia de defectos.
Tolerancia a defectos para entregar el servicio correcto a pesar de su presencia.
Eliminacin de defectos para reducir su nmero o gravedad.
Prediccin de defectos, estimando el nmero actual, la incidencia futura y las consecuencias
probables de los mismos.
A continuacin abordaremos cada una de estas reas de actividad.
2.1 Prevencin de defectos
Este aspecto de la confiabilidad se basa en la utilizacin de los mejores medios y controles durante
el desarrollo de software para prevenir la introduccin de defectos. Dada la amplitud de esta disciplina de
ingeniera de software resumiremos en el apartado 3 los principales medios de actuacin.
Por otra parte, para prevenir otro tipo de defectos como los fsicos de operacin se utiliza el blindaje,
proteccin contra radiaciones, etc. mientras que los defectos de interaccin se previenen mediante
entrenamiento, procedimientos de operacin rigurosos, paquetes infalibles, elementos de gua y ayuda,
etc. Los defectos maliciosos se previenen mediante mecanismos de proteccin como cortafuegos y
defensas similares.
2. MEDIOS PARA OBTENER LA
CONFIABILIDAD DEL SOFTWARE
- 19 - Comit de Confiabilidad
2.2 Tolerancia de defectos
El trmino (fault tolerance) est inspirado en la preservacin del servicio correcto ante la presencia
de defectos activos. Suele basarse en la deteccin de errores y la correspondiente recuperacin del servicio.
En general, la deteccin de defectos se centra en dos tipos de tcnicas segn Avizienis [5]:
Deteccin concurrente que se produce a la vez que se realiza la entrega del servicio.
Deteccin preventiva que se realiza mientras el servicio est suspendido tratando de
comprobar errores latentes y defectos dormidos.
La recuperacin transforma el estado del sistema que contiene uno o ms errores y, posiblemente,
defectos en un estado sin errores o defectos detectados que se pueden activar de nuevo. Para ello, hay
que incluir el manejo de errores y de defectos para eliminar los errores del sistema. El manejo de errores
puede centrarse, segn Avizienis [5], en:
La vuelta atrs (rollback), donde se retorna a un estado (checkpoint) guardado que es previo a
la deteccin del error. Esta operacin suele recaer en el rea de explotacin y no suele implicar
trabajo de desarrollo o mantenimiento de software. Distintas herramientas y tecnologas facilitan
el registro de estados del sistema para realizar cambios reversibles para el mismo.
El avance donde el estado sin errores detectados es un estado nuevo. Suele entonces
conectarse con el manejo de defectos.
El manejo de defectos pretende prevenir la activacin de defectos localizados. Para ello suele
apoyarse en las siguientes fases:
Diagnstico, que identifica y registra la/s causa/s de error/es tanto en localizacin como en tipo.
Aislamiento del defecto, que supone la exclusin fsica o lgica de los componentes
defectuosos para evitar que participen en la entrega del servicio (es decir, dejar los defectos
dormidos).
Reconfiguracin del sistema, que cambia a componentes de repuesto, o sustitucin, o reasigna
tareas entre los componentes no defectuosos.
Reinicializacin del sistema, que comprueba, actualiza y registra la nueva configuracin y las
nuevas tablas y registros.
Comit de Confiabilidad
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
- 20 -
Lo normal es que al manejo de defectos le siga un proceso de depuracin o mantenimiento
correctivo
8
, pero el factor que distingue la tolerancia a defectos del mantenimiento es que ste requiere la
intervencin de un agente externo.
Una opcin adicional es el enmascaramiento de defectos que permite la recuperacin del sistema
sin una deteccin explcita de errores. As, una deteccin preventiva de errores (BIST: built-in self-test) ser
posiblemente seguida del manejo de defectos ejecutado al iniciarse el sistema. Tambin de spare checking,
recogida de basura, programas de auditora o el llamado rejuvenecimiento de software, que pretende
eliminar efectos de la edad en las aplicaciones antes de que puedan llevar a fallos.
Elegir tcnicas de deteccin de errores, manejo de errores o manejo de defectos depende del
criterio adoptado durante el diseo para las clases de defectos tolerables. Un mtodo habitualmente
empleado para la tolerancia a defectos es ejecutar varias veces los mismos clculos en distintos entornos
(en general con idntico diseo), de forma secuencial o concurrente, en general. Este enfoque es adecuado
para defectos de diseo esquivos mediante rollback, pero no lo es para los defectos de diseo slidos que
requieren entornos que implementen la misma funcin con diseos e implementaciones distintos: es lo que
se llama diversidad de diseo (design diversity). Como ejemplos de diversidad de diseo se pueden
mencionar el diseo independiente de componentes o la multiplicidad de versiones, entre otros. La
diversidad en el diseo es uno de los elementos propuestos por Randell [13] para la tolerancia a defectos
junto con los bloques de recuperacin, la prevencin del efecto onda (ripple-efect), el manejo de
excepciones integrado en lenguajes (catch-throw de C++, try de Java, etc.), el enfoque de sistemas
distribuidos, la reflexin (reflection) de los lenguajes, el uso de la delegacin, etc.
Sin embargo, como se comenta en el clsico libro de Fenton y Pfleeger [14], existen algunos
problemas en esta filosofa. La utilizacin de la implementacin del sistema con varios diseos
independientes pretende disminuir la probabilidad de que todas las versiones fallen al mismo tiempo y se
ha aplicado a casos como el del Airbus A320. No obstante, diversos experimentos con 27 versiones
Comit de Confiabilidad - 21 -
8
Este proceso tambin debe darse durante el desarrollo de software cuando las pruebas detectan defectos en los
productos. El trmino depuracin (debugging) suele aplicarse ms bien a la correccin de cdigo.
independientes de un software han revelado una alta proporcin de defectos comunes por lo que la tcnica
de diversidad de diseo no aporta confianza en entornos de ultra-alta fiabilidad.
La tolerancia a defectos es un concepto recursivo: los mecanismos que protegen el sistema deben
estar as mismo protegidos de defectos. Por ejemplo, mediante replicacin, comprobadores con
autochequeo, memoria estable para recuperar datos y programas, etc.). En el caso del autochequeo,
Fenton [14] resalta la limitacin de este tipo de controles a un estrecho campo de problemas de tipo
matemtico. Tambin se menciona la influencia del incremento de la facilidad de prueba como medio de
mejora de la fiabilidad. Tiene el inconveniente de que las aplicaciones tienen mayor probabilidad de estar
libres de defectos pero se incrementa la probabilidad de ocurrencia de fallos si los defectos permanecen.
La introduccin sistemtica de la tolerancia a defectos se facilita con aplicaciones supervisoras del
software, procesadores de servicios, comunicacin dedicada, etc. Por supuesto la tolerancia a defectos no
debe centrarse exclusivamente en los defectos accidentales sino que es de aplicacin para proteger de
intrusiones o ataques maliciosos mediante la fragmentacin y la dispersin de informacin, y la tolerancia
a lgica malintencionada (virus, etc.) mediante comprobacin del flujo de control o mediante diversidad de
diseo.
2.3 Eliminacin de defectos
La eliminacin se puede producir durante el desarrollo de software o durante la explotacin. Se
define en el glosario de IEEE [1] la depuracin como el proceso de detectar, localizar y corregir defectos.
De las tres fases sealadas, la localizacin del defecto o diagnstico consume la mayor parte (seguramente
un 80%) del esfuerzo necesario para el proceso de depuracin. En cuanto a la deteccin, suele apoyarse
en los conceptos de verificacin y validacin que se tratarn en detalle en el apartado 3 sobre prevencin
en el desarrollo de software:
Verificacin: proceso de evaluar un sistema o componente para determinar si los productos de
una fase de desarrollo cumplen los requisitos impuesto al inicio de la misma.
Validacin: proceso de evaluar un sistema o componente durante el desarrollo, o al final del
mismo, para determinar si satisface los requisitos especificados.
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 22 -
Comit de Confiabilidad
Boehm resumi estas definiciones con las expresiones construimos correctamente el producto
software? o construimos el producto software correcto?. Insistiremos ms en el apartado 3 sobre el
papel de estas actividades (resumidas habitualmente como V&V) en la prevencin de defectos durante el
desarrollo de software.
En cuanto al proceso de depuracin puede surgir mediante la deteccin de defectos por resultados
de aplicacin de las distintas tcnicas de verificacin y/o validacin
9
, o por informes de explotacin, clientes,
etc. Durante el desarrollo es habitual la conexin entre depuracin y pruebas cuando los defectos se refieren
a la implementacin de cdigo (ver fig. 7) como se indica en la referencia de Piattini et al. [15]. Los casos
de prueba diseados para comprobar el software se ejecutan en el ordenador y se obtienen resultados.
Dichos resultados se analizan para la bsqueda de sntomas de defectos (errores) en el software. Esta
informacin se pasa al proceso de depuracin para obtener las causas del error (defecto). En caso de
conseguirlo, se corrige el defecto; en caso contrario se llevarn a cabo nuevas pruebas que ayuden a
localizarlo, reduciendo en cada pasada el posible dominio de existencia del defecto. Tras corregir el defecto,
se efectuarn nuevas pruebas que comprueben si se ha eliminado dicho problema.
- 23 -
9
Como se ver en el apartado suelen ser bsicamente las pruebas y las revisiones y auditorias aunque existen otras
en el amplio catlogo de tcnica de V&V.
Figura 7. Ciclo de pruebas y depuracin
La depuracin no es un proceso trivial y deben contemplarse algunas recomendaciones para
obtener los mejores resultados. En el caso del diagnstico y localizacin del defecto, se pueden indicar los
siguientes consejos de Myers [16]:
Analizar la informacin y pensar. La depuracin es un proceso mental de resolucin de un
problema y lo mejor para el mismo es el anlisis. No se debe utilizar un enfoque aleatorio en la
bsqueda del defecto.
Al llegar a un punto muerto, pasar a otra cosa. Si tras un tiempo razonable no se consiguen
resultados, merece la pena refrescar la mente, para empezar de nuevo o para que el inconsciente
nos proporcione la solucin.
Al llegar a un punto muerto, describir el problema a otra persona. El simple hecho de describir a
otro el problema nos descubre muchas cosas (cuando todo falle, pedir ayuda).
Usar herramientas de depuracin (depuradores, trazadores de ejecucin, etc.) slo como recurso
secundario. Deben ayudar al anlisis mental, no pueden pretender sustituirlo, por lo menos, en la
actualidad.
No experimentar cambiando el programa. Evitar depurar con esta actitud inadecuada, que se
puede resumir como: No s qu est mal, as que cambiar este bucle y ver qu pasa.
Se deben atacar los errores individualmente, de uno en uno, si no se quiere dificultar an ms la
depuracin.
Se debe fijar la atencin tambin en los datos manejados en el programa y no slo en la lgica
del proceso.
En cuanto a la fase de correccin, Myers sugiere lo siguiente [16]:
Donde hay un defecto, suele haber ms. Es una conclusin obtenida de la experiencia. Cuando
se corrige un defecto se debe examinar su proximidad inmediata buscando elementos sospechosos.
Debe fijarse el defecto, no sus sntomas. Lo que debe corregirse y desaparecer es el defecto, no
se trata de intentar enmascarar sus sntomas.
La probabilidad de corregir perfectamente un defecto no es del 100%. Por lo tanto, se deben
revisar las correcciones antes de implantarlas (mediante tcnicas de revisin: walkthroughs,
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 24 -
Comit de Confiabilidad
inspecciones, revisiones, etc. antes de la correccin). Despus de la correccin, se utilizan pruebas
especficas de regresin.
Cuidado con crear nuevos defectos. Es frecuente crear nuevos defectos al corregir sin cautela.
La probabilidad de que un cambio se realice correctamente es del 50% (aproximadamente) segn
algunos estudios.
La correccin debe situarnos temporalmente en la fase de diseo. Hay que mentalizarse de que
se reinicia el diseo de la seccin de cdigo defectuoso y no slo se retoca el cdigo.
Cambiar el cdigo fuente, no el cdigo objeto. Cambiar el cdigo objeto provoca:
~Experimentacin indeseable.
~Falta de sincronizacin fuente-objeto.
2.4 Prediccin de defectos
La prediccin de defectos se realiza mediante la evaluacin del comportamiento del sistema en
cuanto a ocurrencia o activacin de defectos. Se plantea bajo dos aspectos segn Avizienis [5]:
Evaluacin cualitativa u ordinal que pretende identificar, clasificar y ordenar los modos de fallo o
las combinaciones de eventos (fallos de componentes o condiciones de entorno) que podran llevar
a fallos del sistema.
Evaluacin cuantitativa o probabilstica que pretende evaluar en trminos de probabilidades la
extensin en que se satisfacen los atributos de confiabilidad; dichos atributos pueden verse como
medidas de confiabilidad.
Los mtodos de evaluacin para ambos aspectos pueden ser especficos (por ejemplo, modo de
fallo o anlisis de efectos para evaluacin cualitativa o cadenas de Markov y Redes de Petri estocsticas
para evaluacin cuantitativa) o pueden ser indiferentemente usados para ambos tipos de evaluacin (por
ejemplo, diagramas de bloques de fiabilidad, rboles de defectos).
La evolucin de la confiabilidad en el ciclo de vida se basa en los conceptos de estabilidad,
crecimiento y decrecimiento que pueden plantearse para los diversos atributos independientemente. As,
- 25 -
se considera la intensidad de fallos (es decir, el nmero de fallos por unidad de tiempo) como medida de
la frecuencia de fallos segn la percibe el usuario. Tpicamente esta intensidad decrece (crecimiento de
fiabilidad), luego se estabiliza y despus de un cierto tiempo de operacin se incrementa para,
posteriormente, iniciar un nuevo ciclo.
La alternativa de entrega de servicio correcto-incorrecto se cuantifica para definir la fiabilidad, la
disponibilidad y la facilidad de mantenimiento como medidas de confiabilidad. As, se habla de fiabilidad
en trminos de medida del servicio continuo correcto o su equivalente en tiempo hasta el fallo. En este
sentido, suele trabajarse con el MTTF (Mean Time To Failure). En cuanto a disponibilidad, se mide la
entrega de servicio correcto respecto de la alternativa de servicio correcto e incorrecto. En el libro de
Pressman [12] se formaliza de la siguiente manera:
Tup representa el tiempo en que el sistema entrega el servicio correcto y Tdown es el tiempo en que el
servicio esta cado. Ambos correspondern con el total de tiempos observados de cada clase:
La disponibilidad es una funcin del tiempo y se asume que es 1 en t0, decreciendo
posteriormente hasta un estado estable despus de varios ciclos fallo-reparacin. De hecho, la teora de
fiabilidad y confiabilidad suele centrarse en el estudio de estado estable aunque tambin se analiza el
perodo inicial (burn-in).
Desde este punto de vista, se puede considerar la disponibilidad de dos maneras:
Ratio de sistema con entrega de servicio correcto en un instante respecto de la poblacin
estudiada.
Ratio de uptime (entrega de servicio correcto) respecto de la suma de tiempos up y down (frmula
anterior).
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 26 -
Comit de Confiabilidad
En el primer caso, se formula la disponibilidad de la siguiente manera:
donde MTTF es el Mean Time to Failure (que equivale al Tup) y el MTTR el Mean Time To Repair (que
equivale al Tdown), por lo que el MTBF es el Mean Time Between Failures. Ambos tiempos deben estimarse
por distintos medios para el estado estable. En algunas ocasiones se sugiere una manera simplificada
como la siguiente:
donde n es la muestra, T es el tiempo total acumulado y K es el nmero de fallos. Sin embargo, veremos
ms adelante los modelos de fiabilidad ms adaptados a la problemtica del software que podrn facilitar
estas estimaciones.
En cuanto a la facilidad de mantenimiento, se aplica la medicin del tiempo hasta la restauracin
del servicio (normalmente indicado como MTTR: Mean Time To Repair) o su equivalente de medida de
servicio incorrecto continuo.
El caso de la proteccin (safety) se considera una extensin de la fiabilidad segn la referencia de
Avizienis [5]. As mismo, cuando el estado del servicio correcto y los estados de servicio incorrecto debido
a fallos no catastrficos se agrupan en un estado seguro (en el sentido de estar libre de daos catastrficos
no de peligro), se mide la proteccin como proteccin continua o con su equivalente en tiempo de fallo
catastrfico. Por eso, la proteccin es la fiabilidad respecto de los fallos catastrficos.
En general, un sistema entrega diversos servicios y se contemplan dos o ms modos de calidad
de servicio, por ejemplo, desde capacidad total a servicio de emergencia. Por ello, las medidas relacionadas
con la confiabilidad deben integrarse con la nocin de capacidad de rendimiento (performability). Existen
dos enfoque principales para la prediccin probabilstica de defectos (que pretende derivar estimacin en
trminos de probabilidad de las medidas de confiabilidad), segn el trabajo de Avizienis [5]:
Modelado
Prueba y evaluacin
- 27 -
Estos enfoques son complementarios, ya que el modelado requiere datos de los procesos bsicos
modelados (proceso de fallo, proceso de mantenimiento, proceso de activacin, etc.) que pueden obtenerse
mediante procesos de pruebas o procesando datos de fallos. En el siguiente apartado comentaremos
algunos modelos relacionados con la fiabilidad y disponibilidad. Evidentemente, los resultados de pruebas
son elementos muy valiosos para la prediccin de fiabilidad mediante los correspondientes informes de
incidentes durante las mismas. Durante el mantenimiento, los informes de peticiones de mantenimiento
son la fuente de estos modelos. Ambos deberan converger en un sistema integrado de seguimiento de
defectos (defect-tracking) que suele enlazarse con la gestin de cambios y configuraciones; de hecho, en
organizaciones donde la gestin de configuracin ya controla los cambios realizados, la estadstica de
defectos se gestiona mediante estos mecanismos de control.
Cuando se evalan sistemas tolerantes a defectos, la cobertura proporcionada por los mecanismos
de manejo de errores y defectos tiene una drstica influencia sobre las medidas de confiabilidad. La
evaluacin de la cobertura se realizar a travs de modelado o a travs de pruebas, es decir, insercin de
defectos (fault-injection). Esta tcnica se basa en analizar los efectos de defectos insertados en el sistema
a travs de un modelo de simulacin o un prototipo implementado [17].
2.4.1 Modelos de fiabilidad
Para aportar una panormica rpida de los modelos relacionados con la fiabilidad del software,
debemos comenzar aclarando que el uso de los mismos siempre pasar por dos fases segn Fenton [14]:
1. Seleccin del modelo ms apropiado ajustndolo si hace falta.
2. Estimacin de los valores de los parmetros necesarios usando los valores ms probables de datos
disponibles.
El modelo ms sencillo, y uno de los primeros, para software es el Jelinski-Moranda [17]. En este
modelo se asume que la distribucin de probabilidad de fiabilidad es:
donde N es el nmero inicial de defectos y f es la contribucin de cada defecto a la tasa global de
defectos.
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 28 -
Comit de Confiabilidad
Las principales limitaciones del modelo surgen de los siguientes 3 hechos segn Fenton [14]:
1. La secuencia de tasas es puramente determinista.
2. Todos los defectos contribuyen por igual a la tasa de riesgo. En el caso del software se ha
comprobado que esto no es as (ver apartado 3).
3. Tiene poca precisin con valores que suelen ser normalmente optimistas.
Otros modelos han pretendido refinar ste como el de Shooman [12] y el de Musa [19]. ste ltimo
aporta como novedad el centrarse en el tiempo de ejecucin, aunque incluye tambin tiempo de calendario
para conectar con la gestin de proyecto.
Sin embargo, los modelos ms ajustados suelen incluir un aspecto doblemente estocstico ya que
tambin consideran que la contribucin de cada defecto es distinta. Los defectos que ms contribuyen a la
falta de fiabilidad se encuentran y eliminan antes que los que pueden quedar dormidos mucho tiempo. Es
el caso de los modelos de Littlewood [20] y [21] en los que los pasos (tiempos entre incidentes) son de
distintos tamaos, a diferencia de lo que ocurra en el de Jelinski-Moranda.
Como se indica en el trabajo de Fenton y Pfleeger [14], como slo se mide en funcin de los fallos,
es imposible medir la fiabilidad antes de terminar el desarrollo (de hecho, no es posible hasta llegar a
pruebas del sistema integrado, ya que pruebas parciales de componentes no pueden ser significativas para
este aspecto). No obstante, si recogemos con cuidado los tiempos entre fallos, existen medios para predecir
con cierta precisin la fiabilidad. Los modelos de crecimiento de fiabilidad presentados ayudan a esta labor,
pero ninguno de ellos es preciso con todos los conjuntos de datos en todos los entornos (no hay una
panacea para este trabajo). Por ello, suele ser necesario recalibrarlos con datos propios y, por otra parte,
existen herramientas automticas que facilitan mucho los arduos clculos que suponen los ajustes y la
aplicacin de los modelos.
En cualquier caso, hay que recordar que, como indica Fenton [14], slo funcionan correctamente
si el entorno futuro de operacin es similar al que se usa para recoger datos de fallos. Por ello, antes de
entregar debemos simular convenientemente dicho entorno. Uno de los enfoques que contemplan esta
filosofa es el de Cleanroom Method para desarrollo de software presentado por Dyer [22], donde se incluye
- 29 -
una estrategia de pruebas estadsticas basadas en seleccionar casos de pruebas en funcin de la
probabilidad de uso de las funciones, como indica Linger [23].
De todas maneras, los casos de ultra-alta fiabilidad plantean graves problemas, ya que un requisito
como el impuesto al A320 para tasa de fallos de 10-9 supone hablar de 100.000 aos de operacin y no
podremos ejecutar el sistema y observar los tiempos de fallo para medir la fiabilidad. El incremento de
tiempo para alcanzar los distintos niveles de fiabilidad crece de manera exponencial por lo que debe
imponerse un esquema de objetivos viable y proporcionado a los riesgos y los costes asumibles tanto para
el fabricante como para el cliente en invertir ms por ms fiabilidad (ver figuras 8.a y 8.b).
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 30 -
Figura 8.a Curso de coste y fiabilidad para el fabricante
Comit de Confiabilidad - 31 -
Figura 8.a Curso de coste y fiabilidad para el fabricante
Ciertamente la actividad de desarrollar software y sistemas difiere bastante de la fabricacin de
otros productos. Adems de las diferencias intrnsecas entre el software y otros productos (ver apartado 1.3)
tambin la manera de trabajar ha sido tradicionalmente distinta de los procesos ms tradicionales de
fabricacin como se explica en el IEEE [6]. Esta es la causa de que los mtodos y tcnicas aplicables para
la mejora de calidad en el software, no hayan podido resolverse con una inmediata traslacin de las
prcticas maduras existentes en otros sectores de fabricacin. El resultado ha sido la necesidad de realizar
un gran esfuerzo en la adaptacin fiable de dichas tcnicas a la realidad del software as como la creacin
de modelos y mtodos especficos para la actividad de desarrollo.
En general, la gestin de proyectos de desarrollo debera tener en cuenta los principales factores
que influyen en los mismos. Tomando como referencia a Jones [24], podemos asumir como base el modelo
de la figura 9.
- 33 -
3. CALIDAD EN EL DESARROLLO
DEL SOFTWARE
Comit de Confiabilidad
Figura 9. Factores que afectan a la calidad y la productividad en el software segun [24]
Las lneas actuales de trabajo para la mejora de la calidad y prevencin de defectos en el software
y los sistemas podran clasificarse de acuerdo a su focalizacin principal en alguno de los elementos del
modelo anterior. Podemos presentar las principales lneas actuales en mejora de la calidad del software en
funcin del anlisis de los diferentes factores anteriores distinguiendo en los procesos aquellos destinados
al desarrollo en s y los destinados al aseguramiento de calidad.
3.1 Mejora en los recursos humanos
Es evidente que el principal recurso y el que marca el principal coste de un desarrollo es el factor
humano. En este sentido, podramos hablar de:
La formacin acadmica y los estudios de preparacin profesional: el autor ha realizado estudios
detallados de los requisitos exigidos en ofertas de empleo donde se puede constatar la evolucin
de conocimientos tcnicos y, sobre todo, la necesidad de competencias personales bsicas (trabajo
en equipo, comunicacin, etc.).
La cualificacin especfica en entornos, lenguajes, tipo de aplicaciones, etc. en buena parte ligada
a la experiencia en cada mbito.
El despliegue de buenas prcticas personales de desarrollo a travs de mtodos como PSP
presentado por Humphrey [26] pueden influir en la productividad y la calidad.
La motivacin y la cultura de calidad, el amor por el trabajo bien hecho, etc. que, tambin, suelen
ser dependientes de una actitud respetuosa con una tica profesional como la marcada en el cdigo
de IEEE [27].
Existen anlisis sofisticados de las relaciones entre los diversos factores que pueden influir en un
desarrollo, as como el esfuerzo y los resultados que se pueden obtener en los mismos. Un tpico ejemplo
es el de Abdel-Hamid y su dinmica de proyectos [28]. Otro conjunto interesante de datos de influencia
relacionados con el personal de desarrollo de software son los proporcionados por Jones [24]. En la tabla
2, se puede apreciar la influencia de distintos factores clave tanto cuando son positivos (por ejemplo,
personal muy experimentado: +55%) como cuando son negativos (por ejemplo, -87%). En general,
acumular factores negativos en el entorno y el personal supone un gran descalabro de la productividad y
- 34 -
Comit de Confiabilidad
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
- 35 - Comit de Confiabilidad
la calidad, mucho mayor que la proporcin de ganancia de los factores positivos. En consecuencia, la
mxima de que las personas son nuestro principal activo se revela an ms cierta en los desarrollos de
software, al menos en lo que respecta a no tratar de ahorrar demasiado en este concepto.
Tambin existen otras reglas bsicas sobre la influencia de los recursos humanos en los proyectos.
Por ejemplo, se sabe que en un proyecto retrasado, incorporar ms personal supone retrasarlo ms como
se demuestra en Brooks [29]. De forma ms radical, tambin se sabe que es mejor quitar a un programador
incompetente que incorporar otro adicional a efectos de recuperar un proyecto retrasado y con problemas
de calidad como observ Schulmeyer [30].
3.2 Evolucin y mejora tecnolgica
Se trata de una opcin evidente para la mayora de los profesionales, dada la actividad comercial
generada respecto de las nuevas opciones tecnolgicas que surgen constantemente. En este sentido,
podemos resear no slo las opciones ms comentadas de evolucin (sistemas operativos, plataformas,
lenguajes etc.) sino la mejora de funcionalidad y de integracin entre las herramientas del desarrollador
(CASE para las distintas actividades y fases, IDEs, entornos visuales, etc.). Tambin deben contemplarse
los cambios de modelos y paradigmas (por ejemplo, la evolucin desde el desarrollo procedimental
tradicional a los entornos de orientacin de objetos, etc.) que influyen en la capacidad y en el control de
calidad sobre los productos generados por parte de los desarrolladores.
Tabla 2. Impacto de factores clave de personal en la productividad y calidad
- 36 -
Comit de Confiabilidad
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Las organizaciones suelen estar ms concienciadas en gastar en herramientas (>50%) que en
otras medidas, seguramente ms eficaces segn McConnell [31]. En general, aunque contar con
herramientas de desarrollo (por ejemplo, nuevas plataformas de desarrollo, compiladores, lenguajes,
entornos IDE, CASE, etc.) suele facilitar las tareas y, sobre todo, permite abordar sistemas ms complejos
(o que, incluso, anteriormente eran inabordables) con el mismo personal. En efecto, en algunas ocasiones
permiten incrementar la productividad. Por ejemplo, en el modelo de Bohem [32], el uso de herramientas
avanzadas supone un porcentaje de -17% de esfuerzo frente al +24% de esfuerzo con herramientas muy
bsicas.
Resulta de gran importancia que las herramientas sean apropiadas y que se integren bien en la
organizacin de desarrollo a travs de formacin, de adaptacin a las necesidades de los desarrolladores,
del entorno tcnico y con otras herramientas ya existentes. El uso de CASE efectivo incrementa la
productividad en un 27%, pero la incorporacin inadecuada de herramientas puede disminuir la
productividad en un 75% segn los datos de Jones [24]
En general, como indica McConnell en [31] suele ocurrir que el mercado de tecnologas y
herramientas es propicio a reclamos exagerados y sensacionalistas (por ejemplo, reduzca sus tiempos de
desarrollo en un 15%), que el 30% de las herramientas adquiridas no cubren las necesidades de los
usuarios, que el 10% no se usan nunca, que el 25% no se aprovechan convenientemente por falta de
formacin, etc. Incluso Jones en [33] considera poco crebles las afirmaciones en el 75% de la publicidad
y que, tras revisar 4000 proyectos, el 70% de los responsables crean que un nico factor como ste podra
proporcionar grandes mejoras. En cierto modo, esto enlaza con recurrentes noticias sobre la desaparicin
de la figura del programador. Ya se sugera al aparecer el lenguaje ensamblador y perdura hasta nuestros
das: en 2006 se publi que en 2008 las nuevas herramientas de desarrollo harn desaparecer dicho puesto.
3.3 Mejora de procesos de desarrollo
La mejora de las tcnicas y mtodos de desarrollo pasa por la intervencin en distintos planos de
actuacin dentro de la organizacin de desarrollo. Por una parte, a nivel de procesos y desde una
perspectiva global, debemos mencionar las iniciativas de evaluacin y mejora de procesos como CMMi
[34], ISO 15504 SPICE [35], etc. En este caso, el foco de atencin se centra en la organizacin de
- 37 - Comit de Confiabilidad
actividades guiada o impulsada desde los responsables de la empresa. Por supuesto, la ordenacin de
procesos que provoca ISO 9001 [36] es tambin una forma de actuar desde el plano de los procesos.
En otro plano de actuacin podemos situar la adopcin de estndares, metodologas y tcnicas.
Propuestas como estndares, ciclos de vida (espiral, etc.) o procesos de desarrollo (RUP [37], extremme
programming [38], etc.), metodologas y notaciones (Metrica v31, UML [39], etc.) parecen contar con apoyos
a favor de su buena influencia en la calidad del software aunque no siempre se han establecido recogidas
y anlisis de datos rigurosos que cuantifiquen y aclaren la influencia de los mismos sobre los productos
finales.
La mejora de procesos de software tiene una relacin directa y bastante clara con la obtencin de
beneficios en cuanto a ROI, productividad y calidad. De hecho, el modelo CMM [40] siempre se ha vinculado
a resultados de disminucin de riesgos e incremento de calidad y productividad. En este sentido, podemos
citar la mejora producida en la propia evaluacin de los procesos desde los resultados de 1992 a 2003
registrados por el SEI [41] as como los resultados de reduccin de defectos, incrementos de productividad,
etc. en porcentajes bastante interesantes recogidos desde los primeros estudios como el de Herbsleb et
al. [42]. En la literatura de calidad existen bastantes estudios donde se discuten los beneficios reales de
otros mtodos de mejora de procesos como SPICE-ISO 15504 o de iniciativas como ISO 9001 (en este
caso, quizs ms eficaz en estabilizar estndares en los procesos ms que conseguir mejoras de
resultados).
Por ltimo, fuera de los modelos de mejora habituales, las mejoras en tcnicas de desarrollo,
metodologas, herramientas, etc. deben apoyarse en mediciones y evaluaciones apropiadas dentro de cada
entorno y empresa de aplicacin. En este sentido, es imprescindible usar mtodos de valoracin
contrastados como DESMET [43].
- 38 -
Comit de Confiabilidad
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
3.4 Mejora de procesos de aseguramiento de calidad de software
Tradicionalmente, por incorporacin de la normativa genrica de calidad, el establecimiento de
sistemas de calidad corporativos basados en ISO 9001 [11] ha sido una opcin habitualmente considerada
por las organizaciones preocupadas por la calidad. Las peculiaridades del software como producto han
motivado la existencia de una norma complementaria para la adaptacin de la norma general ISO 9001 al
software, a la ISO 90003 [44]. Evidentemente, en el caso de ISO 9001 han confluido los intereses de imagen
comercial con el inters por la mejora por sus implicaciones de mercado. Entre los profesionales se ha
generado controversia por ste y otros aspectos, aunque resulta claro que el establecimiento de estructuras
organizativas orientadas a la calidad y documentadas (manual de calidad, procedimientos, etc.) ha
fomentado, al menos, un esquema claro de trabajo y una estabilizacin de procesos y resultados. Tambin
ha servido para establecer unos mnimos en la aplicacin del aseguramiento de calidad como medio de
proporciona confianza a los desarrolladores y a los clientes sobre la sistemtica de trabajo en los proyectos.
A nivel de proyecto, el trabajo se suele apoyar en una planificacin especfica (aunque coherente
con el sistema de calidad u otras normas aplicables) a travs de un plan de aseguramiento de calidad de
software. Si adoptamos el correspondiente estndar IEEE, el 730 [45], como referencia, las tcnicas
incluidas para los proyectos se corresponden con las ms tradicionales y usadas: gestin de configuracin
(como elemento clave de control de los productos), medicin (para evaluacin completa de procesos y
productos) as como verificacin y validacin (principalmente basadas en aplicacin de pruebas y de
procesos de revisin y auditora). Por supuesto existen catlogos ms extensos de tcnicas (ver los trabajos
publicados en ACM [46] e IEEE [47]) pero no suelen ser tan comunes como las mencionadas (ver tabla 3).
- 39 - Comit de Confiabilidad
Tabla 2. Otras tcnicas de verificacin y validacin
- 40 -
Comit de Confiabilidad
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Pruebas de software
De manera breve, debemos recordar que las pruebas de software deberan ceirse al ciclo de
pruebas propuesto en el estndar IEEE 1008 [48] (ver fig. 10). El diseo de casos de prueba est totalmente
mediatizado por la imposibilidad de probar exhaustivamente el software. Pensemos en un programa muy
sencillo que slo suma dos nmeros enteros de dos cifras (del 0 al 99). Si quisiramos probar, simplemente,
todos los valores vlidos que se pueden sumar deberamos probar 10.000 combinaciones distintas de cien
posibles nmeros del primer sumando y cien del segundo. Pensemos que an quedaran por probar todas
las posibilidades de error al introducir los datos (p. ej. teclear una letra en vez de un nmero). Tampoco
podemos pretender analizar todos los posibles caminos de ejecucin por el programa que son tambin
impracticables. Si para un programa tan elemental debemos realizar tantas pruebas, podemos imaginar lo
que supondra un programa de tamao real.
En consecuencia, las tcnicas de diseo de casos de prueba tienen como objetivo conseguir una
confianza aceptable en que se detectarn los defectos existentes (ya que la seguridad total slo puede
obtenerse de la prueba exhaustiva, que no es practicable) sin que se necesite consumir una cantidad
excesiva de recursos (p. ej. tiempo para probar o tiempo de ejecucin). Toda la disciplina de pruebas debe
moverse, por lo tanto, en un equilibrio entre la disponibilidad de recursos y la confianza que aportan los
casos para descubrir los defectos existentes. Este equilibrio no es sencillo, lo que convierte a las pruebas
en una disciplina difcil y que est lejos de parecerse a la imagen de actividad rutinaria que suele sugerir.
Figura 10. Cilco completo de pruebas definido en el estndar IEEE [48]
- 41 - Comit de Confiabilidad
Ya que no se pueden probar todas las posibilidades de funcionamiento del software, la idea
fundamental para el diseo de casos de prueba consiste en elegir algunas de ellas que, por sus
caractersticas, se consideren representativas del resto. As, se asume que, si no se detectan defectos en
el software al ejecutar dichos casos, podemos tener un cierto nivel de confianza (que depende de la eleccin
de los casos) en que el programa no tiene defectos. La dificultad de esta idea es saber elegir los casos que
se deben ejecutar. De hecho, una eleccin puramente aleatoria no proporciona demasiada confianza en que
se puedan detectar todos los defectos existentes. Por ejemplo, en el caso del programa de suma de dos
nmeros, elegir cuatro pares de sumandos al azar no aporta mucha seguridad a la prueba (una probabilidad
de 4/10.000 de cobertura de posibilidades). Por eso es necesario recurrir a ciertos criterios de eleccin que
veremos a continuacin.
Existen tres enfoques principales para el diseo de casos como indica Myers [49]:
El enfoque estructural o de caja blanca
11
(vase la figura 11). Consiste en centrarse en la
estructura interna (implementacin) del programa para elegir los casos de prueba. En este caso, la
prueba ideal (exhaustiva) del software consistira en probar todos los posibles caminos de ejecucin,
a travs de las instrucciones del cdigo, que puedan trazarse.
El enfoque funcional o de caja negra
12
(vase la figura 11). Consiste en estudiar la especificacin
de las funciones, la entrada y la salida para derivar los casos. Aqu, la prueba ideal del software
consistira en probar todas las posibles entradas y salidas del programa.
El enfoque aleatorio consiste en utilizar modelos (en muchas ocasiones estadsticos) que
representen las posibles entradas al programa para crear a partir de ellos los casos de prueba. La
prueba exhaustiva consistira en probar todas las posibles entradas al programa.
Estos enfoques no son excluyentes entre s ya que se pueden combinar para conseguir una
deteccin de defectos ms eficaz. Veremos a continuacin una presentacin de cada uno de ellos.
11
En ingls, white box testing. Sin embargo, la denominacin caja blanca no es afortunada ya que se trata de una
caja transparente, que permite ver su interior. Recientemente, la mayora de autores ya utiliza la expresin prueba
de caja de cristal (Glass box testing).
12
En ingls, black box testing
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
Por ltimo, es importante recordar que la aplicacin de las pruebas durante el desarrollo de software
se realiza a travs de una estrategia de fases centradas cada una de ellas en un aspecto distintos del
software desarrollado (ver figura 12).
- 42 -
Figura 11. Los enfoques de diseo de pruebas de caja blanca y de caja negra
Figura 12. Estrategia de aplicacin de pruebas en el desarrollo de software
Tcnicas de revisin y auditora
Son tcnicas de verificacin y validacin que permiten la evaluacin y el anlisis de productos
generados durante el desarrollo y que no pueden ser ejecutados. Esto es esencial para la filosofa de
aseguramiento de calidad del software puesto que la deteccin temprana de problemas y la inexistencia
de pruebas definitivas obliga a controlar paso a paso los productos generados en el proceso de
desarrollo. Adems esta filosofa es econmicamente rentable como se puede ver en la tabla 4.
Comit de Confiabilidad - 43 -
Tabla 4. Correccin de un defecto segn la fase de desarrollo
Figura 13. Enfoque integral de aseguramiento de calidad del software
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 44 -
Para ello disponemos de diversos mtodos (ver tabla 5).
Las revisiones y auditoras se pueden utilizar para revisar tanto procedimientos de gestin del
proyecto como productos derivados del desarrollo o productos intermedios
13
. Se trata de documentos que
se comunican o entregan al cliente o al equipo de desarrollo
14
, que se producen o adquieren durante el
desarrollo o mantenimiento del software; por ejemplo, documentos de planificacin del proyecto (como
planes de desarrollo de software o planes de verificacin y validacin del software), especificaciones de
requisitos software, descripciones de diseo, cdigo fuente, etc. En la figura 14 vemos sobre qu se enfocan
los distintos mtodos.
Tabla5. Verificacin y validacin segn IEEE 1028
13
Tambin pueden encontrarse en la literatura anglosajona con los trminos work unit y software element.
14
En ingls, deliverables.
Figura 14. Enfoque de las distintas tcnicas de V&V
Comit de Confiabilidad - 45 -
Otras tcnicas menos importantes son las revisiones Desk Checking [49], [51], Round-Robin [52], y
Peer Ratings [49]. En las referencias [50] y [52] se pueden encontrar las diferencias ms concretas entre
las distintas variantes de revisin: revisiones de gestin, revisiones tcnicas, walkthroughs e inspecciones.
Hay que considerar aparte las auditoras de software, ya que presentan muchas diferencias de
proceso con las revisiones. Adems, se pueen utilizar para examinar tanto el proyecto como los productos
intermedios (ver tabla 6).
En cuanto a la recomendacin de utilizacin de estas tcnicas en los proyectos de desarrollo, se puede
aadir la lista incluida en el estndar IEEE 1012 [53] que se presenta en la tabla 7. Esta es una
recomendacin para software crtico que puede adaptarse a cada proyecto segn su nivel de riesgos.
Tabla 4. Comparativa entre revisiones y auditoras segn [50]
- 46 -
Comit de Confiabilidad
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Tabla 7. Recomendacin de revisiones y auditoras segn IEEE 1012 [53]
- 47 - Comit de Confiabilidad
Quizs el proceso ms formalizado de todos los de revisin es el de inspeccin. Las fases tpicas
de un proceso de inspeccin se resumen en la figura 15. Puede apreciarse que, al igual que en el resto de
procesos de revisin, se generan listas de defectos identificados que permiten el seguimiento para los
distintos aspectos de confiabilidad abordados en apartados anteriores.
Para que una inspeccin tenga xito debe seguir ciertas reglas:
Las inspecciones se realizan en un determinado nmero de puntos del ciclo de vida, tanto en el
proceso de planificacin del proyecto como en el proceso de desarrollo del sistema.
Se inspeccionan todas las clases de defectos posibles en todos los tipos de documentacin (no
slo errores lgicos o funcionales).
Figura 15. El proceso de inspeccin
(estndares, guas y procedimiento)
- 48 -
Comit de Confiabilidad
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Participacin en las inspecciones: pares y personal de todos los niveles jerrquicos exceptuando
la alta direccin.
Las inspecciones se deben realizar en una serie predefinida y estricta de etapas.
La duracin de las reuniones no deber exceder las dos horas .
Las inspecciones deben ser dirigidas por moderadores entrenados y experimentados (a travs de
prcticas en inspecciones) para lograr eficacia en su trabajo.
Los miembros del equipo de inspeccin tienen asignados papeles especficos para incrementar
su efectividad.
Se usan listas de comprobacin para que los miembros del equipo de inspeccin tengan su tarea
definida y para incrementar el descubrimiento de los defectos.
Mtricas y evaluacin de calidad
La evaluacin de la calidad del software se basa en la utilizacin de modelos de calidad para
abarcar sus distintas facetas. Fundamentalmente, ha sido el modelo de McCall et al. [8] (ver figura 16) el
que ha inspirado ms variantes hasta la aparicin de los estndares actuales (principalmente ISO 9126 [2]:
ver figura 17). Todos ellos descomponen la calidad en sub-caractersticas ms fciles de medir o evaluar.
Figura 16. Modelo de evaluacin de calidad de McCall
- 49 - Comit de Confiabilidad
En cualquier caso, estos modelos no son operativos sin tener en cuenta las siguientes
consideraciones:
Son modelos de referencia que deben personalizarse para cada proyecto en funcin de las
necesidades expresadas para el cliente o usuario del software. Eso implica ponderar los distintos
factores y marcar criterios para su medicin con valores umbrales de aceptacin.
Los distintos factores no son independientes. No es posible maximizar todos ellos puesto que, en
algunos casos, existen relaciones de antagonismo. As , por ejemplo, la eficiencia del software tiene
una relacin inversa con la portabilidad del software ya que la eficiencia mxima suele exigir utilizar
todos los recursos propios de cada plataforma.
La evaluacin de cada caracterstica debe apoyarse en mtricas de software lo ms objetivas
posible y que estn validadas. La validacin en el mbito de la medicin significa poder demostrar
que una mtrica realmente mide lo que dice medir. El problema habitual es que existen mtricas
conocidas que no siempre cuentan con validacin adecuada. Para una panormica general de la
medicin de software y sobre la problemtica de la validacin, es recomendable consultar el libro
de Fenton y Pfleeger [14].
Figura 17. Modelo estndar ISO 9126 para evaluacin de calidad de software
- 50 -
Comit de Confiabilidad
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Otras consideraciones sobre aseguramiento de calidad
Es importante recordar que estas tcnicas son caras y que su uso debe adaptarse a cada entorno
tanto para ser eficaz (incorporndose con facilidad a la vida diaria del equipo de desarrollo) como para ser
ms eficiente y rentable. Por ejemplo, los procesos de revisin de todo el cdigo de una aplicacin suelen
ser inabordables por su coste. Para buscar mayor eficiencia, se suele establecer unos anlisis previos con
herramientas basados en patrones de mtricas y reglas a cumplir. Aplicando el principio de Pareto, la
empresa slo aplica inspecciones a los trozos de cdigo ms crticos o con peores evaluaciones en dicho
anlisis para concentrar el esfuerzo disponible en los mdulos que puedan acumular ms defectos y ms
peligrosos. Otra tctica, que puede ser complementaria, consiste en disminuir esfuerzo automatizando
tareas de evaluacin con herramientas y disminuyendo el nmero de revisores implicados.
En cualquier caso, la aplicacin de acciones apropiadas de aseguramiento de calidad de software
permite, al menos, estabilizar tiempos de entrega y niveles de calidad (como en la experiencia presentada
por Yasuda [54]). Son bastante frecuentes los estudios y publicaciones que demuestran mejoras de
productividad y rentabilidad basadas en disminuir retrabajo y minorar efectos adversos causados por
defectos y fallos en el software: los llamados costes de la mala calidad descritos por Harrington [55]
Ya en los aos ochenta, los programas corporativos pioneros en Hewlett-Packard [56] demostraron
cmo se podan compatibilizar actividades de aseguramiento de calidad, medicin de resultados y objetivos
corporativos basados en la rentabilidad, disminucin de break-even time y reduccin de defectos. La
reduccin de defectos supone un ahorro de costes debido a los ya mencionados costes de la mala calidad:
retrabajo, indemnizaciones, prdida de imagen. Como ya descubri IBM hace tiempo y se describe en [55],
cada dlar dedicado a prevencin supone el ahorro de 50 dlares despus. Por ello, el aseguramiento
debe ser especialmente insistente en proporcionar medios de deteccin y correccin temprana de defectos
(ver tabla 2).
- 51 - Comit de Confiabilidad
Algunas ideas sobre el mantenimiento de software
La eliminacin de defectos durante la vida operativa de un sistema se denominan mantenimiento
correctivo o preventivo. El mantenimiento correctivo pretende eliminar defectos que han producido uno o
ms errores y que han sido reportados mientras que el mantenimiento preventivo pretende descubrir y
eliminar defectos antes de que puedan causar errores durante la operacin normal del sistema. Entre estos
ltimos defectos se podran incluir tanto defectos fsicos que hayan ocurrido despus del ltimo
mantenimiento preventivo como defectos de diseo que hayan llevado a errores en otros sistemas similares.
Las tcnicas y consejos ya explicados en el apartado 2.3 se aplican ms al mantenimiento
correctivo. Por otra parte, en el software se contemplan distintas estrategias y tcnicas para facilitar los
distintos tipos de mantenimiento: por ejemplo, ingeniera inversa, reingeniera, anlisis de cdigo,
recuperacin de diseo, reestructuracin, etc. Una buena explicacin de las mismas se encuentra en el libro
de Piattini et al. [15]. La mayora de estas tcnicas ha recibido un impulso importante gracias a la existencia
de herramientas automaticas que asisten en el proceso de anlisis y recuperacin de informacin para el
mantenimiento a partir del cdigo de la aplicacin.
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 52 -
4. ALGUNAS CONSIDERACIONES
ADICIONALES
En el mbito de la confiabilidad tambin se menciona el concepto de capacidad de supervivencia
(survivability), surgido principalmente a finales de los aos sesenta y principios de los setenta del siglo XX
en estndares militares (por ejemplo, MIL-STD-721 o DOD-D-5000.3). Se defini en dicho momento como
la capacidad del sistema para resistir en un entorno hostil de tal forma que pudiera cumplir su misin segn
indica Avizienis [5]. La confiabilidad ha evolucionado desde los conceptos de fiabilidad y disponibilidad a
travs de la evolucin tecnolgica de la informtica y de las comunicaciones para dar respuesta adecuada
a los desafos de aplicaciones en red y la necesidad creciente de confianza en la informtica ubicua. As,
la capacidad de supervivencia entendida como capacidad de un sistema para continuar con su misin en
presencia de ataques, fallos o accidentes, ha evolucionado desde los asuntos de pura seguridad y ha
ganado inters debido a la frecuencia y gravedad de ataques de adversarios inteligentes sistemas de
informacin crticos. Desde la perspectiva de la confiabilidad la capacidad de supervivencia es la
confiabilidad en presencia de defectos activos de todo tipo. La relacin entre ambas se percibe como
estrecha cuando observamos las 3 R de la capacidad de supervivencia descritas por Lipson [57]:
Resistencia: capacidad de repeler ataques. Se relaciona en confiabilidad con la prevencin de
defectos.
Reconocimiento: capacidad de reconocer ataques y la extensin de los daos.
Recuperacin: capacidad de restaurar los servicios esenciales durante el ataque y recuperar el
servicio completo tras el mismo, junto con el reconocimiento. Tiene mucho que ver con tolerancia
a defectos.
En cualquier caso, ambas caractersticas van ms all de los enfoques tradicionales basados en
evitar defectos.
Comit de Confiabilidad
5. REFERENCIAS
- 55 -
[1] IEEE, IEEE Standard 610. Computer dictionary. Compilation of IEEE Standard Computer Glossaries,
Institute of Electrical and Electronics Engineers, 1993.
[2] ISO, ISO 9126. Information technology. Software product evaluation. quality characteristics and
guidelines for their use, International Organization for Standardization, 2001.
[3] ISO, ISO 14598-1. Information technology software product evaluation. Part I: general overview,
International Organization for Standardization, 2001.
[4] J.C. Laprie. Dependability: Basic Concepts and Terminology. Springer Verlag, Vienna, Austria, 1992.
[5] A. Avizienis, J.-C. Laprie and B. Randell, Fundamental Concepts of Dependability, Research Report
N01145, LAAS-CNRS, abril, 2001.
[6] IEEE, IEEE Std 1044.1-1995 IEEE Guide to Classification for Software Anomalies -Description, Institute
of Electrical and Electronics Engineers, 1995
[7] IEEE, IEEE Std 1044-1993 IEEE Standard Classification for Software Anomalies Description, Institute
of Electrical and Electronics Engineers, 1993.
[8] J.A. McCall, P.K. Richards y G.F. Walters, Factors in software quality, vols. I, II y III, US Rome Air
Development Center Reports NTIS AD/A-049 014, 015, 055, 1977.
[9] A. Avizienis, J-C., Laprie, B. Randell, Fundamental Concepts of Computer System Dependability,
IARP/IEEE-RAS Workshop on Robot Dependability: Technological Challenge of Dependable, Robots in
Human Environments, 2001.
[10] European Cooperation for Space Standardization, Space product assurance. Methods and techniques
to support the assesment of software dependability and safety, Draft ECSS-Q-80-03, ESA-ESTEC, marzo,
2006.
[11] R.S. Pressman, Ingeniera del software. Un enfoque prctico, McGraw-Hill, 2005.
[12] M.L.Shooman, Software Engineering Design, Reliability, And Management, McGraw-Hill, 1983
Comit de Confiabilidad
[13] B. Randell, Approaches to Software Fault Tolerance, Proc. the 25th Annual LAAS Conference,
Toulouse, France, 1993, p. 33-42.
[14] N.E. Fenton y S.L.Pfleeger, Software metrics. A rigorous and practical approach, PWS, 1997.
[15] M. Piattini, J.A. Calvo-Manzano, J.Cervera, L. Fernndez, Anlisis y diseo de aplicaciones informticas
de gestin, Un enfoque de ingeniera del software, Ra-Ma, 2004.
[16] G. J., Myers, The art of software testing, Wiley and sons, 1979.
[17] J. Voas y C. McGraw, Software fault injection: inoculating programs against errors, Wiley and sons,
1997.
[18] Z. Jelinski and Paul B. Moranda. Software Reliability Research. In W. Freiberger, editor, Statistical
Computer Performance Evaluation. Academic Press, 1972.
[19] J. Musa, A Theory of Software Reliability and Its Application, IEEE Trans. on Soft. Eng., Sept. 1975,
pp 312-327.
[20] B. Littlewood, A software reliability model for modular program structure, IEEE transactions on
Reliability, vol. 28, n 3, pp.241-246, 1979.
[21] B. Littlewood y J.L.Verrall, A bayesian reliability growth model for computer software, Journal of the
Royal Statistical Society, C22, pp. 332-334, 1973.
[22] M. Dyer, The cleanroom approach to quality software development, Wiley and sons, 1992.
[23] R. Linger, Cleanroom process model, IEEE Software, vol. 11, n 2, marzo 1994, pp. 50-58.
[24] C. Jones, Estimating software costs. McGraw-Hill, 1998.
[25] L. Fernndez, Requisitos para el empleo en Nuevas Tecnologas de la Informacin: el estudio
RENTIC, Novtica, n161, 2003, pp. 51-56.
[26] W.S. Humphrey, Introduccin al proceso software personal. Addison-Wesley, Madrid, 2001.
[27] L. Fernndez y M. J. Garca, Software engineering professionalism, Upgrade, n 4, 2003, pp. 59-66.
[28] T. K. Abdel-Hamid y S. Madnick, Software project dynamics. An integrated approach, Prentice-Hall,
1991.
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 56 -
[29] F. Brooks, The mythical man-month, Addison-Wesley,1975.
[30] G.G. Schulmeyer, The net negative producing programmer. American Programmer, n 6 (1992).
[31] S. McConnell, Desarrollo y gestin de proyectos informticos. Cmo dominar planificaciones ajustadas
de software. McGraw-Hill, 1997.
[32] B. W. Boehm, Software engineering economics. Prentice-Hall, 1981.
[33] C. Jones, Assessment and control of software risks, Yourdon Press, 1994.
[34] CMMi product team, CMMI for Development, Version 1.2. CMU/SEI-2006-TR-008, Carnegie-Mellon
SEI, agosto 2006.
[35] ISO/IEC Commission, ISO/IEC 15504-3:2004. Information technology: Process assessment. Part 3:
Guidance on performing an assessment, ISO, 2003.
[36] ISO, UNE-ISO 9001. Sistemas de gestin de calidad. Requisitos. AENOR, 2000.
[37] I. Jacobson, J. Rumbaugh y G. Booch, The Unified Software Development Process. Addison-Wesley,
1999.
[38] K. Beck, Una explicacin de la programacin extrema: aceptar el cambio, Addison Wesley, 2002.
[39] OMG, UML 2.0 Superstructure Specification, OMG Adopted Specification, ptc/03-08-02, Object
Management Group, agosto, 2003.
[40] M. C. Paulk, C.V. Weber, S. M. Garcia, M. B. Chrissis y M. Bush, Capability Maturity Model For Software
v. 1.1., Software Engineering Institute, 1993.
[41] Software Engineering Institute, Software CMM CBA-IPI and SPA Appraisal results. 2003 Mid-Year
Update. Software Engineering Institute, 2003.
[42] Herbsleb, J. et al.: Benefits of CMM-based software process improvement: initial results. CMU-SEI-94-
TR-013. Software Engineering Institute, Pittsburgh (1994).
[43] B. A. Kitchenham, Evaluating software engineering methods and tools. Part I. ACM Software engineering
notes, vol. 21, n 1, 1996, pp. 11-15.
Comit de Confiabilidad - 57 -
[44] AENOR, UNE-ISO/IEC 90003. Ingeniera del software. Gua de aplicacin de la ISO 9001:2000 al
software, AENOR, julio, 2005.
[45] IEEE, Std. 730, Standard for Software Quality Assurance Plans. IEEE, 1998.
[46] W.R. Adrion, M. A. Branstad y J. C. Cherniavsky, Verification, Validation, and testing of Computer
Software. ACM Computing Surveys, vol. 14, n 2, 1982, 159-192.
[47] D.R. Wallace y R.U.Fuji, Software Verification and Validation: An Overview, IEEE Software, vol. 6, n 3,
mayo/junio 1989, pp. 10-17
[48] IEEE, IEEE Std. 1008-1986.Standard for Software Unit Testing, IEEE, 1987.
[49] G. J. Myers, The Art of Software Testing, Wiley and Sons, 2004.
[50] IEEE, IEEE Std. 1028-1997, Standard for Software Reviews and Audits, IEEE Computer Society, junio,
1997.
[51] Dunn, R. H., Software Defect Removal, McGraw-Hill, 1984.
[52] D. P. Freedman y G. M. Weinberg, Handbook of Walkthroughs, Inspections and Technical Reviews, Little
Brown & Company, 1982.
[53] IEEE, IEEE Std. 1012-1998, Standard for Software Verification and Validation Plans, IEEE Computer
Society, 1998.
[54] K. Yasuda, Software quality assurance in Japan en N. Fenton y B. Littlewood (eds.): Software reliability
and metrics. Elsevier Science Pub., 1991.
[55] H. J. Harrington, El coste de la mala calidad. Daz de Santos, 1990.
[56] R. B. Grady, D. L. Caswell, Software metrics. Prentice-Hall, 1994.
[57] H.F. Lipson. Survivability A new security paradigm for protecting highly distributed mission-critical
systems 38th meeting of IFIP WG 10.4, Kerhonson, New York, June 28-July 2, 2000, pp. 63-89 (disponible
en LAAS-CNRS).
FUNDAMENTOS DE LA CONFIABILIDAD EN EL DESARROLLO DE SOFTWARE: ENFOQUE Y PREVENCIN
Comit de Confiabilidad
- 58 -
Comit de Confiabilidad
- 59 -
Luis Fernndez Sanz es licenciado en informtica por la Universidad Politcnica de Madrid (1989)
y doctor en informtica por la Universidad del Pas Vasco (1997) con Premio Extraordinario de Doctorado.
Ha sido profesor en la Facultad de Informtica de la Universidad Politcnica de Madrid (1989-1996) en las
reas de ingeniera de software y de sistemas de informacin. En 1996 se integra en la Universidad Europea
de Madrid (UEM) centrado en las reas de ingeniera del software y programacin. En 2000 fue nombrado
profesor titular y en el perodo 2000-06 fue director de uno de los departamentos del rea de informtica.
Actualmente, es profesor en el Departamento de Ciencias de la Computacin de la Universidad de Alcal.
En 2005 recibi el 1
er
Premio en la segunda edicin de los Premios de Innovacin Docente de la UEM. Ha
sido profesor o docente invitado en diversos master y postgrados de universidades de toda Espaa, adems
de intervenir como director o profesor en ms de 30 cursos sobre ingeniera y calidad del software tanto en
modalidad in-company como en convocatoria abierta para profesionales y empresa
En el mbito de la I+D y en su ejercicio profesional y docente vinculado a la empresa, se ha
centrado en la ingeniera y la calidad del software. As, ha dirigido y participado en diversos proyectos de
consultora y servicios para entidades como Ministerio de Asuntos Exteriores, Meta4, France Telecom,
Vodafone, etc. y tambin ha dirigido como administrador nico una pequea compaa de servicios de
desarrollo de software. Tambin ha dirigido o participado en diversos proyectos de I+D financiados tanto por
entidades pblicas como privadas. Ha sido autor o coautor de diversos libros de texto y de investigacin
tanto en espaol como en ingls relacionados con la ingeniera y la calidad del software adems de
numerosas comunicaciones en congresos y artculos de revista en mbito nacional e internacional.
Desde 1993 es coordinador de la Seccin de Ingeniera del Software de la revista Novtica
(www.ati.es/novatica). En 2005 lanz la Revista Espaola de Innovacin, Calidad e Ingeniera del Software
(www.ati.es/reicis) de la que es editor. Tambin coordina el grupo de Calidad del Software de ATI desde 2000
siendo responsable de la organizacin de sus sesiones tcnicas y de las Jornadas de Innovacin y Calidad
del Software.
6. SOBRE EL AUTOR

Vous aimerez peut-être aussi