Documentos de Académico
Documentos de Profesional
Documentos de Cultura
como Ingeniera
Ayachi Mlaga Jhon Lee
1. INTRODUCCIN
Deberamos plantearnos las siguientes preguntas porque constituyen una cuestin fundamental
en nuestro campo de investigacin: Cul es la mejor manera de pensar acerca del desarrollo
de software? Es ciencia? Es arte? Es un oficio? Es algo completamente distinto? Preguntas
a las que trato de responder en el resto del contenido de este trabajo.
2. ES vs. DEBERA
Las personas que defienden al desarrollo de software como arte lo hacen desde el punto de
vista de sus aspectos estticos y argumentan que la ciencia no permite esta inspiracin y libertad
creativa. Las personas que lo defienden como ciencia lo hacen desde el punto de vista de que
la mayora de los programas tiene altas tasas de error y argumentan que esa baja confiabilidad
es una libertad creativa intolerable que debe ser condenada. Ambos puntos de vista son
incompletos y ambos hacen la pregunta equivocada. El desarrollo de software es arte, es ciencia,
o es un oficio como la arqueologa, el derecho, la sicologa, la sociologa, la comunicacin social
y otras actividades. Es no-profesional en algunos sectores y profesional en otros. Tiene que ver
con muchas y diferentes cosas, ya que existen muchas personas diferentes desarrollando. Pero
la pregunta correcta no es "Qu es actualmente el desarrollo de software?" sino "Qu debera
ser el desarrollo profesional de software? En mi opinin, la respuesta a esa pregunta es clara:
El desarrollo profesional de software debera ser ingeniera. Actualmente es as? No, pero
debera serlo? Sin lugar a dudas que S.
3. INGENIERA vs. CIENCIA
Con slo un 40% de los desarrolladores de software con ttulos en Ciencias Computacionales y
prcticamente ninguno en Ingeniera de Software, no debera sorprendernos encontrar
personas confundidas acerca de la diferencia entre Ingeniera de Software y Ciencias
Computacionales. La distincin entre estos campos es la misma que en otros campos. Los
cientficos aprenden lo que es verdadero, cmo probar hiptesis y cmo ampliar el
conocimiento en su campo; los Ingenieros aprenden lo que es verdadero, lo que es til y cmo
aplicar el conocimiento bien comprendido para resolver problemas prcticos. Los cientficos
deben estar actualizados con las ltimas investigaciones; los ingenieros deben estar
familiarizados con el conocimiento que ha demostrado ser fiable y eficaz.
Cuando el cientfico hace ciencia puede darse el lujo de ser especfico y especializado; cuando
se hace ingeniera es necesario tener un amplio conocimiento de todos los factores que afectan
al producto que se disea. Los cientficos no tienen que ser regulados, porque ellos deben
rendirles cuentas a otros cientficos; los ingenieros tienen que ser regulados, porque ellos tienen
que rendirles cuentas a la sociedad. Una formacin cientfica de pregrado prepara a los
estudiantes para continuar sus estudios; una formacin en ingeniera de pregrado prepara a los
estudiantes para su inmediata incorporacin al mercado laboral, despus de terminar sus
estudios.
Las universidades otorgan ttulos en Ciencias Computacionales y normalmente esperan que sus
egresados se desempeen en puestos de trabajo en desarrollo de software, en el que iniciarn
de inmediato la resolucin de problemas del mundo real. Slo una pequea fraccin de los
estudiantes en Ciencias Computacionales contina sus estudios de postgrado, en entornos de
investigacin acerca de los nuevos avances en el estado del conocimiento en el campo del
software y/o los computadores. Esto pone a los estudiantes de Ciencias Computacionales en
una tierra tecnolgica de nadie. Son llamados cientficos, pero en su trabajo realizan funciones
que tradicionalmente las ejecutan los ingenieros, pero sin el beneficio de una formacin en
ingeniera. El efecto sera ms o menos el mismo que si se le asignara a un Ph.D. en fsica el
diseo de equipos elctricos para venta comercial. El fsico puede comprender mejor los
principios elctricos que los ingenieros con los que est trabajando, pero su experiencia en
construccin de equipos se reduce a la creacin de prototipos que se utilizan para progresar en
el estado del conocimiento en un laboratorio. l no tiene experiencia ni est capacitado en el
diseo de los equipos robustos y econmicos que ofrecen soluciones prcticas en entornos
reales. Es de esperar que el equipo diseado por el Ph.D. funcione, pero tal vez carezca de la
solidez que haga posible su utilizacin por fuera del ambiente seguro de un laboratorio; o el
equipo puede usar materiales que son aceptables para un prototipo, pero que son un
extravagante derroche cuando las unidades se fabrican por miles.
Situaciones parecidas a este simple ejemplo de fsica se producen por montones en lo que tiene
que ver con el software. Cuando los empleados, formados como cientficos computacionales,
comienzan a trabajar en sistemas de produccin, a menudo disean y construyen software que
es demasiado frgil para usar en produccin, o que es inseguro. Se concentran estrecha y
profundamente en consideraciones de menor importancia y excluyen otros factores que son
ms importantes. Pueden invertir das ajustando a mano un algoritmo de ordenacin en lugar
de horas usando una librera de cdigo o copiando un algoritmo adecuado de un libro. El tpico
graduado de Ciencias Computacionales suele necesitar varios aos de entrenamiento en el
puesto de trabajo para acumular suficiente conocimiento prctico para, mnimamente,
desarrollar software de produccin satisfactorio.
Algunas personas piensan que "Ingeniera de Software" es slo una palabra de moda que
significa lo mismo que "programacin de computadores". Es cierto que la Ingeniera de Software
ha sido usurpada, pero un trmino puede ser objeto de abuso y todava tener un significado
legtimo. La definicin del diccionario para "Ingeniera" es: Aplicacin de principios cientficos
y matemticos con fines prcticos, y es lo que la mayora de los programadores tratan de hacer.
Como David Parnas seala, en otros campos tcnicos de la profesin ingenieril se inventaron y
asignaron personeras jurdicas y certificaciones para que sus clientes conocieran que estaban
calificados para construir productos tcnicos. Los clientes del software no se merecen menos.
Algunas personas piensan que tratar como ingeniera al desarrollo de software significa que
todos tendremos que usar mtodos formales para escribir programas como pruebas
matemticas. El sentido y la experiencia comn nos dice que eso es demasiado para muchos
proyectos. Otros objetan que el software comercial es demasiado dependiente de las
cambiantes condiciones del mercado como para darse el lujo de invertir tiempo en ingeniera.
Estas objeciones se basan en una idea estrecha y errnea acerca de la ingeniera. La ingeniera
es la aplicacin de principios cientficos con fines prcticos y, si no se hace as, es mala ingeniera.
Tratar de aplicar mtodos formales a todos los proyectos de software es tan mala idea como
tratar de aplicar code-and-fix para desarrollar todos los proyectos.
Tratar al desarrollo de software como ingeniera clarifica la idea de que para diferentes
proyectos son apropiados diferentes objetivos de desarrollo. Cuando se disea un edificio, los
materiales de construccin deben ser adecuados para el propsito de la construccin. Es posible
construir una bodega amplia para guardar vehculos agrcolas con un metal delgado y sin hoja
de aislamiento, pero una casa no se construira de la misma manera; pero, a pesar de que la casa
sea resistente y clida, de ninguna manera nos referimos a la bodega como de inferior calidad
que la casa. La bodega se dise adecuadamente para un fin previsto y, si hubiera sido
construida de la misma manera que la casa, incluso podra criticarse por tener "ms ingeniera
de la necesaria" un juicio segn el cual los diseadores despilfarran recursos en las
construcciones y que por lo tanto no aplican la ingeniera necesaria.
En software, un proyecto bien ejecutado se gestiona para que cumpla alguno de los siguientes
objetivos del producto:
Defectos mnimos
Mxima satisfaccin de usuarios
Tiempo de respuesta mnimo
Buena mantenibilidad
Buena extensibilidad
Robustez
Alta correctitud
Cada equipo del proyecto software debe definir explcitamente la importancia relativa de cada
caracterstica; luego, el equipo completo, debe conducir el proyecto de forma que logre sus
objetivos.
Los proyectos software son diferentes de los proyectos de ingeniera que utilizan materiales
fsicos. En otro tipo de ingeniera, el costo de los materiales puede llegar al 50% o ms del costo
total del proyecto.
Algunas empresas de ingeniera reportan que consideran automticamente como de alto riego
a los proyectos cuya mano de obra constituye ms del 50% de su costo. En un proyecto
tpico de software, los costos de mano de obra pueden llegar casi al 100% del costo total.
La mayora de proyectos de ingeniera se centran en optimizar los objetivos del producto
y los costos de diseo son relativamente insignificantes.
Debido a que los costos de mano de obra constituyen gran parte del total de los costos del ciclo
de vida del software, los proyectos software necesitan enfocarse ms en optimizar los objetivos
del proyecto que lo que hacen otros tipos de ingenieras. Por lo tanto, adems de trabajar en
pro de los objetivos del producto, un equipo de software tambin debe trabajar para lograr
alguno de los siguientes objetivos del proyecto:
Calendario cort
Fecha de entrega predecible
Bajo costo
Equipo pequeo
Flexibilidad para ejecutar los proyectos aunque los requisitos cambien
Cada proyecto software debe encontrar un equilibrio entre los diferentes objetivos del proyecto
y los del producto. No queremos pagar US$5000 por un procesador de texto, ni queremos que
se bloquee cada 15 minutos.
En cules de estas caractersticas especficas del producto y del proyecto hace hincapi un
equipo de trabajo para determinar si un proyecto es o no verdadera "Ingeniera de Software"?
Algunos proyectos necesitan producir software con defectos mnimos y correctitud casi
perfecta, software para equipos mdicos, aviacin, viajes espaciales y as sucesivamente.
Muchas personas estaran de acuerdo en que estos proyectos son un dominio apropiado para
la Ingeniera de Software a gran escala. Otros proyectos necesitan entregar su software con una
fiabilidad adecuada, pero con bajos costos y calendarios cortos. Pertenecen estos proyectos al
dominio de la Ingeniera de Software? Una definicin informal de ingeniera es "hacer con un
centavo lo que cualquier persona puede hacer con un dlar. Muchos de los actuales
programadores de software estn haciendo con un dlar lo que cualquier buen ingeniero de
software puede hacer con un centavo. El desarrollo econmico tambin es dominio de la
Ingeniera de Software.
Un mal software no es aquel que no cumple con los objetivos, sino aquel que su funcionalidad
depende de una serie de licencias, llaves, actualizaciones, y paquetes complementarios que solo
funcionan con ms licencias. El objetivo del uso de software es optimizar y trabajar ms rpido
(y en el fondo para trabajar menos), entonces eso supone la utilizacin de herramientas
informticas que sean verstiles para todos los usuarios en la mayora de computadoras.
Como el software se vuelve cada vez ms importante, el potencial impacto del cdigo malo
aumentar a la altura, en opinin de Peter G. Neumann, un cientfico informtico miembro del
SRI International, centro privado de I + D en Menlo Park, CA. En los ltimos 15 aos, defectos de
software han destruido proyectos como el lanzamiento europeo de un satlite, han retrasado
un ao la apertura del aeropuerto de Denver, han destruido una misin de la NASA a Marte, ha
matado a 4 marines en un accidente de helicptero, ha provocado que un barco de la US Navy
destruyese un vuelo civil y ha desactivado los sistemas de ambulancias en Londres, provocando
ms de 30 muertes. Y debido a nuestra creciente dependencia de la Red, Neumann dice,
"Estamos mucho peor de lo que lo estbamos hace cinco aos. Los riesgos son peores y las
defensas no son tan buenas. Estamos yendo hacia atrs y eso es motivo de preocupacin. "
Pero a medida que los ordenadores se extendan, las actitudes iban cambiando. En lugar de una
planificacin meticulosa de su cdigo, los programadores se pasaban las noches en sesiones de
hacking cargadas de cafena. Cada vez que el compilador devolva mensajes de error, los
programadores deban corregir los errores uno por uno hasta que el software compilara
correctamente. La actitud actual es que t puedes escribir cualquier chapuza de pieza de cdigo
y el compilador te lo resolver, deca SRIs Neumann. Si no devolviera un mensaje de error, las
cosas se haran de un modo ms correcto, verdad?.
Los programas iban creciendo en tamao y complejidad, sin embargo, los lmites entre cdigo y
correccin se iban aproximando. De media, los programadores profesionales cometen entre 100
y 150 errores en todos los miles de lneas de cdigo que escriben, segn un estudio realizado a
13.000 programadores por Humphrey, del Carnegie Mellon University. Por ejemplo, el Sistema
Operativo Windows NT 4, con sus 16 millones de lneas de cdigo, se escribi con alrededor de
2 millones de fallos. La mayora seguramente fueran pequeos y no causaron ningn efecto,
pero algunos (unos cuantos miles) pudieron haber causado serios problemas. Naturalmente,
Microsoft examin exhaustivamente Windows NT 4 antes de su lanzamiento, pero en casi
cualquier fase de pruebas solo vas a encontrar menos de la mitad de los defectos deca
Humphrey. Si Microsoft ha realizado alrededor de 4 rondas de pruebas, un procedimiento caro
y muy costoso en cuanto a tiempo se refiere, la empresa debe haber encontrado al menos 15
bugs de 16. Esto te es permitido con algo as como 5 defectos por cada mil lneas de cdigo
dice Humphrey. Lo cual es muy bajo. Pero el software puede seguir teniendo algo as como
80.000 errores.
Frente a una empresa profesional que tiene un correcto proceso de desarrollo software, si haces
software malo, con un proceso malo, lo lgico es que tengas gente poco cualificada, poco
experta o con poco conocimiento, lo que es ostensiblemente ms econmico.
No es todo tan fcil, porque normalmente los que hacen mal software se caracterizan por
intentar suplir sus carencias metiendo mucha gente. Pero eso suele aparecer cuando ya las cosas
van muy mal, al principio esto con 4 becarios sale.
2. Fidelizacin de clientes.
Hacer software rematadamente malo genera que pocos, ms all de quienes lo programaron (y
a veces ni eso), sean capaces de mantenerlo, tocarlo, evolucionarlo, etc. Es por ello que muchos
clientes que compraron un desarrollo software mal hecho ya no pueden prescindir del
proveedor Slo l puede mantener tal monstruo y ah se queda por aos.
Creme, no cuento nada que no haya visto yo, y varias veces. Por motivos como el anterior, llega
un momento que el proveedor de desarrollo toma consciencia de que ningn otro proveedor,
nadie de la competencia, se atrever a intentar quitarle el proyecto nadie quiere ese
problemn y el que quiera entrar cobrar ms para poder hacerse con ello.
Entonces le sube las tarifas al cliente. As, podrs ver gente y empresas rematadamente malas
cobrando tarifas que te produciran escalofros, diciendo, adems, que ellos son los nicos que
saben de ese software y por ello cobran tanto (te repito, lo he escuchado, y muchas veces).
Hacerlo mal genera la paradoja de prometer hacerlo en menos tiempo pero en la realidad
tardar el doble, o ms, de tiempo de lo que alguien que se sabe dira que lo hara.
Y lo anterior es una gran ventaja competitiva. Es lo que todo cliente quiere escuchar el menor
tiempo. Y si al menor tiempo le unes que, debido al apunto 1 de esta lista, eres el proveedor que
tiene personal menos cualificado y por ello menos costoso adems de ser el que lo hace en
menos tiempo eres el que lo hace en menor precio. As no falla, te llevas el proyecto.
A raz del punto anterior, aquello de prometer menos tiempo de proyecto del posible y
necesario, crea otra gran ventaja competitiva (adems de ganar el proyecto).
Lo normal es que la presin del inocente cliente engaado, para que el mal proveedor cumpla
las fechas, que ya sabemos son imposibles, provocar que el proveedor, para quitarse
problemas y los, les entregue un trabajo mal terminado.
Una vez entregado, ms que en procesos tan caticos, esos en los que nadie tiene claro
exactamente qu era lo que haba que entregar, se dar por buena la entrega y empezar la
mal llamada fase de mantenimiento (realmente, fase de terminar lo que no dio tiempo).
Tipos
o Malware infeccioso: virus y gusanos: Los tipos ms conocidos de malware, virus
y gusanos, se distinguen por la manera en que se propagan, ms que por otro
comportamiento particular.
Esta versin 5.2 est vigente a partir de enero de 2008. Fue aprobado conjuntamente
por la ACM y la IEEE-CS como el estndar para la enseanza y la prctica de la
ingeniera de software
Los ingenieros de software debieran obligarse a hacer del anlisis, especificacin, diseo,
desarrollo, pruebas y mantenimiento del software una profesin respetada y beneficiosa.
Debido a su posicin en el desarrollo de sistemas software, los ingenieros del software
tienen suficientes oportunidades para causar beneficio o generar dao
I. Sociedad
Los ingenieros del software actuarn de manera consistente con el inters general.
En particular, los ingenieros de software debern, adecuadamente:
III. Producto
Los ingenieros de software debern garantizar que sus productos y las modificaciones
relacionadas cumplen los estndares ms elevados posibles. En particular, los
ingenieros de software debern, segn sea adecuado:
IV. Juicio
Los ingenieros de software debern mantener integridad e independencia en su valoracin
profesional. En particular, los ingenieros del software debern, adecuadamente:
1. Moderar todos los juicios tcnicos por la necesidad de amparar y mantener valores
humanos.
2. Firmar slo los documentos preparados bajo su supervisin o dentro de sus reas de
competencia, y con los que se est de acuerdo.
3. Mantener objetividad profesional con respecto a cualquier software o documentos
relacionados para los que se les pida evaluacin.
4. No involucrarse en prcticas financieras engaosas, tales como sobornos, dobles
facturaciones u otras prcticas impropias.
5. Comunicar a todas las partes los conflictos de inters que no puedan evitarse
razonablemente.
6. Rechazar la participacin, como miembros o asesores, en organismos privados,
gubernamentales o profesionales vinculados con temas de software, en los que
tengan, o sus patronos o clientes, potenciales conflictos de inters no revelados.
V. Gestin
Los gestores y lderes en ingeniera del software suscribirn y promovern un enfoque
tico a la gestin del desarrollo y mantenimiento del software. En particular, aquellos
ingenieros de software en funciones de direccin o liderazgo debern,
adecuadamente:
VI. Profesin
Los ingenieros de software debern progresar en la integridad y reputacin de la profesin,
consistentemente con el inters general. En particular, los ingenieros de software debern, en
la medida de lo posible:
VII. Compaeros
Los ingenieros de software sern justos y sern soporte de sus compaeros. En particular, los
ingenieros de software debern, adecuadamente:
VIII. Persona
Los ingenieros de software debern participar en el aprendizaje continuo de la prctica de su
profesin y promovern un enfoque tico en la prctica de la profesin. En particular, los
ingenieros de software debern continuamente preocuparse de:
10. CONCLUSIONES
11. REFERENCIAS
D. Knuth. The Art of Computer Programming: Volumes 1-4. USA: Addison-Wesley Professional.
1998.
D. L. Parnas. Software Engineering Programs Are Not Computer Science Programs. IEEE
Software, Vol. 16, No 6, pp. 1-16. 1999.
R. Baines. Across Disciplines: Risk, Design, Method, Process, and Tools. IEEE Software, Vol. 15,
No. 4, pp. 61-64. 1998.
El Cdigo de tica y Prctica Profesional de Ingeniera del Software, recomendada por la "IEEE-
CS/ACM Joint Task Force on Software Engineering Ethics and Professional Practices