viernes, abril 14, 2006

Cuando Software Factory no es una marca comercial

En algún momento, en otro sitio, se ha discutido sobre Software Factories, discriminando los dos conceptos involucrados en este nombre, devenido marca en manos de Jack Greenfield y otros. Pero la primera definición de SF fue la de la construcción de software siguiendo procedimientos "industriales". Repitiendo la definición comentada en otro lugar:
la Fábrica de Software refiere el sentido de producir con rapidez y calidad a través de procesos conocidos, repetibles y gerenciables, y principalmente, mejorables continuamente, no sólo por la incorporación de técnicas y herramientas en el desarrollo del software, sino porque se mantiene constantemente el foco sobre el mejoramiento del proceso de producción y cada uno de los pasos que esto acarrea. Aaen, Bøttcher y Mathiassen indican que el "término fábrica indica un compromiso a largo plazo, esfuerzos integrados - por encima de proyectos individuales- para mejorar las operaciones relativas al software".
Entre los significados de la fábrica de software, mencionan Aaen, Bøttcher y Mathiassen, "mejorar la efectividad del proceso, reducir la cantidad de retrabajo y reusar el ciclo de vida de los productos". De forma tal que se puedan obtener mejores resultados en menor tiempo y con menos costos, pero agregan que además sea una industria en la cual las actividades del desarrollo de software sean "predecibles lo que significa que los costos estimados y compromisos de cronograma pueden ser satisfechos, confiables lo que significa que la capacidad del proceso es conocida, mejora continua significa que la atención constantemente se concentra en mejorar el proceso y que el conocimiento y las habilidades para mejorar están establecidas. Todo esto debería ser logrado a través de la atención al proceso (mejoramiento) y no a los métodos o herramientas", lo que supone la utilización de métricas y técnicas aplicadas al proceso del software y apuntaría a la satisfacción de las dimensiones de la calidad enunciadas por Falconi Campos.(calidad intrínseca, entrega del producto, costo, motivacion de sus productores, seguridad). Falconi Campos, Vicente. TQC: Control de la Calidad Total (al estilo japonés). Bloch Editores S.A., Rio de Janeiro, 1994.)
Así, la utilización de métodos repetibles, mejorables, seguros y confiables, están entre los objetivos básicos de la construcción de software "industrial". El concepto de desarrollo basado en modelos de OMG (y otros) procura justamente la construcción de software confiable, no dependiente de la pericia de cada desarrollador integrante del proyecto, y que sea capaz de ser sostenible en el tiempo. A pesar de lo que Greenfield y otros sostenedores de la versión MS de Software Factories afirman, MDA (y otros proyectos relacionados) son excelentes conductores de estas ideas. Thales Research & Technologies de Francia muestra que es posible encarar un proceso SF basado en conceptos MDA. Participante activo en OMG, sostiene varios proyectos conducentes al desarrollo de aplicaciones basados en modelos convertidos luego en código, y uno de estos proyectos en curso trata de sostener una Fábrica de Software por medio de un constructor MDA. Un papel expuesto por Benoît Langlois y Daniel Exertier en OOPSLA 2004 detalla el proyecto a esa fecha. Su análisis puede servir para estudiar cómo usar el desarrollo basado en modelos para la construcción de sofware a gran escala:
A major issue in software engineering is software production improvement. This paper studies the objectives and the features of a model-driven software factory contributing to automate the production of software systems in evolving environments (specifications, standards, technology, and tools). Through these considerations, this paper introduces MDSoFa, a Model-Driven SOftware FActory tool developed at THALES meeting this need, and a set of technical and methodological lessons learned from this tool implementation and usage.(...)
In this paper, we analyze the combination of two approaches, model-driven engineering and software factory, to rationalize software production. The main interest of model-driven engineering is that model is the primary type for developing systems, e.g. from requirements down to code, and this in different perspectives, as domain, technical, or process. The main interest of software factory is software production automation, for going from a handcrafted to an industrialized software production and for allowing development time reduction and software quality improvement. In this vision, a model-driven software factory is a software factory where models are central with the main objective to ease and industrialize software production.(...)
A clear and predictive method of work needs standard domain, technical or process assets. Standardization can be international, enterprise, or project wide. Besides, a rationalized process implies not only rationalized activities but also engineering tools adapted to the defined engineering processes. The common denominator is to develop a systematic method of work, the way for automation. The interest is to create a synergy between standards, processes and tools, raising together the software production maturity level.(...)
A model-driven software factory is a combination of metamodels, expertise, tools and frameworks for producing output assets in an industrial way, that can be also metamodels, expertise, tools and frameworks, i.e. recursively, a model driven software factory can produce a model-driven factory. Depending on the focus of the produced assets, a software factory has the following functions:
  • Model factory. In this case, models are produced automatically from models. For instance, a model transformation can be deduced from the application of a model transformation pattern on a domain metamodel.
  • Expertise factory. In this case, the software factory produces specific or generic expertise from specific or generic expertise. For instance, model checks and wizards can be produced from a methodological metamodel and a generic expertise for model checking and assistance.
  • Tool factory. In this case, the software factory produces tools or executable environments in a tool, as a tool-specific modeling chain.
  • Framework factory. In this case, the produced asset is a framework.
  • Software factory factory. As mentioned above, this specific case covers the reflective approach when all types of asset are involved in input and output of the software factory for producing a software factory.(...)
We focus now our interest on software factories producing modeling software factories, involving cooperation of heterogeneous domains and pieces of expertise, with development qualities to be respected. In the model-driven perspective, a software factory production can be seen as a mapping execution: the modeling environment is modeled at the metamodel level and the result of the software factory is the modeling environment that will be used by modeling users. (...)This software factory mapping is comparable to an abstract to concrete syntax mapping, or, in MDA terms, to a PIM (Platform Independent Model) to PSM (Platform Specific Model) mapping. A further step consists in instantiating the same software factory for different modeling tool platforms, each having its own specificities (tool-vendor UML metamodel, language, packaging, deployment protocol…) where target platform becomes a parameter to be considered during the software production. This is key for large companies where methodologies and practices are similar with different modeling tools.
Este es un proyecto en curso. No necesariamente es la única solución, pero sin duda sugiere mejores vías de construcción del software.

No hay comentarios.: