Software Factories

Moving to English this page is a hard work for me. It will be done, but, in the meantime, use Google for a basic tranlation.

El libro de Greenfield

Sofware Factories, el sitio de los autores

Software Factories en Microsoft

En el centro de Arquitecturas de MSDN

Visual Studio Team System, pieza básica del sistema

Software Factories desde un punto de vista más general

Software Factories (Factorías o Fábricas de Software) es una denominación genérica que describe un modo de construír software, asimilándolo a la industria, tratando de aplicar reglas precisas de construcción, confiables, estables, y en cierto sentido, repetitivas. Las factorías de software tienen una larga tradición, con orígenes en la década de los 70 del siglo XX, y una relativamente profusa literatura. Una consecuencia más reciente de este modo de encarar la construcción de software, fue el desarrollo del concepto de líneas de producto software, desarrollado en la década de los 90. Sin embargo, en los últimos tres o cuatro años ha aparecido un segundo significado asociado, apoyado en el sentido inicial, pero aplicado a un producto específico, de Microsoft. Sostenido en las ideas de Jack Greenfield y otros sobre la construcción de un modelo, se propone actualmente como un método y un ambiente de construcción de aplicaciones que polemiza con otros esquemas, fundamentalmente con Model Driven Development y con UML. Se trata de un esquema de mucho interés, que extiende las posibilidades de control sobre los artefactos que integran un proyecto, que es extrapolable a otros ambientes distintos del marco .NET y el IDE de Visual Studio, para el que está pensado. Se trata de un emprendimiento polémico, ya que explícitamente cuestiona otros esquemas. Andando el tiempo, sus definiciones se han hecho más específicas, y algunas de sus afirmaciones iniciales ya no son reproducidas, y algunos de sus objetivos se han precisado y acotado al marco de trabajo de Microsoft. El carácter de definición de mercado en proceso, ha llevado a la curiosa situación de que sin recurrir a archivos, en el corto período de dos años, algunos postulados son inhallables. Aquí se tratará de explicar su mecanismo y su alcance, y discutir sobre sus aspectos positivos y atender también sus cuestionamientos a MDA.

Cómo presenta la idea de Software Factory Microsoft:

Software Factories provide a faster, less expensive, and more reliable approach to application development by significantly increasing the level of automation in application development, applying the time-tested pattern of using visual languages to enable rapid assembly and configuration of framework-based components. Software Factories go beyond models as documentation, using highly tuned Domain Specific Languages (DSLs) and the Extensible Markup Language (XML) as source artifacts, to capture life cycle metadata, and to support high-fidelity model transformation, code generation, and other forms of automation.

Cómo define Software Factories Jack Greenfield:

“A software factory is a software product line that configures extensible tools, processes, and content using a software factory template based on a software factory schema to automate the development and maintenance of variants of an archetypical product by adapting, assembling, and configuring framework-based components.”

Jezz Santos y Edward Bakker, en Microsoft, en octubre de 2007, precisan y comentan esta definición de SF de Greenfield, dándole un sentido más circunscripto:

While very accurate, this is not really concrete enough to understand how to get started building software factories. This definition requires us to have a deep understanding of software factories and the related technologies it builds upon. From this definition it is not clear exactly where to start, with what tools and processes, and what the resultant thing looks or feels like. It describes something we’ve likely not encountered building before. The Microsoft patterns & practices team came up with a definition that describes the generation of software factories being built by them today: “A software factory is a structured collection of related software assets. When a software factory is installed in a development environment, it helps architects and developers predictably and efficiently create high-quality instances of specific types of applications.” This definition tells us what a factory does, but not really what the factory itself is in concrete enough terms to help us get started in building one. We need to expand these definitions with a more concrete description for the context we are going to tackle next. So, to help you understand what to build, and how, from a software factory developer’s perspective, we will describe what a factory actually is; how it physically designed; what you use to build it; and how that may look and feel as an end result. The following description is to help you understand the context of this series on building factories, and only focuses on the automation parts of a software factory. Inside the box of a released software factory you will likely find other physical guidance assets like documentation (readables), samples, frameworks (reusables), reference implementations (executables), training media, and so on. Together, with the automation parts (actionables) these will make up the total package of a complete software factory you might ship to a customer.

Esta introducción tiene sentido especialmente debido a que la definición de SF ha variado ligeramente en la medida que se ajustara a las herramientas asociadas o diseñadas por Microsoft para el caso. SF pasó de ser un concepto abierto, a ser una marca de Microsoft asociada a Visual Studio, particularmente al Team System. Siguiendo a Jezz Santos, qué es hoy SF: