Software Engineering to Professionalize Software Development

Anuncio
Raccis, 1(1), 6-14, 2011.
Revista Antioqueña de las
Ciencias Computacionales y la Ingeniería de Software
ISSN: 2248-7441
www.fundacioniai.org/raccis/index.htm
[email protected]
Software Engineering to Professionalize Software Development
Ingeniería de Software para Profesionalizar el Desarrollo de Software
Juan Miguel Alonso1, Fernando García2
1
2
Universidad Carlos III. Madrid, España. Jma(AT)ia.uc3m
Universidad Carlos III. Madrid, España. Fgcar(AT)ing.uc3m.es
INFORMACIÓN DEL ARTÍCULO
Tipo de artículo
Reflexión
Historia del artículo
Recibido: 13-06-2011
Correcciones: 22-09-2011
Aceptado: 25-09-2011
Categories and Subject Descriptors
K.3.2 [Computers and Education]:
Computer and Information Science
Education – Curriculum.
General Terms
Computer
Science,
Engineering.
Software
ABSTRACT
The role, increasingly important, that plays the software in the systems with widespread
effects presents new challenges for the formation of Software Engineers. Not only
because social dependence software is increasing, but also because the character of
software development is also changing and with it the demands for software developers
certified. In this paper are propose some challenges and aspirations that guide the
learning processes Software Engineering and help to identify the need to train
professionals in software development.
RESUMEN
El rol, cada vez más importante, que juega el software en los sistemas de amplia
repercusión presenta nuevos retos para la formación de los Ingenieros de Software. No
sólo porque la dependencia social del software es cada vez mayor, sino porque el
carácter del desarrollo de software también está cambiando y con él las demandas por
desarrolladores de software certificados. En este trabajo se proponen algunos desafíos y
aspiraciones que orientan los procesos formativos de la Ingeniería de Software y que
ayudan a identificar la necesidad de formar profesionales en desarrollo de software.
Keywords
Software Engineering, Training
Processes, Software Development,
Professional Certification.
Palabras clave
Ingeniería de Software, Procesos
Formativos, Desarrollo de Software,
Certificación Profesional.
1. INTRODUCCIÓN
Al entrar en el nuevo milenio los productos software se
han convertido en partes esenciales de las actividades
cotidianas y de los negocios en la economía global y de la
sociedad en general. La calidad de esos productos
depende de la capacidad de los desarrolladores de
software, quienes deben ser competentes y mantenerse
actualizados en su conocimiento. Pero, hasta el momento,
a los desarrolladores de software se les forma de acuerdo
con los procesos tradicionales. Desafortunadamente,
estos procesos formativos no han generado la cantidad ni
la calidad de desarrolladores necesarios para satisfacer la
creciente demanda. Además, la formación tradicional no
provee la ayuda necesaria para que los estudiantes
mantengan sus conocimientos actualizados. En el área del
software, por ejemplo, todavía no se acepta al desarrollo
de software como una profesión, por lo que la formación
para ingenieros de software se confunde con la de formar
a “programadores” y a otros no-ingenieros.
© 2011 IAI. All rights reserved.
En las próximas décadas, los procesos formativos para los
desarrolladores de software deberán formar a los
estudiantes de manera diferencial y de acuerdo con las
diversas funciones que desempeñan en la gestión de los
Sistemas de Información; se deberá intervenir
agresivamente los contenidos de los programas de
ingeniería relacionados; ayudar a los estudiantes a
mantenerse actualizados frente a los rápidos cambios y
establecer la acreditación continua, de forma que reflejen
con exactitud las capacidades de los profesionales.
Aunque los ejemplos específicos en este trabajo se
describen en términos de los Estados Unidos, las
implicaciones, en general, son globales. Desde ahora se
deben iniciar procesos de “modernización” a los
programas de ingeniería que tengan alguna relación con
el desarrollo de productos software. Además, es necesario
tomar conciencia de que el desarrollo de software, dadas
6
las implicaciones de sus productos, es una profesión,
como la Medicina, la Ingeniería Civil o la Ingeniería
Eléctrica y, por tanto, requiere procesos formativos en
Ingeniería de Software.
2. ESTADO DE LA CUESTIÓN
Actualmente, los desarrolladores de software se forman
tradicionalmente, como se ha hecho durante años y
variando sólo con la reciente incorporación de la
formación Online. Sin embargo, las presiones externas y
las provenientes del carácter cambiante del software
inciden sobre las instituciones formativas, para que
implementen cambios en los contenidos de los
programas, en las metodologías formativas y en la
apreciación con la que actualmente se forma a los
desarrolladores de software.
2.1 La formación en desarrollo de software
En las últimas tres décadas, los desarrolladores de
software se han formado, en los programas de pregrado y
de posgrado en las universidades, mediante cursos de
formación profesional y de cualificación empresarial y
por iniciativa personal en la capacitación en nuevas
técnicas. Tomayko [1] identificó tres períodos en la
historia de la formación en Ingeniería de Software en los
EEUU: (1) la era de la auto-capacitación, antes de 1978,
(2) los primeros programas de posgrado, entre 1978 y
1988 y (3) la rápida proliferación de programas de
posgrado, influenciada por los esfuerzos del Software
Engineering Institute desde 1988. Este panorama no
difiere mucho de lo sucedido en otros países de América,
de Europa y de Asia.
El estudio de Knoke y Bagert [2], acerca de los programas
de posgrado en Ingeniería de Software, aunque
incompleto, identificó programas de posgrado en 77
instituciones en todo el mundo. La mayoría de estas
instituciones ofrecía un programa de maestría en alguna
área relacionada con el software, y nueve ofrecían un
doctorado con electivas en Ingeniería de Software. Los
programas de doctorado en Ingeniería de Software
también comenzaban a aparecer, por ejemplo, en el
Institute for Software Research de Carnegie Mellon
University. Estos programas se diferenciaban en el énfasis
de sus contenidos; por ejemplo, algunas maestrías
estaban relacionadas principalmente con la gestión de las
actividades del software, mientras que otras eran
principalmente técnicas. También diferían en el énfasis de
la carrera: los programas de doctorado, por su naturaleza,
preparaban a los estudiantes para la investigación y la
formación universitaria, aunque muchos optaban por
trabajar en el desarrollo industrial. Algunos de los
programas de maestría eran programas académicos que
preparaban para los programas de doctorado. Muchos de
los programas de maestría estaban diseñados para
preparar a los estudiantes en la práctica profesional, con
un alto nivel de responsabilidad técnica o de gestión y no
para el ingreso a un programa de doctorado.
Actualmente, la mayoría de las universidades ofrece
títulos de pregrado en Ciencias Computacionales e
Informática, y muchas ofrecen una amplia selección de
cursos relacionados con software. Típicamente, estos
programas les permiten a los estudiantes formarse en
áreas como el diseño y la implementación de software y
les proporcionan una base de formación común para la
“programación” básica. Desde hace más de dos décadas,
algunos miembros de la comunidad de formación en
software han abogado por programas de pregrado en
Ingeniería de Software, separados de las Ciencias
Computacionales.
Dichos
programas
pretenden
proporcionar una mejor base para profesionalizar el
“desarrollo de software”, muy diferente a lo que se logra a
través de un programa de Ciencias Computacionales
tradicional. En 1998, Tomayko [1] señalaba que, con la
introducción de programas de pregrado en Ingeniería de
Software, se entraba en una nueva era para el software,
pero esa idea todavía no se ha generalizado hasta el
momento.
Las habilidades específicas para desarrollar software se
imparten por fuera del sistema universitario, en centros
de formación y cualificación profesional, en cursos de
corta duración o por auto-capacitación. Se diferencian en
la extensión, en el costo y en el grado en que se
transfieren los conocimientos y, algunos, conducen a
certificaciones de vendedor con competencias en
productos específicos. A pesar de todas estas
oportunidades, regularmente se escucha las quejas de la
industria del software acerca de la grave carencia en el
número de desarrolladores de software profesionales
disponibles.
2.2 Tendencias en el área de desarrollo de software
La relación entre los usuarios finales y el desarrollo de
software está experimentando cambios fundamentales,
debido fundamentalmente a que los productos software
permean toda actividad humana. Algunos de estos
cambios tienen que ver con el carácter evolutivo del
software y otros tienen que ver con la creciente presión
por la necesidad de profesionalizar su desarrollo.
Evolución de los modelos de desarrollo de software. El
modelo predominante de desarrollo de software, en el
que se basa la mayoría de los programas formativos,
involucra a un equipo de desarrolladores de software en
una institución aislada, trabajando bajo un proceso y un
ciclo de vida del producto bien definidos, para producir
software para un cliente conocido y para entregarlo en un
tiempo igualmente conocido. Este modelo de desarrollo
de software, de “negocio cerrado”, cada vez más está en
contradicción con la práctica real. Algunas de esas
discrepancias son:
 Los requisitos del sistema surgen cuando los clientes
