Professional Documents
Culture Documents
Ingeniera Web.
3. Software
Luis Fernndez Muoz
https://www.linkedin.com/in/luisfernandezmunyoz
setillofm@gmail.com
http://blogs.upm.es/garabatossoftware
miw.etsisi.upm.es https://twitter.com/garabatSoftware
3. Software 2
INDICE
1. Naturaleza del Software
2. Fundamentos del Software
3. Economa del Software
4. Crisis del Software
5. Complejidad del Software
6. Disciplinas del Software
7. Calidad del Software
8. Metodologas de Desarrollo del Software
3. Software 3
ndice
3.2.1. Introduccin
La observacin general es que el principal enemigo de la fiabilidad, y tal
vez de la calidad del software en general, es la complejidad. [Meyer]
Ley de Conservacin de la Complejidad dice que cada aplicacin
tiene una cantidad de complejidad que no puede ser eliminada u
oculatada [Tesler, 87].
Cuanto ms complejo sea un sistema, ms abierto est al colapso
total. Gran parte de la complejidad que se tiene que dominar es la
complejidad arbitraria. [Booch]
Como afirma Descartes, "El descubrimiento de un orden no es tarea
fcil. . . . sin embargo, una vez que el orden ha sido descubierto no hay
dificultad alguna en reconocerlo".
La historia del software disfruta de cuatro mecanismos que
facilitan enormemente nuestra comprensin de sistemas
complejos:
Abstraccin
Encapsulacin
Modularidad
Jerarqua
3. Software > 2. Fundamentos del Software 12
ndice
3.2.2. Abstraccin
Definiciones:
La abstraccin es "una descripcin simplificada, o especificacin, de un
sistema que hace hincapi en algunos de los detalles o propiedades mientras
que suprime otros del sistema. Una buena abstraccin es la que hace hincapi
en los detalles que son importantes para el lector o usuario y suprime detalles
que son, al menos por ahora, de distraccin [Shaw]
La abstraccin surge de un reconocimiento de similitudes entre ciertos
objetos, situaciones o procesos en el mundo real, y la decisin de concentrarse
en estas similitudes e ignorar por el momento, las diferencias [Dahl,
Dijkstra y Hoare]
La abstraccin es proceso mental de extraccin de las caractersticas
esenciales de algo, ignorando los detalles superfluos [Booch]
3.2.2. Abstraccin
Implicaciones:
Una abstraccin denota las caractersticas esenciales de un objeto que lo
distinguen de todos los otros tipos de objetos y por lo tanto proporciona
lmites conceptuales ntidamente definidos, en relacin con la perspectiva
del espectador.
Una abstraccin se centra en la visin exterior de un objeto y sirve para
separar el comportamiento esencial de un objeto de su implantacin
La abstraccin es eminentemente subjetiva, dependiendo del inters del
observador
Nos esforzamos para construir abstracciones de las entidades porque son
directamente paralelos al vocabulario del dominio de un determinado
problema.
Ejemplos:
Mundo real: un autobs de un pasajero o un mecnico, un ordenador,,
Software orientado a procesos: factorial, mostrar men, ordenar,
Software orientado a objetos: una fecha, un intervalo, un gestor de
comunicaciones, un coleccin de datos,
3. Software > 2. Fundamentos del Software 14
ndice
3.2.3. Encapsulacin
Definiciones:
La encapsulacin es proceso por el que se ocultan los detalles del soporte de
las caractersticas esenciales de una abstraccin [Booch]. Hacer notar que
en ninguno de los casos no se trata de ocultar la informacin en s
misma sino de ocultar los detalles del soporte de dicha informacin.
La encapsulacin se logra con mayor frecuencia a travs de
ocultacin de informacin, que es el proceso de ocultar todos los
secretos de un objeto que no contribuyen a sus caractersticas
esenciales.
La encapsulacin proporciona barreras explcitas entre las diferentes
abstracciones y por lo tanto conduce a una clara separacin de
asuntos. El beneficio inmediato ser la posibilidad de cambiar los
soportes de las caractersticas de una abstraccin sin afectar a todos
los elementos que dependan de esas caractersticas porque ni los
conocen, ni los mencionan.
Principio de Encapsulacin: todo aquello que no sea necesario dar a
conocer, no se debe dar a conocer
3. Software > 2. Fundamentos del Software 15
ndice
3.2.3. Encapsulacin
Implicaciones:
Una vez realizada cierta abstraccin hay que trasladarlas al
lenguaje de programacin. Esto conlleva decidir entre diversas
estructuras de datos (estticas o dinmicas, en memoria principal o
secundaria, etc.) y/o diversos algoritmos (con variables auxiliares o
no? recursivo o iterativo?, etc.), siendo diversas las alternativas que
recogen dichas caractersticas esenciales. Una vez que se selecciona
una implantacin, debe ser tratado como un secreto de la abstraccin
y oculta a la mayora de los clientes. En la prctica, esto significa que
cada clase debe tener dos partes:
La interfaz de una clase capta slo su vista exterior, que abarca
nuestra abstraccin del comportamiento comn a todas las
instancias de la clase. La interfaz de una clase es el nico lugar
donde establecemos todas los suposiciones que un cliente puede
hacer sobre cualquier instancia de la clase
La implementacin de una clase comprende la representacin de
la abstraccin, as como los mecanismos para conseguir el
comportamiento deseado. La implementacin encapsula detalles
sobre los qu ningn cliente puede hacer suposiciones.
3. Software > 2. Fundamentos del Software 16
ndice
3.2.3. Encapsulacin
Implicaciones:
La abstraccin de un objeto debe preceder a las decisiones acerca de
su implantacin.
Ninguna parte de un sistema complejo debe depender de los detalles
internos de cualquier otra parte. Mientras que la abstraccin ayuda a
las personas a pensar en lo que estn haciendo, la encapsulacin
permite hacer cambios fiables en el programa con un esfuerzo
limitado.
Ejemplos:
Mundo real: un autobs, un ordenador, una universidad,
Software orientado a procesos: factorial, mostrar men, ordenar,
Software orientado a objetos: una fecha, un intervalo, un gestor de
comunicaciones, un coleccin de datos,
3. Software > 2. Fundamentos del Software 17
ndice
3.2.4. Modularidad
Definiciones:
La modularidad es el proceso de descomposicin de un sistema en un
conjunto de piezas poco acoplados y cohesivos [Booch, 96]
El acoplamiento [...] es la medida de fuerza de la asociacin establecida
por una conexin ente un mdulo -elemento- y otro. El acoplamiento
fuerte complica un sistema porque los mdulos son ms difciles de
comprender, cambiar o corregir por s mismos si estn muy
interrelacionados con otros mdulos [Booch, 96]. Por tanto, hay que
minimizar las dependencias entre mdulos
La cohesin mide el grado de conectividad entre los elementos de un solo
mdulo. [Booch, 96] Por tanto, un mdulo cohesivo debe tener
significado propio por s mismo agrupando abstracciones
lgicamente relacionadas
3. Software > 2. Fundamentos del Software 18
ndice
3.2.4. Modularidad
Implicaciones:
La tcnica de manejar la complejidad ha sido conocida desde la
antigedad: divide et impera (divide y vencers).
Al disear un sistema de software complejo, es esencial para
descomponer en partes ms pequeas y ms pequeas, cada una de
las cuales podemos entonces refinar independientemente. De esta
manera, satisfacemos la restriccin muy real que existe sobre la
capacidad del canal de la cognicin humana: para entender cualquier
nivel dado de un sistema, slo necesitamos comprender algunas
partes (en lugar de todas las partes) a la vez.
Al dividir un programa crean una serie de lmites documentados bien
definidos dentro del programa, los cuales son de gran valor en la
comprensin del programa
la descomposicin inteligente se dirige directamente a la complejidad
inherente del software al obligar a una divisin del espacio de estados de un
sistema [Parnas]
3. Software > 2. Fundamentos del Software 19
ndice
3.2.4. Modularidad
Implicaciones:
Debera ser posible cambiar la implementacin de otros mdulos sin
el conocimiento de la aplicacin de otros mdulos y sin afectar el
comportamiento de los otros mdulos
El bajo acoplamiento de un modulo se basa en la abstraccin que
limita su interfaz a lo esencial y en la encapsulacin que oculta todos
los detalles necesarios para su implantacin pero innecesarios para
otros mdulos que se relacionen con ste
Ejempos:
Mundo real: un autobs, un ordenador, una universidad,
Software orientado a procesos: factorial, mostrar men, ordenar,
Software orientado a objetos: una fecha, un intervalo, un gestor de
comunicaciones, un coleccin de datos,
3. Software > 2. Fundamentos del Software 20
ndice
3.2.5. Jerarqua
Definiciones:
Jerarqua es una clasificacin u ordenamiento de las abstracciones
[Booch]
La jerarquizacin es el proceso de estructuracin por el que se
produce una organizacin de un conjunto de elementos en grados o
niveles de responsabilidad, de clasificacin o de composicin,
entre otros
Univesidad Profesores
3.2.5. Jerarqua
Implicacines:
La abstraccin es una buena cosa pero en todos los casos, excepto las
aplicaciones ms triviales, podemos encontrar muchas ms
abstracciones diferentes de lo que podemos comprender a la vez. La
encapsulacin ayuda a gestionar esta complejidad al ocultar el
interior de la vista de nuestras abstracciones. La modularidad ayuda
tambin, por que nos da una manera de agrupar abstracciones
relacionados lgicamente. An as, esto no es suficiente. Un conjunto
de abstracciones a menudo forma una jerarqua, y mediante la
identificacin de estas jerarquas en nuestro diseo se simplifica
enormemente nuestra comprensin del problema.
La identificacin de las jerarquas dentro de un sistema de software
complejo a menudo no es fcil. Una vez que se exponen esas
jerarquas, la estructura de un sistema complejo se vuelve muy simple
y obtenemos la comprensin de la misma.
3. Software > 2. Fundamentos del Software 22
ndice
3.2.5. Jerarqua
Implicacines:
Si no revelamos la estructura de clases de un sistema, tendramos que
multiplicar nuestro conocimiento sobre las propiedades de cada parte
individual. Con la inclusin de la estructura de clases, captamos estas
propiedades comunes en un solo lugar.
La estructura de clases y la estructura de objetos no son
completamente independientes; ms bien, cada objeto en la
estructura de objetos representa una instancia especfica de una clase.
Por lo general hay muchos ms objetos que clases de objetos dentro
de un sistema complejo. Al mostrar la "parte de", as como la
jerarqua "es un", exponemos de forma explcita la redundancia del
sistema considerado.
Existen dos jerarquas ortogonales del sistema: la estructura de clases
y la estructura de objetos. Cada jerarqua est en capas, con clases
ms abstractas y objetos construidos sobre otros ms primitivos. La
clase u objeto que se elija como primitivo est en relacin con el
problema en cuestin. Mirando dentro de cualquier nivel dado revela
otro nivel de complejidad. Especialmente entre las partes de la
estructura del objeto, existe una estrecha colaboracin entre los
objetos de ese mismo nivel de abstraccin.
3. Software > 2. Fundamentos del Software 23
ndice
3.2.5. Jerarqua
Implicacines:
La mayora de los sistemas interesantes no incorporan una nica
jerarqua; en cambio, nos encontramos con que muchas jerarquas
diferentes suelen estar presentes dentro del mismo sistema complejo.
En nuestra experiencia, hemos encontrado que es esencial para ver un
sistema desde ambas perspectivas, estudiando su jerarqua "es un"
(clasificacin), as como su jerarqua "parte de (composicin)
Nuestra experiencia es que los sistemas de software complejos ms exitosos
son aquellos cuyos diseos incluyen explcitamente las estructuras de clases
y objetos bien diseadas y encarnan los cinco atributos de sistemas complejos
descritos en la seccin anterior. [] Muy raramente nos encontramos con
sistemas de software que se entregan a tiempo, que estn dentro del
presupuesto y que cumplen con sus requisitos, a menos que estn diseados
con estos factores en mente [Booch]
3. Software > 2. Fundamentos del Software 24
ndice
3.2.6. Conclusin
Software es un conjunto de clases/mdulos relacionndose
por herencia, composicin, o interdependientes formando
una aplicacin. Cada aplicacin est delimitada por su
entorno tecnologco-comercial, descrito por su arquitectura
del software y requisitos y expresado en su ejecucin
Software de una aplicacin media (~100.000 lneas de
cdigo) tiene una complejida excede la capacidad intelectual
humana
Software es un sistema complejo con:
Estructura jerrquica gracias a sus jerarquas de herencia,
composicin,
Elementos primitivos relativos gracias a sus tipos primitivos
dependiendo del lenguaje (enteros, cadena de caracteres?, fechas?, )
y los definidos por el usuario
Separacin de asuntos gracias a la encapsulacin y modularidad
Patrones comunes gracias al paso de mensajes con argumentos
Formas intermedias estables gracias a las metodologas iterativas
3. Software 25
ndice
3.3.1. Introduccin
Cuatro variables: mbito
Coste,
Tiempo
mbito (funcionalidad/
requisitos) y
Calidad
Calidad Coste Tiempo
[Beck, 1999]
3. Software 35
ndice
3.6.1. Introduccin
Ingeniera de software es la aplicacin prctica del
conocimiento cientfico al diseo y construccin de
programas de computadora y a la documentacin asociada
requerida para desarrollar, operar y mantenerlos. Se conoce
tambin como desarrollo de software o produccin de
software [Bohem, 1976]
El software es sagrado
[Booch]
[ y requiere de un ritual]
3. Software > 6. Disciplinas del Software 47
ndice
3.6.8. Conclusiones
Problemas por la Complejidad Soluciones de la
del Software: Ingeniera del Software:
La complejidad del dominio del
Requisitos
problema
Las limitaciones de la capacidad
humana para el tratamiento de la Anlisis y Diseo
complejidad
3.7.7. Resumen
Calidad del Software de Calidad del Software de
soluciones positivas: soluciones negativas:
Principios. Ej.: Simplicidad, Prohibiciones. Ej.: Duplicidad,
Cdigo Limpio. Ej.: Nombres Cdigo Sucio. Ej.: Acrnimos
significativos, de nombres,
Patrones: Soluciones buenas a Antipatrones: Soluciones malas
problemas recurrentes, a problemas recurrentes,
3. Software > 7. Calidad del Software 92
ndice
3.7.7. Resumen
3. Software 93
ndice
3.8.1. Introduccin
Proceso de Desarrollo Software: el conjunto total de
actividades necesarias para transformar los requerimientos
del cliente en un conjunto consistente de artefactos que
representan un producto software y, en un momento
posterior, para transformar los cambios de estos
requerimientos en una nueva versin del producto software.
La diferencia entre una metodologas y otras radica en el orden,
grado y tcnicas en que se acometen las actividades de las distintas
disciplinas de la ingeniera del software
3. Software > 8. Metodologas de Desarrollo del Software 95
ndice
Planificar de un poco.
Especificar, disear e implementar un poco.
Integrar, probar y ejecutar un poco en cada iteracin
[Booch]
3. Software > 8. Metodologas de Desarrollo del Software 98
ndice
Releases
XP+Scrum
3. Software > 8. Metodologas de Desarrollo del Software 105
ndice
Bottom-up