Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Desarrollo de software
de moderado y gran tamao
Alejandro Teruel
Versin 2.2 (8 de diciembre de 2014)
Versiones anteriores: 2.1 (7 de septiembre 2014), 2.0 (7 de junio 2014), 1.1 (23 de abril 2013)
Qu tamao tiene el software que desarrollamos en los estudios de pregrado y el software que usamos?
El software desarrollado como parte de una asignacin en un curso introductorio de programacin no debera
sobrepasar los 200 SLOC y es claramente de tamao muy pequea. Considerando que una pgina de texto contiene
aproximadamente unas cuarenta lneas, significa que el cdigo fuente de este tipo de software puede llegar a ocupar
unas cinco pginas. Un programador profesional puede desarrollar software como ste por su cuenta en menos de
dos das de trabajo.
El tamao tpico de un software desarrollado como proyecto de laboratorio en un trimestre o semestre de la carrera
no debera sobrepasar 3 mil SLOC (3 KSLOC) -a menos que incluya cdigo desarrollado previamente por otro, en
cuyo caso pudiera llegar a duplicar este tamao. Este tipo de software todava est dentro del alcance de un solo
programador profesional y se considera de tamao pequeo. Para Alessandro Orso1, un proyecto pequeo puede
1 Software Development Life Cycles. Alessandro Orso, Georgia Tech. Udacity, 2014.
Universidad Simn Bolvar Ingeniera de Software 1 Desarrollo de Software de Tamao Moderado..2
alcanzar las mil SLOC y un proyecto de laboratorio puede ser del orden de las diez mil SLOC.
En el curso de una carrera de pregrado en Computacin, los estudiantes pueden llegar a desarrollar software
mediano en su proyecto de grado, en trabajos que se desarrollan durante ms de un trimestre y, excepcionalmente,
en asignaturas ms bien avanzadas en que los estudiantes del mismo se organiza como un equipo de equipos.
Tengo entendido (pero no confirmado) que hacia el ao 2000, el software de control para una red de cajeros
automticos en Venezuela era del orden de 100 KSLOC.
Mark Swick2 reporta que el sistema de software que rastrea las fuerzas militares amistosas (Blue Force Tracker
System) para el ejrcito estadounidense lleg a alcanzar unas 500 KSLOC.
La versin 5.14.2 del interpretador del lenguaje Perl (2011) alcanza unos 669 KSLOC3. En el desarrollo de esta
versin participaron 150 personas.
El manejador de bases de datos mySQL versin 5.5.17 (ao 2011) contiene 1.2 millones de SLOC4.
(http://blog.james.rcpt.to/2012/02/13/debian-wheezy-us19-billion-your-price-free/).
Para 1995, Microsoft Word inclua ms de 2 millones de SLOC5.
Se estima que Windows 8 (2012) contiene unos 80 millones de SLOC6. Debian 7.0 (2013) contiene 420 millones
de SLOC y contiene porciones escritas en 31 lenguajes diferentes de programacin7.
Un ejercicio de visualizacin
Supongamos que lo contratan para desarrollar un programa de 100 KLOC y supongamos que, para
poder competir exitosamente, ese programa tiene que estar listo en menos de un ao. Desarrollara Ud.
slo el programa?
Hagamos una cuenta optimista. Supongamos que Ud. es un programador fuera de serie y que logra
programar en promedio cien lneas de cdigo depurado al da. Sin tomar vacaciones, ni fines de
semana, sin enfermarse sino dedicando todos los das del ao a pensar, escribir, compilar y depurar cien
lneas diarias, terminara el proyecto en 2.73 aos...
Adems, si usted quiere disfrutar de una vida saludable, tampoco debe programar los 365 das del ao
-debera dejar de trabajar al menos los fines de semana (104 das) y tomarse 20 das hbiles de
vacaciones al ao. Lo cul significa que los 2.73 aos de desarrollo, se convertiran en 4,14 aos. Por
ende para cumplir slo con el ao de plazo dado por su cliente, debe escribir y depurar 400 lneas de
cdigo diariamente.
Pero, es realista pensar en programar cien o cuatrocientas lneas de cdigo al da en promedio? Los
estudios muestran que el programador profesional produce, en promedio, menos de diez lneas de
cdigo al da durante el desarrollo de un proyecto de tamao mediano o grande! Ms adelante veremos
el por qu de esta cifra que luce, a primera vista, escandalosamente baja.
Para tener una mejor idea de lo que son cien mil lneas de cdigo, consideremos qu espacio ocupa el
imprimirlas. Una pgina de un libro de texto tiene alrededor de 40 lneas por pgina. Por ende, si se
hacen los clculos, imprimir 100.000 SLOC produce 5 tomos de 500 pginas cada uno. Ni George R.
2 Fuente: Mark Swick: How to Leverage Open Architectures for Existing Systems. RTI Systems, E-Cast del 21 de agosto
2014. http://event.on24.com/r.htm?e=830086&s=1&k=BF6DC01D4350A4D22655D80CBED9B3C5
3 Fuente: http://blog.james.rcpt.to/2012/02/13/debian-wheezy-us19-billion-your-price-free/
4 Fuente: http://blog.james.rcpt.to/2012/02/13/debian-wheezy-us19-billion-your-price-free/
5 Fuente: http://www.wired.com/wired/archive/3.09/myhrvold.html
6 Fuente: http://www.cs.umd.edu/class/spring2014/cmsc122/Lec/122Spring14Lec31.pdf
7 Fuente: http://blog.james.rcpt.to/2012/02/13/debian-wheezy-us19-billion-your-price-free/
Universidad Simn Bolvar Ingeniera de Software 1 Desarrollo de Software de Tamao Moderado..3
En un webcast Mark Swick10 report que el sistema de software que rastrea las fuerzas militares amistosas (Blue
Force Tracker System) para el ejrcito estadounidense lleg a alcanzar unas 500 KSLOC despus de ocho aos de
desarrollo! No report el nmero de profesionales involucrados pero s mencion que se trataron de varios equipos
de desarrolladores.
es negativo; trabajar en equipo puede ser muy motivador y muy estimulante. Pueden surgir ideas que a
usted no se le hubieran ocurrido slo, pueden animarle cuando le hace falta y puede que la experiencia,
pericia e inteligencia de un colega evite que usted tome una decisin errada o que pierda tiempo
aprendiendo a hacer algo que l o ella ya sabe hacer muy bien y muy rpidamente.
A medida que crece el tamao (y la complejidad) del software, crecen las dificultades gerenciales. Al
pasar de software mediano a software grande, podemos estar trabajando con ms gente de la que cabe
en una sala de reuniones, con mltiples equipos por lo que a los retos de la dinmica interpersonal se
agregan retos de dinmicas intergrupales
A medida que crece el tamao y la complejidad del software puede que la operacin del software afecte
a ms gente, con intereses, perspectivas y propsitos muy diferentes y hasta encontrados respecto al
software. Un gerente de una empresa que contrata el desarrollo de un software quiere que se desarrolle
un artefacto que ayude a imponer su visin de cmo deben hacerse las cosas en esa empresa, otro
gerente tiene una visin diferente del rol del software y hasta de la empresa, y los empleados que
tendrn que usar el software en sus labores diarias estn decididos a resistir el uso de un software que
consideran una pretensin intolerable, errada y malintencionada por parte de ambos gerentes y que, a
su leal entender, compromete el futuro de la empresa. La fascinante y riesgosa dimensin poltica del
desarrollo de software no ser tratada en este curso.
Qu ocurre en la prctica?
Distintos estudios coinciden en concluir que muchos proyectos de desarrollo de software fracasan pues:
No llegan a entregar un producto (proyectos abandonados);
Entregan un producto pero mucho ms tarde que lo prometido, a un costo mucho mayor que el
acordado inicialmente, o que hace mucho menos que lo que se pidi originalmente (proyectos
parcialmente exitosos).
Entregan productos que no se usan, bien sea porque no cumplen con las expectativas y/o las
necesidades de los usuarios finales o los clientes o bien sea porque no son confiables, es decir,
presentan tasas de falla inaceptables.
As por ejemplo, el Grupo Standish reporta las siguientes tasas de xito, fracaso e indeterminacin12
para proyectos de desarrollo de software13:
12 Un proyecto en estado indeterminado (en Ingls polticamente correcto "a challenged project") es un proyecto que tiene
tantos problemas que no se puede considerar que est en camino de convertirse en exitoso, a la vez ni se termina de
cancelar ni genera suficiente motivacin para hacer un esfuerzo para reorganizarlo. Tpicamente (a)el proyecto ya est
atrasado, (b) la mayor parte de los miembros del equipo desarrollador estn descorazonados, desmotivados y estresados,
(c) el cdigo est acumulando defectos y la documentacin est desatendida o desactualizada., (d) los miembros del
equipo pasan mucho tiempo en reuniones improductivas centradas en la asignacin de culpas y (e) hay mucha presin
para que se entregue algo para acabar de una vez y (f) hay una creciente sensacin de desconexin entre el equipo y el
resto de la organizacin. Vase http://softwareandotherthings.blogspot.com/2012/10/challenges-of-challenged-
projects.html
13 Fuente: http://www.galorath.com/wp/software-project-failure-costs-billions-better-estimation-planning-can-help.php
Universidad Simn Bolvar Ingeniera de Software 1 Desarrollo de Software de Tamao Moderado..6
Una bsqueda de "software failures" o similar por la red le proporcionar ejemplos especficos de
fracasos, tanto de productos de software como de proyectos de desarrollo del mismo. Las fallas de
software han sido responsables de muertes, sobre-exposicin a radiacin, diagnsticos mdicos errados,
apagones, fallas en controladores de todo tipo de dispositivos, la prdida de reservaciones y equipaje,
as como retrasos en vuelos, paralizacin de operaciones, el corte de servicios y todo tipo de prdidas
monetarias. Varias empresas han ido a la quiebra a consecuencia de los efectos de tales fallas o el
fracaso de proyectos crticos de desarrollo. A continuacin una breve descripcin de los casos recientes
ms sonados14:
Ao Caso
2013 Una falla de software ocasion la interrupcin de los servicios de correo electrnico de
Hotmail (Outlook.com) durante 16 horas, afectando a un estimado de 2 millones de usuarios.
La falla afect el sistema de enfriamiento del centro de datos causando un incremento
repentino de temperatura que, a su vez, caus una falla de los servidores. No slo se
interrumpieron los servicios Microsoft sino que tambin fue afectado el servicio de
almacenamiento en la nube de Skydrive.
2012 El proyecto para desarrollar un sistema de gestin de cadena de suministros para la fuerza
area estadounidense (Expeditionary Combat Support System) fue cancelado en Noviembre
2012, despus de tres aos de desarrollo, dejando una prdida de alrededor de un millardo de
dlares. La alternativa, corregir lo hecho para que el sistema entrara en operacin en el 2020
-con un retraso de ocho aos a lo requerido- hubiera costado otro US$ 1,1 millardos de
dlares.
Este sistema es uno de seis, de los nueve sistemas de software planificados por el Pentgono
para mejorar deficiencias en su gestin financiera, que llevan un retraso de hasta 12 aos y
que estn costando US$ 6,9 millardos por encima de su estimacin original.
En enero 2013, un Comit del Senado estadounidense inici una investigacin sobre este
caso.15
2012 La baja calidad de la nueva aplicacin para iOS6 que lanz Apple para competir con Google
Maps. En la primera semana de operacin las quejas de los usuarios sobre errores en
direcciones, ubicaciones e instrucciones para llegar a diferentes localidades, adems de una
serie de fallas francamente bizarras, obligaron al presidente de Apple a disculparse
pblicamente y le cost el empleo al gerente encargado del desarrollo de la aplicacin16.
2011 AXA Rosenburg Group, un grupo dedicado a los servicios de inversin, no le inform a sus
clientes-inversores que el software que les proporcionaba para ayudar a gestionar sus carteras
de inversin y sus activos tena varios defectos. Los clientes se quejaron de algunas fallas,
pero la empresa les dijo que los problemas eran debido a la volatilidad del mercado
financiero. Una investigacin por parte del ente regulador de este mercado en Estados Unidos,
la Securities and Exchange Commission (SEC) determin que hubo fraude. Como
consecuencia de ello, la empresa tuvo que pagar una multa de US$ 25 millones y US $217
millones como compensacin a los clientes, por las prdidas en que incurrieron18.
17 Fuente: http://www.computerworld.com/s/article/9222864/10_biggest_ERP_software_failures_of_2011
18 Fuente: http://www.kualitatem.com/9-latest-software-failures-in-enterprise-applications-2011-2012/
19 Qu conocimientos cientficos pudiesen sustentar tcnicas y mtodos ingenieriles para desarrollar software? Debido a
la naturaleza literalmente intangible del software, no pareca tener sentido fundamentar a esta nueva disciplina en ciencias
como la Fsica, la Qumica o la Biologa. Claramente exista y se poda desarrollar cierta fundamentacin matemtica, como
lo mostraba claramente la teora de complejidad y el desarrollo de la teora que subyace las tcnicas de compilacin de
lenguajes de programacin. En sus clases en la Universidad Simn Bolvar, el profesor Nagib Callaos propuso que la
diferencia de Ingeniera de la Computacin respecto a las ingenieras ms tradicionales era que se deba fundamentar en las
ciencias sociales como Psicologa, Sociologa y Poltica, una aguda intuicin de particular relevancia para el rea de
Sistemas de Informacin.
Universidad Simn Bolvar Ingeniera de Software 1 Desarrollo de Software de Tamao Moderado..8
Se llevan a cabo actividades de anlisis para precisar y, si hiciera falta reconciliar, el propsito
del artefacto y las propiedades que se le exige cumplir, para estimar si construir el artefacto es
factible tcnica y financieramente, para determinar su impacto socio-econmico y ambiental y
para estimar el orden de magnitud de lo que costara desarrollarlo.
Se realizan actividades de diseo, donde se exploran, bosquejan, modelan y evalan
cuidadosamente distintas opciones para que el artefacto cumpla satisfactoriamente con su
propsito y las restricciones legales, ambientales, de tiempo, dinero, esfuerzo u otros recursos
que puedan aplicar o exigirse.
Se planifican y ejecutan actividades de construccin o produccin del artefacto.
Se llevan a cabo actividades de inspeccin, verificacin o prueba para cerciorarse que el
artefacto se construy segn lo indicado por el diseo y que cumple con las propiedades y el
propsito exigidos.
Se realizan actividades de mantenimiento, ampliacin (o extensin) y de ajustes del artefacto a
condiciones y exigencias cambiantes.
Se realizan actividades gerenciales para organizar, asignar, documentar y hacerle el seguimiento
apropiado a las actividades anteriores, obtener de manera oportuna y eficiente los recursos que
puedan hacer falta, incorporar y mantener motivado el personal requerido, controlar los riesgos
del desarrollo y, en general, asegurar la buena marcha del proyecto de desarrollo del artefacto.
Todos estos tipos de actividades se han venido adaptando al software. Adicionalmente se han
desarrollado varios modelos de procesos de desarrollo, tales como el modelo de la cascada, Rational
Unified Process (RUP) y Scrum. Estos modelos proponen disciplinas de trabajo y formas de intercalar
y llevar a cabo estas actividades. Escapa del alcance de este curso presentar y comparar tales modelos;
por limitaciones de tiempo, centraremos nuestra atencin primordialmente en algunas actividades,
tcnicas y herramientas de diseo, construccin y verificacin en el marco de un proceso agil de
desarrollo. En particular desarrollaremos el curso con las siguientes preguntas en mente:
1. Cmo se disea software flexible? Esto es importante dado que algunas experiencias sugieren
que los requerimientos de un software cambian a una tasa promedio de 1% mensual durante el
perodo de desarrollo de un proyecto: as, al finalizar un proyecto de tres aos, la tercera parte
de los requerimientos finales surgieron o se modificaron en paralelo con el desarrollo del
mismo.
2. Cmo podemos desarrollar varios diseos que cumplan con unos requerimientos dados y cmo
se puede escoger entre ellos?
3. Qu podemos hacer para reducir el nmero de defectos en el software?
4. Cmo facilitamos el mantenimiento futuro del software desarrollado?
5. Cmo se puede facilitar el desarrollo de software en equipo?
Universidad Simn Bolvar Ingeniera de Software 1 Desarrollo de Software de Tamao Moderado..9
Lecturas adicionales
Lea y contraste esta introduccin con la entrada de Ingeniera de Software que se encuentra en
Wikipedia o con el captulo introductorio de algn texto del rea tal como lo son:
Roger S. Pressman: Software Engineering: A Practitioners Approach. 7 Edicin, McGraw-
Hill, 2010
Ian Sommerville: Software Engineering. 8 Edicin, 2007 (tambin puede consultar la novena
edicin).
Bernd Bruegge, Allen H. Dutoit: Object-Oriented Software Engineering Using UML, Patterns
and Java. Prentice-Hall, 2010.