comprenden mejor tanto la tecnología como las
oportunidades en su propio entorno y cuando están
íntimamente involucrados en un desarrollo
progresivo. A menudo, esto requiere desarrollar,
paralelamente, software y reingeniería de negocios.
 Los sistemas se diseñan y despliegan bajo complejas
limitaciones económicas y legales que afectan su
diseño y que, a menudo, se distribuyen no sólo al
7
software sino a sistemas hardware/software. La
mayoría de programas formativos subestiman la
importancia de estas limitaciones adicionales.
ISO 9000 direccionan la calidad organizacional, sin
embargo, la certificación profesional en desarrollo de
software se encuentra todavía en una etapa inmadura.
 Actualmente el software, especialmente el de sistemas
de bajo nivel, se desarrolla en comunidades de
voluntarios cooperantes [3]. En el software de fuente
abierta, el código se publica libremente y los usuarios
interesados lo critican y proponen cambios. La calidad
surge de un proceso social intenso y paralelo que se
retroalimenta rápidamente y no por un proceso
cuidadosamente gestionado.
Actualmente, existe una considerable presión en todo el
mundo por profesionalizar la Ingeniería de Software. En
Estados Unidos, esta presión está tomando forma de
debate acerca de los méritos del licenciamiento
profesional para los ingenieros de software. El argumento
a favor es que, al igual que en otras disciplinas
ingenieriles, se deben establecer normas para la práctica
debido a que existe una gran demanda, por parte de
empleadores y de clientes, acerca de cómo establecer las
competencias de un desarrollador de software y la
certificación es una forma de responder a esas demandas;
además, podría mejorar la calidad de la práctica. El
argumento en contra, hasta el momento, es que las
certificaciones profesionales acarrean un compromiso
con el público de que es posible alcanzar un nivel de la
práctica en el que se proporciona cierta seguridad y
propiedades de utilidad del producto, pero ese nivel de la
práctica aún no se logra rutinariamente; además, que la
práctica certificada de la Ingeniería de Software no se ha
distinguido de otros aspectos del desarrollo de software,
y que la certificación tiene un rango estrecho de
aplicabilidad para asuntos de interés público. Un equipo
de trabajo, contratado por ACM, The Computer Society e
IEEE, está tratando de definir el “cuerpo de conocimiento”
que un ingeniero de software debe dominar [5].
Curiosamente, existe muy poco esfuerzo para distinguir
las responsabilidades ingenieriles de las tareas de
desarrollo.
 El software, a menudo, se desarrolla creando
