Sunteți pe pagina 1din 6

El actual ingeniero de software Rubby Casallas Jorge A.

Villalobos Una visin basada en los permanentes cambios tecnolgicos y otros aspectos relacionados. De un ingeniero que conoca un modelo de ciclo de vida del software, que manejaba una tecnologa y que era capaz de construir una aplicacin para resolver un problema, hemos pasado a un ingeniero que debe poder integrarse en grandes equipos de desarrollo, que debe tener una visin amplia de las tecnologas disponibles, que debe ser capaz de comunicarse de manera eficaz con los clientes y que debe entender el medio empresarial en el que ocurren los problemas que va a ayudar a resolver. De un ingeniero monofactico hemos pasado a un profesional multifactico, que necesita una alta capacidad de adaptacin y autoaprendizaje. Qu es Ingeniera de Software? Segn la ACM, la ingeniera de software es la disciplina del desarrollo y mantenimiento de sistemas computacionales que se comportan de manera confiable y eficiente y que su costo de desarrollo y mantenimiento puede ser pagado [1]. Esta definicin incluye al menos dos aspectos importantes para resaltar. Por un lado, la nocin de calidad de lo que se produce y, por otro, las restricciones bajo las cuales el trabajo debe ser realizado (costos). Sin embargo, esta definicin se queda un poco corta para que de ah se pueda entender la complejidad de lo que significa la tarea de construir y mantener software y, menos an, para poder concluir el cuerpo de conocimientos y de generacin de habilidades que un ingeniero de software debe recibir en su formacin para ser capaz de desarrollar y mantener los sistemas de los que habla la ACM. Hay tres puntos en los que vale la pena hacer nfasis antes de presentar una definicin ms precisa. El primero es que ingeniera de software no se reduce a la labor de escribir un programa de computador. La programacin es slo una pequea parte de la ingeniera de software. El segundo punto es que es una profesin enmarcada dentro de la ingeniera, entendida como la integracin de distintos componentes para la solucin efectiva de problemas utilizando, en nuestro caso, tecnologas de informacin. El tercer punto es que la ingeniera de software debe ver la tecnologa ms como un medio que como un fin en s mismo. Nosotros hemos desarrollado una definicin de ingeniera de software basada en la descomposicin conceptual de la profesin en cuatro grandes ejes. Esto ejes son: (1) procesos de software y aseguramiento de la calidad, (2) arquitecturas de software y elementos estructuradores, (3) metodologas y tcnicas de desarrollo, (4) tecnologas de informacin. Todos estos ejes soportados por herramientas. Para que un ingeniero de software pueda construir aplicaciones confiables, mantenibles, eficientes y bajo las restricciones de costos y recursos impuestas por una situacin particular, debe entender, poder aplicar e integrar los conocimientos y habilidades necesarios de cada uno de los ejes que conforman la disciplina. Debe ser claro que entre estos ejes existen dependencias y relaciones profundas, y que las decisiones que se tomen en cualquiera de ellos tienen repercusiones sobre los dems. A continuacin vamos a describir cada uno de los ejes. El propsito es entender a partir de esta descripcin, tanto el mbito de accin de un ingeniero de software de hoy como los retos a los que se enfrenta. Procesos de software y aseguramiento de calidad Los procesos de software comprenden el conjunto de actividades, tanto tcnicas como administrativas, que son necesarias para la fabricacin de un sistema de

