busqueda y resolucion de errores (1)

Download Busqueda y Resolucion de Errores (1)

If you can't read please download the document

Upload: luiis-ernesto

Post on 23-Dec-2015

225 views

Category:

Documents


2 download

DESCRIPTION

Busqueda de errores ing

TRANSCRIPT

Unidad I

tema 2

ciclo de vida, ciclo de desarrollo, enfoques y orientacioneshistoria del computadordefinicin y descripciones del tipo de mtodos y trminosventajas y desventajas

Otros cursos y tutoriales: comercio electrnico, WAP, WebmasterPgina principal del grupo GeNeuraTcnicas heursticas de resolucin de problemas: computacin evolutiva y redes neuronalesJ. J. Merelo1 Introduccin: problemas de bsqueda y tcnicas tradicionales

Si un problema est formulado de forma unvoca, y el espacio de todas las soluciones posibles es conocido, un mtodo de bsqueda trata de encontrar las soluciones o soluciones que satisfagan el enunciado del problema. Dicho as parece una tautologa, pero no todos los problemas son problemas de bsqueda, ni todos los espacios de bsqueda se pueden definir tambin de forma unvoca.

Pero si resulta que efectivamente, un problema se puede efectuar como problema de bsqueda, en muchos casos se puede reducir a un problema de hallar un mximo o mnimo, o sea, un ptimo. Slo va a funcionar esto en el caso de que se pueda calcular la bondad de una solucin: la solucin del problema ser aquella, o aquellas, que optimicen una funcin de bondad, ajuste, evaluacin o fitness; en muchos casos, por lo tanto, un problema de bsqueda se puede reducir a un problema de optimizacin (maximizacin o minimizacin). No siempre es as, pero cuando sucede hay que congratularse y celebrarlo adecuadamente. La mayor parte de los problemas con los que trataremos en este tutorial sern problemas de optimizacin.

1.1 Modelizacin de un problema

Generalmente, para resolver un problema del mundo real, no se trabaja directamente con el mundo real. Para resolver el problema del viajante no se compra uno una Kangoo y se la a hacerse kilmetros, sino que se hace un modelo del problema. En ese modelo, se extraen las caractersticas fundamentales del mismo (como por ejemplo, la conocida simetra esfrica del caballo), y se eliminan todas las que son accesorias, o que no tienen tanta importancia en el desarrollo del problema (o simplemente que nos estorban). Cuando hemos tratado de resolver el problema del viajante de comercio, hemos tenido en cuenta exclusivamente la distancia entre ciudades, sin considerar, por ejemplo, que para ir de una ciudad a otra puede ser obligatorio pasar por una tercera, el estado de las carreteras, los diferentes consumos de gasolina segn el trfico; ms o menos, viene a ser un problema de bruja con escoba viajante de comercio, que recorre los espacios entre ciudades usando pasillos areos de escoba.

En otros casos, sobre todo si se trata de problemas puramente computacionales, el modelo se acerca bastante ms al problema real. En un problema de colocacin de clases en un Instituto de enseanza media, por ejemplo, todos o casi todos los factores pueden ser tenidos en cuenta: distancia entre las clases, disponibilidad de los profesores, mximo nmero de horas por profesor, y el modelo se acercar bastante a la realidad.

En todo caso, slo se puede resolver un problema si se tiene un modelo del mismo; la solucin al problema real ser tanto ms adecuada cuanto ms cercano sea el modelo al problema real, pero, en todo caso, la solucin a un problema lo es slo en el sentido que es una solucin al modelo del problema.

En algunos casos, modelar el problema supone, de alguna forma, simplificarlo; incluso en casos en el que el problema est formulado computacionalmente de forma completa, hace falta hacer aproximaciones para hacer su resolucin ms simple usando un mtodo determinado. Una funcin no diferenciable (como la funcin escaln de Heavyside) puede ser aproximada, por ejemplo, por una funcin diferenciable con el objeto de aplicarle soluciones (como las que vamos o ver ms adelante) que necesiten esa precondicin.

Siempre hay que tener en cuenta, sin embargo, que modelos diferentes del problema darn soluciones diferentes del mismo. Pero siempre encontrar una solucin aproximada a un modelo exacto ser mejor que encontrar una solucin exacta a un modelo aproximado. O casi siempre.

1.4 Componentes bsicos de la solucin a un problema

Como ya se sabe que se va a trabajar con un modelo de la solucin del problema, no con la solucin en s, y generalmente con ese modelo se va a trabajar dentro del ordenador, hay que dar con la representacin del problema ms adecuada, es decir, la estructura de datos que mejor se adapte a ese modelo. Esto es tanto un problema de diseo como un problema de implementacin: se escoger la estructura de datos ms adecuada para el mtodo de solucin del problema, y la estructura de datos ms adecuada para el lenguaje y entorno sobre el que se est trabajando. Aunque inicialmente pueda parecer que el paso de modelo a representacin es directo, no siempre es as. La representacin representa, casi siempre, una simplificacin del modelo; por ejemplo, en el momento que se trabaje con nmeros de coma flotante en el ordenador para representar nmeros reales ya estamos limitando la posible precisin de la solucin; en la prctica, la precisin se adapta al problema, pero, en algunos casos, esta falta de precisin puede introducir artefactos en la posible solucin.

En la mayor parte de los casos, la solucin al TSP se representa como una permutacin de una serie de smbolos nicos, tantos como ciudades. Por ejemplo, si hay suertecilla y trabajamos con menos de veintitantas ciudades, se puede usar el alfabeto, y podemos usar una cadena de caracteres ASCII para representar la solucin (tambin se puede subir un punto en la escala de geekidad y usar una cadena de caracteres UNICODE, que necesitan un par de bytes cada uno y se pueden usar ms ciudades). Si hay ms, tendremos que usar algn otro tipo de estructura, como un vector o una lista de enteros. Se trata, mayormente, de una decisin de implementacin, pero, en algunos casos, usar una representacin inadecuada puede hacer ineficiente la resolucin de un problema.

Algunos mtodos de resolucin pueden exigir un tipo de representacin determinada, all ellos. En general, un buen mtodo de resolucin debera ser capaz de manejar cualquier tipo de representacin.

Sobre esta representacin del problema, se calcula la funcin de evaluacin; lo que se pretende habitualmente con la funcin de evaluacin es que su valor sea mximo (o mnimo) cuando se haya alcanzado el objetivo del problema, a veces es denomina, por eso, funcin objetivo, de adecuacin, o, tambin, usando el trmino en ingls, fitness. Y aunque la funcin de evaluacin viene dada por el objetivo del problema, en muchos casos la funcin se modifica para tener en cuenta restricciones, multimodalidad, o bien simplemente una serie de artefactos introducidos por el mtodo de resolucin del problema.

Puede suceder tambin que la funcin objetivo no est definida en todo el espacio de bsqueda del problema: en problemas con restricciones, combinaciones de valores de las variables del problema o bien valores de estas variables dan lugar a un valor invlido de la funcin de evaluacin. Estos casos se manejan de muchas formas diferentes: sustituyendo la funcin objetivo por otra funcin en la que estas regiones "no alcanzables" sean alcanzables, o asignando un valor numrico al incumplimiento de la restriccin. Depender del mtodo de resolucin del problema, y, en todo caso, cada tcnica tiene un grado de xito diferente.