coaliciones entre recursos existentes, que no están
bajo el control del desarrollador [4]. Estos recursos
incluyen cuentas, comunicación, control, información
y servicios que, comúnmente, están distribuidos, son
dinámicos, son autónomos y se administran de forma
independiente. Además, se pueden modificar o retirar
sin notificar a los usuarios. Este modelo de desarrollo
de “negocio abierto” es un cambio importante
respecto del habitual modelo de “negocio cerrado” y,
consecuentemente, las incertidumbres asociadas con
los recursos administrados externamente requieren
un análisis más sofisticado.
 El desarrollo de software está cada vez más desintermediado, es decir, los propios usuarios finales y
no los desarrolladores de software, son los encargados
de adaptarlo, ajustarlo, componerlo o crearlo. Estos
usuarios necesitan comprender el desarrollo de
software en sus propios términos y, particularmente,
cómo decidir la cantidad de fe que colocarán en sus
creaciones.
Para responder a esto, las instituciones de formación
deben preparar a los desarrolladores de software para
que construyan y analicen sistemas fuertemente limitados
por consideraciones no técnicas y que dependen de
recursos distribuidos independientes. Además, los
desarrolladores de software deben aprender a crear
productos lo suficientemente confiables como para ser
utilizados, reutilizados y adaptados por no profesionales.
Certificación profesional en desarrollo de software. La
importancia pública del software se incrementa cada vez
más, ya sea como un elemento esencial en los sistemas
ingenieriles o como la personificación principal de
capacidades cuyo fallo traería consecuencias importantes
para la sociedad en general o para una persona en
particular. El público quiere y merece garantías acerca de
la calidad, tanto de los sistemas con software embebido
como de los sistemas que están principalmente
embebidos en software. Es posible alcanzar directamente
la confianza en la calidad del producto a través de su
validación, o desde antes, ya sea al confiar en las personas
que producen el software o en la organización que
gestiona su producción. Muchas tecnologías –
especialmente las pruebas, el diseño, las revisiones de
código y el análisis formal– soportan la validación del
producto. El Capability Maturity Model y la certificación
Además, algunos proveedores de software certifican en
capacidades para el uso de productos específicos. La
diversidad y la especificidad de estas certificaciones son
evidentes a partir de algunos ejemplos: Certified Novell
Engineer
or
Administrator,
IBM’s
Application
Development Certifications in XML and VisualAge,
Microsoft Certified Systems Engineer or Database
Administrator, Oracle Certified Professional tracks, Sun
Certified Programmer or Developer for Java, Sun Certified
System or Network Administrator y the multivendor
Certified Internet Professional. A menudo, estas
certificaciones son específicas para una determinada
versión de la aplicación, haciendo que sean aún más
restringidas. Las certificaciones son menos restringidas
que las licencias profesionales, pero más amplias que las
certificaciones en productos, sin embargo, no son
ampliamente publicitadas y reconocidas.
2.3 Tendencias en las instituciones formativas
Los incentivos para cambiar los procesos, con los cuales
se forma a los desarrolladores de software, no sólo surgen
de los cambios en la forma como se desarrolla el software,
sino también de las presiones institucionales. Desde hace
tiempo, las universidades conviven con la tensión entre
un sistema de valores interno, que enfatiza en la
formación en principios duraderos, y las demandas de los
empleadores, que centran la formación en el uso de las
tecnologías actuales. Las diferentes escuelas buscan el
equilibrio en diferentes lugares, con el acuerdo general de
8
que ninguno de los extremos es el adecuado. Sin embargo,
algunos desarrollos recientes intensifican esa tensión: en
primer lugar, la misma comunidad formativa se está
movilizando cada vez más desde los cursos teóricos a los
proyectos en equipo, la resolución de problemas, la
participación directa en desarrollos reales y a otros
formatos que los estudiantes necesitan para ejercitar las
ideas que discuten. En segundo lugar, el déficit de
desarrolladores profesionales de software es tan grave
que, a menudo, los propios estudiantes se enfrentan con
la posibilidad de elegir entre un trabajo de
“programación”, bien pago, o completar sus estudios; esto
es particularmente grave en los programas de doctorado,
pero también es un problema en los pregrados. A las
facultades les puede resultar difícil convencer a los
estudiantes de que la elección del trabajo de
“programador” les limita las opciones de una carrera
profesional como “desarrollador”. En tercer lugar, la
estructura institucional de las universidades es cada vez
más cuestionada por las escuelas con ánimo de lucro –que
ahora se llaman “universidades” o escuelas de formación
profesional– que enfatizan en habilidades de utilidad
inmediata, y por críticos externos que argumentan a favor
de una mayor responsabilidad y eficiencia y por el
entrenamiento y la formación on-line.
Esta discusión establece las bases para identificar los
desafíos para la comunidad de formación en Ingeniería de
Software y para seleccionar algunas aspiraciones
específicas como metas de progreso.
3. DESAFÍOS Y AMBICIONES DEL DESARROLLO
PROFESIONAL DE SOFTWARE
La ingeniería implica crear soluciones prácticas costoefectivas para problemas mediante la aplicación de
conocimientos científicos; es crear cosas para colocarlas
al servicio de la humanidad [6]. Preferiblemente y cuando
están disponibles, los ingenieros aplican conocimientos
científicos y matemáticos y, en otras ocasiones, aplican
conocimientos sistemáticos; además, trabajan bajo
limitaciones, tanto de tiempo como de conocimiento. Son
responsables de la conciliación entre restricciones
conflictivas, especialmente las limitaciones de costos, y
toman decisiones deliberadas acerca de diseños
alternativos, sea por razones técnicas o no técnicas [7].
Sus juicios se basan en el conocimiento profundo de la
disciplina que ejercen, y asumen la responsabilidad
personal por la seguridad y la calidad de los sistemas que
diseñan. Este punto de vista acerca de la ingeniería difiere
del de Maibaum [8], quien sugiere un largo proceso lineal
de creación, con refinamiento iterativo, pero sin revisión.
El punto de vista de Maibaum carece del sentido trazado
por la experiencia disciplinar acumulada, de la
conciliación de las restricciones conflictivas, de la
necesidad de generar alternativas candidatas en las
distintas etapas y elegir entre ellas.
En este trabajo se toma a la “Ingeniería de Software” en el
sentido de ingeniería y se centra principalmente en la
formación de estos ingenieros, que esperan ser
preparados para realizar el diseño técnico, para tomar
decisiones y para asumir la responsabilidad por el éxito o
fracaso de sus productos. Además, se refiere a la
comunidad de personas involucradas en el desarrollo de
productos software como “desarrolladores de software”,
no como “programadores”.
3.1 Identificar los diferentes roles del desarrollo de
software y proporcionar una apropiada formación
para cada uno
El desarrollo y el soporte de software requieren muchas
habilidades que incluyen: diseño, gestión, técnicas de
programación, validación, verificación, análisis, estudios
de usuarios, documentación, integración de sistemas y de
técnicas específicas para diseñar seguridad y fiabilidad.
Mientras que los ingenieros aplican la mayor parte de
estas habilidades, no todos los que tiene alguna de ellas
son ingenieros. A pesar de que existen algunos intentos
intermitentes por identificar los roles específicos, las
diferencias siguen siendo poco claras. De hecho, gran
variedad de desarrolladores de software, muchos de ellos
sin responsabilidades ingenieriles, aspiran al título de
“Ingeniero de Software”.
Actualmente, la ambigüedad acerca de los roles en el
desarrollo de software se encuentra reflejada en los
programas formativos. Las universidades ofrecen, en
diferentes departamentos y facultades, materias
relacionadas con el desarrollo de software, pero sus
programas se diferencian, en el enfoque acerca de lo que
es software, del que tienen otras áreas en campos
respectivos. Sin embargo, rara vez tienen un sentido de
especialización relacionado con el software.
Primera Ambición: Discriminar entre los diferentes roles
en el desarrollo de software. El conocimiento disponible
acerca del desarrollo de software supera con creces lo
que una persona puede llegar a conocer. Otras áreas del
conocimiento han respondido a ese crecimiento en el
conocimiento mediante funciones especializadas. La
especialización puede ser vertical –especialista en un área
de aplicación como la computación científica–, horizontal
–especialista en seguridad de sistemas–, o por nivel de
responsabilidad –desarrollador vs ingeniero. Como en
otras áreas más maduras, estas divisiones se convierten
en una estructura reconocida del área, permitiendo tanto
la profesionalización como la especialización del personal.
Por razones históricas, algunas distinciones en el
software ya están bien establecidas, como la
administración de bases de datos y, más recientemente, el
desarrollo de sitios web. Aún no es claro si una
especialización, vertical u horizontal, sería mejor que la
otra. El progreso hacia la identificación de los
conocimientos necesarios para ejercer funciones
específicas ayudará a comprender cómo alinear las
especialidades.
Segunda Ambición: Hacer de los pregrados de formación
en desarrollo de software una valiosa inversión a largo
plazo. La principal responsabilidad de las universidades,
especialmente en los programas de pregrado, es formar
con contenidos actualizados y duraderos que los
estudiantes puedan utilizar en el tiempo. Por razones
prácticas y pedagógicas, es apropiado utilizar material
9
con ejemplos de la práctica diaria. Sin embargo, en los
cursos cuyo énfasis principal es la tecnología, la mayoría
del conocimiento se vuelve obsoleto cuando esa
tecnología está ampliamente desfasada con relación a la
vida real.
subyacentes a la formulación de problemas y a la
validación de resultados [9], lo mismo que para
incrementar su curiosidad y creatividad. Los programas
de doctorado se basan en gran medida en desarrollar
estas habilidades y talentos.
En el fondo, el diseño curricular es un problema de
asignación de recursos, con el espacio curricular –medido
por cursos, horas de estudio, trabajo independiente,
proyectos,...– como un recurso escaso. Los cursos deben
ganarse un lugar suficientemente compacto en el plan de
estudios, con contenidos duraderos para justificar el
espacio curricular que utilizan. Regularmente, las
universidades enfrentan la presión de potenciales
empleadores para sacrificar la comprensión sistemática
en pro de habilidades de utilidad inmediata. Cada
universidad debe seleccionar su propio equilibrio entre
conocimiento inmediato y de largo plazo. Por lo tanto, es
necesario resistir la tentación de ofrecer nuevos
programas de pregrado en Ingeniería y mucho menos
crear nuevos departamentos académicos. La Ingeniería de
Software aún no tiene un plan de estudios independiente
con suficiente contenido codificado y duradero en el
tiempo como para justificar un plan de estudios de
pregrado independiente. Sustancialmente, la mayor parte
de los contenidos se superponen con buenos contenidos
en Informática.
3.2 Inculcar una actitud ingenieril en los programas
formativos
Cualquier estudiante que pretenda formarse en alguna de
las áreas del desarrollo de software debe ser bueno en el
desarrollo de software. Esto requiere dominar cuestiones
como la lógica, la abstracción, el diseño y la programación
misma. Esas competencias requieren una visión
ingenieril: comprender y modelar problemas, resolver
limitantes, considerar a los usuarios, comparar
alternativas, entre otras. Se debe tratar de esta manera al
desarrollo de software, no sólo para los futuros
ingenieros de software, sino para todos los estudiantes.
Actualmente, los programas de pregrado en Informática y
en Tecnologías de la Información incluyen cursos de
desarrollo de software, y todos los estudiantes,
incluyendo a los ingenieros de software, deben formarse
siempre con un punto de vista de ingeniería en cada uno
de esos cursos.
Al adicionarles un sentido más fuerte de ingeniería a
través de la mayoría de planes de estudio, se beneficiarían
los programas de pregrado en Informática y la energía,
necesaria para administrar programas o departamentos
separados, se invertiría mejor en optimizar la disciplina y
sus cursos. Además, las asociaciones de profesionales se
deben abstener de proponer planes de estudio. La
evidencia en los últimos 30 años es que las propuestas de
contenidos creativos e innovadores provienen de
asociaciones y universidades individuales –cuyos
miembros tienen intereses diversos y conflictivos– y no
de grandes comités que integren a la industria, a la
academia y al Estado.
Tercera Ambición: Proporcionar especialización a través
de capacitación y formación de posgrado. Debido a que las
especializaciones actualmente tienen un amplio mercado,
las instituciones formativas deben estructurar estrategias
para direccionarlas. El carácter de estas oportunidades
depende del nivel de responsabilidad que el estudiante
asuma. Los futuros ingenieros deberían poder comenzar
la especialización concentrándose en el pregrado y en los
cursos electivos; pero, en el actual estado de madurez de
los procesos formativos, deben esperar a culminar su
pregrado y esperar, al menos un año de estudios de
postgrado –o el comparable en tiempo laboral– para ser
competentes en una especialidad. En el extremo opuesto,
los centros de formación profesional, las escuelas
privadas y el entrenamiento in house ofrecen capacitación
en habilidades para productos específicos.
En ingeniería, por supuesto, la preparación para
investigar es diferente de la preparación para aplicar. Un
investigador necesita más formación en principios
Regularmente, se escuchan quejas acerca de que los
planes de estudio de los pregrados en Informática no
cumplen con el objetivo de formar ingenieros. En muchos
aspectos, el problema radica en el fracaso de los cursos de
desarrollo de software para hacer frente a las
consideraciones prácticas del software real. Estos
problemas se deben abordar en los cursos para todos los
estudiantes; para mejorar, no basta con separar los cursos
de Ingeniería de Software de los demás cursos del plan
curricular. Además, estos cursos pueden mejorar el plan
de estudios para los estudiantes que se forman en el
ámbito del software, no sólo para los potenciales
ingenieros de software.
En particular, los ingenieros deben considerar numerosas
alternativas y seleccionar la apropiada para la tarea en
cuestión; necesitan diferentes grados de precisión en
diferentes situaciones, en diferentes puntos del programa
y para diferentes estructuras de datos [10], y deben
aplicar juicios para realizar análisis apropiados a la luz de
los costos y las necesidades. Boehm y Sullivan [7]
enfatizan en que la Ingeniería de Software tiene un lado
comercial y por eso las consideraciones económicas, así
como las técnicas, afectan las decisiones que se toman.
Cuarta Ambición: Integrar un punto de vista ingenieril a
los pregrados en Ciencias Computacionales y a otros planes
de estudios en Tecnologías de la Información. En la
práctica, un buen software no se desarrolla por accidente.
Este proceso requiere conocimientos de diseño que no
están relacionados con el diseño de la ingeniería
tradicional. Incluso, una mirada superficial a lo que los
ingenieros saben revela los problemas en el actual
currículo del software. Las deficiencias incluyen:
 Programación desde cero. La mayoría de cursos
preparan a los estudiantes para codificar desde cero,
10
en lugar de modificar los programas existentes o
mediante el trabajo en soluciones modelo. Por otra
parte, rara vez los estudiantes leen buenos programas.
Es como si se incitara a los estudiantes a escribir
buena prosa sin haber leído primero buena prosa.
 Programar antes de razonar. Aunque la situación está
mejorando, la codificación y la depuración todavía
parecen estar por encima de procesos cuidadosos para
especificar, analizar y construir o derivar.
 Implementar el primer diseño. A menudo, los
problemas admiten más de una solución. La mejor
solución en un entorno dado depende en gran medida
de cuestiones acerca del usuario o del uso previsto
para el sistema.
 Diseñar para el implementador. Los implementadores
suelen optar por soluciones que responden a sus
propios gustos, no a las necesidades del cliente.
 Fallar al comprender la escala del problema. Los
proyectos de curso generalmente enfatizan en la
funcionalidad y omiten los requisitos de desempeño,
especialmente requisitos de escala como el tamaño y
el rendimiento.
 Escribir ejercicios para usar y tirar. Dado que los
estudiantes descartan los proyectos tan pronto como
se gradúan, no tienen ningún incentivo para crear
software comprensible, bien documentado y de fácil
mantenimiento.
 Ignorar la fiabilidad, la seguridad, la economía y otros
