jueves, 2 de mayo de 2013

PROCESO DE SOFTWARE



Proceso de Software

Se define como Proceso al conjunto ordenado de pasos a seguir para llegar a la solución de un problema u obtención de un producto, en este caso particular, para lograr la obtención de un producto software que resuelva un problema.
Ese proceso de creación de software puede llegar a ser muy complejo, dependiendo de su porte, características y criticidad del mismo. Por ejemplo la creación de un sistema operativo es una tarea que requiere proyecto, gestión, numerosos recursos y todo un equipo disciplinado de trabajo. En el otro extremo, si se trata de un sencillo programa (ejemplo: resolución de una ecuación de segundo orden), éste puede ser realizado por un solo programador (incluso aficionado) fácilmente. Es así que normalmente se dividen en tres categorías según su tamaño (líneas de código) y/o costo: de Pequeño, Mediano y Gran porte. Existen varias metodologías para estimarlo, una de las más populares es el SISTEMA COCOMO que provee métodos y un software (programa) que calcula y provee una estimación de todos los costos de producción en un "proyecto software" (relación horas/hombre, costo monetario, cantidad de líneas fuente de acuerdo a lenguaje usado, etc.).
Considerando los de gran porte, es necesario realizar tantas y tan complejas tareas, tantas técnicas, de gerenciamiento, fuerte gestión y análisis diversos (entre otras) que toda una ingeniería hace falta para su estudio y realización: es la Ingeniería de Software.
En tanto que en los de mediano porte, pequeños equipos de trabajo (incluso un avezado analista-programador solitario) puede realizar la tarea. Aunque, siempre en casos de mediano y gran porte (y a veces también en algunos de pequeño porte, según su complejidad), se deben seguir ciertas etapas que son necesarias para la construcción del software. Tales etapas, si bien deben existir, son flexibles en su forma de aplicación, de acuerdo a la metodología o Proceso de Desarrollo escogido y utilizado por el equipo de desarrollo o analista-programador solitario (si fuere el caso).
Los "procesos de desarrollo de software" poseen reglas preestablecidas, y deben ser aplicados en la creación del software de mediano y gran porte, ya que en caso contrario lo más seguro es que el proyecto o no logre concluir o termine sin cumplir los objetivos previstos y con variedad de fallos inaceptables (fracasan, en pocas palabras). Entre tales "procesos" los hay ágiles o livianos (ejemplo XP), pesados y lentos (ejemplo RUP) y variantes intermedias; y normalmente se aplican de acuerdo al tipo y porte y tipología del software a desarrollar, a criterio del líder (si lo hay) del equipo de desarrollo. Algunos de esos procesos son Extreme Programming (XP), Rational Unified Process (RUP), Feature Driven Development (FDD), etc.

Cualquiera sea el "proceso" utilizado y aplicado en un desarrollo de software (RUP, FDD, etc), y casi independientemente de él, siempre se debe aplicar un "Modelo de Ciclo de Vida".
Se estima que, del total de proyectos software grandes emprendidos, un 28% fracasan, un 46% caen en severas modificaciones que lo retrasan y un 26% son totalmente exitosos. Cuando un proyecto fracasa, rara vez es debido a fallas técnicas, la principal causa de fallos y fracasos es la falta de aplicación de una buena metodología o proceso de desarrollo. Entre otras, una fuerte tendencia, desde hace pocas décadas, es mejorar las metodologías o procesos de desarrollo, o crear nuevas y concientizar a los profesionales en su utilización adecuada. Normalmente los especialistas en el estudio y desarrollo de estas áreas (metodologías) y afines (tales como modelos y hasta la gestión misma de los proyectos) son los Ingenieros en Software, es su orientación. Los especialistas en cualquier otra área de desarrollo informático (analista, programador, Lic. en Informática, Ingeniero en Informática, Ingeniero de Sistemas, etc.) normalmente aplican sus conocimientos especializados pero utilizando modelos, paradigmas y procesos ya elaborados.
Es común para el desarrollo de software de mediano porte que los equipos humanos involucrados apliquen sus propias metodologías, normalmente un híbrido de los procesos anteriores y a veces con criterios propios.
El proceso de desarrollo puede involucrar numerosas y variadas tareas, desde lo administrativo, pasando por lo técnico y hasta la gestión y el gerenciamiento. Pero casi rigurosamente siempre se cumplen ciertas etapas mínimas; las que se pueden resumir como sigue:




Análisis de requisitos
Extraer 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. Aunque aun no está formalizada, ya se habla de la Ingeniería de Requisitos. La IEEE Std. 830-1998 normaliza la creación de las Especificaciones de Requisitos Software (Software Requirements Specification).
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, etc. 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.
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.
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 área 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 área 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.
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.
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.




COCOMO

COnstructive COst MESel del (COCOMO) es un algorítmico Modelo de la valoración del coste del software convertido cerca Barry Boehm. El modelo utiliza una básica regresión fórmula, con los parámetros que se derivan de datos históricos del proyecto y de características actuales del proyecto.

COCOMO primero fue publicado en 1981 Barry J. Boehm Libro Economía de la tecnología de dotación lógica como modelo para estimar esfuerzo, coste, y el horario para los proyectos del software. Dibujó en un estudio de 63 proyectos en TRW Espacio aéreo donde Barry Boehm era el director de la investigación y de la tecnología del software en 1981. El estudio examinó los proyectos que se extendían de tamaño a partir de 2000 a 100.000 líneas del código, y lenguajes de programación que se extienden de asamblea a PL/I. Estos proyectos fueron basados en modelo de la cascada del desarrollo del software que era el proceso frecuente del desarrollo del software en 1981.

Referencias a esta del modelo llamada típicamente él COCOMO 81. En 1997COCOMO II fue convertido y finalmente publicado en 2001 en el libroValoración del coste del software con COCOMO II. COCOMO II es el sucesor de COCOMO 81 y se satisface mejor para estimar proyectos modernos del desarrollo del software. Proporciona más ayuda para moderno procesos del desarrollo del software y una base de datos actualizada del proyecto. La necesidad del nuevo modelo vino mientras que la tecnología del desarrollo del software se movió desde el chasis y el procesamiento por lotes de noche al desarrollo de escritorio, a la reutilidad del código y al uso de los componentes de software disponibles. Este artículo se refiere COCOMO 81.

COCOMO consiste en una jerarquía de tres cada vez más detallados y de formas exactas. El primer nivel, COCOMO básico es buena para aprisa, la orden temprana, áspera de las estimaciones de la magnitud de los costes del software, pero su exactitud debe limitado a su carencia de factores explicar diferencia en cualidades del proyecto (Conductores del coste). COCOMO intermedio toma estos conductores del coste en consideración y COCOMO detallado explica además la influencia de las fases del proyecto individual.

COCOMO básico

COCOMO básico son los parásitos atmosféricos, el modelo solo-valorado que computa esfuerzo del desarrollo del software (y coste) en función del tamaño del programa expresado en líneas estimadas del código. COCOMO se aplica a tres clases de los proyectos del software:
  • Los proyectos orgánicos - son los proyectos relativamente pequeños, simples del software en los cuales los equipos pequeños con el buen trabajo de la experiencia del uso a un sistema de requisitos menos que rígidos.
  • los proyectos - (de tamaño y complejidad) Semi-se separan los proyectos intermedios del software en los cuales los equipos con los niveles mezclados de la experiencia deben resolver una mezcla de requisitos rígidos y menos que rígidos.
  • Los proyectos - se encajan los proyectos del software que se deben desarrollar dentro de un sistema de hardware apretado, de software, y de apremios operacionales.
Las ecuaciones básicas de COCOMO toman la forma

E=ab(KLOC)bb
D=cb(e)db
P=E/D

Donde está el esfuerzo E aplicado en persona-meses, D es el tiempo de desarrollo en meses cronológicos, KLOC es el número estimado de líneas entregadas del código para el proyecto (expresado en millares), y P es el número de la gente requerida. Los coeficientes abbbcb y db se dan en la tabla siguiente.

Proyecto del software
ab
bb
cb
db

Orgánico
2.4
1.05
2.5
0.38

Semi-separado
3.0
1.12
2.5
0.35

Encajado
3.6
1.20
2.5
0.32