software. Estas actividades van desde el anlisis de requisitos hasta la evolucin o el mantenimiento del software, pasando por la implantacin, la administracin de configuraciones, el aseguramiento de la calidad, las pruebas, etc. Tener un proceso adecuado significa, primero, que est definido y, segundo, que sirve para lo que se especific, es decir que se puede verificar que los objetivos para los que fue definido se satisfacen. Definir un proceso de software implica precisar los objetivos, las personas (roles) involucrados, las entradas y salidas del proceso, los criterios de entrada y salida, las actividades, los mtodos y las herramientas que se utilizarn, la manera como se medirn elementos dentro del proceso que permitan verificar resultados, etc. El rea de procesos de software ha madurado mucho en los ltimos aos. Lo que ha impulsado estos cambios es la necesidad de los clientes de contar con algn tipo de modelo, que les permita evaluar la capacidad de las empresas de desarrollo de software para realizar con xito un proyecto y producir productos de calidad. La hiptesis bsica es que si el proceso es adecuado, la probabilidad de producir un producto de buena calidad es ms alta. Sobre esta hiptesis han sido definidas normas internacionales como la ISO 9001 [2] y modelos especficos para software como CMMI [3], SPICE [4], etc. Un campo de accin claro del ingeniero de software es el de contribuir en las organizaciones a mejorar la gestin de los proyectos, y en particular los procesos de construccin de soluciones. Esta iniciativa de las empresas puede estar motivada por la consecucin de un certificado estilo ISO 9001 o algn nivel de CMM, pero sobre todo, estar motivada por la necesidad de organizar la forma de trabajar para que sea ms eficiente, se mejore la productividad y la calidad de lo que se produce. Arquitecturas de software A partir de la seleccin de los elementos que van a definir la estructura de una aplicacin, hay que definir el proceso de construccin, la metodologa, la tecnologa y las herramientas. Se consideran elementos estructuradores las funciones, los objetos, los componentes, los contenedores, los servicios, los modelos, etc. Cuando los elementos no funcionales tienen gran importancia dentro de la aplicacin, o cuando el tamao del programa impide que sea posible manejar toda la informacin en trminos de los elementos estructuradores, es necesario cambiar de nivel de abstraccin e introducir otros lenguajes y modelos ms abstractos. En los 60s y 70s era natural estructurar una aplicacin en trminos de los servicios funcionales que sta deba proveer. De hecho, las metodologas como el anlisis y diseo estructurado partan de una descomposicin funcional jerrquica que luego se transformaba en procedimientos dentro de la aplicacin. Con el aumento de la complejidad de las aplicaciones y la necesidad de hacerlas evolucionar, este enfoque no fue suficiente. En los 80s y 90s se populariz el desarrollo de software orientado-objetos que buscaba, entre otros objetivos, permitir la construccin de aplicaciones ms mantenibles. Hoy parecen no ser suficiente los objetos, no porque hayan dejado de ser buenos, sino porque el problema ha cambiado. Estos cambios son consecuencia de los avances tecnolgicos y el incremento de las expectativas de los clientes. Por ejemplo, las caractersticas no funcionales se han vuelto ms crticas y el problema de la integracin de aplicaciones ha llegado a ser prioritario. Se necesita contar con arquitecturas flexibles y lo ms independientes posibles de las herramientas que se utilicen. El papel del diseador y arquitecto de software se ha vuelto crucial en las empresas. Este arquitecto debe ser capaz de tomar las decisiones adecuadas en cuanto a la manera como se estructurar una solucin que incluya sistemas

