 |
En un enfoque de ingeniería clásico se define claramente el
problema a resolver y se desarrollan herramientas estándar y
técnicas para resolverlo. Las disciplinas ingenieriles clásicas
son las herramientas y madurez matemática para especificar
propiedades del producto.
La meta de cualquier actividad de ingeniería es construir
algo, un producto. El producto de la ingeniería de software es
una "aplicación de software". No es un producto tan
tangible como el resultante de otras ingenierías, pero no deja de
ser un producto y cumple una función.
El Software es un producto que por su naturaleza, tiene
características propias:
|
|
|
|
|
|
|
|
 |
Es
un producto de creación intensivamente humana. Requiere
ingeniería más que fabricación. La fabricación es un
proceso trivial de duplicación
|
|
|
|
|
|
 |
El
costo del desarrollo de software se concentra en las tareas
de Ingeniería, mientras que en la fabricación clásica el
costo se acentúa más en las tareas de fabricación
|
|
|
|
|
|
 |
Es
de existencia inmaterial, esto implica no poder hablar de su
deterioro, que sin embargo se produce en el soporte físico
que lo contiene.
|
|
|
|
|
|
 |
Es
maleable. Se puede modificar el producto, pero es difícil
de validar, y casi todo tipo de modificación afecta a la
definición del producto.
|
|
|
|
|
|
 |
El
mantenimiento del software es mucho más complejo que el
mantenimiento del hardware. Cuando un componente del
hardware se deteriora se sustituye por una pieza de
repuesto, pero cada fallo en el software implica un error en
el diseño o en la implementación.
|
|
|
|
|
|
 |
Un
cambio por actualización en el software debe considerarse
como un cambio principalmente en el diseño, y como
consecuencia de ésto, producirá un cambio en el código.
Hay que enfrentar esos cambios con disciplina.
|
|
|
|
|
|
 |
Es
dependiente del hardware y del entorno software en el que se
ejecuta, lo que implica una importante complejidad en su
funcionamiento.
|
|
|
|
|
|
 |
Cualquiera
sea el producto, se espera que satisfaga alguna necesidad y
cumpla con los estándares que definen las propiedades que
debe poseer.
|
|
|
|
|
|
 |
Tiene
un concepto de fiabilidad diferente al del material ya que
no existe deterioro físico de sus componentes, los errores
se derivan de su definición y según las condiciones de
explotación puede variar el resultado obtenido.
|
|
|
|
|
|
|
|
|
|
La Ingeniería de Software es "La aplicación de un enfoque
sistemático, disciplinado y cuantificable hacia el desarrollo,
operación y mantenimiento del software, es decir la aplicación
de ingeniería al software".
Para el éxito en el desarrollo de software, hay que aplicar
ciertos principios tanto en los procesos de ingeniería de
software como en el producto final. Para aplicar estos principios,
es necesario contar con métodos y técnicas específicas que
ayuden a incorporar las propiedades deseadas en los procesos y los
productos.
Se considera que los Métodos son guías generales para la
ejecución de alguna actividad, debiendo ser rigurosos,
sistemáticos y disciplinados. Las Técnicas son de aplicabilidad
más restringida, de carácter más técnico y mecánico. Las
Metodologías son métodos y técnicas asociados para promover
cierta aproximación a la resolución de un problema. Las
Herramientas soportan la aplicación de métodos, técnicas y
metodologías.
Una metodología debe ser rigurosa y sistemática para poder
ser explicada fácilmente y aplicada una y otra vez.
En consecuencia, para
cumplir con los objetivos de calidad, debe encararse el desarrollo
de software con un criterio ingenieril clásico, adoptando sus
principios en la Ingeniería de Software:
|
|
|
|
|
|
|
|
 |
Rigor:
es el complemento necesario a la creatividad en cada
actividad ingenieril. Permite: desarrollar productos más
confiables, controlar los costos, aumentar la credibilidad
de los resultados
|
|
|
|
|
|
 |
Formalidad:
requiere que el proceso de software sea conducido y evaluado
por leyes matemáticas. La formalidad debe ser la base de
mecanización del proceso. El uso de formalidad en la
implementación tiende a aumentar efectivamente la
confiabilidad y verificabilidad de los productos de
software.
|
|
|
|
|
|
 |
Separación
de Responsabilidades: permite asignar roles o especialidades
para tratar diferentes aspectos de un problema,
concentrándose separadamente en cada uno.
|
|
|
|
|
|
 |
Modularidad:
un sistema complejo puede ser dividido en partes más
sencillas denominadas módulos, para tratarlos
separadamente, y luego integrarlos en un sistema coherente.
El tratamiento de los módulos puede ser: por
descomposición (top down) o por composición (bottom up).
Los módulos deben tener alta cohesión y bajo acoplamiento.
|
|
|
|
|
|
 |
Abstracción:
es el proceso por el cual se identifican los aspectos
importantes de problema y se ignoran aquellos que no son
relevantes para su comprensión.
|
|
|
|
|
|
 |
Anticipación
al cambio: es el proceso por el cual se identifican las
necesidades de reparación o evolución de una aplicación,
en la medida que surjan nuevos requerimientos o se
modifiquen los anteriores. Surgen diferentes versiones y
revisiones de la aplicación en una forma controlada.
|
|
|
|
|
|
 |
Generalización:
es el proceso por el cual se descubre un aspecto más
general al analizar los componentes de un problema.
|
|
|
|
|
|
 |
Incrementación:
es el proceso por el cual se identifican los aspectos de una
aplicación a desarrollar, para entregarle una posible
solución al usuario y obtener de él una pronta
realimentación. Los productos intermedios serán prototipos
del producto final.
|
|
|
|
|
|
 |
Revisión:
El proceso de revisión se aplica a través del proceso de
desarrollo y durante la evolución de la aplicación.
|
|
|
|
|
|
|
|
|
|
|