Está en la página 1de 40

Desarrollo de software:

procesos y estndares
08: Fbricas de software y
desarrollo colaborativo
Eugenio Jacobo Hernndez Valdelamar
2014

Contenido

La produccin en serie

Fbricas de software: ideas, mitos y conceptos

Lneas de productos

Variabilidad

Desarrollo dirigido por modelos (MDD)

Desarrollo por ensamblado

Desarrollo colaborativo de software

Comentarios finales

Nov, 2014

EJHV DevSw PyS - s08

Temario

Desarrollo de
software
(qu es,
quin lo hace,
cmo lo hace
qu hace)

Calidad

Procesos de
desarrollo de
software

Modelos de
mejora del
proceso Personal,
adquisicin,
desarrollo,
servicio

Industrializacin
del
desarrollo
de software
(fbricas y
colaboracin)

Situacin nacional e internacional


t
Nov, 2014

EJHV DevSw PyS - s08

Un jardinero que cultiva su propio jardn, con sus propias manos, une en su
persona los tres personajes, de propietario, agricultor y obrero. Su produccin,
por lo tanto, debe rendirle la renta del primero, la ganancia del segundo y el
salario del tercero.
Adam Smith
Cuanto ms numerosos sean los elementos desconocidos por nosotros que
intervienen en el proceso causal de la produccin de bienes o que, aunque
conocidos, escapan a nuestro control, es decir, cuanto mayor sea el nmero de
dichos elementos que no poseen la cualidad de bien, tanto mayor es tambin la
incertidumbre del hombre sobre la calidad y la cantidad del producto de todo el
proceso causal, esto es, de los bienes correspondientes del orden inferior.
Carl Menger

Nov, 2014

EJHV DevSw PyS - s08

La produccin en serie
La produccin en cadena,
produccin en masa, produccin en
serie o fabricacin en serie fue un
proceso revolucionario en la
produccin industrial cuya base es
la cadena de montaje o lnea de
ensamblado o lnea de produccin.
Una forma de organizacin de la
produccin que delega a cada
trabajador una funcin especfica y
especializada en mquinas tambin
ms desarrolladas.
Su idea terica nace con el
taylorismo (>) el cual se basaba en
la divisin de las tareas del proceso
de produccin y debe su nombre a
Frederick Winslow Taylor.
Nov, 2014

EJHV DevSw PyS - s08

Fordismo
Tras el Taylorismo surge el Fordismo que
debe su nombre a Henry Ford, ingeniero
industrial norteamericano que fund la Ford
Motor Company en 1903.
Ford fue el impulsor en la prctica de la
produccin en serie, la lnea de montaje, la
estandarizacin e intercambiabilidad de las
piezas, a la vez que cuidaba los derechos de
los obreros. Su modelo se extendi
rpidamente al sector industrial de numerosos
pases.
La idea principal de Ford era que, si fabricaba
coches en serie, los costes de produccin del
automvil se reduciran, lo que permitira
bajar tambin el precio de venta y eso hara
aumentar la demanda, el mercado y los
ingresos.

Este sistema comenz en 1908 con la produccin del Ford T con una combinacin y organizacin
general del trabajo altamente especializada y reglamentada a travs de cadenas de montaje,
maquinaria especializada, salarios ms elevados y un nmero elevado de trabajadores en plantilla.

Nov, 2014

EJHV DevSw PyS - s08

Toyotismo
Es un sistema integral de produccin y gestin
surgido en la empresa automotriz japonesa del
mismo nombre. Es un ejemplo clsico de la
filosofa Kaisen de mejora en la productividad.
Como filosofa de trabajo, el toyotismo tiene su
origen en la industria textil y en particular en la
creacin de un telar automtico, cuyo objetivo es
mejorar la vida de los operarios liberndolos de
las tareas repetitivas.
La familia Toyota, basndose en este invento y en
innovaciones subsiguientes, fund una empresa
textil en Nagoya, Japn, que con el tiempo se
convirti en Toyota Motor Company. Es, con esta
metodologa, como nacen los conceptos de jidoka
(automatizacin) y poka-yoke (a prueba de fallas)
que, junto a conceptos posteriores como just in
time (justo a tiempo) y muda (desperdicio), crean
lo que se ha llamado sistema de produccin
Toyota.

