Software 100% Bug free
Después de escuchar un breve comentario de un periodista sobre la seguridad del nuevo Windows Vista, en relación con el SpyWare y Virus, cuya conclusion fue que nunca se logrará construir software libre de fallos, no he podido evitar dirigirme aqui y escribir este post.
Empecere diferenciando las tres clases de fallos que se dan en toda construccion software:
- Bugs en los requisitos: Son aquellos que afectan a la funcionalidad requerida por el cliente y que no han sabido ser entendidos por las personsas encargadas de esta fase. Un par de ejemplos podria ser incluir solo el tipo de moneda en pesetas o que el motor no debe superar las 3000 rpm.
- Bugs en el diseño: Aqui es donde empiezan a surgir los fallos que nos interesan, aquellos relacionados con la seguridad o funcionalidad crítiticas de la aplicacion. Los fallos surgen por considerar triviales, hacer caso omiso o por simple desconocimiento de los casos en los que se está trabajando. Ejemplos serían el fallo de seguridad que hace poco se presento en freeVNC o no contemplar el caso en que si el cohete supera la inclinacion permitida hay que reectificar la trayectoria.
- Bugs en la implementación: En este ultimo tipo entrarían los fallos de tipo tecnologico, es decir, provocados por no entender las herramientas con las que se está trabajando. Los archiconocidos overflows o fallos en el parseo de cadenas son simplemente algunos, de los que seguramente sabreís mas que yo.
Desde mi punto de vista, estoy seguro que se conseguiran reducir los bugs en las aplicaciones a medida que se van estandarizando las tecnicas para construir las mismas, llegando a alcanzar aplicaciones 100% libres de bugs en la mayoria de los casos.
Solucionar el primer tipo de bugs, el relativo a la fase de requisitos, quizás sea el mas dificil de todos, ya que el factor humano es completamente imprescindible. Si bien existen multiples técnicas que aplicadas correctamente ayudan a depurar los bugs en esta fase, este tipo de fallos son los que menos nos interesan porque suelen afectar solo a lo que el cliente necesita.
Nuevos avances para solucionar el segundo tipo de fallos están surgiendo a la par que se soluciones se van necesitando. El subconjunto que más me llama la atención son aquellos que tienen que ver con los metodos formales, los cuales permiten estables modelos matematicos, mediante los cuales se puede demostrar que nuestro diseño concuerda perfectamente con los requisitos de la aplicación que estamos modelando.
En cuanto al último tipo una solucion fácil y directa seria hacer que los programadores tuvieran la formación necesaria para realizar su trabajo correctamente. Complicado? Por supuesto dado el gran y creciente numero de tecnologías disponibles y utilizadas en un proyecto concreto. De la misma manera que con el diseño surgen nuevos metodos que ayudan a automatizar la generación de código, lo cual se asemeja a la producción de hardware bastante madura y casi 100% bug free.
Obviamente lo comentado hasta ahora solo es aplicable al desarrollo en el que nosotros estamos trabajando y no mejorara la seguridad total del usuario final si el sistema operativo y el resto de servicios en los cuales confiamos no son seguros. Quizás esta sea la fase mas «facil» de llevar a cabo, pero depende de que alguien se ponga manos a la obra con mucho dinero por medio.
La solucion pasaria por construir una base de la que se pueda afirmar su seguridad y que exporte las funcionalidades minimas para crear sobre él servicios seguros aplicando el principle of less authority. Pudiendo ofrecer al usuario un control fino del software que el mismo ejecuta.
Espero que la ensalada de ideas que he escrito os ayude a refrescaros un poco este verano 🙂 A pasarlo bien!