A partir de esta funcin de objetivo, se define el problema de bsqueda de la forma siguiente:

Un problema de bsqueda (y, equivalentemente, un problema de optimizacin), consiste en, dado un espacio de bsqueda S junto con su parte alcanzable F S, encontrar un x F, tal que eval(x) eval(y) para todo y F.

Puesto as, parece fcil, no? Se parte de una solucin o soluciones iniciales, y se van cambiando esas soluciones o generando otras nuevas hasta que se encuentre la solucin deseada. La cosa no es tan fcil, pero, en todo caso, cabe llamar la atencin sobre el hecho de que todos los mtodos de resolucin de problemas necesitan una factora de soluciones (una forma de generar soluciones nuevas) y un taller de soluciones, que genere soluciones nuevas a partir de las existentes. Las primeras se suelen llamar generadores de soluciones, y las segundas, operadores de variacin. No todos los mtodos usan las segundas, en todo caso. Pero si se usan, es conveniente tener presente una definicin de la vecindad de cada punto del espacio de bsqueda; los operadores de variacin convierten un punto del espacio de bsqueda en otro de forma aleatoria o siguiendo algn criterio (por ejemplo, tomando slo los puntos que sean mejores objetivamente que los anteriores). Este concepto de vecindad es necesario para que los operadores acten de forma ms o menos local, usando en cierto modo la informacin ya existente en la solucin para generar otra nueva; si un operador convierte una solucin en otra lejos de la primera, equivale, en la prctica, a generar una solucin aleatoria.

Las factoras y talleres representan dos formas diferentes de moverse por el espacio de bsqueda: una factora explora, puesto que genera puntos en zonas del espacio que previamente no tienen porqu haber sido visitadas; los talleres tambin exploran, porque generan soluciones nuevas, pero al hacerlo en la cercana de soluciones ya existentes, explotan estas soluciones, sacndoles todo el partido posible, para obtener una solucin mejor. La mayor parte de los algoritmos de bsqueda tratan de establecer un equilibrio entre explotacin y exploracin, aunque muchos de ellos se inclinan hacia una mayor exploracin (aleatoriedad) o explotacin (determinismo).

1.5 Tcnicas clsicas de resolucin de problemas

No es que sea el espacio ms apropiado para describir un mogolln de tcnicas un subapartado de un captulo; cada una de estas tcnicas tienen una larga historia, y han servido durante mucho tiempo para resolver muchos problemas de optimizacin. Desgraciadamente, este no es el tema de este tutorial, as que le dedicaremos un poco a cada una de ellas. En general, todos los mtodos de bsqueda se dividen, a grandes rasgos, en mtodos globales y locales. Los mtodos globales tratan de encontrar el mximo global de un problema, mientras que los locales se concentran en la vecindad de la solucin generada inicialmente, y, por tanto, necesitan alguna tcnica adicional, como comienzos mltiples, para acercarse al mximo global. En general, los mtodos locales no tienen ninguna garanta de que el mximo encontrado sea global, ni una medida del error en que se incurre dando como bueno el mximo encontrado; los globales s suelen tener una de las dos cosas, o las dos (o ninguna, pero los venden as). Algunos mtodos hbridos combinan algoritmos de los dos tipos; los mtodos exhaustivos, sin embargo, no degan que se les escape la solucin fcilmente.

Los mtodos se dividen tambin en aquellos que trabajan, a cada paso, sobre soluciones completas, y aquellos que no tienen una solucin completa hasta que han terminado. En el primer caso, normalmente se procede de forma iterativa a mejorar una solucin; mientras que en el segundo, se puede ir acotando la solucin, o bien asignndole valores a cada una de las variables de la solucin hasta que se asigna la solucin final.

1.5.1 Bsqueda exhaustivaBuscaminas, un ejemplo de problema que se puede resolver por bsqueda exhaustiva

En algunos problemas donde el espacio de bsqueda es suficientemente pequeo y enumerable, se pueden usar mtodos de bsqueda exhaustiva o enumerativas: se examinan una por una todas las soluciones posibles, y se da por buena aquella que tenga el mximo valor de la funcion objetivo.

En el caso del juego del mastermind, se enumeran una por una todas las combinaciones posibles de colores para una longitud determinada, y se van tachando todas ellas que no cumplan las condiciones puestas por el "orculo"; en cada caso, se juega aleatoriamente una de las soluciones que sea factible, y se tachan las no factibles, con la ventaja de que no tienen porqu volver a aparecer en la bsqueda, y se acota cada vez ms el espacio.

El problema con la bsqueda exhaustiva no slo es que no siempre sea factible, sino que su mal comportamiento con respecto al aumento de tamao del espacio de bsqueda, y el hecho de que necesite una cantidad de memoria de ordenador proporcional al tamao del problema, hace que no se pueda aplicar en la mayor parte de los casos. Sin embargo, en algunos casos puede ser til; por ejemplo, en la fase final de la resolucin del problema cuando el subespacio de bsqueda est suficientemente acotado.

En todo caso, son problemas simples con relativamente pocos prerrequisitos: slo que el tamao del espacio de bsqueda quepa en la memoria del ordenaodr; otros algoritmos, adems, tales como el branch&bound o el A*, que elaboran una solucin completa a partir de una solucin parcial, necesitan tambin una bsqueda exhaustiva. Y, con un poco de suerte, podemos usar tcnicas tales como el backtracking para descartar partes del espacio de bsqueda que se van a recorrer.

1.5.2 Bsqueda local

Los algoritmos de bsqueda local parten de una solucin inicial, y, aplicndole operadores de variacin, la van alterando; si la solucin alterada es mejor que la original, se acepta, si no lo es, se vuelve a la inicial. El procedimiento se repite hasta que no se consigue mejora en la solucin.

Los procedimientos de bsqueda local ms usados son los basados en el gradiente: en este caso, el operador de variacin selecciona una nueva solucin teniendo en cuenta la derivada de la funcin que se quiere optimizar en el punto, tratando de ascender o descender usando el gradiente hasta llegar a un punto de inflexin donde no se puede obtener ninguna mejora adicional.

Hillclimbing

Estos procedimientos se suelen llamar de hillclimbing, o de escalado de colinas; el mayor truco en ellos consiste en escoger correctamente el tamao de paso para ascender y el punto de inicio. Pero se trata de algoritmos de bsqueda locales, y, como tales, slo van a encontrar el mximo local ms cercano al punto de inicio. Esto se puede resolver usando una estrategia de multicomienzo, pero, en todo caso, no te garantizan que se encuentre, o incluso de acerque uno, al mximo global. En todo caso, tiene la ventaja de que, en cada iteracin del algoritmo, se tiene una solucin vlida, aunque no tiene porqu ser la mejor.

En el caso del TSP, un procedimiento de bsqueca local se denomina 2-opt. Consiste en escoger una permutacin inicial aleatoria, e ir probando con todas las posibles soluciones en la vecindad de esta, entendiendo como vecindad el conjunto de todos los recorridos que pueden ser alcanzados intercambiando dos caminos no adyacentes en el recorrido original. Un recorrido reemplaza al original si es mejor; una vez que no se puede mejorar un recorrido, se considera ptimo y se da como solucin.El mejor algoritmo de bsqueda local conocido para el recorrido del viajante es el llamado Lin-Kernighan. Es una variacin del anterior, permitiendo el nmero de caminos a intercambiar en cada iteracin variar; adems, en vez de tomar cualquier mejora, prueba varias y se queda con la mejora de ms valor.

1.5.3 Mtodos que usan soluciones parciales

Estos mtodos van construyendo soluciones variable a variable, no obteniendo una solucin completa al problema hasta que todas las variables han sido asignadas. Uno de los mtodos ms conocidos son los algoritmos voraces o greedy, que funcionan de la forma siguiente: para cada variable, se asigna aqul valor que maximice alguna funcin de utilidad.

En el caso del TSP, un algoritmo voraz comenzara con una ciudad elegida aleatoriamente, y elegira la ciudad ms cercana a sta. Para esta segunda ciudad, elegira la ms cercana, y as sucesivamente. En este caso, el problema estara simplemente parametrizado con la ciudad inicial elegida.

Los algoritmos voraces sustituyen un criterio de optimalidad global por un criterio en cada paso; no siempre los dos se corresponden, y por tanto, no tienen porqu hallar el mximo global del problema.

Otros mtodos consisten en dividir el problema general en problemas ms simples, y hallar la solucin a estos problemas ms simples; el mtodo se denomina divide y vencers; en algunos casos, la solucin a un problema de orden n puede venir resolver a otro problema de orden n-1, tal como sucede, por ejemplo en el conocido problema de las torres de Hanoi.ejemplo branch and bound

Algunos mtodos consisten en ir descartando partes del espacio de bsqueda, con el objeto de acotar cada vez ms la solucin al problema. El branch and bound. Este mtodo imagina el espacio de bsqueda como un rbol de decisin; en cada paso del algoritmo, se toma la decisin de podar las ramas del rbol que parezcan menos prometedoras.

Este mtodo procede de la forma siguiente: se establece una cota inferior a la posible solucin (o superior, si se trata de minimizar). Se va siguiendo una rama del rbol, hasta que se encuentra que la solucin parcial es menor que esa cuota; en ese caso, se descarta la rama completa.

En el caso del recorrido del viajante, supongamos que hemos establecido que la cota superior es 200 kms. Se establece un rbol de la forma siguiente: tomando una ruta entre dos ciudades, pongamos AB, se establecen dos ramas para una posible solucin con y sin esa ruta; a partir de ah, se hace lo mismo con el resto de las rutas. Se van recorriendo las ramas, y si se encuentra que la suma parcial de las rutas supera los 200 kms, se elimina esa rama y ya no se sigue recorriendo.

Si se ha organizado el espacio de bsqueda en forma de rbol, puede resultar importante la ordenacin de las ramas, porque si se consigue colocar las ramas "mejores" antes, el algoritmo ser capaz de encontrar la solucin con ms rapidez. Algoritmos como el A* toman este tipo de enfoque. En este algoritmo, se usa un mtodo mejor-primero para recorrer las ramas, y un mtodo heurstico para estimar el coste de las ramas que quedan por recorrer. La principal diferencia con el mtodo anterior es que se usan heursticas para estimar valores de las ramas restantes, en vez de valores exactos.

Estos mtodos se pueden extender tambin a problemas de optimizacin numrica, en cuyo caso daran cotas entre las cuales se moveran las soluciones. Pero si el espacio de bsqueda no se puede enumerar bien, o si existe un nmero de variables excesivo, este tipo de algoritmos no suelen funcionar bien.

1.5.4 Mtodos de bsqueda global

Los mtodos de bsqueda global tratan de escaparse de los mximos locales, explorando com ms eficiencia el espacio de bsqueda. Generalmente, aaden algn componente aleatorio a la bsqueda, de forma que, si se encuentra un mnimo local, se salte a otro punto del espacio de bsqueda, donde pueda haber otro mximo, posiblemente global.

Uno de los ms conocidos es el recocimiento simulado, o simulated annealing. A grandes rasgos, consiste en un procedimiento de ascenso de gradiente, pero tal que no siempre se escoge la mejor solucin; dependiendo de una temperatura, la probabilidad de escoger una solucin peor que la actual va descenciendo con el tiempo, hasta que al final del algoritmo, cuando la temperatura es 0, se escoge de forma determinista siempre la mejor solucin. Puesto en forma de algoritmo:

Inicial el procedimiento en un punto del espacio de bsqueda Mientras no se cumpla la condicin de terminacin, mejorar la solucin actual, dependiendo de la temperatura. Actualizar la temperatura Volver al paso segundo

La probabilidad de aceptar una nueva solucin xt+1 en vez de la antigua xt se suele expresar con la frmula p(x,y,T)=1/(1+eeval(xt+1) - eval(xt)/T).

Al mtodo que se sigue para actualizar la temperatura se le suele denominar procedimiento de enfriado o cooling schedule. Dependiendo de la temperatura, puede ser que se escojan soluciones peores, pero la probabilidad de que suceda desciende con el tiempo y con la diferencia entre la evaluacin de las dos soluciones. El truco, claro est, consiste en elegir una buena temperatura inicial y un procedimiento de enfriado correcto.El trmino annealing procede de la metalurgia, y en concreto de la fabricacin de espadas. En esta pgina se describe el procedimiento de fabricacin de espadas antiguas, y cmo se usaba el recocimiento para conseguir espadas flexibles que no se rompieran. En concreto, lo que consigue este procedimiento es un cristal con pocas irregularidades, y con un bajo nivel de energa atrapada.

El recocimiento simulado es un mtodo de optimizacin bastante popular, simple de implementar, y que funciona bien para muchos problemas. Ha sido aplicado, por ejemplo, para la optimizacin de la disposicin de una pgina web o para resolver el juego del Mastermind. Si embargo, es una mala eleccin de punto inicial o del esquema de enfriamiento puede dar al traste con su exploracin del espacio global.

6.1 Computacin paralela distribuida

Generalmente, los multicomputadores o multiprocesadores se suelen clasificar segn la multiplicidad de instrucciones y datos que tengan: pueden tener una o mltiples instrucciones, o uno y mltiples datos. Sin embargo, lo ms habitual hoy en da es trabajar en un entorno de ordenadores heterogneos, unido por redes con diferente mbito, y con sistemas operativos y modos de representacin de las instrucciones y datos muy diferente. Por eso, desde el punto de vista del usuario, hay diferentes formas de considerar este multicomputador heterogneo: como un slo ordenador virtual, que ejecuta los programas de forma transparente sin que uno se entere muy bien dnde estn fsicamente, que es el enfoque que, inicialmente, se propuso la librera PVM . Otro enfoque es considerar los diferentes sistemas como una serie de procesos unidos por intercambio de mensajes, como hace la librera MPI, y algunos lenguajes como el Java a travs de su interfaz RMI (Remote Method Invocation). En este trabajo, se pareliza una librera de algoritmos evolutivos usando MPI. Otra librera, basada en la misma EO y llamada ParadisEO, tambin usa MPI para distribucin de algoritmos evolutivos.

Este ltimo mtodo es el ms popular, por lo que la mayor parte de los algoritmos, especialmente basados en poblaciones, actuales, consisten en enviar o recibir diferentes mensajes que incluyan o no miembros de la poblacin y/o estadsticas, tratando de hacer el mnimo cambio posible a los algoritmos tradicionales.

ltimamente estn surgiendo una serie de ideas en computacin distribuida, que se escapan a los paradigmas tradicionales. La mayor parte de ellas intentan trabajar con un entorno heterogneo, cambiante, y en el cual la CPU es un recurso relativamente abundante. Una idea interesante es la denominada computacin en rejilla, o grid computing. La computacin en rejilla trata de aprovecharse de los recursos computacionales (CPU, almacenamiento, transmisin) de cantidades ingentes de ordenadores, proveyendo un interfaz que sea independiente de la realidad fsica de la red y de los ordenadores, de forma que el usuario slo tenga que preocuparse por ejecutar su problema a travs de, por ejemplo, una pgina web. La infraestructura de la rejilla se encarga de distribuir su problema, los mtodos y los datos, por la rejilla, de forma que se aprovechen al mximo los recursos. Hay muchos productos comerciales de computacin rejilla, as como algn esfuerzo de fuentes abiertas, tal como OpenGRID.

Tambin es interesante tener en cuenta una tecnologa que se usa habitualmente para pirateo de todo tipo de contenido: las redes entre iguales, o P2P, redes sin una topologa fija y sin un nmero de elementos fijos, ni un servidor central, que permiten distribuir datos y servicios. Este tipo de tecnologas estn empezando a ser usadas para clculo paralelo, usando, por ejemplo, los denominados algoritmos epidmicos. Este enfoque es el que se toma en el proyecto DREAM (Distributed resource evolutionary algorithm machine), un software para programar algoritmos evolutivos usando una infraestructura P2P.

Por ltimo, los servicios web, que ofrecen un interfaz con una sintaxis y semntica conocida para usar los servicios existentes en un ordenador, se pueden usar tambin para computacin distribuida; pueden ser una implementacin posible para un sistema en rejilla, o para una red P2P, o simplemente un interfaz para acceder a cualquier tipo de servicio. Los servicios web estn basados en el metalenguaje XML. Por ejemplo, en en este artculo, se paraleliza un algoritmo gentico usando un protocolo llamado SOAP (Simple Object Access Protocol), que permite intercambiar mensajes codificados en XML entre diferentes procesos. En esta pgina se ofrece un servicio web para la ejecucin de algoritmos evolutivos que usa tambin SOAP.

En resumen, el panorama actual de la computacin evolutiva presenta muchos tipos de entornos diferentes en los cuales implementar algoritmos de bsqueda, y especialmente algoritmos evolutivos.

Para evaluar un algoritmo paralelo habitualmente se tienen en cuenta sus propiedades de escalado, es decir, cmo se comporta segn se van aadiendo nuevos procesadores al grupo; habitualmente el procesador ms lento suele ser el primero que interviene. Un escalado lineal se dara si la aceleracin SP, definido como el tiempo que tarda el algoritmo en ejecutarse en P procesadores o speedup del proceso es directamente proporcional al nmero de procesadores aadidos; sin embargo, lo ms normal es que llegue un momento en el que aadir nuevos procesadores no mejora en absoluto las prestaciones. La eficiencia EP se define como SP/P, y est relacionada con el aprovechamiento que se hace del aadido de nuevas mquinas . En algunos (contados) casos puede suceder que se d un escalado superlineal, es decir, que la aceleracin crezca ms rapidamente que el nmero de procesadores aadidos, o la eficiencia es mayor que 1; suele suceder cuando la divisin en diferentes procesadores interacciona positivamente con el algoritmo, ofreciendo una mejora superior a la que se dara si se ejecutara en una sola mquina.

7 Optimizacin multiobjetivo