requisitos del sistema. Por lo general, los proyectos de
aula se centran en conseguir resultados correctos para
entradas correctas. Ocasionalmente, requieren
comprobaciones rudimentarias para las entradas y, en
ocasiones, para medir el desempeño. Los estudiantes
realizan muy poco análisis sistemático de fiabilidad y
seguridad. Similarmente, estos proyectos direccionan
el rendimiento asintótico de los algoritmos y, a veces,
la codificación rápida, pero muchos estudiantes nunca
confrontan un requisito con la respuesta práctica en
tiempo real y es raro que encuentren problemas no
técnicos que originen la toma decisiones.
Modificando el énfasis en los cursos individuales será
posible resolver estos problemas, sin trastornos
significativos en la estructura de un programa. El
resultado podría mejorar la calidad de los cursos para
todos los estudiantes, no sólo para los de software.
 Estudiar buenos ejemplos de sistemas software. Hacer
esto correctamente requiere estudios de casos
organizados. Mientras tanto, hacer una cuidadosa guía
de lectura de un buen código y estructurar proyectos
de aula que comiencen desde un código que facilite el
logro de las competencias.
 Presentar teorías y modelos en el contexto de la
práctica. Enfatizar en ideas duraderas que vayan más
allá de un cambio importante en la tecnología. A
menudo, los estudiantes aprenden mejor trabajando
sobre ejemplos concretos; los buenos ejemplos se
pueden mezclar para aplicar reutilización.
 Exigir la consideración de al menos dos diseños
