La producción industrial, desde que existe como tal, se ha dividido en dos
grandes áreas de estudio y aplicación: la que se ocupa de las definiciones de las características de los productos y la que se ocupa de la especificación de actividades y procedimientos necesarios para construir esos productos. La Ingeniería constituye la disciplina que soporta la construcción sistemática en todo tipo de actividad productiva, y dentro de ella, es la Ingeniería de Producto el área que especifica las características técnicas de los productos que construye, en tanto que la Ingeniería de Proceso define las especificaciones del conjunto de actividades del proceso productivo en el campo de aplicación correspondiente a cada área industrial. La Ingeniería de Proceso desarrolla, evalúa y diseña los procesos productivos, a la vez que genera toda la información necesaria para operarlos, especifica todas las actividades productivas y la forma de desarrollarlas. Los modelos que elabora la Ingeniería de Proceso se sustentan en la investigación sobre el conjunto de pasos sucesivos, que permiten, mediante transformaciones físicas, químicas, lógicas, etc., la obtención de un producto. Ese conjunto de operaciones, que mantienen una secuencia, y tienden a un objetivo común, se lo denomina proceso de fabricación. Los procesos de fabricación modelan la forma de producir en una determinada escala industrial, definiendo la tecnología y las herramientas necesarias para su funcionamiento, así como las operaciones a ejecutar en la secuencia que se requiera. Producto y proceso son dependientes en la cadena productiva e interactúan en un sistema de retroalimentación. Si bien cada rama de la industria tiene especificidades que diferencian sus actividades de proceso de acuerdo a los productos que construye, los conceptos básicos del proceso de construcción, se encuentran presentes en todas las industrias. Todos los procesos industriales requieren de personas, procesos y tecnología para inyectar valor en la materia prima y transformarla en producto. Los objetivos de una buena definición de un proceso industrial consisten en lograr la mayor cantidad de producto, con el mayor nivel de calidad posible, de la forma más eficiente en tiempo y costo. De este modo, el estudio de los procesos de fabricación, posibilita la construcción en escala industrial de productos, teniendo en cuenta los conceptos de calidad, volumen, plazos, inversión, seguridad y costos. Para optimizar la actividad productiva, es posible modificar las características de los productos, las definiciones del proceso y/o de los métodos aplicables, cambiando por consiguiente las características tecnológicas, sociales-culturales y económicas. En la industria del software, el producto obtenido tras el proceso que lo construye, es el resultado de ese proceso. Cierta materia ingresa al proceso y se transforma a lo largo del mismo hasta obtener el producto deseado, de modo análogo a cualquier cadena productiva. En el desarrollo de software, la cadena productiva estructura la transformación que van sufriendo las entidades computacionales (producto) al pasar a través de una secuencia de acciones que forman cada actividad del proceso y se pueden definir claramente los estados por los que va pasando el producto en un proceso software: La entrada al proceso es una necesidad que, una vez estudiada, se convierte en una especificación de requisitos que, posteriormente, se transforma en un diseño, para pasar más adelante a ser un código y, finalmente, un sistema software completo e integrado. Proceso Software y Proceso Industrial
Ese proceso de transformación que sufre el producto, en toda actividad
productiva se lo reconoce como Ciclo de Vida. Todo bien producido para su uso o comercialización tiene un ciclo que pasa a lo largo del proceso de construcción. La modelización del Ciclo de Vida del software, permiten encadenar los productos que se desarrollan a lo largo del proceso. Aplicar los principios de producción industrial al desarrollo de software, con el fin de reducir tiempos y costos de fabricación, así como mejorar la calidad, implica pensar la organización del desarrollo de software de manera similar a una cadena de montaje [McIlroy, 1968] Existen numerosos estándares y modelos de proceso que definen el proceso software ideal que debería seguir una organización para conseguir productos software de calidad y existen numerosos modelos de ciclo de vida del producto software [Davis, 91], que formalizan la construcción de un producto a través de las actividades del proceso que lo construye.
2.2. Ingeniería de Producto
En la producción industrial, la Ingeniería de Producto se interioriza del producto
a fabricar y de la tecnología asociada al mismo, y desarrolla la forma más adecuada de concebir dicho bien. La modelización ingenieril del proceso está claramente diferenciada de los productos que construye. Proceso productivo y ciclo de vida del producto se encuentran claramente diferenciados. El producto puede cambiar los estados por los que se va transformando de acuerdo a las especificaciones técnicas de cada caso, pero el proceso industrial es el mismo. En este sentido, es una disciplina que construye herramienta e instrumentos factibles de ser aplicados a la producción, técnicamente adecuados para el producto en cuestión y sensibles de ser utilizados en diferentes modelos de proceso. En el área de Ingeniería de Software, la Ingeniería de Producto se encarga de definir los parámetros para la especificación, construcción y evaluación de productos de software, definiendo resultados cuantitativos acerca de la calidad de productos que resulten abarcativos y aceptables en el grado requerido. El software como producto, es un transformador de información, gestionando, mostrando, produciendo, modificando, adquiriendo o transmitiendo información. La materia prima que ingresa como producto para que se transforme, es información, o más específicamente, conocimiento sobre la información que debe manejar. Asimismo, es utilizado como vehículo para hacer entrega de otro producto software, actuando como la base de control de la computadora, lo que se conoce como sistemas operativos, o la comunicación de información, en su gran mayoría a través de redes, y la creación o control de otros programas como son las herramientas de software y los entornos de operación. Si bien el producto software no puede ser comparado con los productos ingenieriles clásicos, ya que posee peculiaridades que lo diferencian sustancialmente de estos, es posible establecer similitudes entre el proceso de desarrollo o de construcción del software, en términos de organización, y los elementos de los modelos de proceso industriales. El software constituye un producto lógico, abstracto, no físico, por lo tanto, fácilmente duplicable; como producto se desarrolla, no se fabrica como los productos industriales; en cuanto al proceso, las dificultades en la producción de software se centran en su desarrollo, y no en la producción en masa y posterior distribución, por lo tanto también el mayor coste reside en el proceso de diseño y no en la producción repetitiva. Este diseño requiere particularmente de conocimiento sobre la solución que debe brindar el producto. Proceso Software y Proceso Industrial
Los productos de software son extremadamente variados. Son producidos para
cumplir requerimientos muy diversos y su contexto de aplicación puede ser muy disímil. La mayor parte del software se construye a medida y no ensamblando componentes existentes, razón por la cual, es preciso diferenciar dos tipos de software: el software embebido y el software personalizable. El producto software que se desarrolla de una vez, en forma genérica, con unas funcionalidades estandarizadas y para un usuario “universal”, independientemente del tiempo que requiera el desarrollo total del producto terminado, es identificado como software embebido. Este tipo de producto se desarrolla de acuerdo a unas especificaciones determinadas por el productor/desarrollador y una vez que se prueba que satisface las necesidades genéricas de un usuario universal, se reproduce de la misma manera que cualquier otro producto industrial que se puede conseguir en cualquier tienda especializada. El producto final, no requiere modificaciones ni adaptaciones a las necesidades del usuario para la instalación ni la ejecución. La utilización es la misma para todos y cada uno de los usuarios de dicho software o los productos de a industria donde va embebido, por ej. telefonía celular, industria automotriz, o los paquetes de office mas reconocidos en el mercado. La producción y reproducción en serie de este tipo de software, constituye una mercancía asimilable a ciertos parámetros de la industria en general, tanto para el desarrollo de productos tangibles como de productos intangibles y servicios, en donde el producto sale con una definición determinada y el usuario lo consume tal como le llega, sin requerir sobre el mismo ningún tipo de adaptación ni personalización (mass production). Sin embargo, una gran cantidad de producto software, no responde exactamente a este tipo de desarrollo. Los productos software se construyen a medida, de acuerdo a las definiciones implícitas y explícitas de un usuario específico que lo encarga. Las particulares necesidades y constantes modificaciones en la definición de requisitos, durante el propio proceso de construcción hacen de cada software un producto único e irreplicable. El ensamblaje de componentes o la personalización de productos software disponibles en el mercado (mass customization), permiten una combinación entre los productos definidos en forma genérica y la adaptación de lo utilizable del producto a las necesidades del cliente que demanda una solución personalizada, en cuyo caso, el producto también sufre modificaciones. Este tipo de producto requiere para la instalación y puesta en marcha de un cierto nivel de modificación y adaptación a los requerimientos del usuario. Estos dos tipos de productos software, responden a formas de organización diferentes, ya que la modelización del proceso software, necesariamente se desarrolla en entornos organizacionales distintos, marcados por la sustancial discrepancia de productos que construyen y la determinación de los requerimientos del proceso en su conjunto. Las Líneas de Productos Software (LPS) han surgido como modelo de organización para la producción industrial de software personalizable, dentro de la cual aún hoy se encuentra trabajando la Ingeniería de software para aplicar en la reutilización de productos y componentes [Díaz, 2007].
2.3. Desarrollo de software como proceso industrial
En las últimas décadas la Ingeniería de Procesos ha tomado protagonismo
introduciéndose como factor clave para brindar calidad de forma homogénea, predecible y escalable, basándose en la clara definición de los procesos. La mejor forma de aumentar la eficiencia es centrar la producción en procesos y mejorar la capacidad de éstos [Hammer, 1980]. El diseño, la medición y la mejora de los procesos en ciclos se han revelado como la clave para mejorar de forma continua la eficiencia y la calidad Proceso Software y Proceso Industrial
productiva. En esta irrupción de la importancia del proceso, algunos modelos de
proceso industrial configuran una ecuación en la que, las personas ayudadas por la tecnología actúan como recursos para ejecutar los procesos. En lo relativo a la organización de los recursos humanos, a lo largo de la historia se ha ido transformando la fórmula de la eficiencia que regía la actividad productiva en general: conseguir el mayor tiempo de trabajo con el menor coste posible. La innovación en los aspectos productivos está marcada por la incorporación del saber, del conocimiento como constructor del Capital Intelectual [Fruin, 2000] imprescindible para la producción. En los aspectos organizativos centrales del proceso en la industria del software, la materia prima que posibilita la construcción del producto software es el conocimiento, que es el único capaz de generar valor, a través del capital intelectual y la capacidad de transformarlo en producto. La modelización del proceso software debe considerar los productos del software que va construyendo, tanto como la relación entre los procesos específicos y los entornos socio-organizacionales en los cuales se desarrolla que se determinan por esa capacidad intelectual. La incorporación en la modelización del proceso software de algunos aspectos socio-organizacionales, en la mayoría de los modelos vigentes se centra en conceptualizar y formalizar la administración de los recursos humanos en cierta interacción y comunicación [Beck, 2001], [Fowler, 2001], sin embargo, carece de un modo sistemático y disciplinado de inclusión de aspectos organizacionales que capitalicen el conocimiento como eje central de la capacidad productiva. Los procesos para la construcción de software a gran escala son grandes y complejos en sí mismos. Por tanto, suelen ser difíciles de definir, de comprender y de ser adoptadas por una organización. Esta es la razón por la que se han desarrollado estándares que describen el proceso software brindando un marco ordenado mediante el cual las organizaciones pueden determinar las capacidades de sus procesos y establecer prioridades de mejora. El concepto que permitió generar el marco de madurez reside en que un buen producto software solo se puede lograr a partir de un buen proceso, y dicho proceso debe ser mejorado de manera constante. Dentro de la múltiple oferta de modelos, métodos, metodologías de evaluación o estimación de conformidad, estándares para metodologías o meta-modelos que se ordenan de acuerdo a los modelos existentes, la totalidad de ellos ofrece un conjunto de actividades que deben realizarse en el proceso software, y coinciden en la necesidad de la planificación y el establecimiento de normas para lograr un desarrollo acorde a las necesidades planteadas, pero ninguno hace eje en el capital intelectual como la materia prima necesaria para la producción. Los diferentes modelos de proceso software que se analizarán en el siguiente capítulo, comparten la concepción de que una buena definición del proceso software facilita el aseguramiento de que cada elemento de trabajo se asigna y se desarrolla adecuadamente, lo que indica que la calidad del proceso determina la calidad del producto. No obstante, ninguno de ellos define al conocimiento de las personas como un elemento inherente al producto, que debe ser ordenado de una manera determinada, o que constituye parte del ciclo de vida del producto como una materia prima más. En los siguientes capítulos se presentarán los diferentes Modelos de proceso software y Modelos de ciclos de vida software vigentes en la actualidad, destacando la unificación que realizan entre las fases de actividades como los ciclos de los productos.