Nov, 2014

EJHV DevSw PyS - s08

Qu es una fbrica de software?

Una Fbrica de Software es un


ambiente de desarrollo
configurado para soportar el
desarrollo rpido de un tipo
especfico de aplicacin.
Mientras que las Fbricas de
Software son realmente el
prximo paso lgico en la
continua evolucin de los
mtodos y practicas de desarrollo
de software, estas prometen
cambiar a la industria del software
mediante la introduccin de
patrones de industrializacin.

Nov, 2014

EJHV DevSw PyS - s08

Principales ideas

Primera generacin de herramientas CASE (M Piattini & Daryanani,


1995), y los denominados Entornos Integrados de Desarrollo de
Software (ISDE, Integrated Software Development Environments), y
los Entornos de Ingeniera del Software orientados al Proceso
(PSEE, Process-centered Software Engineering Environment)
mejorar la eficacia del proceso, reducir la cantidad de re-proceso y
reutilizar los productos de ciclo de vida.
mejora de procesos software que permitan conseguir un proceso
predecible, fiable y auto-mejorable que produzca software de alta
calidad.

Nov, 2014

EJHV DevSw PyS - s08

Principales ideas (2)

"fbrica de software flexible en las que se construyen las partes para


trabajar juntas y adems se optimiza la produccin de componentes
y el ensamblado de productos con el fin de decrementar el reproceso
de ingeniera.
"fbricas de renovacin de software, en las que entran los
programas en una especie de lnea de ensamblado, pasando por una
secuencia de herramientas de transformacin (transformadores de
cdigo, re-generadores, re-estructuradores, migradores, etc.)
aplicacin de TQM (Gestin de Calidad Total) y reutilizacin, as
como generadores de cdigo y herramientas CASE
Actualmente se ha afianzado la ingeniera basada en modelos, el
desarrollo basado en componentes, las lneas de producto y los
modelos de madurez de procesos.

Nov, 2014

EJHV DevSw PyS - s08

10

Otra ecuacin

Fbrica Software = (Especificaciones de


Gestin, Lneas de producto) x (Procesos,
Personas, Tcnicas)

Nov, 2014

EJHV DevSw PyS - s08

11

El mito de las piezas

Nov, 2014

EJHV DevSw PyS - s08

12

Esquema de fbrica de software

Un esquema de fbrica de software es un


documento que categoriza y sumariza los
artefactos utilizados para construir y mantener
un sistema, como por ejemplo, documentos
XML, modelos, archivos de configuracin, de
cdigo fuente, de SQL, etc, de manera
ordenada y que ademas define las relaciones
entre ellos, para que pueda mantenerse la
consistencia entre los mismos.

Nov, 2014

EJHV DevSw PyS - s08

13

Las columnas definen los concerns, mientras que las filas definen los niveles de abstraccin. Cada
celda define una perspectiva o punto de vista (viewpoint) a partir del cual podemos construir un
aspecto del software. Por ejemplo, para una aplicacin de 3 capas, una celda puede definir un
primer punto de vista abstracto en la capa de presentacin, otro en la capa de datos y un tercer
punto de vista concreto en la capa de datos, usado para desarrollar esquemas de base de datos.
Una vez que la grilla ha sido definida, podemos completarla con las vistas que conforman los
artefactos de desarrollo para un producto de software especfico.
Nov, 2014

EJHV DevSw PyS - s08

14

Esquema de fbrica

Un esquema de fbrica de software bsicamente define una receta para construir los
miembros de una familia de un producto de software. Claramente, los puntos de vista
describen los ingredientes y las herramientas utilizadas para prepararlos
Nov, 2014

EJHV DevSw PyS - s08

15

Lneas de productos

Una lnea de producto


de software utilizada
para producir miembros
de una familia de
producto mediante la
configuracin de
herramientas
extensibles utilizando
una plantilla de
software basada en un
esquema de software.

Nov, 2014

EJHV DevSw PyS - s08

16

Las Lneas de Producto de Software explotan las familias de producto, identificando prestaciones en
comn y formas recurrentes de variaciones en dominios especficos para lograr la produccin de
miembros de la familia de forma ms rpida, menos costosa y con menos riesgo.
En lugar de conformarse con la inocente esperanza de que las oportunidades de reuso ad-hoc aparezcan
solas en situaciones arbitrarias, estas capturan el conocimiento sistemticamente acerca de como
producir los miembros de la familia, hacerlos disponibles en forma de Activos reusables, y luego aplicar
estos Activos durante la produccin de los miembros de la familia.
Los Productos desarrollados como miembros de una familia reusan requerimientos, arquitecturas, marcos,
componentes, tests y otros tantos activos.
Nov, 2014

EJHV DevSw PyS - s08

17

Actividades

Construir un producto utilizando una Fbrica de Software involucra las siguientes actividades:
Anlisis del Problema. Mediante el mismo se debe determinar si el producto se encuentra o no dentro del alcance de la
fbrica de software. Tambin podemos decidir construir un producto que no se encuentra bien alcanzado por la Fbrica de
Software y esto, en algunos casos, puede cambiar el esquema y la plantilla de la fbrica de software, para que puedan
soportar de mejor manera estas partes nuevas en futuros productos.
Especificacin del Producto. Esta define los requerimientos del producto en base a las diferencias que pueda tener con los
requerimientos de la lnea de producto. Dependiendo de las diferencias encontradas pueden utilizarse distintos mecanismos
de especificacin de producto incluyendo hojas de propiedades, asistentes, modelos de prestaciones, modelos visuales y
prosa estructurada.
Diseo de Producto. Mediante este se relacionan las diferencias en requerimientos con las diferencias en la arquitectura de
la lnea de producto y el proceso de desarrollo de producto, produciendo una arquitectura de producto y un proceso de
desarrollo de producto ajustado a estas diferencias.
Implementacin de Producto. Esto involucra actividades comunes, como desarrollo de componentes y tests unitarios,
ejecucin de tests y ensamblado de componentes. Distintos mecanismos pueden ser utilizados para construir la
implementacin dependiendo del grado de las diferencias, como hojas de propiedades, asistenes y modelos de prestaciones
que configuran componentes, modelos visuales que ensamblan componentes y generan otros artefactos como modelos,
archivos de configuracin y cdigo fuente que utilizan los puntos de extensin de un marco, o bien crean, modifican, extienden
o adaptan componentes.
Despliegue de Producto. Incluye la creacin o reuso de guas de despliegue, configuraciones lgicas del huesped,
relaciones de ejecutables a huesped lgico, mediante la provisin de facilidades como validacin de la configuracin del
huesped, reconfiguracin de huespedes instalando y configurando los recursos necesarios e instalando y configurando los
ejecutables que sean desplegados.
Testeo de Producto. Involucra la creacin o reuso de activos de tests (como por ejemplo, casos de tests y datos de tests)
aplicando herramientas de instrumentacin y medicin.

Nov, 2014

EJHV DevSw PyS - s08

18

Mecanismos de variabilidad

Dependiendo de la cantidad de variacin requerida distintos mecanismos pueden


utilizarse para la especificacin e implementacin del producto. Esto nos permite
movernos desde la codificacin manual que abunda actualmente en el desarrollo de
software hacia actividades ms estructuradas. El abanico de mecanismos de variabilidad
que va desde configuracin de rutina, pasando por configuracin basada en modelos de
prestaciones, hasta construccin creativa utilizando modelos
Nov, 2014

EJHV DevSw PyS - s08

19

Desarrollo dirigido por modelos

Aumentar el nivel de abstraccin es uno de los avances claves en el


progreso del desarrollo de software. Moverse a niveles ms altos de
abstraccin brinda varios beneficios, incluyendo una mayor
productividad, menos defectos, y un mantenimiento y mejora ms
sencillos. Este es el objetivo del desarrollo dirigido por modelos o
model-driven development (MDD).
MDD usa modelos para capturar informacin de alto nivel,
usualmente expresada informalmente, y automatiza su
implementacin, ya sea compilando modelos para producir
ejecutables, o usandolos para facilitar el desarrollo manual de
ejecutables.
Esto es muy valioso, ya que esta informacin suele estar perdida en
artefactos de bajo nivel, como archivos de cdigo fuente, donde es
muy difcil de seguir, mantener, o mejorar de forma consistente.

Nov, 2014

EJHV DevSw PyS - s08

20

Lenguajes de dominio especfico

Para nuestros propositos lo que nos interesa de MDD son los


modelos que pueden ser procesados de la misma manera que
actualmente procesamos cdigo fuente. Los modelos usados de esta
manera no pueden ser escritos en lenguajes diseados para
documentacin. Estos deben ser precisos y sin ambiguedades.
Tambien, para lograr aumentar el nivel de abstraccin, un languaje
de modelado debe apuntar a un dominio ms especificico que un
language de programacin de proposito general.
Un lenguaje que cumpla con estos criterios es llamado un language
de dominio especifico domain-specific language (DSL), porque
modela conceptos encontrados en un dominio particular. Un DSL es
definido con mucho ms rigor que un languaje de programacin de
proposito general. Como un language de programacin, puede tener
una notacin textual o grfica.

Nov, 2014

EJHV DevSw PyS - s08

21

Desarrollo por ensamblado

Las innovaciones crticas en las areas de protocolos independientes de plataforma, auto descripcin,
encapsulacin variable, ensamblado por orquestracin y desarrollo dirigido por arquitectura son requeridos
para soportar el desarrollo por ensamblado.
Protocolo independiente de la plataforma: Las distintas tecnologas de Web Services (WSDL, SOAP y
XML por ejemplo) logran lo que otras anteriores tecnologas de ensamblado de componentes no lograron a
partir de separar las tecnologas utilizadas para especificar los componentes de las utilizadas para
implementarlos.
Autodescripcin: La auto descripcin reduce el mismatch arquitectonico al mejorar el empaquetado de
components y hacer explicitas las assumptions, dependencias, comportamientos, consumo de recursos,
performance, y certificaciones.
Encapsulacin Variable: la encapsulacin variable (una adaptacin de Programacin Orientada a Aspectos
o Aspect Oriented Programming AOP-) reduce las diferencias arquitectonicas al permitir la publicacin de
componentes parcialmente encapsulados que pueden ser adaptados a nuevos contextos seleccionando e
introduciendo los aspectos no-funcionales apropiados con los funcionales.
Ensamblado por Orquestracin: dados los mecanismos contractuales adecuados, los Servicios pueden
ser ensamblados usando un motor de orquestracin, como Microsoft BizTalk Server, para manejar la
secuencia de mensajes intercambiados entre ellos.

Desarrollo Dirigido por Arquitectura: si bien prevenir el ensamblado de componentes mismatched es


mejor que construir ensamblados invlidos, esto no promueve necesariamente la disponibilidad de
componentes well-matched. Esto es el propsito de la arquitectura, quien reduce el riesgo de mismatch
arquitectnico imponiendo assumptions comunes y acotando las decisions de diseo.
Nov, 2014
EJHV DevSw PyS - s08

22

Esquema de fbrica de software HL7

Nov, 2014

EJHV DevSw PyS - s08

23

Y todo para llegar a esto

Pero...
1. Si no has hecho productos similares, seguramente no tendrs idea del contexto y
menos de un reuso sistemtico.
2. Si no has programado cmo quieres usar DSLs en el contexto de MDD?
3. Aunque pagues el costo, no puedes correr si nos has caminado
Nov, 2014

EJHV DevSw PyS - s08

24

Desarrollo colaborativo de software

El Desarrollo colaborativo de software es un modelo