importantes. Hacer que los estudiantes elijan entre
distintas alternativas de diseño para hacer frente a las
necesidades del cliente.
 Exigir consultas a los usuarios finales. Utilizar
proyectos con clientes reales. A menos que los
usuarios finales tengan voz en la revisión del diseño,
los estudiantes no entenderán que sus necesidades y
preferencias son diferentes de las de esos clientes.
 Formar en procesos de estimación. A menudo, los
estudiantes creen que no pueden hacer ningún análisis
hasta que tengan todos los hechos concretos. Se les
debe formar en cómo hacer estimaciones rápidas de
los niveles de uso, del rendimiento, del tamaño y del
ancho de banda, y mostrarles cómo esto les puede
proporcionar una orientación temprana acerca de la
escala y el rendimiento del proyecto.
 Crear, modificar y combinar programas. Formar a los
estudiantes para trabajar con estructuras de
programas elaborados por otros, a reutilizar
componentes, que respeten las normas y a que valoren
los beneficios de una buena documentación.
 Implementar pruebas con datos erróneos. Ejecutar
casos de prueba elegidos por otros, no sólo con los
datos de demostración por parte del estudiante.
Incluir no sólo las entradas correctas sino también
entradas malintencionadas e incluso erróneas, y
hacerlo no como una tarea aislada sino como una
cuestión continua.
 Ejecutar funciones con requisitos embebidos. Los datos
erróneos no son la única fuente de exigencias del
mundo real. Es necesario ejecutar funciones que
expongan a los estudiantes a requisitos finales, al no
determinismo, a condiciones de prueba y a
restricciones no técnicas.
3.3 Mantener los procesos formativos ajustados a los
rápidos cambios
Los procesos de formación de los desarrolladores de
software deben ser proporcionales a los cambios en las
tecnologías del software y de los modelos de desarrollo.
En primer lugar, las propias instituciones de formación
deben ser capaces de adaptarse con rapidez, tanto en el
contenido de sus ofertas como en su capacidad para
explotar las nuevas tecnologías que apoyan los procesos
formativos. En segundo lugar, las instituciones deben
preparar a sus estudiantes para asumir la responsabilidad
de mejorar sus propias habilidades a lo largo de la vida
profesional.
Quinta Ambición: Desarrollar planes de estudio flexibles y
sensibles al cambio. Los principios centrales y los modelos
duraderos en el plan de estudios cambian más lentamente
que la práctica real. Sin embargo, en comparación con
11
otros campos, incluso el núcleo del plan de estudios de
desarrollo de software debe cambiar rápidamente. Por
ejemplo, la mayoría de planes de estudio no reconocen el
papel que juegan las buenas abstracciones en el diseño
para las arquitecturas software [11]. Además, la evolución
de Internet en los últimos años, desde un servicio de
correo electrónico/telnet/ftp a un sistema de distribución
de información integrado en la cultura popular, ha
introducido nuevas técnicas y modelos para el diseño y el
desarrollo:
 Desarrollo de software de código abierto.
 Sistemas de Información altamente distribuidos a gran
escala, incluyendo el almacenamiento en caché local, la
actualización automática, los servicios de empujar y
tirar, el control de eventos estilo y otras
características.
 La seguridad para transacciones entre partes que no
preestablece contraseñas o claves.
 El software independiente de la plataforma que no
interfiere con el equipo en el que se ejecuta.
 La computación realizada a través de coaliciones de
recursos independientes.
 La recopilación de información y de minería de datos
