Você está na página 1de 4

Ing. USBMed, Vol. 2, No.

2, Jul-Dic 2011

EL DESARROLLO DE SOFTWARE COMO INGENIERA DE SOFTWARE


Scott F. Schaull
Columbia University, NY
scott.schaull@columbia.edu
(Tipo de artculo: REFLEXIN. Recibido el 08/06/2011. Aprobado el 20/09/2011)

RESUMEN
El desarrollo de software puede ser predecible y controlable, econmico y manejable pero, actualmente, los
proyectos software no se suelen ejecutar de esa manera, aunque sea posible lograrlo. En este artculo se trata al
desarrollo de software como una emergente y necesaria Ingeniera de Software y se describe la necesidad de
procesos formativos adecuados desde las universidades para reconocer la prctica del desarrollo de software
como una profesin ingenieril.
Palabras clave
Ingeniera, Ingeniera de Software, Desarrollo de Software.

SOFTWARE DEVELOPMENT CONSIDERED AS SOFTWARE


ENGINEERING
ABSTRACT
Software development can be predictable and controllable, economic and manageable, but at present time
software projects usually are not run that way, although it is possible to achieve it. In this article software
development is approached as an emerging and necessary "Software Engineering", and is described the need of
proper learning processes from universities to recognize software development practice as an engineering
profession.
Keywords
Engineering, Software Engineering, Software Development.

DVELOPPEMENT DE LOGICIEL COMME GNIE LOGICIEL


RSUM
Le dveloppement de logiciel peut tre prvisible et contrlable, conomique et maniable mais, actuellement,
lordinaire est que les projets des logiciels ne se ralisent pas de cette manire, en dpit de cette possibilit. Dans
cet article on aborde le dveloppement de logiciel comme une mergente et ncessaire Gnie logiciel et on
dcrit la ncessit davoir des processus ducationnels appropris aux universits pour reconnaitre la pratique du
dveloppement de logiciel comme une profession dingnierie.
Mots-cls
Gnie, Gnie logiciel, Dveloppement de logiciel.

S. F. Schaull. El desarrollo de software como Ingeniera de Software.


Ing. USBMed, Vol. 2, No. 2, pp. 6-9. ISSN: 2027-5846. Jul-Dic, 2011.

Ing. USBMed, Vol. 2, No. 2, Jul-Dic 2011

1. INTRODUCCIN
Cuando entrevisto a candidatos para puestos de
trabajo en programacin, una de mis preguntas
favoritas es: "Cmo describira su enfoque del
desarrollo de software?" Yo les presento ejemplos
como el de carpintero, el bombero, el arquitecto, el
artista, el escritor, el explorador, el cientfico y el
arquelogo y los invito a que construyan sus propias
respuestas. Algunos candidatos tratan de adivinar lo
que quiero or y usualmente me dicen que se ven a s
mismos como cientficos. Los programadores con
amplia experiencia me dicen que se ven como
soldados o como miembros de un equipo SWAT. Mi
respuesta favorita provino de un candidato que
respondi: "Durante el diseo del software, soy un
arquitecto; cuando estoy diseando la interfaz de
usuario, soy un artista; durante la construccin, soy un
artesano; y durante las pruebas unitarias soy, como
mnimo, un hijo de puta!".
Me gustara plantear 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
En las Ciencias Computacionales tenemos una larga
tradicin debatiendo acerca de si el desarrollo de
software es arte o ciencia. Hace ms de cuarenta
aos, Donald Knuth [1] comenz a escribir una serie
de siete volmenes acerca de esta cuestin. Los
primeros tres volmenes contienen alrededor de 2200
pginas, lo que sugiere que el total de los siete podra
ascender a ms de 5000. Si eso es a lo que se parece
el arte del desarrollo de software, no estoy seguro
de querer saber a qu se parecer como ciencia!
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
[2]. 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.

Ing. USBMed, Vol. 2, No. 2, Jul-Dic 2011

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.
La falta de un desarrollo profesional no es culpa slo
de los desarrolladores de software. El mundo del
software se ha convertido en vctima de su propio
xito. El mercado laboral del software ha estado
creciendo ms rpido que la infraestructura formativa
necesaria para apoyarlo, por lo que ms de la mitad de
las personas que ocupan puestos en desarrollo de
software han sido formados en otros campos
relacionados. Los empleadores no les pueden exigir a
estas personas que, en sus horas libres, obtengan un
ttulo equivalente a un pregrado en ingeniera. Incluso
si pudieran, la mayor parte de los cursos disponibles
son para Ciencias Computacionales, no para
Ingeniera de Software. La infraestructura formativa se
ha quedado a la zaga de las necesidades de la
industria.
4. MS QUE UNA MODA
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.
Los ingenieros de software aplicamos algoritmos
desarrollados
cientficamente
y
definidos
matemticamente, mtodos de diseo funcional,
mtodos de aseguramiento de calidad y otras prcticas
para desarrollar productos software y servicios [3].
Como David Parnas [4] 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 [5]. 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

Ing. USBMed, Vol. 2, No. 2, Jul-Dic 2011

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 corto
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.

5. CONCLUSIONES
El desarrollo de software, como se practica
comnmente hoy en da, no se parece mucho a
ingeniera, pero podra lograrse. Una vez que dejemos
de hacer la pregunta equivocada de "Qu es
actualmente el desarrollo de software?" y empecemos
a hacer la pregunta correcta de "El desarrollo de
software debera ser ingeniera?" podremos empezar a
responder las preguntas realmente interesantes: Cul
es el cuerpo base de conocimiento de la Ingeniera de
Software? Qu necesitan hacer los desarrolladores
profesionales de software antes de que puedan utilizar
ese conocimiento? Qu tanta es la recuperacin de la
inversin desde la prctica de desarrollo de software
como una disciplina de ingeniera? Cules son las
normas de conducta profesional apropiadas para los
desarrolladores de software? Para las organizaciones
de software? Se debe reglamentar a los
desarrolladores de software? Si es as, en qu
medida? Y, tal vez la pregunta ms interesante de
todas: Cmo ser la industria del software despus
que todas estas cuestiones hayan sido resueltas?
REFERENCIAS
[1] D. Knuth. The Art of Computer Programming: Volumes
1-3. USA: Addison-Wesley Professional. 1998.
[2] D. L. Parnas. Software Engineering Programs Are Not
Computer Science Programs. IEEE Software, Vol. 16,
No 6, pp. 1-16. 1999.
[3] E. Serna M. (2010). Mtodos Formales e Ingeniera de
Software. Revista Virtual Universidad Catlica del Norte,
No. 30, pp. 1-20.
[4] D. L. Parnas. Software Engineering: An Unconsummated
Marriage. Communications of the ACM. Vol. 40, No. 9,
pp. 128. 1997.
[5] R. Baines. Across Disciplines: Risk, Design, Method,
Process, and Tools. IEEE Software, Vol. 15, No. 4, pp.
61-64. 1998.

La actual dependencia generalizada del desarrollo


code-and-fix y el exceso en costos y calendario que
implica, no es el resultado de una estimacin de la
Ingeniera de Software, sino de poca formacin y
entrenamiento en las prcticas de la Ingeniera de
Software.

Você também pode gostar