Proceso para
el desarrollo de software

Un proceso para el desarrollo de software,
también denominado ciclo de vida
del desarrollo de software es una estructura aplicada al desarrollo
de un producto de software. Hay varios modelos a seguir para el establecimiento
de un proceso para el desarrollo de software, cada uno de los cuales describe un
enfoque diferente para diferentes actividades que tienen lugar durante el
proceso.
v Análisis de requisitos: El
análisis de requerimiento extrae los requisitos de un producto de software es
la primera etapa para crearlo. Mientras que los clientes piensan que ellos
saben lo que el software tiene que hacer, se requiere de habilidad y
experiencia en la ingeniería de software para reconocer requisitos incompletos,
ambiguos o contradictorios. El resultado del análisis de requisitos con el
cliente se plasma en el documento ERS, Especificación de Requerimientos del Sistema, cuya estructura
puede venir definida por varios estándares, tales como CMM-I. Asimismo, se
define un diagrama de Entidad/Relación, en el que se plasman las principales
entidades que participarán en el desarrollo del software. La captura, análisis
y especificación de requisitos (incluso pruebas de ellos), es una parte
crucial; de esta etapa depende en gran medida el logro de los objetivos
finales. Se han ideado modelos y diversos procesos de trabajo para estos fines.
v
Diseño y arquitectura: Se refiere a determinar cómo funcionará de forma general sin entrar en
detalles. Consiste en incorporar consideraciones de la implementación
tecnológica, como el hardware, la red, entre otros. Se definen los Casos de Uso
para cubrir las funciones que realizará el sistema, y se transforman las
entidades definidas en el análisis de requisitos en clases de diseño,
obteniendo un modelo cercano a la programación orientada a objetos.
v
Programación: Reducir un diseño a código puede ser la parte más obvia del trabajo de
ingeniería de software, pero no es necesariamente la porción más larga. La
complejidad y la duración de esta etapa está íntimamente ligada al o a los
lenguajes de programación utilizados.
v
Pruebas: Consiste en comprobar que el software realice correctamente las tareas
indicadas en la especificación. Una técnica de prueba es probar por separado
cada módulo del software, y luego probarlo de forma integral, para así llegar
al objetivo. Se considera una buena práctica el que las pruebas sean efectuadas
por alguien distinto al desarrollador que la programó, idealmente un área de
pruebas; sin perjuicio de lo anterior el programador debe hacer sus propias
pruebas. En general hay dos grandes formas de organizar un area de pruebas, la
primera es que esté compuesta por personal inexperto y que desconozca el tema
de pruebas, de esta forma se evalúa que la documentación entregada sea de
calidad, que los procesos descritos son tan claros que cualquiera puede entenderlos
y el software hace las cosas tal y como están descritas. El segundo enfoque es
tener un area de pruebas conformada por programadores con experiencia, personas
que saben sin mayores indicaciones en qué condiciones puede fallar una
aplicación y que pueden poner atención en detalles que personal inexperto no
consideraría.
v Documentación: Todo lo concerniente a la
documentación del propio desarrollo del software y de la gestión del proyecto,
pasando por modelaciones (UML), diagramas, pruebas, manuales de usuario,
manuales técnicos, etc; todo con el propósito de eventuales correcciones,
usabilidad, mantenimiento futuro y ampliaciones al sistema.
v Mantenimiento: Mantener y mejorar el software para enfrentar
errores descubiertos y nuevos requisitos. Esto puede llevar más tiempo incluso
que el desarrollo inicial del software. Alrededor de 2/3 de toda la ingeniería
de software tiene que ver con dar mantenimiento. Una pequeña parte de este
trabajo consiste en arreglar errores, o bugs. La
mayor parte consiste en extender el sistema para hacer nuevas cosas. De manera
similar, alrededor de 2/3 de toda la ingeniería civil, arquitectura y trabajo
de construcción es dar mantenimiento.
Fundamentos del enfoque orientado a
objeto
El Enfoque Orientado a Objeto se basa en cuatro principios que constituyen la
base de todo desarrollo orientado a objetos. Estos principios son: la
Abstracción, el Encapsulamiento, la Modularidad y la Herencia.
v Abstracción: Es el principio de
ignorar aquellos aspectos de un fenómeno observado que no son relevantes, con
el objetivo de concentrarse en aquellos que si lo son. Una abstracción
denota las características esenciales de un objeto (datos y operaciones), que
lo distingue de otras clases de objetos. Decidir el conjunto correcto de
abstracciones de un determinado dominio, es el problema central del diseño
orientado a objetos.
Los mecanismos de abstracción son usados en el EOO para extraer y definir del
medio a modelar, sus características y su comportamiento. Dentro del EOO son
muy usados mecanismos de abstracción: la Generalización, la Agregación y la
clasificación.
Ø La generalización: Es el mecanismo de abstracción
mediante el cual un conjunto de clases de objetos son agrupados en una clase de
nivel superior (Superclase), donde las semejanzas de las clases constituyentes
(Subclases) son enfatizadas, y las diferencias entre ellas son ignoradas. En
consecuencia, a través de la generalización, la superclase almacena datos
generales de las subclases, y las subclases almacenan sólo datos
particulares.La especialización es lo contrario de la generalización. Por
ejemplo; La clase Médico es una especialización de la clase Persona, y a su
vez, la clase Pediatra es una especialización de la superclase Médico.
Ø La agregación:
Es el mecanismo de abstracción por el
cual una clase de objeto es definida a partir de sus partes (otras clases de
objetos). Mediante agregación se puede definir por ejemplo un computador, por
descomponerse en: la CPU, la ULA, la memoria y los dispositivos periféricos. El
contrarío de agregación es la descomposición.
Ø La clasificación: Consiste en la definición de una clase
a partir de un conjunto de objetos que tienen un comportamiento similar. La
ejemplificación es lo contrario a la clasificación, y corresponde a la
instanciación de una clase, usando el ejemplo de un objeto en particular.
v Encapsulamiento: Es la propiedad del
EOO que permite ocultar al mundo exterior la representación interna del objeto.
Esto quiere decir que el objeto puede ser utilizado, pero los datos esenciales
del mismo no son conocidos fuera de él. La idea central del encapsulamiento es
esconder los detalles y mostrar lo relevante. Permite el ocultamiento de la
información separando el aspecto correspondiente a la especificación de la
implementación; de esta forma, distingue el "qué hacer" del
"cómo hacer". La especificación es visible al usuario, mientras que
la implementación se le oculta.
El encapsulamiento en un sistema
orientado a objeto se representa en cada clase u objeto, definiendo sus
atributos y métodos con los siguientes modos de acceso:
·
Público (+): Atributos o Métodos
que son accesibles fuera de la clase. Pueden ser llamados por cualquier clase,
aun si no está relacionada con ella.
·
Privado (-): Atributos o
Métodos que solo son accesibles dentro de la implementación de la clase.
·
Protegido (#): Atributos o Métodos
que son accesibles para la propia clase y sus clases hijas (subclases).
Los atributos y los métodos que son públicos constituyen la interfaz de la
clase, es decir, lo que el mundo exterior conoce de la misma. Normalmente lo
usual es que se oculten los atributos de la clase y solo sean visibles los
métodos, incluyendo entonces algunos de consulta para ver los valores de los
atributos. El método constructor (Nuevo, New) siempre es Público.
v Modularidad: La modularidad
consiste en dividir un programa en módulos o partes, que pueden ser compilados
separadamente, pero que tienen conexiones con otros módulos. En un mismo módulo
se suele colocar clases y objetos que guarden una estrecha relación. El sentido
de modularidad está muy relacionado con el ocultamiento de información.
v Herencia: Es el proceso
mediante el cual un objeto de una clase adquiere propiedades definidas en otra
clase que lo preceda en una jerarquía de clasificaciones. Permite
la definición de un nuevo objeto a partir de otros, agregando las diferencias
entre ellos (Programación Diferencial), evitando repetición de código y
permitiendo la reusabilidad.
Las clases heredan
los datos y métodos de la superclase. Un método heredado puede ser sustituido
por uno propio si ambos tienen el mismo nombre. La herencia puede ser simple
(cada clase tiene sólo una superclase) o múltiple (cada clase puede tener
asociada varias superclases). La clase Docente y la clase Estudiante heredan
las propiedades de la clase Persona (superclase, herencia simple). La clase
Preparador (subclase) hereda propiedades de la clase Docente y de la clase
Estudiante (herencia múltiple).
v Polimorfismo: Es una propiedad
del EOO que permite que un método tenga múltiples implementaciones, que se
seleccionan en base al tipo objeto indicado al solicitar la ejecución del
método. El polimorfismo operacional o Sobrecarga operacional permite aplicar
operaciones con igual nombre a diferentes clases o están relacionados en
términos de inclusión. En este tipo de polimorfismo, los métodos son
interpretados en el contexto del objeto particular, ya que los métodos con
nombres comunes son implementados de diferente manera dependiendo de cada
clase.
Por ejemplo, el
área de un cuadrado, rectángulo y círculo, son calculados de manera distinta;
sin embargo, en sus clases respectivas puede existir la implementación del área
bajo el nombre común Área. En la práctica y dependiendo del objeto que llame al
método, se usará el código correspondiente.
Ejemplos:
Superclase: Clase
Animal
Subclases: Clases
Mamífero, Ave, Pez.
Un ejemplo de polimorfismo es el operador +. Este
operador tiene dos funciones diferentes de acuerdo al tipo de dato de los operandos
a los que se aplica. Si los dos elementos son numéricos, el operador +
significa suma algebraica de los mismos, en cambio si por lo menos uno de los
operandos es un String o Carácter, el operador es la concatenación de cadenas
de caracteres.
Características
Es una
herramienta de comunicación bidireccional que nos permite recibir y mandar
información de aquéllos internautas que desean comunicar con nosotros. Pero esa
comunicación tiene unas características especiales muy importantes:
Nos
permite establecer una comunicación activa. Es decir, podemos comunicar con
nuestros interlocutores cuando nosotros lo deseamos.
Nos permite mandar información individualizada. Es decir, podemos mandar información a 1 sola persona. Eso, a su vez, nos permite mandar información personalizada. Podemos mandar, a cada persona, la información adecuada. Esa comunicación personalizada puede dirigirse a una persona o también a un grupo de personas interesadas en un mismo tema.
Además, como medio receptor de información, nos permite, no sólo conocer las inquietudes y comentarios de nuestros contactos, sino también recoger automáticamente su dirección de correo-e y, en muchos casos, también sus nombres. Por supuesto, también es la herramienta que me permite entablar una comunicación continua con cualquiera de un cliente.
UNIX
es un Sistema Operativo de propósito general con las siguientes características:
·
Sistema
Multiusuario.
·
Sistema
Multitarea.
·
Trabaja
en tiempo compartido.
·
Sistema
interactivo.
·
Estandarizado.
·
Potente.
·
Versátil.
·
Software
y sistema operativo portable.
·
Permite
ejecutar procesos en Background y Foreground.
·
Presenta
niveles altos de seguridad.
·
Presenta
una estructura jerárquica de archivos.
·
Posee un
gran número de utilidades : Editores de línea , de pantalla, formateadores,
depuradores de programas…
·
Posibilidad
de comunicación UNIX – UNIX (UUCP)
·
Fácil
integración en sistemas de red.
·
Posibilidad
de usar distintos lenguajes de programación: C,
·
Fortran,
Cobol, Pascal,…
·
Gran
cantidad de software disponible en el mercado.
Desarrollo de
componentes
|
Es un hecho que los negocios
buscan ellos mismos ser incrementalmente dependientes de las rápidas
interacciones electrónicas (a través de clientes, asociados, empleados y
proveedores). Como el campo tecnológico se vuelve complejo, se vuelve
progresivamente difícil manejar y procesar la información. El desarrollo
orientado a componentes soluciona estos problemas a través del uso de
componentes interrelacionados dentro de los procesos de negocios.
|
Estándar en el proceso del
desarrollo del hardware
Clasificación
del software
Si bien esta distinción es, en cierto
modo, arbitraria, y a veces confusa, a los fines prácticos se puede clasificar
al software en tres grandes tipos:
·
Software de sistema: Su objetivo es
desvincular adecuadamente al usuario y al programador de los detalles del
sistema informático en particular que se use, aislándolo especialmente del
procesamiento referido a las características internas de: memoria, discos,
puertos y dispositivos de comunicaciones, impresoras, pantallas, teclados, etc.
El software de sistema le procura al usuario y programador adecuadas interfaces de alto nivel, controladores, herramientas y utilidades
de apoyo que permiten el mantenimiento del sistema global. Incluye entre otros:
§ Herramientas de
Corrección y Optimización
·
Software de programación: Es el conjunto
de herramientas que permiten al programador desarrollar programas informáticos,
usando diferentes alternativas y lenguajes de programación, de una manera
práctica. Incluyen básicamente:
§ Entornos de
Desarrollo Integrados (IDE): Agrupan las anteriores herramientas,
usualmente en un entorno visual, de forma tal que el programador no necesite
introducir múltiples comandos para
compilar, interpretar, depurar, etc. Habitualmente cuentan con
una avanzada interfaz gráfica de usuario (GUI).
·
Software de aplicación: Es aquel que
permite a los usuarios llevar a cabo una o varias tareas específicas, en
cualquier campo de actividad susceptible de ser automatizado o asistido, con
especial énfasis en los negocios. Incluye entre muchos otros:
§ Aplicaciones
para Control de sistemas y automatización industrial
§ Telecomunicaciones (por
ejemplo Internet y toda su estructura lógica)
§ Software de cálculo Numérico y
simbólico.
§ Software de diseño asistido (CAD)
§ Software de
control numérico (CAM)
Documentación y artefactos
La documentación es la
debilidad más frecuente en productos e instalaciones informáticos. Los actores que intervienen en el ciclo de vida del software
desempeñan diversos roles. Arquitectos, diseñadores, analistas, programadores,
implementadores, administradores o auditores son quienes explicitan distintos
aspectos de los productos y procesos.
El código fuente del
software, la estructura de datos y los enlaces de comunicaciones constituyen en
conjunto el paradigma de la documentación informática. Sin embargo, cuando los
modelos de arquitectura, estructuras y especificaciones de diseño no los vinculan,
sólo pueden acceder a éstos dificultosamente los iniciados. Hay buenas
prácticas para escribir código fuente pero, las condiciones y circunstancias de
cada programa y sistema son tan diversas que, las exigencias habituales se
reducen a que funcione razonablemente.
Artefactos, de acuerdo con RUP, es una
pieza de información producida, modificada o utilizada por un proceso.
Artefacto son los productos tangibles del proyecto, las cosas que los proyectos
producen o utilizan mientras se trabaja hacia el producto final. Los artefactos
son insumos utilizados para realizar actividades y, son los resultados de estas
actividades.
Son
artefactos entregables como ejecutables, el código fuente, manuales, planes y
proyectos. Productos intermedios, como documentos de arquitectura y diseño,
especificaciones de requerimientos, modelos de negocios y casos de uso. De
igual forma, son artefactos los elementos que componen los modelos y productos,
como glosarios y diccionarios, gráficos, clases o subsistemas. También, en
negocios regulados, son artefactos los instrumentos y evidencias de la gestión
informática.