legados, sistemas propios, sistemas adaptados, etc. y que cumpla con restricciones de funcionamiento precisas en cuanto a seguridad, escalabilidad, tolerancia a fallos, etc. Adems, su decisin tiene que incluir la manera de organizar el equipo de desarrollo para producir el software de una forma eficiente dentro de los plazos y costos previstos. Tecnologas de informacin En el eje de las tecnologas hacemos referencia tanto a elementos de hardware que afectan los sistemas de software como a los lenguajes concretos de modelaje y de programacin, y a las plataformas para la construccin de algn tipo de componente de software. Esta es la dimensin de la ingeniera de software que ms rpido cambia. En los ltimos 50 aos, hemos visto cambiar la visin de las empresas hacia las tecnologas de informacin, desde aplicaciones en batch de apoyo a procesos puntuales de sus negocios hasta las aplicaciones de la empresa abierta, enfocadas a apoyar a sus clientes y sus asociados. Es la evolucin de la tecnologa lo que ha hecho que las expectativas con respecto al software cambien y sean ms exigentes. Los grandes hitos tecnolgicos como la aparicin de los computadores personales y ms recientemente, Internet y las tecnologas mviles, han hecho que el software se convierta en algo ha permeado todas las actividades. En una poca se pensaba que las decisiones sobre la tecnologa se tomaban en las ltimas etapas del ciclo de vida de una aplicacin, pero a medida que los requerimientos no funcionales han ido tomando importancia, la integracin de la tecnologa se debe hacer desde las primeras etapas de diseo, y obliga al ingeniero de software a ampliar su dominio de competencias. Ya no se puede esperar hasta que el experto en persistencia o distribucin llegue a agregar su parte al programa, sino que el ingeniero de software debe manejar un modelo claro de las tecnologas, para poder tomar las decisiones adecuadas e integrarla con el resto de elementos del programa. El aprender una tecnologa especfica se ha vuelto tan complicado que los proveedores de las mismas han optado por impartir certificados sobre el conocimiento y uso de las mismas. Esta explosin de certificados no-formales, ha contribuido a la confusin sobre lo que es el ingeniero de software hoy. Si bien es cierto que un ingeniero de software debe tener conocimientos sobre las tecnologas de punta, pretender remplazar la formacin formal por cursos de certificacin es un error. Las certificaciones en tecnologas particulares tienen una vida til corta. Metodologas y tcnicas Dentro del marco global de un proceso de desarrollo, las metodologas y tcnicas dan soporte a las actividades de anlisis, diseo, programacin, elaboracin de pruebas, administracin de riesgos, etc. Las metodologas y tcnicas precisan el cmo hacer dentro de las actividades concretas de un proceso. Debe contar con descripciones claras sobre la manera de llevar a cabo el trabajo, de evaluar el avance, de verificar la calidad del resultado y de validar si se produjo lo que se esperaba. Una buena metodologa expresa la experiencia de otros para realizar una tarea: sta es el fruto de la experiencia. Se requiere tiempo de utilizarla, evaluarla, mejorarla, volverla a utilizar, adaptarla, etc. El ciclo de aceptacin es largo y requiere tiempo. Sin embargo, la velocidad a la que las tecnologas cambian, no ha permitido que estos ciclos se completen adecuadamente. Esto explica por qu ha habido tan pocos avances metodolgicos en el rea de construccin de software o por qu este eje va ms lentamente. Recientemente, el tema que ha despertado gran inters es el de los patrones de diseo. Estos son soluciones probadas a problemas

particulares en contextos especficos. Si bien no son metodologas completas, son elementos claves que permiten, por un lado, manejar un vocabulario comn entre los diseadores y, adems, ofrecen elementos objetivos para justificar una decisin.

El papel de las universidades El reto que se plantea a las universidades en la formacin de ingenieros de software es muy grande. En particular, porque es delicado el equilibrio entre todos los aspectos antes mencionados, sobre todo si se tiene en cuenta que se espera que la vida profesional de un ingeniero supere los 40 aos, y que la mayora de aspectos de la disciplina evolucione rpidamente. Veamos los principales puntos en los cuales es necesario garantizar un equilibrio: El balance entre lo fundamental y lo tecnolgico. Las universidades deben buscar en la formacin un equilibrio entre los aspectos fundamentales (algortmica, modelaje, especificacin) y los aspectos tecnolgicos (lenguajes, herramientas especficas). Si la balanza se inclina por lo fundamental, vamos a formar ingenieros que son incapaces de llevar sus conocimientos a la prctica. Si la balanza se inclina por lo segundo, estaremos formando ingenieros con una muy limitada vida profesional til. Lo ideal en este caso es buscar un punto intermedio, en el cual se logren integrar estos dos aspectos, tratando de trabajar sobre modelos de tecnologa como medio para encadenar lo fundamental con las herramientas especficas que las implementan. El balance entre la teora y la prctica. Un ingeniero, ms que tener un conjunto de conocimientos (leyes, teoras, formulas), debe contar con las habilidades necesarias para usarlos en la solucin de problemas. El reto para las universidades es ir ms all de la simple enunciacin de las definiciones, y generar en el estudiante las habilidades necesarias para poder utilizar de manera efectiva aquello que sabe. Si la balanza se inclina por la parte terica, vamos a tener ingenieros poco tiles para las empresas. Si se inclina por la parte prctica, vamos a formar ingenieros que no entienden la razn de lo que hacen y que slo son capaces de repetir recetas. Estos ingenieros tendrn grandes dificultades para adaptarse a los cambios. El balance entre las necesidades de hoy de las empresas y las necesidades del futuro ingeniero de software. Este es uno de los puntos de equilibrio ms difciles de lograr, puesto que los intereses de las dos partes estn en conflicto. Por una parte estn las empresas, que necesitan mano de obra capacitada, que sea productiva desde el primer da de trabajo. Por otra parte est el ingeniero de software recin egresado, que tiene una expectativa de vida til de muchos aos y que quiere evitar convertirse en un producto perecedero para la empresa. Qu evita que una empresa renueve sus ingenieros cada 3 aos buscando siempre profesionales actualizados y ms baratos? La nica solucin es que la experiencia, en lugar de una carga sea una ventaja, y esto slo se logra si el ingeniero de software consigue mantenerse siempre actualizado, y sobre todo, integrarse de manera adecuada a la empresa, entendiendo el negocio y la manera como la tecnologa se incorpora en ella, como un medio y no como un fin en s mismo. Esto ltimo implica que debe tener bases ms slidas y profundas, y a la vez una visin ms amplia de la disciplina. El balance en este punto consiste en que la universidad debe, por un lado, proveerle a sus egresados herramientas suficientes que les permitan crecer en su vida profesional, sin olvidar que a la vez debe garantizar que estas personas deben ser tiles a la sociedad desde el momento en que se gradan. El balance entre lo general y lo especializado. En su afn por ir incorporando todo lo que va apareciendo en la disciplina, la mayora de programas de ingeniera de sistemas ha adoptado la estrategia de sacrificar la profundidad y la generacin de habilidades para evitar dejar por fuera alguno de los temas de moda. En la ingeniera de software, vista como un perfil de la ingeniera de sistemas, ocurre