de desarrollo de software cuyas bases son la
disponibilidad pblica del cdigo y la comunicacin va
Internet.
Este modelo se hizo popular a raz de su uso para el
desarrollo de Linux en 1991.
Muchas empresas estn adoptando el modelo de
software libre (el caso ms reciente MS .Net,
nov/2014 http://www.dotnetfoundation.org/ )

Nov, 2014

EJHV DevSw PyS - s08

25

Nov, 2014

EJHV DevSw PyS - s08

26

Nov, 2014

EJHV DevSw PyS - s08

27

Nov, 2014

EJHV DevSw PyS - s08

28

Las preguntas de los 64k: quin controla el desarrollo? De quin es el


producto? Quin decide el rumbo?

Nov, 2014

EJHV DevSw PyS - s08

29

Forjas

Una forja es una plataforma de desarrollo colaborativo de software,


que se enfoca hacia la cooperacin entre desarrolladores para la
difusin de software y el soporte al usuario.
En este tipo de plataformas se albergan mltiples proyectos de
software, normalmente de software libre, en los que los
desarrolladores han de registrarse para poder contribuir. Consta de
numerosas aplicaciones normalmente con interfaz web para la
administracin y desarrollo de estos proyectos en comn.
Suelen ofrecer una completa gama de herramientas para facilitar ese
desarrollo, como son herramientas de control de cdigo fuente, listas
de correo, foros, herramientas de control y seguimiento de errores,
etc.

Nov, 2014

EJHV DevSw PyS - s08

30

Nov, 2014

EJHV DevSw PyS - s08

31

Nov, 2014

EJHV DevSw PyS - s08

32

Nov, 2014

EJHV DevSw PyS - s08

33

Crowdsourcing

El crowdsourcing es una de las mltiples aplicaciones de la innovacin


abierta, permitiendo que cualquiera pueda tomar parte en el proceso de
innovacin. Este concepto hace referencia a un modelo de colaboracin
diferente basada en la participacin masiva de voluntarios y la aplicacin de
principios de auto-organizacin. Se trata por tanto de tomar un trabajo
tradicional desarrollado por un agente y externalizarlo de manera pblica a
un gran grupo de personas.
Es importante sealar la importancia de las herramientas online que facilitan
este tipo de colaboracin a escala mundial. Un ejemplo bastante conocido
es el portal Innocentive que publica los 'desafos' de grandes empresas en
busca de soluciones, entre ellas su fundadora, la farmacutica Eli Lilly, y el
gigante Procter & Gamble.
Por la solucin de cada problema, por lo general en el rea de investigacin
y desarrollo, la empresa ofrece un premio que oscila entre los 5.000 y los
100.000 dlares. Procter & Gamble tambin trabaja con empresas que
ofrecen servicios similares, como NineSigma, YourEncore y Yet2.

Nov, 2014

EJHV DevSw PyS - s08

34

La transicin

Nov, 2014

EJHV DevSw PyS - s08

35

Comentarios finales

Fbrica de software

Produccin especilizada
Cambio de paradigma: la especificacin genera el
producto

Desarrollo colaborativo

Herramientas online

Desarrollo por medio de talento externo

Auto-organizacin???

Cmo lidiar con la distancia, horarios, cultura??

Nov, 2014

EJHV DevSw PyS - s08

36

Fabricacin digital

En las tres ltimas dcadas se est asistiendo a una


transicin hacia lo digital en distintos mbitos de la vida,
tanto personal como profesional.
El software cobrar una nueva dimensin con las nuevas
interfaces de impresin 3D.
Una de las grandes ventajas de la fabricacin aditiva se
encuentra en la libertad de los diseadores a la hora de
concebir un nuevo producto, trasladndose entonces el
cuello de botella a la cabeza del propio diseador. De
manera muy genrica, lo que puedas imaginar lo puedes
fabricar.

Nov, 2014

EJHV DevSw PyS - s08

37

Referencias

Fbricas de Software: Ensamblando Aplicaciones con


Patrones, Modelos, Marcos y Herramientas (>)
Un Enfoque de Fbrica de Software a Soluciones de HL7
Versin 3 (>)

SF-SM: Towards a software factory simulation model (>)

Web Service Software Factory 2010 (>)

The Case for Software Factories (>)

Building Software Factories - Part 1, what are we building and


why? (>)
The EFx Architectural-Guidance Software Factory (>)

Nov, 2014

EJHV DevSw PyS - s08

38

Referencias (2)

An Introduction to Software Factories (>)

The Software Factory Model Doesnt Work Anymore (>)

Concepto y Evolucin de las Fbricas Software (>)

Desarrollo de Software basado en Componentes (>)

Metropolis (>)

La tercera revolucin industrial: la Fbrica del Futuro (>)

Una docena de forjas para el desarrollo de software libre y


colaborativo en la Administracin (>)

Nov, 2014

EJHV DevSw PyS - s08

39

Referencias (3)

Collaborative Software Development Platforms


for Crowdsourcing (>)

Elements of collaboration (>)

IBM Jazz (>)

Herramientas 2.0 en la Empresa (>)

Nov, 2014

EJHV DevSw PyS - s08

40

También podría gustarte