La optimizacin multiobjetivo (u optimizacin multicriterio, multiprestaciones o optimizacin vectorial) (de la que hay un excelente tutorial de Carlos Coello se define como el problema de encontrar un vector de variables de decisin que satisfacen unas restricciones y optimizan una funcin vectorial cuyos elementos representan a la funcin objetivo. Estas funciones forman una descripcin matemtica de criterios de evaluacin que generalmente estn en conflicto unos con otros. Por tanto, el trmino "optimizar" implica encontrar una solucin que dara los valores de todas las funciones objetivo aceptables para el diseador.

Es raro que exista un solo punto que satisfaga todas las funciones objetivo; normalmente se busca un equilibrio al tratar con problemas de optimizacin multiobjetivo; por lo tanto, el concepto de ptimo es diferente. El concepto ms normal de ptimo fue propuesto originalmente por Edgeworth, y ms adelante por Pareto, y se suele denominar ptimo Pareto u ptimo tipo Pareto; un vector es ptimo pareto si no existe ninguno cuyos valores sean mejores para cada uno de los componentes (estrictamente, si son menores o iguales para todos, y al menos menor estricto para uno de ellos). Lo ms habitual es que no exista un solo ptimo Pareto, sino un conjunto de ellos; a este conjunto de solucione se le suele denominar conjunto no dominado, y a su grfico se le suele llamar frente Pareto.

Histricamente, ha habido muchas formas de resolver problemas de optimizacin multiobjetivo usando algoritmos genticos. El ms inocente es la utilizacin de funciones agregativas, es decir, una combinacin lineal de las diferentes funciones que se tienen que optimizar, asignndole a cada una un peso. Se crea as una funcin de evaluacin que se puede usar directamente en cualquier mtodo de seleccin de los algoritmos evolutivos. Sin embargo, no siempre funciona bien, es difcil establecer los pesos, y es incapaz de generar todos los miembros de un frente de Pareto si da la casualidad de que es cncavo.

8.1 Aprendizaje no supervisado

Los algoritmos de clasificacin no supervisados son aquellos que no requieren un etiquetado de cada uno de los vectores de entrada; se suelen llamar tambin algoritmos auto-asociativos, porque asocian entradas a ellas mismas. Una buena explicacin de estos algoritmos se halla en la FAQ de redes neuronales.

El tipo ms comn de algoritmos de aprendizaje o clasificacin no supervisada son los algoritmos de anlisis de grupos o clustering; estos algoritmos tratan de dividir las muestras del conjunto de entrada en una serie de grupos con caractersticas comunes. Un algoritmo debe descubrir cules son estos clusters, pero tambin cules son las caractersticas que define ese cluster y cuntos clusters hay; pero ste ltimo es un problema que no tiene solucin fcil. Tambin se denominan algoritmos de cuantizacin vectorial o VQ (vector quantization), pues se pueden usar para sustituir un elemento perteneciente a un grupo por un representante de ese grupo, habitualmente llamado vector cdigo o centro del grupo. La cuantizacin vectorial pretende reducir la cantidad de bits a transmitir en una lnea de comunicaciones, al sustituir un vector por un cdigo que indica qu representante se est transmitiendo; la tcnica, adems, suprime el ruido.

CICLO DE VIDA DEL SOFTWARE

Informtica

El Ciclo de Vida del SoftwareModelo Concurrente. Modelo Espiral. Prototipado de Requerimientos. Desarrollo Evolutivo. Desarrollo Incremental. Modelo Cascada

Ciclo de Vida del Software

Un modelo de ciclo de vida define el estado de las fases a travs de las cuales se mueve un proyecto de desarrollo de software.

El primer ciclo de vida del software, "Cascada", fue definido por Winston Royce a fines del 70. Desde entonces muchos equipos de desarrollo han seguido este modelo. Sin embargo, ya desde 10 a 15 aos atrs, el modelo cascada ha sido sujeto a numerosas crticas, debido a que es restrictivo y rgido, lo cual dificulta el desarrollo de proyectos de software moderno. En su lugar, muchos modelos nuevos de ciclo de vida han sido propuestos, incluyendo modelos que pretenden desarrollar software ms rpidamente, o ms incrementalmente o de una forma ms evolutiva, o precediendo el desarrollo a escala total con algn conjunto de prototipos rpidos.

Definicin de un Modelo de Ciclo de Vida

Un modelo de ciclo de vida de software es una vista de las actividades que ocurren durante el desarrollo de software, intenta determinar el orden de las etapas involucradas y los criterios de transicin asociadas entre estas etapas.

Un modelo de ciclo de vida del software:

Describe las fases principales de desarrollo de software.

Define las fases primarias esperadas de ser ejecutadas durante esas fases.

Ayuda a administrar el progreso del desarrollo, y

Provee un espacio de trabajo para la definicin de un detallado proceso de desarrollo de software.

As, los modelos por una parte suministran una gua para los ingenieros de software con el fin de ordenar las diversas actividades tcnicas en el proyecto, por otra parte suministran un marco para la administracin del desarrollo y el mantenimiento, en el sentido en que permiten estimar recursos, definir puntos de control intermedios, monitorear el avance, etc.

Alternativas de Modelos de Ciclo de Vida

Modelo Cascada

Este es el ms bsico de todos los modelos, y sirve como bloque de construccin para los dems modelos de ciclo de vida. La visin del modelo cascada del desarrollo de software es muy simple; dice que el desarrollo de software puede ser a travs de una secuencia simple de fases. Cada fase tiene un conjunto de metas bien definidas, y las actividades dentro de una fase contribuye a la satisfaccin de metas de esa fase o quizs a una subsecuencia de metas de la fase. Las flechas muestran el flujo de informacin entre las fases. La flecha de avance muestra el flujo normal. Las flechas hacia atrs representan la retroalimentacin.

El modelo de ciclo de vida cascada, captura algunos principios bsicos:

Planear un proyecto antes de embarcarse en l.

Definir el comportamiento externo deseado del sistema antes de disear su arquitectura interna.

Documentar los resultados de cada actividad.

Disear un sistema antes de codificarlo.

Testear un sistema despus de construirlo.

Una de las contribuciones ms importantes del modelo cascada es para los administradores, posibilitndoles avanzar en el desarrollo, aunque en una escala muy bruta.

Modelo De Desarrollo Incremental

Los riesgos asociados con el desarrollo de sistemas largos y complejos son enormes. Una forma de reducir los riesgos es construir slo una parte del sistema, reservando otros aspectos para niveles posteriores. El desarrollo incremental es el proceso de construccin siempre incrementando subconjuntos de requerimientos del sistema. Tpicamente, un documento de requerimientos es escrito al capturar todos los requerimientos para el sistema completo.

Note que el desarrollo incremental es 100% compatible con el modelo cascada. El desarrollo incremental no demanda una forma especfica de observar el desarrollo de algn otro incremento. As, el modelo cascada puede ser usado para administrar cada esfuerzo de desarrollo, como se muestra en la figura.

El modelo de desarrollo incremental provee algunos beneficios significativos para los proyectos:

Construir un sistema pequeo es siempre menos riesgoso que construir un sistema grande.

Al ir desarrollando parte de las funcionalidades, es ms fcil determinar si los requerimientos planeados para los niveles subsiguientes son correctos.

Si un error importante es realizado, slo la ltima iteracin necesita ser descartada.

Reduciendo el tiempo de desarrollo de un sistema (en este caso en incremento del sistema) decrecen las probabilidades que esos requerimientos de usuarios puedan cambiar durante el desarrollo.

Si un error importante es realizado, el incremento previo puede ser usado.

Los errores de desarrollo realizados en un incremento, pueden ser arreglados antes del comienzo del prximo incremento.

Modelo De Desarrollo Evolutivo

Como el modelo de desarrollo incremental, el modelo de desarrollo evolutivo (algunas veces denominado como prototipado evolutivo) construye una serie de grandes versiones sucesivas de un producto. Sin embargo, mientras que la aproximacin incremental presupone que el conjunto completo de requerimientos es conocido al comenzar, el modelo evolutivo asume que los requerimientos no son completamente conocidos al inicio del proyecto.

En el modelo evolutivo, los requerimientos son cuidadosamente examinados, y slo esos que son bien comprendidos son seleccionados para el primer incremento. Los desarrolladores construyen una implementacin parcial del sistema que recibe slo estos requerimientos.

El sistema es entonces desarrollado, los usuarios lo usan, y proveen retroalimentacin a los desarrolladores. Basada en esta retroalimentacin, la especificacin de requerimientos es actualizada, y una segunda versin del producto es desarrollada y desplegada. El proceso se repite indefinidamente.

Note que el desarrollo evolutivo es 100% compatible con el modelo cascada. El desarrollo evolutivo no demanda una forma especfica de observar el desarrollo de algn incremento. As, el modelo cascada puede ser usado para administrar cada esfuerzo de desarrollo. Obviamente, el desarrollo incremental y evolutivo puede ser combinado tambin.

Todo lo que uno tiene que hacer es construir un subconjunto de requerimientos conocidos (incremental), y comprender al principio que muchos nuevos requerimientos es probable que aparezcan cuando el sistema sea desplegado o desarrollado.

El desarrollo de software en forma evolutiva requiere un especial cuidado en la manipulacin de documentos, programas, datos de test, etc. desarrollados para distintas versiones del software. Cada paso debe ser registrado, la documentacin debe ser recuperada con facilidad, los cambios deben ser efectuados de una manera controlada.

Modelo de Prototipado de Requerimientos.-

El prototipado de requerimientos es la creacin de una implementacin parcial de un sistema, para el propsito explcito de aprender sobre los requerimientos del sistema. Un prototipo es construido de una manera rpida tal como sea posible. Esto es dado a los usuarios, clientes o representantes de ellos, posibilitando que ellos experimenten con el prototipo. Estos individuos luego proveen la retroalimentacin sobre lo que a ellos les gust y no les gust acerca del prototipo proporcionado, quienes capturan en la documentacin actual de la especificacin de requerimientos la informacin entregada por los usuarios para el desarrollo del sistema real. El prototipado puede ser usado como parte de la fase de requerimientos (determinar requerimientos) o justo antes de la fase de requerimientos (como predecesor de requerimientos). En otro caso, el prototipado puede servir su papel inmediatamente antes de algn o todo el desarrollo incremental en modelos incremental o evolutivo.

El Prototipado ha sido usado frecuentemente en los 90, porque la especificacin de requerimientos para sistemas complejos tienden a ser relativamente dificultoso de cursar. Muchos usuarios y clientes encuentran que es mucho ms fcil proveer retroalimentacin convenientemente basado en la manipulacin, desde un prototipo, en vez de leer una especificacin de requerimientos potencialmente ambigua y extensa.

Diferente del modelo evolutivo donde los requerimientos mejor entendidos estn incorporados, un prototipo generalmente se construye con los requerimientos entendidos ms pobremente.

En caso que ustedes construyan requerimientos bien entendidos, el cliente podra responder con "s, as es", y nada podra ser aprendido de la experiencia.

Modelo Espiral

El modelo espiral de los procesos software es un modelo del ciclo de meta-vida. En este modelo, el esfuerzo de desarrollo es iterativo. Tan pronto como uno completa un esfuerzo de desarrollo, otro comienza. Adems, en cada desarrollo ejecutado, puedes seguir estos cuatros pasos:

Determinar qu quieres lograr.

Determinar las rutas alternativas que puedes tomar para lograr estas metas. Por cada una, analizar los riesgos y resultados finales, y seleccionar la mejor.

Seguir la alternativa seleccionada en el paso 2.

Establecer qu tienes terminado.

La dimensin radial en la figura refleja costos acumulativos incurridos en el proyecto.

Observemos un escenario particular. Digamos que en este proyecto, nosotros viajaremos a resolver un conjunto particular de problemas del cliente. Durante el primer viaje alrededor de la espiral, analizamos la situacin y determinamos que los mayores riesgos son la interfaz del usuario. Despus de un cuidadoso anlisis de las formas alternativas de direccionar esto (por ejemplo, construir un sistema y esperar lo mejor, escribir una especificacin de requerimientos y esperar que el cliente lo entienda, y construir un prototipo), determinamos que el mejor curso de accin es construir un prototipo.

Lo realizamos. Luego proveemos el prototipo al cliente quien nos provee con retroalimentacin til. Ahora, comenzamos el segundo viaje alrededor de la espiral. Este tiempo decidimos que el mayor riesgo es ese miedo a que muchos nuevos requerimientos comiencen a aparecer slo despus de que el sistema sea desplegado. Analicemos las rutas alternativas, y decidimos que la mejor aproximacin es construir un incremento del sistema que satisfaga slo los requerimientos mejor entendidos. Hagmoslo ya. Despus del despliegue, el cliente nos provee de retroalimentacin que dir si estamos correctos con esos requerimientos, pero 50 nuevos requerimientos ahora se originarn en las cabezas de los clientes. Y el tercer viaje alrededor de la espiral comienza.

El modelo espiral captura algunos principios bsicos:

Decidir qu problema se quiere resolver antes de viajar a resolverlo.

Examinar tus mltiples alternativas de accin y elegir una de las ms convenientes.

Evaluar qu tienes hecho y qu tienes que haber aprendido despus de hacer algo.

No ser tan ingenuo para pensar que el sistema que ests construyendo ser "EL" sistema que el cliente necesita, y

Conocer (comprender) los niveles de riesgo, que tendrs que tolerar.

El modelo espiral no es una alternativa del modelo cascada, ellos son completamente compatible.

Modelo Concurrente

Como el modelo espiral, el modelo concurrente provee una meta-descripcin del proceso software. Mientras que la contribucin primaria del modelo espiral es en realidad que esas actividades del software ocurran repetidamente, la contribucin del modelo concurrente es su capacidad de describir las mltiples actividades del software ocurriendo simultneamente.

Esto no sorprende a nadie que ha estado involucrado con las diversas actividades que ocurren en algn tiempo del proceso de desarrollo de software. Discutamos un poco tales casos:

Los requerimientos son usualmente "lneas de base", cuando una mayora de los requerimientos comienzan a ser bien entendidos, en este tiempo se dedica un esfuerzo considerable al diseo. Sin embargo, una vez que comienza el diseo, cambios a los requerimientos son comunes y frecuentes (despus de todo, los problemas reales cambian, y nuestro entendimiento de los problemas desarrollados tambin). Es desaconsejado detener el diseo en este camino cuando los requerimientos cambian; en su lugar, existe una necesidad de modificar y rehacer lneas de base de los requerimientos mientras progresa el diseo. Por supuesto, dependiendo del impacto de los cambios de los requerimientos el diseo puede no ser afectado, medianamente afectado o se requerir comenzar todo de nuevo.

Durante el diseo de arquitectura, es posible que algunos componentes comiencen a ser bien definidos antes que la arquitectura completa sea estabilizada. En tales casos, puede ser posible comenzar el diseo detallado en esos componentes estables. Similarmente, durante el diseo detallado, puede ser posible proceder con la codificacin y quizs regular testeando en forma unitaria o realizando testeo de integracin previo a llevar a cabo el diseo detallado de todos los componentes.

En algunos proyectos, mltiples etapas de un producto se han desarrollado concurrentemente. Por ejemplo, no es inusual estar haciendo mantencin de la etapa 1 de un producto, y al mismo tiempo estar haciendo mantencin sobre un componente 2, mientras que se est haciendo codificacin sobre un componente 3, mientras se realiza diseo sobre una etapa 4, y especificacin de requisitos sobre un componente 5.

En todos estos casos, diversas actividades estn ocurriendo simultneamente. Eligiendo seguir un proyecto usando tcnicas de modelacin concurrente, se posibilita el conocimiento del estado verdadero en el que se encuentra el proyecto.

CICLO DE DESARROLLO DEL SOFTWARE

Proceso para el desarrollo de software

Un proceso para el desarrollo de software, tambin 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. Algunos autores consideran un modelo de ciclo de vida un trmino ms general que un determinado proceso para el desarrollo de software. Por ejemplo, hay varios procesos de desarrollo de software especficos que se ajustan a un modelo de ciclo de vida de espiral.

Generalidades

La gran cantidad de organizaciones de desarrollo de software implementan metodologas para el proceso de desarrollo. Muchas de estas organizaciones pertenecen a la industria armamentstica, que en los Estados Unidos necesita un certificado basado en su modelo de procesos para poder obtener un contrato.

El estndar internacional que regula el mtodo de seleccin, implementacin y monitoreo del ciclo de vida del software es ISO 12207.

Durante dcadas se ha perseguido la meta de encontrar procesos reproducibles y predecibles que mejoren la productividad y la calidad. Algunas de estas soluciones intentan sistematizar o formalizar la aparentemente desorganizada tarea de desarrollar software. Otros aplican tcnicas de gestin de proyectos para la creacin del software. Sin una gestin del proyecto, los proyectos de software corren el riesgo de demorarse o consumir un presupuesto mayor que el planeado. Dada la cantidad de proyectos de software que no cumplen sus metas en trminos de funcionalidad, costes o tiempo de entrega, una gestin de proyectos efectiva es algo que a menudo falta.

Algunas organizaciones crean un grupo propio (Software Engineering Process Group, abreviado SEPG) encargado de mejorar los procesos para el desarrollo de software en la organizacin.Actividades del desarrollo de softwareActividades del proceso de desarrollo de software representados en el desarrollo en cascada. Hay algunos modelos ms para representar este proceso.Planificacin

La importante tarea a la hora de crear un producto de software es obtener los requisitos o el anlisis de los requisitos. Los clientes suelen tener una idea ms bien abstracta del resultado final, pero no sobre las funciones que debera cumplir el software.

Una vez que se hayan recopilado los requisitos del cliente, se debe realizar un anlisis del mbito del desarrollo. Este documento se conoce como especificacin funcional.Implementacin, pruebas y documentacin

La implementacin es parte del proceso en el que los ingenieros de software programan el cdigo para el proyecto.

Las pruebas de software son parte esencial del proceso de desarrollo del software. Esta parte del proceso tiene la funcin de detectar los errores de software lo antes posible.

La documentacin del diseo interno del software con el objetivo de facilitar su mejora y su mantenimiento se realiza a lo largo del proyecto. Esto puede incluir la documentacin de un API, tanto interior como exterior.Despliegue y mantenimiento

El despliegue comienza cuando el cdigo ha sido suficientemente probado, ha sido aprobado para su liberacin y ha sido distribuido en el entorno de produccin.

Entrenamiento y soporte para el software es de suma importancia y algo que muchos desarrolladores de software descuidan. Los usuarios, por naturaleza, se oponen al cambio porque conlleva una cierta inseguridad, es por ello que es fundamental instruir de forma adecuada a los futuros usuarios del software.

El mantenimiento o mejora del software de un software con problemas recientemente desplegado, puede requerir ms tiempo que el desarrollo inicial del software. Es posible que haya que incorporar cdigo que no se ajusta al diseo original con el objetivo de solucionar un problema o ampliar la funcionalidad para un cliente. Si los costes de mantenimiento son muy elevados puede que sea oportuno redisear el sistema para poder contener los costes de mantenimiento.Modelos de Desarrollo de Software

Los modelos de desarrollo de software son una representacin abstracta de una manera en particular. Realmente no representa cmo se debe desarrollar el software, sino de un enfoque comn. Puede ser modificado y adaptado de acuerdo a las necesidades del software en proceso de desarrollo. 1 Hay varios modelos para perfilar el proceso de desarrollo, cada uno de las cuales cuenta con pros y contras. El proyecto debera escoger el ms apropiado para sus necesidades. En ocasiones puede que una combinacin de varios modelos sea apropiado. Existen tres paradigmas de los modelos de desarrollo de software:

1. Paradigma Tradicional:

Es uno de los paradigmas ms antiguo, se invent durante la creacin del mtodo estructurado. Si se elige un proyecto, el mtodo varia en etapas.2 Como todo modelo, existen sus pros y contras al usar este paradigmas:

Cuadro de ventajas y desventajas del uso del Paradigma tradicional.

Si se aplica este paradigma, unos de los principales problemas , es que las etapas realizadas no son autnomas de las siguientes, creando una dependencia estructural y en el acaso de un error atrasara todo el proyecto. Se tiene que tener pautas bien definidas, y que no se incurra a modificacin porque implicara en que el software no cumpla con su ciclo de vida. Tener en cuenta que el cliente no se vea afectado por la impaciencia.3

2. Paradigma Orientado a Objetos: Estos modelos se basan en la Programacin orientada a objetos; por lo tanto, se refiere al concepto de clase, el anlisis de requisitos y el diseo. El modelo o paradigma orientado a objetos posee dos caractersticas principales, las cuales son:

Permite la re-utilizacin de software. Facilita el desarrollo de herramientas informticas de apoyo al desarrollo, el cual es simple al implementarla en una notacin orientado a objetos llamado UML.4

3. Paradigma de Desarrollo gil: Es un paradigma de las Metodologas De Desarrollo basado en procesos giles. Estos intentan evitar los tediosos caminos de las metodologas tradicionales enfocndose en las personas y los resultados. Usa un enfoque basado en el Valor para construir software, colaborando con el cliente e incorporando los cambios continuamente.5Modelo de cascadaArtculo principal: Desarrollo en cascada

El modelo de cascada define las siguientes etapas que deben cumplirse de forma sucesiva:

Especificacin de requisitos Diseo del software Construccin o Implementacin del software Integracin Pruebas (o validacin) Despliegue (o instalacin) Mantenimiento

Siguiendo el modelo de cascada de forma estricta, slo cuando se finaliza una fase, comienza la otra. En ocasiones se realiza una revisin antes de iniciar la siguiente fase, lo que permite la posibilidad de cambios (lo que puede incluir un proceso de control formal de cambio). Las revisiones tambin se utilizan para asegurar que la fase anterior ha sido totalmente finalizada; los criterios para completar una fase se conocen frecuentemente con el trmino ingls "gate" (puerta). Este modelo desaconseja revisitar y revisar fases que ya se han completado. Esta falta de flexibilidad en un modelo de cascada puro ha sido fuente de crtica de los defensores de modelos ms flexibles.Modelo de espiralArtculo principal: Desarrollo en espiral

La principal caractersticas del modelo en espiral es la gestin de riesgos de forma peridica en el ciclo de desarrollo. Este modelo fue creado en 1988 por Barry Boehm, combinando algunos aspectos clave de las metodologas del modelo de cascada y del desarrollo rpido de aplicaciones, pero dando nfasis en un rea que para muchos no jug el papel que requiere en otros modelos: un anlisis iterativo y concienzudo de los riesgos, especialmente en el caso de sistema complejos de gran escala.

La espiral se visualiza como un proceso que pasa a travs de algunas interaciones con el diagrama de los cuatro cuadrantes representativos de las siguientes actividades:

crear planes con el propsito de identificar los objetivos del software, seleccionados para implementar el programa y clarificar las restricciones en el desarrollo del software; Anlisis de riesgos: una evaluacin analtica de programas seleccionados, para evaluar como identificar y eliminar el riesgo; la implementacin del proyecto: implementacin del desarrollo del software y su pertinente verificacin;

Modelo de espiral con nfasis en los riesgos, haciendo hincapi en las condiciones de las opciones y limitaciones para facilitar la reutilizacin de software, la calidad del software puede ayudar como una meta propia en la integracin en el desarrollo del producto. Sin embargo, el modelo en espiral tiene algunas limitaciones, entre las que destacan:

El nfasis se sita en el anlisis de riesgo, y por lo tanto requiere de clientes que acepten este anlisis y acten en consecuencia. Para ello es necesaria confianza en los desarrolladores as como la predisposicin a gastar ms para solventar los temas, por lo cual este modelo se utiliza frecuentemente en desarrollo interno de software a gran escala. Si la implementacin del riesgo de anlisis afectar de forma esencial los beneficios del proyecto, no debera utilizarse este modelo. Los desarrolladores de software han de buscar de forma explcita riesgos y analizarlos de forma exhaustiva para que este modelo funcione.

La primera fase es la bsqueda de un plan para conseguir los objetivos con las limitaciones del proyecto para as buscar y eliminar todos los riesgos potenciales por medio de un cuidadoso anlisis, y si fuera necesario incluyendo la fabricacin de un prototipo. Si es imposible descartar algunos riesgos, el cliente ha de decidir si es conveniente terminar el proyecto o seguir adelante ignorando los riesgos. Por ltimo, se evalan los resultados y se inicia el diseo de la siguiente fase.Desarrollo iterativo e incrementalArtculo principal: Desarrollo iterativo e incremental

El desarrollo iterativo recomienda la construccin de secciones reducidas de software que irn ganando en tamao para facilitar as la deteccin de problemas de importancia antes de que sea demasiado tarde. Los procesos iterativos pueden ayudar a desvelar metas del diseo en el caso de clientes que no saben cmo definir lo que quieren.6Desarrollo gilArtculo principal: Desarrollo gil de software

El desarrollo gil de software utiliza un desarrollo iterativo como base para abogar por un punto de vista ms ligero y ms centrado en las personas que en el caso de las soluciones tradicionales. Los procesos giles utilizan retroalimentacin en lugar de planificacin, como principal mecanismo de control. La retroalimentacin se canaliza por medio de pruebas peridicas y frecuentes versiones del software.

Hay muchas variantes de los procesos giles:

En el caso de la programacin extrema (XP), las fases se realizan en pasos muy cortos (o "continuos") con respecto al anterior. El primer paso (intencionalmente incompleto) por los pasos puede ocurrir en un da o en una semana, en lugar de los meses o aos de cada paso completo en el modelo en cascada. En primer lugar, se crean pruebas automatizadas para proveer metas concretas al desarrollo. Despus se programa el cdigo, que ser completo cuando todas las pruebas se superan sin errores, y los desarrolladores ya no sabran como mejorar el conjunto de pruebas necesario. El diseo y la arquitectura emergen a partir de la refactorizacin del cdigo, y se da despus de programar. El diseo lo realizan los propios desarrolladores del cdigo. El sistema, incompleto, pero funcional se despliega para su demostracin a los usuarios (al menos uno de los cuales pertenece al equipo de desarrollo). Llegado este punto, los profesionales comienzan a escribir las pruebas para la siguiente parte del sistema de ms importancia.

Codificacin y correccin

El desarrollo de codificacin y correccin (en ingls "Code and fix") es, ms que una estrategia predeterminada, el resultado de una falta de experiencia o presin que se ejerce sobre los desarrolladores para cumplir con una fecha de entrega.7 Sin dedicar tiempo de forma explcita para el diseo, los programadores comienzan de forma inmediata a producir cdigo. Antes o despus comienza la fase de pruebas de software (a menudo de forma tarda) y los inevitables errores que se encuentran han de eliminarse antes de poder entregar el software.Orientado a la Reutilizacin

La reutilizacin de software es un proceso donde se recurre al uso de activos de software en las especificaciones de anlisis, diseos, implementacin y pruebas de una aplicacin o sistemas de software.8

La reutilizacin tiene ciertos Indicadores por ejemplo:

1. Entre el 40% y 60% de una aplicacin es reutilizable en otra.

2. Aproximadamente el 60% de una aplicacin administrativa es reutilizable.

3. Aproximademente el 75% de las funciones son comunes a ms de un programa.

4. Solo el 15% del cdigo encontrado en muchos sistemas es unico y novedoso a una aplicacin especifica.

El rango general de uso recurrente esta entre el 15% y 85%.9

La reutilizacin tiene Principios como la existencia de parecidos en distintos sistemas de un mismo dominio, donde el software puede representarse como una combinacin de mdulos y los sistemas nuevos se puede caracterizar por diferencias respecto a los antiguos sistemas.10Modelos de mejora de procesos

Capability Maturity Model Integration El Capability Maturity Model Integration (CMMI), en espaol Integracin de Modelos de Madurez de Capacidades es uno de los modelos lderes basados en mejores prcticas. Son evaluaciones independientes las que confirman el grado con el que una organizacin siguen sus propios procesos, que no evala la calidad de los procesos o del software que se produce. CMMI ha reemplazado a CMM y tiene un mbito global, no slo en procesos destinados al desarrollo del software.

ISO 9000 ISO 9000 describe estndares para un proceso organizado formalmente para resultar en un producto y los mtodos de gestin y monitoreo del progreso. Aunque este estndar se cre inicialmente para el sector de produccin, los estndares de ISO 9000 tambin se han aplicado al desarrollo del software. Al igual que CMMI, que una organizacin est certificada con el ISO 9000 no garantiza la calidad del resultado final, slo confirma que se ha seguido los procesos establecidos.

ISO 15504 ISO 15504, tambin conocido como Software Process Improvement Capability Determination (SPICE), en espaol Determinacin de la Capacidad de Mejora del Proceso de Software es un marco para la evaluacin de procesos de software. Este estndar tiene como objetivo un modelo claro para poder comparar procesos. SPICE se utiliza como en el caso de CMMI. Modela procesos para gestionar, controlar, guiar y monitorear el desarrollo del software. Este modelo se utiliza entonces para medir lo que una organizacin o proyecto hace durante el desarrollo del software. Esta informacin se analiza para identificar puntos dbiles y definir acciones para subsanarlos. Tambin identifica puntos fuertes que pueden adoptarse en el resto de la organizacin.

Mtodos formales

Los mtodos formales son soluciones matemticas para resolver problemas de software y hardware a nivel de requisitos, especificacin y diseo. Ejemplos de mtodos formales incluyen el Mtodo B, la red de Petri, la demostracin automtica de teoremas, RAISE y el VDM. Hay varias notaciones de especificaciones formales, tales como el lenguaje Z. Ms generalmente, se puede utilizar la teora de autmatas para aumentar y validar el comportamiento de la aplicacin diseando un sistema de autmata finito.

Las metodologas basadas en los autmatas finitos permiten especificacin de software ejecutable y evitar la creacin convencional de cdigo.

Los mtodos formales se suelen aplicar en software de aviacin, especialmente si es software de seguridad crtico. Los estndares de aseguramiento del software de seguridad, tales como DO178B demandan mtodos formales en el nivel ms alto de categorizacin (Nivel A).

La formalizacin del desarrollo de software est ganando en fuerza poco a poco, en otros mbitos, con la aplicacin del lenguaje de especificacin OCL2.0 (y especializaciones tales como Java Modeling Language) y particularmente con Model-driven Architecture, que permite la ejecucin de diseos, incluso especificaciones.

Otra tendencia que est surgiendo en el desarrollo de software es la redaccin de especificaciones en algn tipo de lgica (normalmente una variacin de FOL), para acto seguido ejecutar esa lgica como si se tratase de un programa. El lenguaje OWL, basado en lgica descriptiva, es un buen ejemplo. Tambin se est trabajando en enlazar un idioma natural de forma automtica con lgica, lgica que puede ejecutarse. Ejemplo en este campo es el Attempto Controlled English, una lgica de negocios de Internet, que no busca controlar el vocabulario o la sintaxis. Una caractersticas de los sistemas que apoyan el vnculo bidireccional ingls-lgica y ejecucin directa de la lgica es que pueden explicar sus resultados en ingls en un nivel de negocios o cientfico.

HISTORIA DEL COMPUTADOR