Defectos del software y sus consecuencias

 

Dentro del contexto de desarrollo de software, los términos "defecto" y "fallo" son sinónimos. Ambos implican un problema de calidad descubierto después de entregar el software a los usuarios finales.

El objetivo primario de las revisiones técnicas formales (inspección) es encontrar errores durante el proceso para evitar que se conviertan en defectos después de la entrega del software. El beneficio obvio de estas inspecciones es el descubrimiento de errores al principio para que no se propaguen al paso siguiente del proceso de desarrollo del software (catarata de errores de Mizuno).
Una serie de estudios (TRW, Nippon Electric y Mitre Corp., entre otros) indican que las actividades del diseño introducen entre el 50% y 65% de todos los errores(y en último lugar, todos los defectos) durante el proceso de software. Si embargo se ha demostrado que las inspecciones de software son efectivas en un 75% a la hora de detectar errores.
Con la detección y la eliminación de un gran porcentaje de errores, el proceso de inspección reduce substancialmente el costo de los pasos siguientes en las fases de desarrollo y mantenimiento.
Para ilustrar el impacto sobre el costo de la detección anticipada de errores, consideremos una serie de costos relativos que se basan en datos de costos realmente recogidos en grandes proyectos de software. Supongamos que un error descubierto durante el diseño cuesta corregirlo 1,0 unidad monetaria. De acuerdo a este costo , el mismo error descubierto justo antes de que comience la prueba costará 6,5 unidades; durante la prueba 15 unidades; y después de la entrega, entre 60 y 100 unidades.

En software, un bug es un error en la codificación o en la lógica, que provoca el funcionamiento deficiente del programa o resultados incorrectos. Los bugs menores, por ejemplo un cursor que no se comporta como está previsto, pueden ser incómodos, pero no dañan la información. Los bugs más graves pueden provocar que un programa se bloquee o se cuelgue (deje de responder a los comandos), lo que obliga al usuario a reiniciar el programa, perdiendo todo el trabajo que no haya guardado con anterioridad o permiten un acceso no autorizado en sistemas informáticos ajenos. Conocidos también como Agujeros de seguridad (holes), fallas de seguridad,.... En uno u otro caso el programador deberá buscar y corregir el error empleando el proceso denominado depuración. Debido al potencial riesgo que representa para los datos importantes, los programas de aplicación comerciales son comprobados y depurados lo más posible antes de su lanzamiento. Los bugs menores detectados después del lanzamiento del programa son corregidos en la siguiente actualización. Los bugs más severos a veces pueden solucionarse con software especial, denominado parche, que evita el problema o alivia de algún modo sus efectos. Como dato curioso propongo la visita del siguiente enlace donde se citan los 10 bugs más famosos: Bugnet Top 10 bugs. Uno de los peores desastres originados por la existencia de bugs es sin lugar a dudas la existencia y proliferación de virus.

El siguiente extracto expone con multitud de detalles la historia de los virus informáticos, cómo aparecieron, los defectos y errores del software que los originaron, así como otros datos curiosos:

La historia de los virus

Podemos afirmar que el principal culpable de la propagación de los virus en un programa es el programador que ignora la existencia de bugs en su sistema. No obstante hay algunos comentarios y críticas interesantes sobre quién es el "verdadero" culpable en la existencia de defectos software... Cito a continuación un curioso artículo:

Las verdaderas culpas de Microsoft

El juicio en curso defiende a las empresas, pero no a los usuarios.

El proceso jucidial contra Microsoft fue postergado a causa del trágico ataque a los Estados Unidos, y no hace falta decir que la medida es comprensible.
La postergación del juicio coincide con la aparición del virus Nimda. Apareció el martes y pocas horas después había noticias de muchos sitios golpeados por el recién llegado.
La nueva vedette del mundo de los virus se manifiesta como una especie de combinación potenciada de los dos últimos virus que han sembrado el pánico en la Red: SirCam y Code Red.
Hemos dicho hasta el aburrimiento que todos estos virus aprovechan los muchísimos defectos del software de Microsoft. Lo repetimos claramente: no es exacto definirlos "virus de computadoras". La terminología exacta es "virus de Windows", porque son todos virus que afectan los varios softwares de Microsoft. Si Windows no existiera, desaparecería el 99,9% de los virus y las computadoras vivirían felices y contentas. Por lo tanto, he aquí el tema de fondo: la responsabilidad de Microsoft, la verdadera, que trasciende la judicial.
¿Nunca la justicia castigará a una empresa que expone a sus usuarios a la destrucción total o parcial de las informaciones? ¿No es un caso digno de ser examinado? ¿Vender productos defectuosos (y con efectos colaterales dañinos) no es delito? Si esto es válido para todos los productos, ¿por qué no debería serlo para el software?
A veces surge la duda de que Microsoft esté siendo juzgada por un delito equivocado. Su vocación monopólica perjudica a empresas de su mismo nivel, que podrían responder a la ofensiva con un comportamiento análogo. Hagan también los otros un sistema operativo y luchen comercialmente con Windows. La justicia se preocupa por defender los derechos de los gigantes de la informática. Y en cambio los usuarios no pueden pedir la restitución del dinero que han pagado por un software defectuoso.
Si fuera por los usuarios, la actual causa contra Microsoft no sólo podría ser postergada, sino también sepultada. De hecho, para los usuarios y para el uso cotidiano que se hace de una computadora, Microsoft es juzgada por un delito equivocado. El problema no es tanto el monopolio: el problema verdadero son los virus que nacen de los defectos del producto que nos venden, de los miles de datos perdidos, de los cientos de veces que hay que reinstalar Windows, del tiempo que se pierde cuando se bloquea la computadora, del tiempo perdido bajando patchs. ¿Quién juzgará a Microsoft por todo esto?

El artículo no tiene desperdicio.. Si bien queda claro que el sistema operativo que se use también constituye un factor sumamente determinante para evitar la existencia de defectos. Es interesante la fabricación y uso de software de fuente abierta que representa un importante avance en la lucha contra los defectos del software, destaca el sistema Linux como pionero de este método:

El software de fuente abierta y la revolución Linux

En agosto de 1999, el sistema operativo Linux pasó a ser el sistema operativo que más rápidamente crecía en el mundo. A diferencia de “Windows NT”, de Microsoft, el competidor más popular, Linux no era desarrollado por una sola compañía, sino gracias al esfuerzo de miles de programadores de todo el planeta, quienes aportaban nuevas características, ponían a prueba nuevas versiones, y preparaban “parches” para corregir los errores durante las pruebas. Un puñado de diseñadores de software sumamente diestros coordinaban las actividades del proyecto, y resultaba curioso que el más importante de ellos ni siquiera trabajara en él a tiempo completo. El enfoque dado al desarrollo, que se fundamenta en un acceso sin restricciones a la base del código del producto mientras evoluciona, se conoce como “desarrollo de fuente abierta”. Hacia 1999, proyectos de fuente abierta como el Linux habían logrado amplio reconocimiento en la prensa de negocios. Sus raíces, con todo, pueden rastrearse hasta los comienzos de la era de la cibernética.

 

Importantes desastres históricos originados por Defectos Software:

 

Desaparición Mars Climate Orbiter

El fracaso es atribuido a un error de navegación del control de Tierra.
El 23 de setiembre de 1999 la sonda Mars Climate Orbiter de los EE.UU. desaparece mientras orbita el planeta Marte minutos después de haberse realizado una corrección de órbita desde el control de misión en Tierra.

El desconcertante suceso se confirma al no poder reestablecerse contacto con la misma luego de haberse ocultado transistoriamente tras el planeta mientras completaba una nueva órbita.

El anuncio es realizado oficialmente horas mas tarde a través de un comunicado emitido por el Laboratorio de Propulsión a Chorro desde Pasadena (California) precisándose que una significativa discrepancia entre la altura de vuelo planeada (150 kms) y la presuntamente real (60 kms) con que navegaba la nave la habría llevado a su destrucción, dándosela finalmente por perdida.

Una semana mas tarde un comunicado conjunto del Laboratorio de Propulsión a Chorro y de la corporación Lockheed Martin Astronautics proveedora del ingenio identifican como causa probable del fatal error de navegación la utilización por parte del control de misión de unidades de medidas anglosajonas en vez de unidades de medidas metricas decimales según fuera estipulado por el fabricante.

La sonda había sido lanzada en diciembre de 1998 por la NASA con el propósito de obtener información sobre el clima de Marte a un costo de 125 millones de dolares.