de información personal a gran escala, con los
relacionados problemas de privacidad.
El plan de estudios de hace cinco años no cubre los
conceptos necesarios para comprender estos fenómenos
y, mucho menos, para controlarlos.
Las instituciones necesitan flexibilidad y recursos para
reaccionar a estos cambios, que no deben estar
obstaculizados por fragmentaciones internas en forma de
múltiples programas o de competencias departamentales;
y externamente no deberían estar limitados por normas
que restrinjan los planes de estudio, como planes y
estándares de acreditación desarrollados en los comités
de las sociedades profesionales. Si las sociedades
profesionales van a participar, se deben establecer niveles
de calidad y realizar foros para intercambiar ejemplos de
planes de estudio, no para imponer cuestiones de
contenido.
Sexta Ambición: Aprovechar la tecnología para apoyar la
formación. Las Ciencias Computacionales y los currículos
en Tecnología de la Información han sido siempre
agresivos cuando se trata de tareas que implican
programación, y en este sentido les llevan ventaja a
muchas otras áreas. Sin embargo, es posible hacerlo
mejor si se aprovecha la tecnología para apoyar los
procesos formativos. Se podría hacer en las aulas un
mejor uso de las simulaciones y de los ejercicios de
juegos, para obtener mayor provecho de los tutoriales
que incluyen y que proporcionan toda la información
necesaria. De esta forma se beneficiarán todos los
usuarios y se podrían amortizar los costos de desarrollo a
través de una gran comunidad de usuarios.
Comúnmente, se utiliza Internet simplemente como una
manera fácil de distribuirles a los estudiantes los
materiales de un curso o para ofrecer cursos a distancia.
Aunque la mayoría de cursos a distancia son en
habilidades para el uso de aplicaciones específicas o en
lenguajes de programación, muchos se orientan a otro
tipo de formación en línea. La mayoría de las funciones en
el aula se pueden apoyar en una combinación de la web, la
distribución avanzada de lecturas o CD-ROM y salas de
chat o teleconferencias. La principal excepción a este
sistema es la interacción espontánea entre el instructor y
los estudiantes y entre los estudiantes. Cuando este déficit
tecnológico se supere –quizás a través de avances en
tecnología asistida por computador para el trabajo
cooperativo–, las universidades deberán estar preparadas
para su explotación.
Desafortunadamente, la inversión inicial en la
preparación de un soporte electrónico para un curso
puede ser grande, al igual que el costo de las revisiones
periódicas para reflejar el cambio tecnológico. Los
modelos tradicionales de administración de las facultades
no toman en cuenta estos factores.
Séptima Ambición: Proporcionar medios eficaces para que
los ingenieros de software puedan mantener sus
habilidades. El objetivo de la formación es la capacitación.
Incluso en el aula, el objetivo de formar es crear un
entorno fértil para que el estudiante se forme. Sin
embargo, después de la graduación ese estudiante se
convierte en responsable de su propia formación. Incluso
con la mejor formación de pregrado los desarrolladores
de software –especialmente los ingenieros de software–
tendrán que actualizar periódicamente sus conocimientos
y su dominio de las nuevas tecnologías, por lo que una de
las responsabilidades de la formación formal es
prepararlos en competencias para la auto-formación
permanente e independiente.
Las habilidades individuales de formación se deben
complementar con otros materiales para el estudio
independiente. Los esfuerzos ocasionales de las
sociedades profesionales, para proporcionar la
autoevaluación
y
los
materiales
de
estudio
independientes, no han logrado completamente sus
objetivos. Los cursos intensivos de los proveedores
comerciales tienden a ser muy concretos y costosos. Las
ofertas de estudios universitarios a distancia requieren
un compromiso sustancial y, normalmente, los cursos
están mal adaptados a las necesidades individuales de los
profesionales.
Es necesario ofrecer oportunidades de formación
personalizada y de acuerdo con la demanda y la
localización; proveer un soporte que valore y potencialice
el conocimiento previo de cada estudiante y poder
actualizarlos y, posteriormente, proporcionar una
secuencia de cursos que reúnan los contenidos para
lograr el objetivo de formación de acuerdo con los
requisitos previos de cada estudiante.
Cuando un estudiante llega a mediados de su carrera no
necesita estar encerrado dentro del calendario
académico. Este es el momento para la formación
individual, programada con base en competencias, donde
12
el estudiante dedica al estudio el tiempo que sea
necesario para dominar el material y los conceptos. En
esta estructuración, el estudiante no avanzará en su
proceso formativo hasta que demuestre el logro de las
competencias programadas.
3.4 Establecer la acreditación
Como se señaló anteriormente, existe al menos tres
maneras de hacer fiable al software: la validación directa
del producto, la confianza en la organización
desarrolladora y la confianza en el desarrollador. La
preocupación aquí es cómo hacer para que los
profesionales de software independientes, especialmente
los ingenieros de software, puedan garantizarles a los
clientes que son competentes.
Acreditar a los profesionales es posible –de hecho se
hace– tanto por organismos públicos como privados. Los
resultados de las tarjetas profesionales, como derechos,
restricciones, privilegios y responsabilidades, serán
diferentes para lo público y para lo privado. La
credencialización pública de los médicos generalmente se
hace a nombre del interés público. Su objetivo es
garantizar el cumplimiento, en la práctica, de estándares
mínimos tanto técnicos como éticos. Estas tarjetas se
deberían expedir tanto para profesionales –ingenieros,
médicos– como para no profesionales –conductores
públicos, electricistas, plomeros. Las credenciales
privadas se pueden tramitar por muchas razones; pero en
software, actualmente, la más común es para los grados
académicos y se expide con la intención de asegurar la
profundidad de la comprensión y la capacidad de crecer
en el campo, así como en competencias actuales; pero un
proveedor de certificación de competencias también
expide tarjetas específicas, con la intención de asegurar
una competencia en un conjunto específico de
herramientas.
Las tarjetas profesionales públicas, para individuos que
participan en la práctica de una disciplina ingenieril,
requieren:
 Un nivel alcanzable de la práctica, que asegure una
calidad consistente con la seguridad pública; es decir,
expectativas razonables intuitivas pero no la
perfección.
 Un instrumento de evaluación, que se puede aplicar
con confianza para predecir si un individuo puede
mantener un buen nivel de conocimientos en el futuro.
 En un campo en evolución tan constante como la
