Академический Документы
Профессиональный Документы
Культура Документы
Indice
1 Introducci
on a la ingeniera del software
1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Que es la Ingeniera? . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4 Ingeniera y ciencias de la ingeniera . . . . . . . . . . . . . . . . . . . . .
1.5 El software como artefacto tecnologico . . . . . . . . . . . . . . . . . . . .
1.5.1 Que es el software? . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.2 La complejidad inherente al software . . . . . . . . . . . . . . . . .
1.6 Sistematicidad, disciplina y cuanticacion . . . . . . . . . . . . . . . . . .
1.7 La ingeniera del software como disciplina profesional . . . . . . . . . . . .
1.7.1 Breve historia de la ingeniera del software . . . . . . . . . . . . . .
1.7.2 Elementos de la ingeniera del software como disciplina profesional
1.8 Conceptos basicos de la ingeniera del software . . . . . . . . . . . . . . .
1.8.1 Actividades y artefactos . . . . . . . . . . . . . . . . . . . . . . . .
1.8.2 Metodos, especicaciones y modelos . . . . . . . . . . . . . . . . .
1.8.3 Procesos y ciclos de vida . . . . . . . . . . . . . . . . . . . . . . . .
1.9 Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.10 Notas bibliogracas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.11 Cuestiones de autoevaluaci
on . . . . . . . . . . . . . . . . . . . . . . . . .
1.12 Ejercicios y actividades propuestas . . . . . . . . . . . . . . . . . . . . . .
1.12.1 Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.12.2 Actividades propuestas . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
7
7
8
10
11
12
13
14
15
16
17
18
19
20
21
22
23
23
25
25
28
INDICE
Captulo 1
Introducci
on a la ingeniera del
software
El termino ingeniera del software se escogi
o deliberadamente por ser provocativo, pues
implicaba la necesidad de manufacturar software seg
un las bases te
oricas y las disciplinas pr
acticas
que son tradicionales en otras ramas de la ingeniera.
P. Naur y B. Randell.
Arte o ingeniera?
En 1974, el profesor Donald Knuth de la Universidad de Stanford recibio el premio Turing
que concede anualmente la asociacion ACM, galardon considerado por muchos como el
Premio Nobel de la informatica. En la conferencia que impartio con motivo de la recepcion
del premio, comenzo as:
Si la programaci
on de computadoras quiere llegar a ser una parte importante
del desarrollo e investigaci
on en las ciencias de la computaci
on, deber
a transitar
desde la programaci
on como arte a la programaci
on como ciencia disciplinada.
Knuth en realidad citaba literalmente una frase acu
nada por el comite editorial de la
revista Communications of the ACM, publicacion estandarte de la asociacion. Despues de
tratar en su conferencia diferentes aspectos de los terminos ciencia y arte, Knuth termino
con la siguiente conclusion:
Como hemos visto, la programaci
on de computadoras es un arte pues aplica
conocimiento acumulado, requiere habilidades e ingenio, y especialmente porque
produce objetos bellos.
Trascurridas mas de tres decadas desde esa conferencia, no hay facultad de ciencias de
la computacion que suscriba hoy en da un tipo de educacion que considere la programacion
como una actividad de caracter (exclusivamente) artstico. Dicho de otro modo, el cambio
deseado por el comite editorial de la ACM s se ha llevado a cabo, al menos en gran medida,
mientras que la consideracion del desarrollo de software como arte ha quedado relegada a la
5
esfera de las aciones personales. Al resultado de ese cambio es a lo que hoy denominamos
Ingeniera del software.
No obstante, las diferencias esenciales entre la ingeniera del software y otras disciplinas
de ingeniera (como veremos mas adelante) hacen que a
un persista de alg
un modo la vision
del desarrollo de software como una actividad de caracter artesanal (mas que artstico), y no
como una disciplina ordenada de ingeniera. El desarrollo de programas sigue siendo para
muchas personas una actividad vocacional, placentera, y en ocasiones fruto de una formacion
en su mayor parte autodidacta. No obstante, un ingeniero del software que se enfrenta a un
proyecto de desarrollo act
ua de acuerdo a un marco de restricciones de caracter economico y
organizativo, de plazos, costes y calidades. Ese entorno profesional dista mucho de visiones
personalistas como la que D. Knuth relataba en su conferencia:
El programa del que estoy personalmente mas contento y orgulloso es un
compilador que escrib para una minicomputadora primitiva que tena solo 4096
palabras de memoria, con 16 bits por palabra. Este tipo de cosas hace que uno
se sienta como un autentico virtuoso, al conseguir algo as en unas circunstancias
tan estrictas.
Esta vision de la programacion como pasion individual, llevada al terreno del humor,
da lugar a posturas como la siguiente (adaptada de una historia publicada por Internet):
[...] las cosas han cambiado mucho en esta era decadente de cerveza sin
alcohol, calculadoras de mano y software amigable. En los Gloriosos Viejos
Tiempos (con may
usculas), cuando el termino software a
un sonaba divertido,
y las Computadoras Autenticas estaban hechas de tubos de vaco, los Verdaderos
Programadores escriban en codigo maquina. No en FORTRAN. Ni siquiera en
lenguaje ensamblador. Codigo maquina. Puro, sin adornos. En esos inescrutables n
umeros hexadecimales. Directamente.
Los criterios en el desarrollo no son ya la satisfaccion personal, la sensacion de hacer algo
interesante, o la realizacion de un trabajo brillante. La ingeniera del software es hoy en da
una actividad de trabajo en grupo y no una pasion individual. En consecuencia, las acciones
y decisiones en esta ingeniera no provienen de sentimientos o preferencias personales, sino
de la aplicacion de metodos y tecnicas para racionalizar los recursos de acuerdo con planes
y objetivos denidos.
Por todo ello, en este libro trataremos la produccion de software como una ciencia disciplinada, una actividad profesional sometida al estudio cientco y objetivada en tecnicas y
metodos mayoritariamente aceptados por la comunidad profesional en virtud de la experiencia acumulada. A este respecto, existe un compendio de caracter enciclopedico que recopila
aquello que los ingenieros del software para ser considerados como tales deben conocer
y saber hacer. Este compendio es la gua SWEBOK 1 , una obra que se mencionara a partir
de aqu en numerosas ocasiones.
Lo que sigue en este libro es el intento de los autores de introducir, de manera accesible,
los elementos esenciales contenidos en la gua SWEBOK para aquellas personas que se inician
en la disciplina, o que quieren consolidar sus conocimientos con una vision conceptual mas
amplia.
1 Cuerpo de conocimiento de la Ingenier
a del Software, del ingl
es Software Engineering Body of Knowledge, http://www.swebok.org
1.1. OBJETIVOS
1.1
Objetivos
El objetivo general de este captulo es delimitar el concepto de Ingeniera del software como
un tipo de disciplina de ingeniera con caractersticas especiales, as como proporcionar deniciones de terminos fundamentales que se utilizaran a lo largo del libro. Mas concretamente,
este captulo pretende que el lector sea capaz de lo siguiente:
Denir la ingeniera del software, y comprenderla como una disciplina de ingeniera
que trata con un tipo de producto especial, el software.
Conocer y comprender los conceptos fundamentales que conforman la terminologa
basica de los ingenieros del software.
Distinguir entre la ingeniera del software como tal disciplina de ingeniera, orientada
a la produccion de software, y la ingeniera del software como ciencia que estudia la
ingeniera, es decir, como disciplina cientca cuyo objeto no es producir software, sino
estudiar, comprender, explicar y teorizar sobre la produccion de software.
Conocer los fundamentales enfoques de caracter cientco de la ingeniera del software
entendida como ciencia de la ingeniera.
1.2
Introducci
on
1.3
Qu
e es la Ingeniera?
ES LA INGENIERIA?
1.3. QUE
2. Dise
no y manufactura de productos complejos.
Realmente, la denicion (2) no es suciente para distinguir la ingeniera de otras actividades humanas, debido a que, por ejemplo, ciertas artesanas dise
nan y producen elementos que pueden considerarse como relativamente complejos. Sin embargo, la ingeniera tal
y como hoy la entendemos siempre resulta en alg
un artefacto concreto. Estos artefactos
pueden ser utilidades nales (por ejemplo, una vivienda o una aplicacion software para la
gesti
on empresarial), o elementos para ser reutilizados en otros procesos de ingeniera (por
ejemplo, un nuevo material para el aislamiento termico de viviendas o una biblioteca de
funciones para la resolucion de ecuaciones). En cuanto a la ingeniera del software, su resultado u
til son las aplicaciones, de las cuales los usuarios se sirven para hacer mas ecaz,
controlado o eciente su trabajo.
Por todo ello, en este libro adoptaremos la siguiente denicion de ingeniera:
Denicion
La ingeniera como actividad humana es la aplicacion del conocimiento y los
metodos cientcos al dise
no y la produccion de productos complejos.
La anterior denicion habla de la ingeniera en general, y no de las diversas ingenieras
concretas. Si se estudian las diferentes ingenieras concretas, cada una de las cuales tiene
un objeto concreto y denido, que han evolucionado hasta alcanzar el reconocimiento como
profesion, es relevante el entorno en que estas se desarrollan. Es importante porque el ejercicio de toda profesion debe ser regulado por un marco jurdico-normativo especco. En
las ingenieras, por ejemplo, es com
un la existencia de colegios profesionales, asociaciones de
profesionales que regulan la actividad de un area de conocimiento y ordenan el ejercicio de
la profesion.
La estructuracion de las diferentes ingenieras como disciplinas profesionales reconocidas
se puede encontrar en el trabajo seminal de Paul Starr (1982), donde se enuncian los tres
elementos que constituyen una disciplina profesional:
Aspecto colegial: el conocimiento y competencia del profesional debe haber sido validado por la comunidad de sus pares.
Aspecto cognitivo: ese conocimiento y competencia consensualmente validado debe
descansar en criterios racionales y cientcos.
Aspecto moral: el juicio y los consejos profesionales deben orientarse a un conjunto de
valores sustantivos.
La aparicion de la gua SWEBOK, de la que hablaremos un poco mas adelante, ha
constituido un paso mas en el aspecto colegial de la ingeniera del software, al recopilar el
denominado cuerpo de conocimiento de la ingeniera del software, es decir, el conocimiento
consensualmente aceptado y que descansa en criterios racionales y cientcos. Independientemente de la credibilidad o validez que se le de a la gua SWEBOK pues existen posturas
encontradas en este asunto, es desde luego un indicador de que la disciplina de la ingeniera del software ha entrado en una fase de madurez y de autoconsciencia que la sit
ua al
mismo nivel de otras ramas tradicionales de la ingeniera.
10
1.4
1.5. EL SOFTWARE COMO ARTEFACTO TECNOLOGICO
11
Figura 1.1: Relacion entre las ciencias de la computacion y la ingeniera del software.
actica de la ingeniera, que esta orientada a prescribir como deben realizarse
La pr
las actividades propias de la disciplina. Se trata de un aspecto complementario con
la ciencia de la ingeniera, pues la ciencia necesita de la observacion de la practica,
y la practica a su vez se perfecciona de acuerdo con el conocimiento generado por la
ciencia.
A pesar de que este libro trata fundamentalmente de la praxis de la ingeniera del
software, tambien se expondran puntualmente partes de lo que constituye el cuerpo de
conocimiento cientco de la disciplina.
1.5
El software es la tecnologa o producto resultante de las actividades de ingeniera del software. Pero tengase en cuenta que el software tiene una naturaleza que lo diferencia de
otros productos de la ingeniera moderna, lo que hace que tenga una problematica tambien
especial. De hecho, desde los a
nos sesenta, se ha venido utilizando el termino crisis del
software para hacer referencia a ciertos problemas especcos y persistentes de la ingeniera
del software. La gura 1.2, tomada de (Dorfman & Thayer 1999), muestra con humor el
problema que supone la crisis del software.
Algunos autores han llegado a considerar estos problemas como una enfermedad cronica
(en lugar de una simple crisis) para resaltar el caracter persistente de los mismos. Podemos
clasicar estos problemas como:
12
1.5.1
Qu
e es el software?
1.5. EL SOFTWARE COMO ARTEFACTO TECNOLOGICO
13
Denicion
Software es el conjunto completo de programas, procedimientos y documentacion
relacionada que se asocia con un sistema, y especialmente con un sistema de computadora. En un sentido especco, el software son los programas de computadora.
Por tanto, software no son solo los programas de computadora en s, sino tambien los
documentos que lo describen (como por ejemplo los manuales de usuario), as como cualquier
otro artefacto relacionado con el mismo, como los procedimientos para su instalacion o
modicacion, e incluso los datos necesarios para su operacion.
Un aspecto adicional del software es el hecho de que en su mayora, esta destinado a
evolucionar. Y de hecho, si no lo hace quedara obsoleto con el tiempo, al no adaptarse a las
cambiantes necesidades de los usuarios. La evolucion implica generalmente a
nadir nuevas
funcionalidades o modicar las existentes, si bien la evolucion del software es diferente a la
de los dise
nos de otros artefactos ingenieriles. Precisamente porque el software es facilmente
modicable, y por tanto exible, es un producto que permite y suele tener muy en cuenta su
cambio y evolucion en el tiempo. No cabe duda de que esta caracterstica es un elemento que
distingue al software de otras creaciones humanas. Otros productos de ingeniera, como los
aviones o los automoviles, no cambian tanto ni tan facilmente durante su vida u
til, aunque
la actual moda del tuning de vehculos pueda hacer pensar lo contrario.
1.5.2
En 1987, Frederick Brooks publico un artculo que ha llegado a adquirir una notable popularidad. En dicho artculo, cuyo ttulo puede traducirse como No existen balas de plata
- Esencia y accidente en la ingeniera del software, Brooks preconizaba que no existira
ninguna herramienta o metodologa que consiguiese un incremento notable de la productividad en el desarrollo de software en la decada siguiente. Aparte de la anecdota sobre
la prediccion, lo importante de este artculo es que establece el concepto de complejidad
como caracterstica esencial al software, entendiendo esencial en su sentido de inherente,
es decir, propia de la naturaleza del software como tal.
Brooks argumenta que si la complejidad del software fuese accidental, podran crearse
herramientas o tecnicas para gestionarla y eliminar el problema. Seg
un este autor, la representacion de los conceptos en programas (codicacion), y la comprobacion de su delidad (pruebas) son aspectos accidentales, para los cuales s pueden crearse herramientas
que gestionen su complejidad. Sin embargo, la esencia de la ingeniera del software es la
especificaci
on, dise
no y verificaci
on de un conjunto detallado y muy preciso de conceptos
interrelacionados, tareas sensiblemente mas complejas que las anteriores. En denitiva, la
traduccion nal de las especicaciones a codigo ejecutable no es el problema, el problema es
la elaboracion de las propias especicaciones.
Ademas de esa complejidad inherente al software, la ingeniera del software, al igual que
el resto de las ingenieras, esta limitada en la practica por restricciones economicas, de plazos,
regulaciones y otros factores como la gestion de recursos humanos. Profundizando mas a
un,
Brooks menciona otras dos causas de complejidad: la propension al cambio y la invisibilidad
del software. La primera es consecuencia del uso del software, ya que al ser utilizado, debe
adaptarse a nuevos requisitos y necesidades. La invisibilidad del software, por su parte,
se reere al hecho de que el software no se pueda representar completamente mediante
diagramas, pues dicha representaci
on sera extremadamente compleja, lo que constituye un
plus de complejidad en la comprension del mismo.
14
Junto con todo lo expuesto, la complejidad del software en s mismo tiene como reejo
l
ogico la complejidad en su dise
no. Ya en 1968, Peter Naur armaba lo siguiente: El
problema de determinar cual es el orden adecuado de hacer las cosas durante el dise
no es
actualmente un tema para la investigaci
on en ingeniera del software.
En conclusion, a pesar de que ha habido y sigue habiendo numerosos intentos de afrontar
la complejidad inherente descrita por Brooks (tales como la orientacion a componentes o las
tecnicas de especicacion avanzadas), la ingeniera del software sigue siendo un proceso con
una dicultad intrnseca caracterstica, que debe ser tenida en cuenta al afrontar el dise
no
y la organizacion de las actividades de ingeniera.
1.6
En las anteriores secciones hemos mencionado que la ingeniera, como disciplina profesionalizada y de caracter industrial, se diferencia de la artesana o de otras actividades humanas
en su nivel de estructuracion y su caracter auto-reexivo. La denicion de ingeniera del
software con que comenzabamos este captulo, la del glosario de terminos de IEEE, menciona tres calicativos que pueden aplicarse a la ingeniera: sistematicidad, disciplina y
cuanticacion. Detengamonos brevemente para reexionar sobre estas tres caractersticas
distintivas:
15
1.7
16
Figura 1.3: Una de las sesiones de la conferencia de la OTAN de 1968, donde se puede ver
a los profesores Dijkstra, Naur y Randell (con gafas y barba, en la parte superior derecha).
1.7.1
Como se menciono al principio del captulo, suele considerarse como evento de bautismo
ocial de la disciplina la primera de las conferencias sobre ingeniera del software patrocinadas por la OTAN celebrada en 1968. No obstante, el aspecto profesional del desarrollo
de programas ya haba sido objeto de atencion en reuniones y estudios anteriores. La tabla
1.7.1 resume en tres perodos la historia de la ingeniera del software:
Perodo
19551965
19651985
1985
Fase
Orgenes de la
disciplina
Identicaci
on de
la crisis del software
Desarrollo de la
disciplina
Descripcion
Desarrollo inicial de los principios de la ingeniera
del software (hasta las conferencias de la OTAN).
La identicacion del problema de la crisis del software se convierte en el tema central de la disciplina.
Aproximadamente desde la publicacion del
artculo de Brooks (1987) se desarrolla la disciplina con la complejidad del desarrollo de software
como elemento inherente.
17
del software de otras disciplinas relacionadas con la computacion, como los Sistemas de
Informaci
on, las Ciencias de la Computaci
on y otras. En las recomendaciones mas ampliamente aceptadas se considera que la ingeniera del software es mas que codicacion, pues
incluye calidad, planicacion y aspectos economicos, as como el conocimiento y aplicacion
de principios y disciplina.
1.7.2
18
1.8
Conceptos b
asicos de la ingeniera del software
Como toda ingeniera, donde se crean objetos con una cierta funcion, la ingeniera del software trata fundamentalmente de actividades llevadas a cabo por personas (ingenieros,
pero tambien en cierta medida, usuarios u otros intervinientes) que producen, usan o modican artefactos. Esas actividades no son espontaneas sino que responden a planes parcial
o totalmente prescritos (esto es, son sistem
aticas y disciplinadas, seg
un la denicion propuesta anteriormente). Por ello, hay considerar tambien elementos tales como m
etodos,
especificaciones y modelos, entre otros.
En esta seccion se describe la terminologa mas basica de la ingeniera del software con
el objeto de dar coherencia al resto del libro. Aunque muchas de las deniciones pueden
parecer en este punto obvias o ingenuas, es importante darles un signicado preciso para su
uso y aplicacion de aqu en adelante.
1.8. CONCEPTOS BASICOS
DE LA INGENIERIA DEL SOFTWARE
1.8.1
19
Actividades y artefactos
20
1.8.2
M
etodos, especificaciones y modelos
Las actividades que tienen lugar y los artefactos que se crean en la ingeniera en general
tienen asociadas una serie de prescripciones, es decir, estan sujetos a normas que dictan
c
omo deben hacerse. Estas normas provienen o bien del conocimiento cientco (por ejemplo, la necesidad de hacer las pruebas de una manera determinada), o bien de la experiencia,
o bien de la intuici
on o el sentido com
un de una persona o grupo. Vengan de donde vengan,
es claro que la actividad de ingeniera esta sujeta a ciertas prescripciones; el termino metodo
es uno de los mas utilizados para referirse a ellas. Seg
un la gua SWEBOK, los metodos
imponen estructura a la actividad de ingeniera del software con el objetivo de hacerla mas
sistematica y nalmente mas exitosa.
Denicion
Un m
etodo, en sentido general, es la especicacion de una secuencia de acciones
orientadas a un proposito determinado. En el area de la ingeniera del software, los
metodos determinan el orden y la forma de llevar a cabo las actividades.
El termino metodologa hace referencia al estudio de los metodos (sea general o especco
de una disciplina), aunque tambien puede utilizarse para hacer referencia a un conjunto coherente de metodos.
Denicion
En la ingeniera del software, se denomina metodologa a un conjunto de metodos
coherentes y relacionados por unos principios comunes. En sentido general se
denira como la ciencia del metodo, es decir, el estudio de los metodos de una
disciplina o actividad.
Es habitual en ingeniera del software hablar de terminos tales como metodologas
estructuradas o metodologas orientadas a objetos, haciendo referencia a la primera de
las acepciones del termino.
La propia denicion de metodo introduce otro termino importante en la ingeniera: el
termino especificaci
on.
Denicion
Una especificaci
on es una descripcion detallada y precisa de algo existente (o que
existira) o de una cierta situacion, presente o futura. En la ingeniera del software,
una especicacion del software que se desea construir da lugar a especicaciones
ejecutables denominadas programas de computadora.
Las especicaciones, como elemento de informacion, son una parte fundamental de toda
disciplina de ingeniera. Para elaborarlas se emplean lenguajes o notaciones de diferente
tipo. En muchas ocasiones, se utiliza el lenguaje natural (como el espa
nol o el ingles),
pero esto a veces no es adecuado, bien por facilidad de comunicacion, o bien por falta
de precision en la expresion. Por ello, hay lenguajes visuales, que emplean diagramas
e iconos para facilitar la comunicaci
on. Tambien existen lenguajes formales, en los que
se utiliza notacion matematica para alcanzar un grado mayor de precision y eliminar las
ambig
uedades.
1.8. CONCEPTOS BASICOS
DE LA INGENIERIA DEL SOFTWARE
1.8.3
21
El termino actividad, tal y como se ha descrito, proporciona una descripcion muy general de
lo que se hace en la ingeniera del software. Aunque nalmente todo se reduce a actividades,
los metodos y modelos para las mismas han dado lugar a una jerga propia.
Un concepto muy utilizado es el de ciclo de vida del software. Seg
un el glosario IEEE de
terminos de ingeniera del software, se trata del periodo de tiempo que comienza cuando se
concibe un producto software y termina cuando el producto deja de usarse. Esta denicion
relativa a un proyecto determinado, puede reformularse en referencia a las actividades.
Denicion
El ciclo de vida de un producto o proyecto software es la evolucion del mismo
desde el momento de su concepcion hasta el momento en que deja de usarse, y
puede describirse en funcion de las actividades que se realizan dentro de el.
La utilidad de este concepto es resaltar que el ciclo de vida no se restringe a las actividades de desarrollo previas al uso del software, sino que abarca tambien su evolucion y
mantenimiento. Tambien puede, por la denicion anterior, abarcar una fase de concepcion
previa al mismo inicio de las actividades de ingeniera.
En la literatura sobre ingeniera del software es frecuente or hablar del ciclo de vida en
cascada o del ciclo de vida en espiral. Debe quedar claro que en estos casos no se esta
haciendo referencia al ciclo de vida de un software determinado, sino a una especicacion de
cuales deben ser las fases o el curso general de la ingeniera del software. En realidad sera
mas conveniente emplear la locucion modelo de ciclo de vida del software cuando se
desea utilizar esta u
ltima acepcion.
A lo largo de la historia han surgido diferentes modelos generales de ciclo de vida del
software, con una complejidad creciente en el desarrollo de las secuencias de actividades. El
modelo mas antiguo era en cierto modo heredero de la forma de produccion en las ingenieras
tradicionales. Este modelo, denominado ciclo de vida en cascada, propona una secuencia
de fases claramente reconocibles por los desarrolladores, a saber, estudio de viabilidad,
requisitos, analisis, dise
no, codicacion, pruebas y mantenimiento. El supuesto de este
modelo de ciclo de vida es la progresion secuencial, lo cual se basa en el hecho de que
las fases no se solapan. En modelos de ciclo de vida modernos, tales como el Proceso
Unificado, y debido fundamentalmente a la naturaleza del software (intangible y facilmente
modicable) dichas fases se solapan, y el software se produce de acuerdo a un proceso
iterativo e incremental.
Un termino relacionado que tambien se usa con profusion es el de proceso. El glosario
de terminos de IEEE describe proceso como una secuencia de pasos llevados a cabo para
un proposito especco; por ejemplo, el proceso de desarrollo de software. Todas las deniciones hacen referencia a la nalidad como elemento fundamental del proceso, seg
un el cual
todo proceso tiene unos objetivos denidos. Sin embargo, un proceso seg
un la denicion del
glosario IEEE no es otra cosa que una secuencia de actividades que comparten un proposito.
Dado que el termino proceso software ha adquirido un signicado especial, parece conveniente aportar una denicion del termino que recoja dicho signicado:
Denicion
Un proceso software es un conjunto coherente de polticas, estructuras organizativas, tecnologas, procedimientos y artefactos que se necesitan para concebir,
desarrollar, implantar y mantener un producto software.
22
Una vez mas, hay que distinguir claramente entre el proceso como realizacion de ciertas
actividades, y el modelo de proceso, que es la especicacion de una manera concreta de proceder en la ingeniera. En realidad, puede armarse que un modelo de proceso es equivalente
a una metodologa en el terreno de la ingeniera del software. De hecho, los modelos de ciclo
de vida no son otra cosa que modelos de procesos, pero con una diferencia de enfasis, pues
un modelo de ciclo de vida solamente describe las fases fundamentales, y es por tanto una
abstraccion de muy diversos procesos.
Es importante resaltar que no existe un u
nico proceso correcto para la ingeniera del
software, y s un cierto n
umero de procesos concretos, de muy diferente ndole en realidad.
Por eso, cuando se hable en terminos genericos de el proceso software, no se hara referencia
a uno en concreto sino a cualquiera de ellos.
1.9
Resumen
La siguiente nube de palabras resume visualmente los principales conceptos del captulo y
muestra su importancia relativa.
En este captulo introductorio hemos situado la ingeniera del software en el contexto del
resto de las disciplinas de ingeniera, resaltando aquellos aspectos peculiares de la misma que
tienen su origen en el software, un producto de caractersticas especiales. Se han introducido
ademas algunos de los conceptos basicos de la ingeniera del software que se utilizaran en
el resto del libro. La disciplina puede verse como un conjunto de actividades de proposito
especco, que proporcionan como resultado ciertos artefactos. Estas actividades no se
desarrollan de manera anarquica o casual, sino que siguen ciertos metodos, que prescriben
que formas de hacer las cosas seran mas efectivas seg
un las circunstancias particulares de
cada situacion. Pero ademas de todo esto, hemos estudiado ademas los fundamentos de
1.10. NOTAS BIBLIOGRAFICAS
23
caracter cientco de la ingeniera del software, que hacen de ella no solo una ingeniera sino
tambien una ciencia de la ingeniera.
1.10
Notas bibliogr
aficas
1.11
Cuestiones de autoevaluaci
on
CA1.1 Cuando se habla de crisis del software cual es la fecha de comienzo y n de esa crisis?
Respuesta: La crisis del software no es un evento historico concreto, sino un fenomeno
asociado a la disciplina en s misma. Dicho fenomeno se identico en la decada de los
sesenta pero persiste en nuestros das.
CA1.2 Razone si la siguiente armacion es o no cierta: La ingeniera del software es una
disciplina que trata la optimizacion del rendimiento de los sistemas informaticos.
Respuesta: La ingeniera del software es una disciplina que estudia como desarrollar
software de manera metodica de acuerdo con ciertas restricciones. En este sentido, el
conocimiento sobre como optimizar el rendimiento de los sistemas informaticos es u
til,
pero no es el aspecto central de la disciplina.
CA1.3 Indique si es cierta la siguiente armacion y razone su respuesta: La ingeniera del
software es la aplicacion de las ciencias matematicas al dise
no de programas, por lo
que la vericaci
on de la correccion de los mismos se lleva a cabo de manera formal.
Respuesta: El uso de tecnicas formales en ingeniera del software es u
til, especialmente en casos en los que se requiere una alta abilidad del dise
no. No obstante,
24
CA1.4 Siguiendo los razonamientos de Brooks puede la ingeniera del software llegar a tener
un metodo de desarrollo optimo, que mejore de manera signicativa la ecacia y productividad del desarrollo?
Respuesta: Si presuponemos que el software es un producto inherentemente complejo, no puede existir un metodo que elimine totalmente el esfuerzo necesario para
tratar esa complejidad. Posiblemente apareceran tecnicas novedosas que proporcionaran
mejores resultados, pero la complejidad inherente al software seguira haciendo de la
ingeniera del software una actividad con caractersticas especiales.
CA1.5 La denicion de los roles profesionales en una organizacion de desarrollo es un aspecto
de la ingeniera del software?
Respuesta: Esencialmente, una metrica es la interpretacion de una o varias mediciones de un cierto atributo del software (el producto) o de las actividades de ingeniera del software (el proceso). Esa interpretacion habitualmente se basa en estudios
estadsticos que relacionan las medidas con el atributo observado.
CA1.7 Cuales son las tres caractersticas fundamentales de la ingeniera del software?
25
1.12
1.12.1
Ejercicios resueltos
Relacion de requisitos.
Resumen del plan del proyecto con el tiempo planicado de desarrollo.
Cuadernos de registro del tiempo y de defectos.
Estandar de tipos de defectos.
Dise
no
Revisar los requisitos y realizar un dise
no que los cumpla.
Registrar el tiempo en el cuaderno de registro del tiempo.
Codigo
Implementar el dise
no.
Registrar en el diario de registro de defectos cualquier defecto de requisitos
o dise
no encontrado.
Registrar el tiempo en el cuaderno de registro del tiempo.
Compilar
Compilar el programa hasta que este libre de errores.
26
Criterios de salida
Un programa completamente probado.
El cuaderno de registro de defectos completado.
El cuaderno de registro del tiempo completado
A partir de lo anterior, conteste a las siguientes preguntas. Puede considerarse como
un metodo el registro de defectos ? Son las pruebas un artefacto en el proceso?
Puede considerarse lo anterior como un metodo de ingeniera del software?
Soluci
on propuesta El registro de defectos es una poltica de control u
til para
el seguimiento del estado del codigo. Las pruebas son un artefacto, aunque no se
especican como salida ya que son un elemento de uso interno en el tipo de actividad
descrito.
La gua anterior puede considerarse un metodo, en este caso para una actividad muy
especca: la codicacion y realizacion de pruebas unitarias. Pero es por supuesto una
gua de pasos que indica como se debe hacer una actividad de ingeniera del software.
E2 La metrica DIT (Depth of Inheritance Tree, profundidad del arbol de herencia) esta
asociada al dise
no orientado a objetos, y se dene de la siguiente forma.
El DIT de una clase A es su profundidad en el arbol de herencia. Si A se
encuentra en situacion de herencia multiple, el DIT de A sera la longitud
maxima desde A hasta la raz.
La siguiente descripcion, adaptada de la que proporciona la herramienta Project Analyzer de Aivosto detalla como puede interpretarse la metrica:
Se sabe que un DIT elevado incrementa los fallos. De todos modos, no son
necesariamente las clases que estan mas abajo en la jerarqua las que son
origen de la mayor parte de los fallos. Algunos autores han demostrado que
las clases mas propensas a fallos son las que estan en la zona intermedia del
arbol de jerarqua. De acuerdo a sus hallazgos, las clases que estan en la
raz o en la parte mas baja del arbol se consultan con frecuencia, y debido
a que son mas familiares [a los desarrolladores], tienen menor tendencia a
fallos si se las compara con las clases que estan en la zona intermedia de la
jerarqua.
De acuerdo a la descripcion a que actividades de la ingeniera del software proporciona
informacion la metrica?
27
Soluci
on propuesta La metrica puede utilizarse para el dise
no del software, como
indicador para tratar de reorganizar el dise
no. Tambien puede utilizarse en el mantenimiento que se lleva a cabo despues de la entrega, para detectar las clases con mas
posibilidades de tener defectos, o incluso en las actividades de prueba para decidir que
clases deben recibir mas atencion durante el proceso de prueba.
E3 Como pueden denirse las relaciones entre los conceptos de actividad, proceso y
metodo en la ingeniera del software?
Soluci
on propuesta Las actividades son los sucesos que realmente ocurren en el
trabajo de los ingenieros del software. Los metodos son especicaciones sobre c
omo
realizar esas actividades. Por tanto, los metodos a
naden la dimension normativa a
las actividades. Por otro lado, los procesos son conjuntos de metodos para diferentes
actividades, organizados seg
un principios coherentes en un sistema que abarca varias
fases de la ingeniera. Por tanto, los procesos contienen metodos para diferentes aspectos de la Ingeniera.
E4 El siguiente es un fragmento de la Wikipedia sobre los procesos
agiles para la ingeniera
del software.
Valorar m
as a los individuos y su interacci
on que a los procesos y
las herramientas
Este es posiblemente el principio mas importante [...]. Por supuesto que los
procesos ayudan al trabajo. Son una gua de operacion. Las herramientas
mejoran la eciencia, pero sin personas con conocimiento tecnico y actitud
adecuada, no producen resultados. [...] Los procesos deben ser una ayuda y
un soporte para guiar el trabajo. Deben adaptarse a la organizacion, a los
equipos y a las personas; y no al reves. La defensa a ultranza de los procesos
lleva a postular que con ellos se pueden conseguir resultados extraordinarios
con personas mediocres, y lo cierto es que este principio es peligroso cuando
los trabajos necesitan creatividad e innovacion.
Como puede valorarse la anterior armacion de acuerdo con la denicion de la ingeniera del software?
Soluci
on propuesta En ocasiones se considera equivocadamente que los postulados
de los procesos
agiles como el anterior son contrarios en general a la consideracion
de la ingeniera del software como tal ingeniera. No obstante, valores como el de
este fragmento de texto no cuestionan el caracter de la ingeniera del software, sino
u
nicamente la efectividad de ciertos procesos, o el enfasis en ciertos aspectos de los
mismos. Es importante resaltar que la efectividad de un proceso determinado es difcil
de justicar de manera cientca, por la dicultad de acumular evidencia able sobre
la misma. Por ello, la discusion sobre que proceso es mejor para que situaciones es un
tema abierto, y siempre se deben considerar las condiciones de cada proyecto a la hora
de seleccionar el proceso y los metodos para un desarrollo.
28
1.12.2
Actividades propuestas
Bibliografa
Auyang, S. (2004), Engineering an endless frontier, Harvard University Press.
Brooks, F. (1987), No silver bullet: Essence and accidents of software engineering, IEEE
Computer 20(4), 1019.
Dorfman, M. & Thayer, R. H. (1999), Software Engineering, Wiley-IEEE Computer Society
Press.
Humphrey, W. S. (1996), Introduction to the Personal Software Process, Addison-Wesley
Professional.
IEEE (1990), IEEE standard glossary of software engineering terminology.
Lehman, M. M. & Ramil, J. F. (2003), Software evolution - background, theory, practice,
Information Processing Letters 88(12), 3344.
Naur, P. & Randell, B. (1969), Software Engineering: Report of a conference sponsored by
the NATO Science Committee, Scientic Aairs Division, NATO, Garmisch, Germany.
Randell, B. & Buxton, J. (1970), Software Engineering Techniques: Report of a conference
sponsored by the NATO Science Committee, Scientic Aairs Division, NATO, Rome,
Italy.
Starr, P. (1982), The Social Transformation of American Medicine, BasicBooks.
29