Un error inverosímil
Una rápida evaluación sobre la índole de la causa declarada del problema genera una razonable incredulidad. La experiencia acreditada por la NASA luego de una decena de misiones enviadas al planeta rojo sugieren como muy improbable que el control de misión haya podido generar instrucciones erróneas en base a un desvío tan significativo para programar su puesta en órbita como el que produciría la confusión de tales unidades de medida sin que ningún sistema lo hubiese detectado.
La gravedad de la falla, segun admitió oficialmente el director del Proyecto Richard Cook, se basa en la incapacidad de no haber podido detectar y corregir el error luego de mas de 8 meses (de navegación pasiva) por lo cual se ha iniciado una profunda investigación.
En el plano de las conjeturas, la información oficial permite suponer que la programación del lanzamiento aceleración y puesta en trayectoria hacia Marte se ha llevado a cabo con las unidades de medidas 'adecuadas' dado que de otra forma probablemente la sonda nunca habría llegado a destino. La misión de la sonda ademas de de recoger información climática contemplaba la de servir como una subestación de comunicaciones para una futura misión tripulada.
La desaparición de la sonda Mars Polar Lander, en diciembre de 1999 y de Mars Climate Orbiter tres meses antes se suman a otros dos recientes y enigmáticos incidentes en la exploración espacial.

Durante el mes de julio pasado la sonda Deep Space 1 fracasó misteriosamente en obtener fotos detalladas del asteroide Braille al sobrevolarlo a muy corta distancia.

Un mes mas tarde el orbitador lunar Clementine, lanzado durante 1997 en una misión conjunta de la NASA y del Departamento de Defensa de EE.UU. desapareció sin dejar rastros luego de ser dirigido, en trayectoria de colisión, hacia un cráter del polo sur de la Luna en el último acto de su misión de explorar la superficie lunar en búsqueda de evidencias de agua.

 

 

EXPLOSION DEL TRANSBORDADOR CHALLENGER

La Comisión Presidencial que investigó la pérdida del trasbordador espacial Challenger y sus siete astronautas concluyó que la explosión fue causada por un sello “O-ring” defectuoso en uno de sus motores cohetes. Esto permitió que las llamas escaparan e incendiaran el tanque de combustible externo. El reporte de la Comisión fue publicado en junio de 1987, desde entonces el accidente del Challenger ha sido objeto de estudio intensivo por parte de la socióloga del Boston College, Diane Vaughan.

El trabajo ha sido publicado recientemente y representa uno de los más detallados y más completos análisis alguna vez realizado de un accidente organizacional. Desafía a la ampliamente difundida idea que el accidente ocurrió debido a que la NASA y su principal contratista Morton Thiokol, no realizaron su trabajo de manera apropiada. La impresión a la que conduce el reporte de la Comisión Presidencial y lo que da cuenta la prensa, es que las decisiones falibles fueron realizadas por el management intermedio, presentes en la teleconferencia en la víspera del lanzamiento. La crítica que se recibía era que esos managers, conducidos por presiones de producción y políticas por parte de la NASA, hicieron la vista gorda a los defectos del “O-ring”, violando reglas de seguridad y continuaron adelante con el lanzamiento para cumplir con los plazos del programa. Estos análisis estaban focalizados en fallas individuales. Como lo expresa Diana Vaughan “se transmitía la imagen de managers perversos, por lo que el accidente aparecía como una anomalía: una peculiaridad de individuos quienes eran responsables de las tomas de decisiones en ese momento” Las propias conclusiones de Diane Vaughan eran opuestas. Ella argumentaba que el accidente sucedió debido a que todos aquellos involucrados en el accidente hicieron precisamente lo que se esperaba que hicieran.

“Se podría decir en verdad que la decisión del lanzamiento del Challenger fue una decisión basada en las reglas. Pero la comprensión de las reglas, procedimientos y normas que siempre habían funcionado en el pasado, no lo hicieron en esta oportunidad. No fueron los calculadores y amorales managers, violadores de reglas quienes fueron responsables de la tragedia: Fue la conformidad” (la conformidad a las reglas). Además ella encontró que la tragedia del Challenger no se trató de una anomalía peculiar de la NASA. Tenía características comunes con otras organizaciones. Lo que inexorablemente condujo a la NASA a la tragedia fue la insidiosa erosión de los estándares con los que se habían regulado a sí mismos.

 

CHERNOBYL