Ingeniería de Software, es necesario asegurar que el
profesional mantendrá sus habilidades sin importar el
nivel de mejora de la práctica.
Particularmente, estas normas no se logran al momento
de acreditar ingenieros. Para otras habilidades, más
estrechas o de más bajo nivel, se han considerado las
certificaciones
de
proveedores
asociados
con
determinadas versiones de sistemas. Las credenciales,
especialmente las públicas, se asemejan a la
especificación del software: definen compromisos acerca
de la capacidad del profesional. Es necesario asegurar que
las credenciales garanticen el reflejo de habilidades
demostradas y que direccionan asuntos relacionados con
la competencia que son de interés para los clientes,
quienes son laicos en lo que respecta a las Ciencias
Computacionales.
Octava Ambición: Establecer credenciales diferentes y
apropiadas para los distintos roles en el desarrollo de
software. Siguiendo a la Primera Ambición, se deben
establecer credenciales que coincidan con los roles en
desarrollo, o al menos con aquellos cuyo campo de acción
esté lo suficientemente maduro. Esto implica tanto la
identificación de contenidos como la clara separación de
roles. La separación de roles se debe hacer no sólo para
separar los profesionales de los no profesionales, sino
también para identificar aquellos más especializados que
los especificados en el registro profesional de ingeniería.
Es cierto que existen algunas áreas técnicas en las que
puede ser útil contar con cierto nivel de experiencia,
como en habilidades para administrar una determinada
marca de software. Otras son de más alto nivel, como
administrar bases de datos o ciertos aspectos de
seguridad. Pero se debe continuar con las actuales
actividades para establecer credenciales apropiadas para
esas habilidades. Esto puede establecer expectativas
razonables, brindar experiencia con la certificación y
proporcionar una distinción entre desarrolladores de
software con competencias auditadas y aquellos que no.
Las certificaciones pueden ser añadidas como garantía y,
dejando en claro lo que está certificado, se puede evitar la
confusión del público o de los clientes.
Novena Ambición: Establecer credenciales que reflejen
con exactitud la práctica alcanzable. La cuestión de si “la
Ingeniería de Software debería ser o no una profesión”, a
menudo se plantea en forma de “¿no es tiempo ya de
comenzar a licenciar ingenieros de software a través de
los mecanismos habituales del registro profesional de
ingeniería?”. Sin embargo, existe un problema al utilizar el
registro ingenieril como agente para incrementar los
estándares profesionales: el propósito del registro
profesional ingenieril es proteger al público,
proporcionándole alguna garantía externa de que un
ingeniero está preparado para producir sistemas fiables.
Al firmar un proyecto el ingeniero asume la
responsabilidad personal. El nivel de presentación
requerido por esta declaración no es el de que “lo mejor lo
podemos hacer ahora”, sino que lo que se hace es
“suficientemente bueno”. Por desgracia, todavía no
tenemos un nivel establecido y ampliamente aceptado, en
la práctica de la Ingeniería de Software, que cumpla con
esta norma. La propuesta de certificar ingenieros sobre la
base de las mejores prácticas, incluso las que prometen
elevar los estándares a medida que se mejora,
simplemente no tienen en cuenta este criterio primordial.
Se necesitan dos cosas antes de elevar a los ingenieros de
software a la calidad de ingenieros profesionales. En
primer lugar, se necesita un nivel ampliamente alcanzable
en la práctica que le proporcione una protección
13
razonable al público. En segundo lugar, se necesita un
instrumento de evaluación que pueda hacer predicciones
razonables de que una persona en particular pueda
practicar ese nivel. No tiene sentido buscar la segunda
hasta no lograr la primera.
4. CONCLUSIONES
La formación que se imparte actualmente para los
desarrolladores de software enfatiza en contenidos
inspirados en estructuras desactualizadas y se ofrece en
gran medida en formatos tradicionales de aula. El
entrenamiento también sigue las líneas tradicionales:
capacitar en habilidades específicas mediante cursos
cortos, sobre papel y en formatos de estudio
independientes.
En la próxima década es posible mejorar, incluyendo la
clarificación de los roles involucrados en el desarrollo de
software y la acreditación apropiada; mejorando el
tratamiento de las cuestiones de ingeniería; respondiendo
rápidamente, desde los contenidos formativos, a los
cambios en tecnología y a los conocimientos
fundamentales y mejorando el uso de las tecnologías de la
información en la formación y el entrenamiento.
Pero, lo más importe será trabajar en programas cuyo
objetivo sea potencializar la capacidad lógicainterpretativa y abstractiva de los futuros profesionales.
Esa deficiencia en la ejecución de las actividades
ingenieriles, y de casi todas las “profesiones”, no les
permite a los países un adecuado desarrollo y los
productos ofrecidos, entre ellos los de software, no
infunden credibilidad entre los usuarios [12].
Para lograr las ambiciones que se describen en este
trabajo se requiere imaginación, flexibilidad y voluntad
política. Lo más importante será proporcionarles a los
maestros interesados: apoyo, recursos y oportunidades, y
desafiarlos a establecer sus propios estándares, lo
suficientemente altos como para elevar el nivel de la
Ingeniería de Software y lograr de esta forma la
profesionalización del desarrollo de software.
5. REFERENCIAS
[1]
Tomayko, J. E. 1998. Forging a discipline: An outline
history of software engineering education. Annals of
Software Engineering, 6(1-4), 3-18.
[2] Knoke, P. & Bagert, D. 1998. Graduate Software
Engineering Program Survey Results & Evaluation. Forum
for Advancing Software engineering Education FASE
(Vancouver, Canada, September 15), 8(9).
[3] Raymond, E. S. 2010. The Cathedral and the Bazaar. Online:
http://catb.org/~esr/writings/homesteading/
[Feb.
2011].
[4] Shaw, M. 1998. Architectural Requirements for Computing
with Coalitions of Resources. First Working IFIP
Conference on Software Architecture WICSA1 (San
Antonio, TX, USA, 22-24 February).
[5] The Computer Society. 2005. Guide to the Software
Engineering Body of Knowledge SWEBOK. Online:
https://www.createspace.com/3603000 [Mar 2011].
[6] Shaw, M. 1990. Prospects for an engineering discipline of
software. IEEE Software, 7(6), 15-24.
[7] Boehm, B. W. & Sullivan, K. J. 2000. Software Economics: A
roadmap. Proceedings of the Conference on The Future of
Software Engineering ICSE '00 (New York, USA, 13-15
Nov).
[8] Maibaum, T. S. E. 2000. Mathematical Foundations of
Software Engineering: A Roadmap. Proceedings of the
Conference on the Future of Software Engineering ICSE '00
(New York, USA, 13-15 Nov).
[9] Perry, D. E.; Porter, A. A. & Votta, L. G. 2000. Empirical
Studies of Software Engineering: A Roadmap. Proceedings
of the Conference on the Future of Software Engineering
ICSE '00 (New York, USA, 13-15 Nov).
[10] Jackson, D. & Rinard, M. 2000. Software Analysis: A
roadmap. Proceedings of the Conference on the Future of
Software Engineering ICSE '00 (New York, USA, 13-15
Nov).
[11] Garlan, D. 2000. Software Architecture: A Roadmap.
Proceedings of the Conference on the Future of Software
Engineering ICSE '00 (New York, USA, 13-15 Nov).
[12] Serna, M. E. 2011. La importancia de la abstracción en la
informática. Scientia et Technica, 2(48), 122-126.
14
Descargar