COCOMO básico es bueno para aprisa, temprano, la orden áspera de las estimaciones de la magnitud del software cuesta, pero no explica diferencias en apremios del hardware, calidad y experiencia del personal, uso de herramientas modernas y de técnicas, y otras cualidades del proyecto sabidas para tener una influencia significativa en costes del software, que limita su exactitud.

COCOMO intermedio
COCOMO intermedio esfuerzo del desarrollo del software de los cálculos como función del tamaño del programa y de un sistema de los “conductores del coste” que incluyen el gravamen subjetivo del producto, del hardware, del personal y de las cualidades del proyecto. Esta extensión considera un sistema de cuatro “los conductores costados”, cada uno con un número de cualidades del subsidiario:
  • Cualidades de producto
    • Confiabilidad requerida del software
    • Tamaño de la base de datos del uso
    • Complejidad del producto
  • Cualidades del hardware
    • Apremios de funcionamiento Run-time
    • Apremios de la memoria
    • Volatilidad del ambiente virtual de la máquina
    • Tiempo de turnabout requerido
  • Cualidades del personal
    • Capacidad del analista
    • Capacidad de la tecnología de dotación lógica
    • Experiencia de los usos
    • Experiencia virtual de la máquina
    • Experiencia del lenguaje de programación
  • Cualidades del proyecto
    • Uso de las herramientas del software
    • Uso de los métodos de la tecnología de dotación lógica
    • Horario requerido del desarrollo
Cada uno de las 15 cualidades recibe un grado en una escala del seis-punto que se extienda de “muy bajo” a “superior” (en importancia o valor). Un multiplicador del esfuerzo de la tabla abajo se aplica al grado. El producto de todos los multiplicadores del esfuerzo da lugar a coeficiente de adaptación del esfuerzo (EAF). Los valores típicos para EAF se extienden a partir de la 0.9 a 1.4.

Conductores del coste
Grados
Muy bajo
Bajo
Nominal
Alto
Muy arriba
Superior
Cualidades de producto






Confiabilidad requerida del software
0.75
0.88
1.00
1.15
1.40

Tamaño de la base de datos del uso

0.94
1.00
1.08
1.16

Complejidad del producto
0.70
0.85
1.00
1.15
1.30
1.65
Cualidades del hardware






Apremios de funcionamiento Run-time


1.00
1.11
1.30
1.66
Apremios de la memoria


1.00
1.06
1.21
1.56
Volatilidad del ambiente virtual de la máquina

0.87
1.00
1.15
1.30

Tiempo de turnabout requerido

0.87
1.00
1.07
1.15

Cualidades del personal






Capacidad del analista
1.46
1.19
1.00
0.86
0.71

Experiencia de los usos
1.29
1.13
1.00
0.91
0.82

Capacidad de la Software Engineer
1.42
1.17
1.00
0.86
0.70

Experiencia virtual de la máquina
1.21
1.10
1.00
0.90


Experiencia del lenguaje de programación
1.14
1.07
1.00
0.95


Cualidades del proyecto






Uso de las herramientas del software
1.24
1.10
1.00
0.91
0.82

Uso de los métodos de la tecnología de dotación lógica
1.24
1.10
1.00
0.91
0.83

Horario requerido del desarrollo
1.23
1.08
1.00
1.04
1.10


La fórmula intermedio de Cocomo ahora toma la forma:

E=ai(KLoC)(bi).EAF

Donde está el esfuerzo E aplicado en persona-meses, KLoC es el número estimado de millares de líneas entregadas de código para el proyecto, y EAFes el factor calculado arriba. El coeficiente ai y el exponente bi se dan en la tabla siguiente.

Proyecto del software
ai
bi
Orgánico
3.2
1.05
Semi-separado
3.0
1.12
Encajado
2.8
1.20

El tiempo de desarrollo D aplicaciones del cálculo E de la misma forma que en el COCOMO básico.

COCOMO detallado
COCOMO detallado - incorpora todas las características de la versión intermedia con un gravamen del impacto del conductor del coste en cada paso (análisis, diseño, etc.) del proceso de la tecnología de dotación lógica.



Bibliografía:











No hay comentarios:

Publicar un comentario