En Ucrania, a unos 100 kilómetros al sur de Kiev el 26 de abril de 1986 a la 1:23 hs. de (Moscú) el rector numero 4 de la central nuclear de Chernobyl sufre el mayor accidente nuclear conocido en su tipo hasta el presente.
Solo 90 minutos después de haberse decidido reducir paulatinamente la potencia de generación para iniciar un test en el circuito refrigerador del reactor una suma de circunstancias atribuibles a fallas en los sistemas de control, la riesgosa desactivación del sistema de seguridad exigida por el test y la ineficaz actuación de los operadores ante la emergencia desatan la catástrofe.
A solo 2 minutos de haberse iniciado una incontrolada generación de vapor en el núcleo del reactor queda fuera de control, superando en 100 veces los máximos admitidos; estallan por sobrepresion los conductos de alimentacion y la coraza protectora de grafito del núcleo produciendose un pavoroso incendio y la expulsión al exterior de 8 toneladas de combustible radiactivo tras una doble explosión.

Las consecuencias de la catástrofe afectaron a un área con casi 5 millones de habitantes. Las brigadas especializadas enfrentaron la heroica tarea de sofocar los incendios y neutralizar las fugas radiactivas, al menos 30 de sus integrantes morirán por exposición radiactiva letal.

Las poblaciones en un radio de 30 kms. fueron definitivamente evacuadas de las cuales 40.000 eran habitantes de ciudad de Chernobyl. La catástrofe inicialmente disimulada por Rusia trascenderá al propagarse la radiación por toda Europa.
Una década y media mas tarde la evaluación de víctimas totales por contaminación directa o por consecuencias indirectas de la catástrofe ascendía a 20.000 personas muertas o con pronástico fatal debido a las afecciones contraidas debido a la radiación y cerca de 300.000 aquejadas por distintos tipos de cáncer.

 

Explosión ARIANE 5

En 1995, un profesor de matemáticas de la universidad de Lynchburg descubre un error en los procesadores Pentium de la compañía Intel. Aunque Intel corrigió rapidamente el error y se comprometió a reemplazar los procesadores, el daño ya estaba hecho. Cerca de dos millones de procesadores defectuosos habían sido distribuidos alrededor del mundo. La falla: un error de diseño en el algoritmo de división de punto flotante.

Apenas un año después, la explosión de la nave espacial europea Ariane 5, 40 segundos después de su lanzamiento, nos volvió a recordar que los sistemas informáticos no son infalibles. Los reportes oficiales indican que la perdida alcanzó los 500 millones de dolares. La comisión de expertos que investigó el desastre concluyó que la falla, un número fuera de rango, se produjo en una pedazo de código heredado del sistema de Ariane 4. Lo irónico del caso, es que este código no tenía ninguna utilidad en el nuevo sistema.

 

Accidente China Airlines

En Abril de 1994 un Airbus despegó del Aeropuerto de Taipei, cuando se aproximaba a su destino (Nagoya), impactó contra el suelo, muriendo en el accidente 264 personas (249 pasajeros ,2 niños y 15 tripulantes) y 7 heridos graves.

De acuerdo con los investigadores, la caída del avión se habría producido por una falla en el motor que provocó la explosión de la turbina izquierda. También, las autoridades han determinado que la torre de control perdió contacto, tanto a nivel de radar y radio, con el vuelo 587 de American Airlines que se dirigía a República Dominicana, cuatro minutos después del despegue. No obstante, hasta ese momento no se produjo ninguna comunicación con el piloto sobre alguna anomalía en el avión.

 

Otros Accidentes Aéreos

Algunos de los accidentes aéreos más trágicos desde 1991 son:

26/5/1991.- Fallecen las 223 personas que viajaban en un Boeing 767-300 de la compañía austríaca Lauda Air tras estallar a causa de un fallo mecánico cuando sobrevolaba Tailandia.
11/7/1991.- Mueren los 261 ocupantes de un DC-8 alquilado por las Líneas Aéreas Nigerianas, tras estrellarse en el aeropuerto de Yida (Arabia Saudí) nada más despegar.
31/7/1992.- Mueren las 113 personas que iban en un Airbus A310-300 de la compañía tailandesa Thai Airways tras estrellarse cuando se disponía a aterrizar en Katmandú.
28/9/1992.- Mueren las 167 personas que viajaban en un Airbus-300 de la compañía paquistaní PIA tras estrellarse durante las maniobras de aproximación al aeropuerto de Katmandú.
19/5/1993.- Se estrella un Boeing 727 de la compañía colombiana SAM cerca del aeropuerto de Medellín, en el noroeste del país, y mueren sus 132 ocupantes.
26/4/1994.- Un total de 264 muertos tras estrellarse un Airbus A-300 de la compañía taiwanesa China Airlines en el aeropuerto de Nagoya, a unos 250 kilómetros al oeste de Tokio.
20/12/1995.- Mueren 165 personas y cuatro sobreviven tras estrellarse cerca de Cali (Colombia) un avión de la aerolínea estadounidense American Airlines procedente de Miami (EEUU).
8/1/1996.- Al menos 297 muertos tras estrellarse un avión de carga Antonov 32 en un céntrico mercado de Kinshasa.
7/2/1996.- Mueren 189 personas tras caer al Atlántico un Boeing 757 de la compañía turca Birgen Air frente a las costas dominicanas, nada más despegar de Puerto Plata.
29/2/1996.- Mueren las 123 personas que iban en un Boeing 737 de la compañía peruana Faucett, tras estrellarse el aparato cerca del aeropuerto de Arequipa.
17/7/1996.- Mueren los 230 ocupantes de un Jumbo 747 de la compañía estadounidense TWA tras estallar en el aire después de despegar de Nueva York rumbo a París.
12/11/1996.- Un total de 349 muertos en un choque en el aire de dos aviones en las proximidades de Nueva Delhi, un Boeing 747 de las líneas saudíes con 312 personas a bordo y un Ilyushin-76 kazajo con 37 ocupantes.
26/9/1997.- Mueren los 234 ocupantes de un Airbus A300 de la compañía Garuda Indonesia que se estrelló poco antes de aterrizar en el aeropuerto de Medan, en el norte de la isla de Sumatra.
16/2/1998.- Un Airbus 300-600 de China Airlines se estrella contra unas viviendas junto al aeropuerto de Taipei y mueren 203 personas, de ellas siete en tierra.
2/9/1998.- Mueren los 229 ocupantes de un MD-11 de la compañía suiza Swissair caído al Atlántico tras declararse un incendio a bordo. Entre los pasajeros figuraban varios funcionarios de la ONU y el experto mundial en sida Jonathan Mann.
11/12/1998.- Fallecen 101 personas a bordo de un Airbus A-310 de la compañía tailandesa Thai y otras 45 sobreviven, tras estrellarse el avión en una zona pantanosa a unos 800 kilómetros al sur de Bangkok.
31/10/1999.- Mueren los 217 ocupantes de un Boeing 767 de la aerolínea egipcia EgypAir con destino a El Cairo, caído al Atlántico poco después de despegar de Nueva York.
30/1/2000.- Un Airbus 310 de Kenya Airways se estrella en el Atlántico poco después de partir desde Abiyán (Costa de Marfil) con 169 pasajeros y diez tripulantes. Hubo una decena de supervivientes.
25/7/2000.- Un avión Concorde de la compañía Air France con destino a Nueva York se estrella cerca del aeropuerto parisiense de Roissy con 114 personas a bordo, todas ellas fallecidas.
4/10/01- Un avión de la compañía rusa Sibir que volaba de Tel Aviv a la ciudad siberiana de Novosibirsk con 78 personas a bordo cae al Mar Negro tras estallar en el aire, posiblemente a causa de un misil disparado por error durante unas maniobras de las fuerzas armadas ucranianas.
8/10/01.- Mueren 118 personas tras chocar en las pistas del aeropuerto de Linate, en Milán (Italia), un avión con 104 pasajeros de la compañía escandinava SAS y una avioneta privada.

 

Desafortunadamente estos ejemplos no son los únicos. Aunque de menor transcendencia, los sistemas informáticos que hacen parte del día a día del ciudadano común también fallan. Algunas compañías y desarrolladores de software y hardware empiezan a tomar en serio dichas fallas. Los sistemas libres de errores se convierten entonces en una ventaja competitiva.

 

 

Análisis de Riesgos

La administración de riesgos no trata con decisiones futuras, sino con las futuras consecuencias de decisiones actuales.
Los desastres del software pueden ser evitados por una explícita preocupación temprana por identificar y resolver elementos de alto riesgo. Así, a modo de ejemplo, adjunto las reglas del SEI para hacer frente a los riesgos del software:

Descripción del Paradigma del SEI

Identificar: llevar a la superficie los riesgos relacionados con el software antes de que afecten el proyecto.
Analizar: Estudiar fuentes de riesgos, probabilidad e impacto.
Planificar: transformar la información de riesgos en decisiones y acciones para mitigar, definir prioridades de las acciones y llevarlas a un plan
Seguir: Monitorear el estado de riesgos y acciones para mitigar usando métricas.
Controlar: ejecutar las acciones planificadas, y corregir desviaciones para mitigar riesgos.
Comunicar: Intercambiar información sobre riesgos con todos los niveles de la organización.