algo similar. A pesar de la tentacin de tratar de abarcar todos los temas con el mismo nivel de profundidad, es conveniente adoptar una estrategia a varios niveles: en el pregrado debe haber un ncleo slido en el que se estudien las bases de todos los ejes, el cual se debe apoyar con una serie de posibles profundizaciones distintas segn los intereses del estudiante (hacia gerencia de proyectos, hacia diseo, hacia tecnologa, hacia arquitectura). Esta formacin de pregrado debe estar complementada con programas de especializacin, que permitan profundizar en cualquiera de las reas de desempeo profesional. El balance entre lo conocido y la necesidad de buscar nuevas ideas. A este ltimo punto se le suele dar poca importancia, por cuanto se parte de la idea de que lo que se debe ensear es lo que dicen las multinacionales y las universidades de otros pases. Muchos tienen la idea de que nuestra industria de software va a lograr competir a nivel internacional basndose slo en los bajos costos, resultado de los bajos salarios que se pagan en el pas (comparados con los salarios que se pagan en los pases desarrollados). Y nada es ms falso. Cuando se empiezan a ver empresas colombianas contratando sus desarrollos en la India, comienza a rondar la inquietud en el gremio. Qu hicimos mal? Qu hacemos ahora? La respuesta es que hay que competir con calidad, con ideas nuevas y con enfoques nuevos. A lo primero ya hay muchas empresas colombianas apostndole, con certificaciones internacionales de calidad en sus procesos y con muy buenos resultados para mostrar. Eso hay que seguir hacindolo y hay que tratar de extenderlo. Lo segundo es ms difcil de lograr, por cuanto las ideas nuevas estn muy ligadas a la investigacin y eso est hasta ahora arrancando en el pas. Aqu es donde, a pesar del escepticismo de algunos sectores, hay que trabajar. Las universidades del mundo entero son el semillero de nuevas empresas, basadas en nuevas ideas. Es aqu donde las universidades con sus programas de master y doctorado deben entrar a trabajar. El pas necesita programas de alta calidad y un amplio conjunto de investigadores con una formacin adecuada, que sean capaces de trabajar de la mano con las empresas y aportar esas nuevas ideas que le pueden dar una ventaja competitiva a nuestra industria. Conclusin Es claro que as como la complejidad de la construccin y mantenimiento del software ha aumentado en los ltimos aos, la complejidad de formar buenos ingenieros de software tambin. El ingeniero de software hoy se sita en el contexto de la empresa abierta. La empresa que debe contar con sistemas de informacin que apoyen su negocio y su negocio son sus clientes y sus asociados. Estos son sistemas heterogneos, altamente evolutivos y muy exigentes desde el punto de vista no funcional: deben escalar, ser altamente confiables, disponibles, seguros, manejar grandes volmenes de datos y de transacciones, etc. El ingeniero de software hoy debe tener dentro de sus herramientas conocimientos y habilidades de los cuatro ejes de la ingeniera de software: procesos, arquitectura, metodologa y tecnologas. Debe ser capaz de encontrar un equilibrio entre ellos y poder aplicarlo en el momento de tomar una decisin en una organizacin. El arquitecto de software que slo maneje la tecnologa de moda no podr tener una visin completa de las consecuencias de sus decisiones. El director de proyecto que no maneje ninguna de las tecnologas de moda tampoco podr juzgar adecuadamente las decisiones de los arquitectos. Las universidades se deben preocupar por la preparacin de sus estudiantes para el manejo del cambio. Inculcar esta necesidad constante de actualizacin y mejoramiento individual. La educacin formal debe preocuparse por impartir una base de conocimientos fundamentales y preocuparse ms por facilitar la generacin de habilidades en los estudiantes que les permita aprender a moverse en las tecnologas cambiantes y en las empresas de hoy.

Referencias [1] Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering. A Volume of the Computing Curricula Series. ACM y IEEEComputer Society. 2004 [2] Norma ISO 9001:2000. Sistemas de Gestin de la Calidad. ISO Organisation. [3] CMMI-SE/SW/IPPD/SS Versin 1.1. Reporte tcnico. Software Engineering Institute. Carnegie Mellon University. http://www.sei.cmu.edu/cmmi (ltima consulta, septiembre 5 de 2005). [4] SPICE. Software Process Improvement and Capability dEtermination. www.sqi.gu.edu.au/spice/ (ltima consulta, septiembre 5 de 2005) Rubby Casallas. PhD. en Ingeniera de Software, Universidad Joseph Fourier (Francia), Especialista en Sistemas de Informacin en la Organizacin. Universidad de los Andes, Ingeniera de Sistemas y Computacin, Universidad de los Andes. Coordinadora de la Especializacin en Construccin de Software y Profesora Asociada de la Universidad de los Andes. Jorge Villalobos. PhD. en Ingeniera de Software, Universidad Joseph Fourier (Francia), Master en Informtica, Instituto Nacional Politcnico de Grenoble (Francia), Ingeniero de Sistemas y Computacin, Universidad de los Andes, Postdoctorado en el LSR del IMAG (Francia) 2003-2004, Investigador visitante Universidad Politcnica de Catalua (Espaa) 1989-1990, Investigador visitante Universidad Joseph Fourier (Francia) 1999-2000, Profesor Asociado de la Universidad de los Andes (desde 1986). Grupo de Investigacin en Construccin de Software Universidad de Los Andes rcasalla@uniandes.edu.co jvillalo@uniandes.edu.co

S-ar putea să vă placă și