Вы находитесь на странице: 1из 21

Algoritmo: Es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante

pasos sucesivos que no generen dudas a quien deba realizar dicha actividad. (Wikipedia, Diccionario de la lengua espaola).
"Un algoritmo se define como un mtodo que se realiza paso a paso para solucionar un problema que termina en un nmero finito de pasos". Las caractersticas fundamentales que debe cumplir todo algoritmo son:

Debe ser preciso. e indicar el orden de realizacin de cada paso.

Debe ser definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez. Debe ser finito. Si se sigue un algoritmo, se debe terminar en algn momento ; o sea debe tener un nmero finito de pasos. La definicin de un algoritmo debe describir tres partes : Entrada, Proceso y Salida.

Programa: Un programa informtico: es un conjunto de instrucciones que una vez ejecutadas realizarn una o varias tareas en una computadora. Sin programas, estas mquinas no pueden funcionar. Al conjunto general de programas, se le denomina software, que ms genricamente se refiere al equipamiento lgico o soporte lgico de una computadora digital.
Programa : Es un conjunto de instrucciones escritas en un lenguaje de programacin que indican a la computadora la secuencia de pasos para resolver un problema

Definicin de Lenguajes Algortmicos. Los algoritmos pueden describirse utilizando diversos lenguajes. Cada uno de estos lenguajes permiten describir los pasos con mayor o menor detalle. La clasificacin de los lenguajes para algoritmos puede enunciarse de la siguiente manera :

Lenguaje Natural. Lenguaje de Diagrama de Flujo. Lenguaje Natural de Programacin. Lenguaje de Programacin de Algoritmos.

Lenguaje Natural. Es aqul que describe en espaol, para nuestro caso, los pasos a seguir utilizando un vocabulario cotidiano. Se le conoce como lenguaje jerga cuando se utilizan trminos especializados de una determinada ciencia, profesin o grupo. Lenguaje de Diagrama de Flujo. Es aqul que se vale de diversos smbolos para representar las ideas o acciones a desarrollar. Es til para organizar las acciones o pasos de un algoritmo pero requiere de etapas posteriores para implementarse en un sistema de cmputo. Lenguaje Natural de Programacin. Son aqullos que estn orientados a la solucin de problemas que se definen de una manera precisa. Generalmente son aplicados para la elaboracin de frmulas o mtodos cientficos.

El lenguaje natural tiene las siguientes caractersticas :


Evita la ambigedad (algo confuso que se puede interpretar de varias maneras). Son precisos y bien definidos. Utilizan trminos familiares al sentido comn. Elimina instrucciones innecesarias.

Lenguaje de Programacin de Algoritmos. Es aqul que se utiliza para introducir en la computadora un algoritmo especfico. Se les conoce tambin como Lenguaje de Programacin. Lenguaje de Programacin : Es un conjunto de palabras, smbolos y reglas sintcticas mediante los cuales puede indicarse a la computadora los pasos a seguir para resolver un problema. Los lenguajes de programacin pueden clasificarse por diversos criterios, siendo el ms comn su nivel de semejanza con el lenguaje natural, y su capacidad de manejo de niveles internos de la mquina. Los principales tipos de lenguajes utilizados son tres :

Lenguaje Mquina. Lenguaje de bajo Nivel (ensamblador). Lenguajes de Alto Nivel.

Lenguaje Mquina. Son aqullos que estn escritos en lenguajes directamente inteligibles por la mquina (computadora), ya que sus instrucciones son cadenas binarias (cadenas o series de caracteres de dgitos 0 y 1) que especifican una operacin y las posiciones (direccin) de memoria implicadas en la operacin se denominan instrucciones de mquina o cdigo mquina. El cdigo mquina es el conocido cdigo binario. Ventajas del Lenguaje Mquina Posibilidad de cargar (transferir un programa a la memoria) sin necesidad de traduccin posterior, lo que supone una velocidad de ejecucin superior a cualquier otro lenguaje de programacin. Desventajas del Lenguaje Mquina

Dificultad y lentitud en la codificacin. Poca fiabilidad. Gran dificultad para verificar y poner a punto los programas. Los programas solo son ejecutables en el mismo procesador (CPU).

En la actualidad, las desventajas superan a las ventajas, lo que hace prcticamente no recomendables a los lenguajes mquinas. Lenguajes de Bajo Nivel. Son ms fciles de utilizar que los lenguajes mquina, pero al igual que ellos, dependen de la mquina en particular. El lenguaje de bajo nivel por excelencia es el ensamblador. Las instrucciones en lenguaje ensamblador son instrucciones conocidas como nemotcnicos. Por ejemplo, nemotcnicos tpicos de operaciones aritmticas son : en ingls : ADD, SUB, DIV, etc. ; en espaol : SUM, RES, DIV, etc. Un programa escrito en lenguaje ensamblador, requiere de una fase de traduccin al lenguaje mquina para poder ser ejecutado directamente por la computadora.

El programa original escrito en lenguaje ensamblador se denomina programa fuente y el programa traducido en lenguaje mquina se conoce como programa objeto, el cual ya es directamente entendible por la computadora. Ventajas del lenguaje ensamblador frente al lenguaje mquina. Mayor facilidad de codificacin y, en general, su velocidad de clculo. Desventajas del lenguaje ensamblador. Dependencia total de la mquina lo que impide la transportabilidad de los programas (posibilidad de ejecutar un programa en diferentes mquinas. El lenguaje ensamblador del PC es distinto del lenguaje ensamblador del Apple Machintosh. La formacin de los programadores es ms compleja que la correspondiente a los programadores de alto nivel, ya que exige no solo las tcnicas de programacin, sino tambin el conocimiento del interior de la mquina. Los lenguajes ensamblador tienen sus aplicaciones muy reducidas, se centran bsicamente en aplicaciones de tiempo real, control de procesos y de dispositivos electrnicos. Lenguajes de Alto Nivel. Estos lenguajes son los ms utilizados por los programadores. Estn diseados para que las personas escriban y entiendan los programas de un modo mucho ms fcil que los lenguajes mquina y ensambladores. Un programa escrito en lenguaje de alto nivel es independiente de la mquina (las instrucciones no dependen del diseo del hardware o de una computadora en particular), por lo que estos programas son portables o transportables. Los programas escritos en lenguaje de alto nivel pueden ser ejecutados con poca o ninguna modificacin en diferentes tipos de computadoras. Ventajas de los lenguajes de alto nivel.

El tiempo de formacin de los programadores es relativamente corto comparado con otros lenguajes. La escritura de programas se basa en reglas sintcticas similares a los lenguajes humanos. Nombres de las instrucciones tales como READ, WRITE, PRINT, OPEN, etc. Las modificaciones y puestas a punto de los programas son ms fciles. Reduccin del costo de los programas. Transportabilidad.

Desventajas de los lenguajes de alto nivel. Incremento del tiempo de puesta a punto al necesitarse diferentes traducciones del programa fuente para conseguir el programa definitivo. No se aprovechan los recursos internos de la mquina que se explotan. mucho mejor en lenguajes mquina y ensambladores. Aumento de la ocupacin de memoria. El tiempo de ejecucin de los programas es mucho mayor.

Lenguaje de programacin: es un idioma artificial diseado para expresar procesos que pueden ser llevadas a cabo por mquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento fsico y lgico de una mquina, para expresar algoritmos con precisin, o como modo de comunicacin humana.1 Est formado por un conjunto de smbolos y reglas sintcticas y semnticas que definen su

estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el cdigo fuente de un programa informtico se le llama programacin.
Diferencia entre el lenguaje algortmico y el informtico. El lenguaje algortmico es aquel por medio del cual se realiza un anlisis previo del problema a resolver y encontrar un mtodo que permita resolverlo. El conjunto de todas las operaciones a realizar, y el orden en el que deben efectuarse, se le denomina algoritmo. El lenguaje informtico es aquel por medio del cual dicho algoritmo se codifica a un sistema comprensible por el ordenador o computadora. Este tipo de lenguaje es ms cercano a la mquina que al ser humano y podemos distinguir distintos tipos dependiendo de la proximidad a la maquina. Se denomina lenguaje de alto nivel aquel que es ms cercano a la comprensin humana y lenguaje de bajo nivel a aquellos que son ms comprensibles por la mquina.

Organigramas. Un organigrama o diagrama de flujos es una representacin semigrfica del algoritmo en cuestin. Esto nos facilita la visin descriptiva de la ejecucin del programa, as como la generacin de la traza del algoritmo. Se denomina traza de un algoritmo a la ejecucin manual de un programa obteniendo para cada paso un resultado. Smbolos generales: * Inicio y fin de un programa. * Operaciones de I/O , aritmticas y lgico-aritmticas. * Decisiones lgicas. * Flujo de la ejecucin. Traza de un Algoritmo. La traza de un Algoritmo se puede definir como la ejecucin manual de forma secuencial de las sentencias que lo componen. As, la traza del siguiente algoritmo es el valor que van adoptando las variables a medida que se va ejecutando un programa. +-Algoritmo Suma | | Variable entera a,b | | Escribir "Indique el primer sumando" | Leer a | Escribir "Indique el segundo sumando" | Leer b | c=a+b | Escribir "El resultado es: ";c |

+-Final +----------------------------+ |TRAZA| +------------+---------------+ | Comentario | Valores | +------------+---------------+ | Leemos a: | a <- 4 | | Leemos b: | b <- 5 | | Calcula c: | c <- a+b <- 9 | | Escribe c: | c <- 9 | +------------+---------------+ La funcin principal que posee realizar la traza de un algoritmo es la de comprobar que ste funciona correctamente o para realizar la etapa de depuracin en la que se intenta corregir errores, simplificar el algoritmo al mximo e incrementar su eficacia y velocidad.

Estndares De Calidad En El Diseo De Algoritmos Y Construccin De Programas


Todos los tipos de software requieren que los analistas, diseadores y desarrolladores apliquen caractersticas y elementos de calidad para que se logren productos a las necesidades del usuario, estas necesidades se comienzan a encontrar un camino de solucin a travs de la aplicacin de elementos de calidad, como son la eficiencia y la eficacia. Un software de calidad debe ser eficaz, es decir, que debe realizar las funciones establecidas, debe ser amigable. Un usuario debe utilizar el software porque produce resultados confiables, realiza todas las operaciones que se requieren, ejecuta las operaciones en un tiempo aceptado y es fcilmente usado por el grupo de usuarios a quien este dirigido. Un software de calidad debe ser eficiente, es decir el costo de su desarrollo tomando todos los recursos y el costo de su operacin debe ser tal que las organizaciones involucradas en su desarrollo y uso obtengan el mximo beneficio o por lo menos un beneficio aceptable en un perodo de tiempo establecido. Para ilustrar el concepto de calidad de manera ms profunda, es necesario considerar algunos aspectos fundamentales que caracterizan al software de calidad como son : solidez, exactitud, completitud, mantenibilidad, reutilizabilidad, claridad en la documentacin, entre otros que sern descritos a continuacin. Aspectos bsicos de calidad de software. La descripcin que se hace de los factores que influyen en un software de calidad se basan principalmente en las ideas presentadas por Robert Dunn, Philip Crosby y Roger S. Pressman. Sin embargo, tambin se han tomado algunos aportes de Bertrand Meyer y Mauricio Fernando Alba.

Robert Dunn presenta la calidad en el software tomando dos puntos de vista : la calidad en el proceso de desarrollo y la calidad en el producto final, estos dos grupos principales los agrupa en los siguiente aspectos de calidad : confiabilidad, utilizabilidad, mantenibilidad, y adaptabilidad. Roger Pressman describe similares factores de calidad agrupados en tres grupos : calidad en operacin, calidad en revisin y calidad en transicin. A continuacin se presentan los factores de calidad de acuerdo al orden dado por Dunn. Confiabilidad. Este trmino es necesario sea separado en varios elementos que permiten darle al software el matiz de fiable. Sus componente son : Completitud Consistencia y precisin Solidez Simplicidad Calidad en los procesos de desarrollo Seguridad y Verificabilidad, estas dos ltimas que se determinan con el sistema en uso. Usabilidad. Si bien es cierto que la confiabilidad es un factor muy importante en la calidad del software tambin lo es el hecho de que es necesario considerar otros factores como los que se mencionan en esta seccin puesto que de nada sirve un software que funcione correcta y confiablemente si el usuario prefiere no utilizarlo. Exactitud de los procesos Claridad y exactitud de la documentacin Completitud Eficiencia y verificabilidad del software Claridad y amigabilidad de la interfaz Mantenibilidad. Este aspecto de calidad involucra los elementos que simplifican la labor de prevencin, correccin o ampliacin del cdigo del programa. Retomar un cdigo escrito meses antes es un trabajo dispendioso y agobiante, en especial cuando las aplicaciones no cuentan con la caracterstica a la cual aqu se hace referencia. Se pueden considerar como atributos de este aspecto : Exactitud y claridad en la documentacin Modularidad acoplamiento Facilidad de lectura Simplicidad Portabilidad. Es la capacidad que posee un sistema de informacin que le permite funcionar en diferentes plataformas ya sean hardware o de software. A continuacin se describen cada uno de los aspectos de calidad mencionados: Calidad en los procesos de desarrollo. Se resume en la frase "bien planeado y cuidadosamente ejecutado". Este aspecto asegura la confiabilidad, puesto que el plan que se realice para desarrollar el sistema, debe incluir pruebas bien seleccionadas que evalen la confiabilidad del programa en cualquier situacin. Claridad y amigabilidad de la interfaz. De igual forma la interfaz debe ser clara y agradable al usuario, las interfaces complejas son causa de la no utilizacin de los sistemas de informacin. Claridad y exactitud de la documentacin. Hay que anotar que toda aplicacin

requiere de una documentacin suficientemente clara con el fin de que cualquier persona con conocimientos bsicos en computacin pueda aprender la forma de operacin sin que requiera la asesora de los desarrolladores o conocedores de la herramienta, a menos que se trate de eventualidades donde realmente sea necesario consultar al proveedor. Completitud o adecuacin. Se refiere a que los resultados de operaciones sean acordes al comportamiento del mundo real desde todos los estados y condiciones permitidos por la aplicacin, es decir, el programa debe reflejar la realidad. Un programa es inconsistente si presenta respuestas errneas en algunos casos. Una mala especificacin de rangos en un dominio sobre los cuales realizan diferentes operaciones matemticas puede llevar a que algunos clculos se realicen dentro de lmites inapropiados, obtenindose resultados errneos. Otro caso de inconsistencia se presenta cuando ocurren eventos que paran abruptamente la ejecucin del programa, slo un sistema de calidad podr conservar datos consistentes despus de una falla. Eficiencia y verificabilidad del software. Otro aspecto que no debe pasar por alto es el de la verificabilidad, puesto que es imprescindible contar con los requerimientos, y sobre todo en aquellos sistemas donde se obtengan resultados que no sean visibles. Exactitud de los procesos. Un programa no ser utilizado por un usuario si sus resultados no son exactos. Tampoco se puede garantizar el uso de un programa que no presta las utilidades que el usuario requiere, es decir, que sea incompleto. Adems, un programa ineficiente que no cumpla con los requerimientos de tiempo, memoria o flexibilidad no podr satisfacer las expectativas de quienes lo utilizan. Robustez o solidez. Se refiere a la capacidad del software de defenderse de las acciones anormales que llevan al sistema a un estado no deseado o por lo menos no previsto, causando un comportamiento inesperado, indeseado y posiblemente errneo. El software de hoy, debe estar en capacidad de analizar los datos que recibe para hacer cumplir requerimientos o condiciones del software y enfrentar de la mejor manera los errores cometidos por un usuario al utilizar la aplicacin. Es importante resaltar, que la solidez no siempre es generada por la digitacin inapropiada del usuario, sino tambin por un mal procesamiento o un mal encadenamiento de procesos. El resultado de un proceso, aunque sea correcto, puede estar fuera de los lmites permitidos en los parmetros del mdulo que lo recibe y si este mdulo no controla los parmetros que le entran caer en un estado inesperado. Seguridad y auditabilidad. Son importantes, puesto que un usuario no puede confiar en los datos de un sistema que no le ayude a controlar el acceso de personas no autorizadas o a detectar errores de operacin en los que se introducen y generan datos errneos. Simplicidad. Promueve la utilizacin de estructuras de fcil manipulacin con el fin de evitar que el programador se aleje del problema que desea resolver. Adems, se reduce la probabilidad de cometer errores. As que, no es aconsejable hacer uso de estructuras complejas a menos que se necesite cumplir con requerimientos de vital importancia tales como tiempos mximos de proceso u otros similares. Calidad de software. Se define la calidad de software como la ausencia de errores de funcionamiento, la adecuacin a las necesidades del usuario, y el

alcance de un desempeo apropiado (tiempo, volumen, espacio), adems del cumplimiento de los estndares. Los objetivos que la calidad persigue son : La aceptacin (utilizacin real por parte del usuario) y la Mantenibilidad (posibilidad y facilidad de correccin, ajuste y modificacin durante largo tiempo). Para alcanzar estos objetivos, es necesaria una actitud y compromiso de todo el personal que se encuentre en el desarrollo del proyecto, y en todas y cada una de las etapas (en general, planeacin, anlisis, diseo, programacin, pruebas, mantenimiento) correspondientes al ciclo de vida que se hubiese seleccionado para el proyecto. En forma adicional durante el proceso de aplicacin de las metodologas se requiere tener en cuenta : 1. Realizacin de Revisiones Tcnicas Formales durante cada etapa. 2. Realizacin de pruebas y revisiones por personas "externas" al proyecto. 3. Elaboracin de la adecuada documentacin del software, y de los cambios. 4. Verificacin del cumplimiento de los estndares de desarrollo 5. Medicin permanente de la productividad del proceso y de la calidad de los resultados. 6. Desarrollo y ajustes de modelos estadsticos de calidad y productividad. 7. Control de la desviacin de los promedios de calidad y productividad. Uno de los elementos que permite dar garanta acerca de la calidad del software es la aplicacin de mtricas, estas son medidas estadsticas aplicadas a un software determinado, garantizando calidad as como lo afirma Pressman: "La garanta de calidad del software, es una "Actividad de proteccin" que se aplica a lo largo de todo el proceso de ingeniera del software" Todos los elementos anteriormente enumerados indican herramientas que se deben tener en cuenta al momento de desarrollar un software, agrupando en una definicin estos elementos se afirma que : Un software debe estar desarrollado "En concordancia con los requisitos funcionales y de rendimiento explcitamente establecidos, con los estndares de desarrollo explcitamente documentados y con las caractersticas implcitas que se espera de todo software" , si cumple los aspectos sealados se puede afirmar que se posee un software de calidad. Teniendo en cuenta esto, se puede afirmar 1. Los requisitos del software son la base de las medidas de la calidad. 2. Los estndares especificados definen un conjunto de criterios de desarrollo que guan la forma en que se aplica la ingeniera del software, Si no se distinguen esos criterios no habr calidad del software. 3. Existe un conjunto de requisitos implcitos que a menudo no se mencionan, si no se alcanzan estos requerimientos podra la calidad quedar en entredicho. Los requisitos son llamados por los usuarios finales llaman elementos obvios, los cuales el diseador no debe dejar pasar sin explicacin. Para estar seguros de las anteriores afirmaciones se tienen en cuenta factores que se pueden medir estos son llamados factores de calidad. Los factores de calidad se agrupan en dos bloque as : 1. Factores que pueden ser medidos directamente (errores, lneas, tiempo, ) 2. Factores que slo pueden ser medidos indirectamente (facilidad de uso, mantenimiento, ) Otro autor que contribuye con el aspecto de las medidas en el software es McCall, l y sus colegas proponen tres factores de calidad y sus partes as : Factor 1. Caractersticas operativas, relacionadas con las operaciones del

producto. Correccin Fiabilidad Eficiencia Integridad Facilidad de uso Factor 2. Capacidad de soportar cambios, relacionado con la revisin del producto. Facilidad de mantenimiento Flexibilidad Facilidad de prueba Factor 3. Adaptabilidad, relacionado con la transicin del producto. Portabilidad Reusabilidad - Reutilizabilidad Interoperabilidad McCall propone para las mtricas asociadas al software un nivel de evaluacin entro cero (0) y diez (10) como medidas. Adems, aclara que las mtricas y la evaluacin son procesos subjetivos. Los elementos que se pueden tener en cuenta para la evaluacin son : Autodocumentacin Que el archivo ejecutable entregue documentacin significativa. Completitud Se han implementado las funciones requeridas. Concisin Compacto en lneas de cdigo. Consistencia - Uso de mtodos de diseo, tcnicas de documentacin a travs del desarrollo. Eficiencia en la ejecucin Medida del tiempo de ejecucin. Estandarizacin de los datos Manejar tipos abstractos de datos (TAD) a travs del programa. Exactitud Preciso en clculos y control. Facilidad de auditora Comprobar la conformidad con los estndares. Facilidad de expansin- Facilidad de ampliar diseos arquitectnicos, de datos, o procedimiento. Facilidad de operacin Facilidad de traza Realizar ingeniera en reversa. Que tan fcil es devolverme a los requerimientos. Formacin Debe poseer un buen sistema de ayudas para que los nuevos usuarios apliquen el sistema. Generalidad Amplitud de aplicacin potencial de los componentes del programa. Es decir, los mdulos creados pueden ser tiles en otras aplicaciones del mismo tipo, o aplicaciones que manejen tipos de datos semejantes. Independencia del hardware Que los diseos sean independientes de la mquina o mquinas que se tienen destinadas para el software. A calidad. pero no a implantacin Independencia del sistema software Hasta donde el programa es independiente de la plataforma de desarrollo. Instrumentacin En qu grado el programa muestra funcionamiento e identifica errores.

Modularidad Divisin del programa en componentes funcionales. Acoplamiento, cohesin. Normalizacin de las comunicaciones Que tanto se usan estndares, interfaces, protocolos, entre otros elementos que pueden ser de importancia. Seguridad Simplicidad El sistema de informacin debe ser fcil de entender. Tolerancia de errores- Que tanto se pierde al ocurrir un dao grave. Metodologas de desarrollo. Una metodologa de desarrollo de software permite producir organizada y econmicamente software de alta calidad, siguiendo una serie de pasos donde se utilizan un conjunto de tcnicas, notacin y normas de documentacin preestablecidas. El anlisis y diseo, como elementos esenciales del proceso de desarrollo, obligan a tener especial atencin y por tal motivo se han ido creando metodologas que sirven de base para tomar las decisiones que afectarn el producto final. Con el advenimiento de la disciplina de la ingeniera del software se inicia el proceso de desarrollo de metodologas las primeras de ellas fueron las estructuradas, y en forma posterior aparecen las metodologas orientadas a objetos, siendo estas ltimas las ms difundidas actualmente en el medio. La traza de un Algoritmo Se puede definir como la ejecucin manual de forma secuencial de las sentencias que lo componen. As, la traza del siguiente algoritmo es el valor que van adoptando las variables a medida que se va ejecutando un programa. +-Algoritmo Suma Variable entera a,b Escribir "Indique el primer sumando" Leer a Escribir "Indique el segundo sumando" Leer b c=a+b Escribir "El resultado es: ";c Final TRAZA Comentario Valores Leemos a 4 Leemos b 5 Calculamos c=a+b 9 Escribimos c 9 La funcin principal que posee realizar la traza de un algoritmo es la de comprobar que ste funciona correctamente o para realizar la etapa de depuracin en la que se intenta corregir errores, simplificar el algoritmo al mximo e incrementar su eficacia y velocidad. Formas y Tcnicas de Documentar Algoritmos y programas

Documentar el cdigo de un programa es aadir suficiente informacin como para explicar lo que hace, punto por punto, de forma que no slo los ordenadores sepan qu hacer, sino que adems los humanos entiendan qu estn haciendo y por qu. Porque entre lo que tiene que hacer un programa y cmo lo hace hay una distancia impresionante: todas las horas que el programador ha dedicado a pergear una solucin y escribirla en el lenguaje que corresponda para que el ordenador la ejecute ciegamente. Documentar un programa no es slo un acto de buen hacer del programador por aquello de dejar la obra rematada. Es adems una necesidad que slo se aprecia en su debida magnitud cuando hay errores que reparar o hay que extender el programa con nuevas capacidades o adaptarlo a un nuevo escenario. Hay dos reglas que no se deben olvidar nunca: 1. todos los programas tienen errores y descubrirlos slo es cuestin de tiempo y de que el programa tenga xito y se utilice frecuentemente 2. todos los programas sufren modificaciones a lo largo de su vida, al menos todos aquellos que tienen xito Por una u otra razn, todo programa que tenga xito ser modificado en el futuro, bien por el programador original, bien por otro programador que le sustituya. Pensando en esta revisin de cdigo es por lo que es importante que el programa se entienda: para poder repararlo y modificarlo. Qu hay que documentar? Hay que aadir explicaciones a todo lo que no es evidente. No hay que repetir lo que se hace, sino explicar por qu se hace. Y eso se traduce en: de qu se encarga una clase? un paquete? qu hace un mtodo? cul es el uso esperado de un mtodo? para qu se usa una variable? cul es el uso esperado de una variable? qu algoritmo estamos usando? de dnde lo hemos sacado? qu limitaciones tiene el algoritmo? ... la implementacin? qu se debera mejorar ... si hubiera tiempo? Tipos de comentarios En Java disponemos de tres notaciones para introducir comentarios: javadoc Comienzan con los caracteres "/**", se pueden prolongar a lo largo de varias lneas (que probablemente comiencen con el carcter "*") y terminan con los caracteres "*/". una lnea Comienzan con los caracteres "//" y terminan con la lnea tipo C Comienzan con los caracteres "/*", se pueden prolongar a lo largo de varias lneas (que probablemente comiencen con el carcter "*") y terminan con los caracteres "*/". Cada tipo de comentario se debe adaptar a un propsito: javadoc

Para generar documentacin externa (ver comentarios javadoc ms abajo) una lnea Para documentar cdigo que no necesitamos que aparezca en la documentacin externa (que genere javadoc) Este tipo de comentarios se usar incluso cuando el comentario ocupe varias lneas, cada una de las cuales comenzar con "//" tipo C Para eliminar cdigo. Ocurre a menudo que cdigo obsoleto no queremos que desaparezca, sino mantenerlo "por si acaso". Para que no se ejecute, se comenta. (En ingls se suele denominar "comment out") Javadoc, que veremos posteriormente, impone sus propias reglas prcticas. Cundo hay que poner un comentario? Por obligacin (javadoc): 1. al principio de cada clase 2. al principio de cada mtodo 3. ante cada variable de clase Por conveniencia (una lnea): 4. al principio de fragmento de cdigo no evidente 5. a lo largo de los bucles Y por si acaso (una lnea): 6. siempre que hagamos algo raro 7. siempre que el cdigo no sea evidente Es decir, que los comentarios ms vale que sobren que falten. Y una nota de cautela, cuando un programa se modifica, los comentarios deben modificarse al tiempo, no sea que los comentarios acaben refirindose a un algoritmo que ya no utilizamos. Javadoc: documentacin de APIs El paquete de desarrollo Java incluye una herramienta, javadoc, para generar un conjunto de pginas web a partir de los ficheros de cdigo. Esta herramienta toma en consideracin algunos comentarios para generar una documentacin bien presentada de clases y componentes de clases (variables y mtodos). Aunque javadoc no ayuda a la comprensin de los detalles de cdigo, si ayuda a la comprensin de la arquitectura de la solucin, lo que no es poco. Se dice que javadoc se centra en la interfaz (API - Application Programming Interface) de las clases y paquetes Java. Javadoc realza algunos comentarios, de los que exige una sintaxis especial. Deben comenzar por "/**" y terminar por "*/", incluyendo una descripcin y algunas etiquetas especiales: /** * Parte descriptiva. * Que puede consistir de varias frases o prrafos. * * @etiqueta texto especfico de la etiqueta */ Estos comentarios especiales deben aparecer justo antes de la declaracin de una clase, un campo o un mtodo en el mismo cdigo fuente. En las siguientes secciones se detallan las etiquetas (tags) que javadoc sabe interpretar en cada

uno de los casos. Como regla general, hay que destacar que la primera frase (el texto hasta el primer punto) recibir un tratamiento destacado, por lo que debe aportar una explicacin concisa y contundente del elemento documentado. Las dems frases entrarn en detalles. Documentacin de clases e interfaces Deben usarse al menos las etiquetas: @author @version La tabla muestra todas las etiquetas posibles y su interpretacin: @author nombre del autor @version identificacin de la versin y fecha @see referencia a otras clases y mtodos Documentacin de constructores y mtodos Deben usarse al menos las etiquetas: @param una por argumento de entrada @return si el mtodo no es void @exception @throws una por tipo de Exception que se puede lanzar (@exception y @throws se pueden usar indistintamente). La tabla muestra todas las etiquetas posibles y su interpretacin: @param nombre del parmetro descripcin de su significado y uso @return descripcin de lo que se devuelve @exception nombre de la excepcin excepciones que pueden lanzarse @throws nombre de la excepcin excepciones que pueden lanzarse @exception y @throws se pueden usar indistintamente. Introduccin a la Elaboracin del Manual del Sistema, usuario y programas Manual de Usuario: Se explicar todas las posibles opciones que puede realizar el usuario con la aplicaciones de manera detallada, y mediante el uso de capturas de pantalla. Este documento est dirigido al usuario final. Partes del manual del usuario: Portada: Describe de que se trata el documento. Introduccin: Describe el uso del documento, para que sirve y de que habla. Anlisis y requerimientos del sistema: De que se ocupa, para poder instalarlo y usarlo. Explicacin del funcionamiento: Se describe paso a paso y con pantallas bien explicadas como funciona el programa. Glosario: definicin de la terminologa usada en el manual. Un Manual debe ser escrito de tal manera, que cualquier persona pueda entenderlo con la menor dificultad posible. Es recomendable detallar todos aquellos pasos que se llevan a cabo para usar el programa. Especificar los alcances y limitaciones que tiene el programa. Un buen punto de partida para un manual, es hacer de cuenta que las personas que lo van a leer no tienen el ms mnimo conocimiento sobre computadoras. Tcnicas

de escritura y pruebas de algoritmos y programas CONCEPTO DE ALGORITMO: El algoritmo trata de resolver problemas mediante programas. Fases: Anlisis preliminar o evaluacin del problema: Estudiar el problema en general y ver que parte nos interesa. Definicin o anlisis del problema: Ver que es lo que entra y que es lo que sale, las posibles condiciones o restricciones, ... Diseo del algoritmo: Disear la solucin. El programa: Codificacin del algoritmo en un lenguaje de programacin. Ejecucin del programa y las pruebas: Ver si el programa hace lo que queramos. Qu es un algoritmo?: Es una formula para resolver un problema. Es un conjunto de acciones o secuencia de operaciones que ejecutadas en un determinado orden resuelven el problema. Existen n algoritmos, hay que coger el ms efectivo. Caractersticas: Tiene que ser preciso. Tiene que estar bien definido. Tiene que ser finito. La programacin es adaptar el algoritmo al ordenador. El algoritmo es independiente segn donde lo implemente. 1. RESOLUCIN DE PROBLEMAS: La resolucin de un problema desde el punto de vista algortmico tiene 3 fases: Anlisis del problema: Comprensin. Diseo del algoritmo: Resolucin algortmica. Resolucin en computadora: Implantacin del algoritmo en un lenguaje de programacin. 2. ANLISIS DEL PROBLEMA: El objetivo de sta fase es comprender el problema para lo cual como resultado tenemos que obtener la especificacin de las entradas y salidas del problema. Tiene que quedar claro que entra y que sale. 3. DISEO DEL ALGORITMO: Una vez comprendido el problema se trata de determinar que pasos o acciones tenemos que realizar para resolverlo. Como criterios a seguir a la hora de dar la solucin algortmica hay que tener en cuenta: Si el problema es bastante complicado lo mejor es dividirlo en partes ms pequeas e intentar dividirlo en partes ms pequeas e intentar resolverlas por separado. Esta metodologa de divide y vencers tambin se conoce con el nombre de diseo descendente. Las ventajas de aplicar esto son: Al dividir el problema en mdulos o partes se comprende ms fcilmente. Al hacer modificaciones es ms fcil sobre un mdulo en particular que en todo el algoritmo. En cuanto a los resultados, se probarn mucho mejor comprobando si cada mdulo da el resultado correcto que si intentamos probar de un golpe todo el

programa porque si se produce un error sabemos en que mdulo ha sido. Una segunda filosofa a la hora de disear algoritmos es el refinamiento por pasos, y es partir de una idea general e ir concretando cada vez ms esa descripcin hasta que tengamos algo tan concreto para resolver. Pasamos de lo ms complejo a lo ms simple. La representacin de los algoritmos: Una vez que tenemos la solucin hay que implementarla con alguna representacin. Las representaciones ms usadas son los flujogramas, los diagramas NS y el pseudocdigo. Tambin la solucin se puede escribir en algunos casos en lenguaje natural pero no se hace porque es muy ambiguo, e incluso otras formas de expresin como frmulas matemticas. Escritura del algoritmo: Al escribir el algoritmo hay que tener en cuenta: Las acciones o pasos a realizar tienen que tener un determinado orden. En cada momento solo se puede ejecutar una accin. Dentro de las sentencias del algoritmo pueden existir palabras reservadas (palabras propias del lenguaje de programacin que tienen para el compilador un determinado significado). Si estamos utilizando pseudocdigo tenemos tambin que usar la identacin (aumenta la legibilidad del problema para que se pueda leer mejor). 4. RESOLUCIN EN LA COMPUTADORA: Es hacer entender nuestro algoritmo a la computadora para que lo pueda hacer. Codificamos el algoritmo en un leguaje de programacin. Ejecutar el programa antes compilado. Comprobar los resultados y si no funciona, corregirlo. 5. FLUJOGRAMAS: Es una notacin grfica para implementar algoritmos. Se basa en la utilizacin de unos smbolos grficos que denominamos cajas, en las que escribimos las acciones que tiene que realizar el algoritmo. Las cajas estn conectadas entre s por lneas y eso nos indica el orden en el que tenemos que ejecutar las acciones. En todo algoritmo siempre habr una caja de inicio y otra de fin, para el principio y final del algoritmo. Son la representacin grfica de la solucin algortmica de un problema. Para disearlos se utilizan determinados smbolos o figuras que representan una accin dentro del procedimiento. Utilizan unos smbolos normalizados, con los pasos del algoritmo escritos en el smbolo adecuado y los smbolos unidos con flechas, denominadas lneas de flujo, que indican el orden en que los pasos deben ser ejecutados. Para su elaboracin se siguen ciertas reglas: Se escribe de arriba hacia abajo y de izquierda a derecha Siempre se usan flechas verticales u horizontales, jams curvas Evitar cruce de flujos En cada paso expresar una accin concreta Secuencia de flujo normal en una solucin de problema Tiene un inicio

Una lectura o entrada de datos El proceso de datos Una salida de informacin Un final Los smbolos: Lneas de flujo: Una lnea con una flecha que sirve para conectar los smbolos del diagrama y la flecha indica la secuencia en la que se van a ejecutar las acciones. Smbolo de proceso: Indica la accin que tiene que realizar la computadora. Dentro escribimos la accin. Representa las acciones de entrada y salida. Dentro colocaremos las acciones de lectura y escritura. Condicin: Dentro se va a colocar una condicin. Sirve para representar estructuras selectivas y repetitivas y lo que se hace al encontrar ese signo es evaluar la condicin que hay dentro tal que segn la condicin sea verdadera o falsa iremos por caminos distintos. Principio y fin: Dentro del smbolo ira la palabra inicio o fin del algoritmo. Subprograma: Dentro se coloca el nombre del subprograma al que se llama. Conectores: Nos sirven cuando un flujograma no me cabe en una columna de la hoja y hay que seguir en otra columna: Si es en la misma hoja: Si es en hoja distinta: Los conectores se ponen uno donde termina la columna y otra donde empieza. Es una aclaracin para entender mejor el cdigo, pero no es parte del cdigo, no se ejecuta. Otros smbolos: - Pantalla: Cuando una salida es por pantalla. - Teclado: Para representar una entrada por teclado. Impresora: - Entrada/Salida por disco

Diagramas N-S Son una herramienta que favorece la programacin estructurada y rene caractersticas grficas propias de diagramas de flujo y lingsticas propias de pseudocdigos. Constan de una serie de cajas contiguas que se leern siempre de arriba-abajo y sus estructuras lgicas son las siguientes: Estructura Secuencial

Tcnicas de Mantenimiento de Programas El mantenimiento de software o manutencin de software es una de las actividades ms comunes en la ingeniera de software, es el proceso de mejora y optimizacin del software despus de su entrega al usuario final (es decir;

revisin del programa), as como tambin correccin y prevencin de los defectos. El mantenimiento de software es tambin una de las fases en el ciclo de vida de desarrollo de sistemas (SDLC, sigla en ingls de system development life cycle), que se aplica al desarrollo de software. La fase de mantenimiento es la fase que viene despus del despliegue (implementacin) del software en el campo. La fase de mantenimiento de software involucra cambios al software en orden de corregir defectos y dependencias encontradas durante su uso tanto como la adicin de nueva funcionalidad para mejorar la usabilidad y aplicabilidad del software. El mantenimiento del software involucra(pilines flic`s) varias tcnicas especficas. Una tcnica es el rebanamiento esttico, la cual es usada para identificar todo el cdigo de programa que puede modificar alguna variable. Es generalmente til en la refabricacin del cdigo del programa y fue especficamente til en asegurar conformidad para el problema del ao 2000. La fase de mantenimiento de software es una parte explcita del modelo en cascada del proceso de desarrollo de software el cual fue desarrollado durante el movimiento de programacin estructurada en computadores. El otro gran modelo, el Desarrollo en espiral desarrollado durante el movimiento de ingeniera de software orientada a objeto no hace una mencin explcita de la fase de mantenimiento. Sin embargo, esta actividad es notable, considerando el hecho de que dos tercios del coste del tiempo de vida de un sistema de software involucran mantenimiento. En un ambiente formal de desarrollo de software, la organizacin o equipo de desarrollo tendrn algn mecanismo para documentar y rastrear defectos y deficiencias. El Software tan igual como la mayora de otros productos, es tpicamente lanzado con un conjunto conocido de defectos y deficiencias. El software es lanzado con esos defectos conocidos porque la organizacin de desarrollo en las utilidades y el valor del software en un determinado nivel de calidad compensa el impacto de los defectos y deficiencias conocidas. Las deficiencias conocidas son normalmente documentadas en una carta de consideraciones operacionales o notas de lanzamiento (release notes) es as que los usuarios del software sern capaces de trabajar evitando las deficiencias conocidas y conocern cundo el uso del software sera inadecuado para tareas especficas. Con el lanzamiento del software (software release), otros defectos y deficiencias no documentados sern descubiertas por los usuarios del software. Tan pronto como estos defectos sean reportados a la organizacin de desarrollo, sern ingresados en el sistema de rastreo de defectos. Las personas involucradas en la fase de mantenimiento de software esperan trabajar en estos defectos conocidos, ubicarlos y preparar un nuevo lanzamiento del software, conocido como un lanzamiento de mantenimiento, el cual resolver los temas pendientes. Tipos de mantenimiento A continuacin se sealan los tipos de mantenimientos existentes, definidos tal y como se especifican para la metodologa de MTRICA:

Perfectivo: son las acciones llevadas a cabo para mejorar la calidad interna de los sistemas en cualquiera de sus aspectos: reestructuracin del cdigo, definicin ms clara del sistema y optimizacin del rendimiento y eficiencia. Evolutivo: son las incorporaciones, modificaciones y eliminaciones necesarias en un producto software para cubrir la expansin o cambio en las necesidades del usuario. Adaptativo: son las modificaciones que afectan a los entornos en los que el sistema opera, por ejemplo, cambios de configuracin del hardware, software de base, gestores de base de datos, comunicaciones, etc. Correctivo: son aquellos cambios precisos para corregir errores del producto software. Cabe sealar que, de estos 4 tipos de mantenimiento, solamente el correctivo y el evolutivo entran en el mbito de MTRICA versin 3, ya que los otros dos requieren actividades y perfiles distintos a los del proceso de desarrollo. Modelo de Madurez y Capacidad del mantenimiento Fragilidad del software Gestin de Proyectos Fases del desarrollo de software Es importante tener en cuenta el efecto del Iceberg, es decir , en el momento en el que se le hace mantenimiento a un Software no se cuenta muchas veces con el factor econmico (Cunto dinero se invertir en el mantenimiento?), y una vez se comienza a desarrollar la fase de mantenimiento en la aplicacin, comienzan a surgir nuevos requerimientos, el efecto del iceberg (en la superficie se ve solo una parte de lo que realmente es su tamao). Dentro de la ingeniera del software se proporcionan soluciones tcnicas que permiten abordar el mantenimiento de manera que su impacto en coste dentro del ciclo de vida sea menor. Las soluciones tcnicas pueden ser de tres tipos: 1. Ingeniera inversa: Anlisis de un sistema para identificar sus componentes y las relaciones entre ellos, as como para crear representaciones del sistema en otra forma o en un nivel de abstraccin ms elevado. 2. Reingeniera: Modificacin de un producto software, o de ciertos componentes, usando para el anlisis del sistema existente tcnicas de ingeniera inversa y, para la etapa de reconstruccin, herramientas de ingeniera directa, de tal manera que se oriente este cambio hacia mayores niveles de facilidad en cuanto a mantenimiento, reutilizacin, comprensin o evolucin. 3. Reestructuracin del software: Cambio de representacin de un producto software, pero dentro del mismo nivel de abstraccin. El objetivos de estas tcnicas es proporcionar mtodos para reconstruir el software, ya sea reprogramndolo, redocumentndolo, redisendolo, o rehaciendo alguna/s caracterstica/s del producto. La diferencia entre las soluciones descritas radica en cul es el origen y cul es el destino de las mismas (producto inicial y/o producto final). La Ingeniera directa corresponde al desarrollo del software tradicional. La Ingeniera Inversa es el proceso de anlisis de un sistema para identificar sus componentes e interrelaciones y crear representaciones del sistema en otra forma o a un nivel ms alto de abstraccin. La Reingeniera es el examen y la

alteracin de un sistema para reconstruirlo de una nueva forma y la subsiguiente implementacin de esta nueva forma. La Reestructuracin es la modificacin del software para hacerlo ms fcil de entender y cambiar. La reingeniera hace referencia a un ciclo, esto es, se aplican tcnicas de ingeniera inversa para conseguir representaciones de mayor abstraccin del producto y sobre ellas se aplican tcnicas de ingeniera directa para redisear o reimplementar el producto. Cualquiera de estas tcnicas se puede aplicar a lo largo de todas las fases del ciclo de vida o bien entre algunas de sus fases. Tambin existen otras tecnologas, como por ejemplo: * La remodularizacin: consiste en cambiar la estructura modular de un sistema de forma que se obtenga una nueva estructura siguiendo los principios del diseo estructurado. * Anlisis de la facilidad de mantenimiento: normalmente la mayor parte del mantenimiento se centra relativamente en unos pocos mdulos del sistema. * Visualizacin: el proceso ms antiguo para la comprensin del software. * Anlisis y mediciones: son importantes tecnologas que estudian ciertas propiedades de los

****************** OTRO

Estndares de Calidad en el Diseo de Algoritmos y Construccin de Programas


Estndares de Calidad en el Diseo de Algoritmos y Construccin de Programas

Integrantes: Ortiz Jess Mata Edsay

La algortmica es uno de los pilares de la programacin y su relevancia se muestra en el desarrollo de cualquier aplicacin, ms all de la verdadera construccin de programas.

. La ingeniera del software pretende utilizar los recursos computacionales de tal manera que se produzcan soluciones eficientes y eficaces a los problemas informticos.

Las Tcnicas de Construccin de Programas nos introduce en diversas tcnicas elementales que permitirn la implementacin de programas con buen

desempeo computacional. Es por ello que se pone nfasis en el anlisis y diseo de algoritmos. Entre los temas fundamentales tenemos: notacin asinttica y recurrencias, las cuales servirn para estudiar diversos algoritmos entre ellos algoritmos de ordenacin como heapsort, quicksort y ordenamiento en tiempo lineal, tambin tenemos ciertas tcnicas de string matching y finalmente algunas tcnicas como programacin dinmica, algoritmos greedy y anlisis amortizado.

Diseo de algoritmo

Una vez comprendido el problema se trata de determinar que pasos o acciones tenemos que realizar para resolverlo. Como criterios a seguir a la hora de dar la solucin algortmica hay que tener en cuenta: * Si el problema es bastante complicado lo mejor es dividirlo en partes ms pequeas e intentar dividirlo en partes ms pequeas e intentar resolverlas por separado. Esta metodologa de divide y vencers tambin se conoce con el nombre de diseo descendente. Las ventajas de aplicar esto son: * Al dividir el problema en mdulos o partes se comprende ms fcilmente. * Al hacer modificaciones es ms fcil sobre un mdulo en particular que en todo el algoritmo.

Una segunda filosofa a la hora de disear algoritmos es el refinamiento por pasos, y es partir de una idea general e ir concretando cada vez ms esa descripcin hasta que tengamos algo tan concreto para resolver. Pasamos de lo ms complejo a lo ms simple.

FORMULACIN Y ANLISIS DEL PROBLEMA Consiste en entender de qu se trata el problema planteado y esbozar su posible solucin, concluyendo con una clara definicin de tres aspectos: 1 qu es lo que nos piden, es decir, definicin del resultado o solucin deseada (para qu). 2 cmo obtener lo que nos piden (qu hacer). 3 qu necesitamos para obtener los resultados pedidos (con qu). Esto ltimo nos facilitar la construccin de lo que denominaremos Especificacin Funcional.

Especificacin Funcional consiste en determinar las funciones que se van a realizar (qu hacer) y sus respectivas entradas (con qu) y salidas (para qu):

PROCESO -> ENTRADA ->SALIDA Donde: entrada son los argumentos (variables o constantes) que se requieren para resolver un problema, salida son los resultados (argumentos) que se desean obtener una vez resuelto el problema y proceso es el procedimiento(s) u operacin(es) que deben efectuarse sobre las entradas para obtener las salidas deseadas.

http://www.infomafia.net/articulos-25/tecnicas-de-construccion-de-programas-126

http://www.buenastareas.com/ensayos/Est%C3%A1ndares-De-Calidad-En-El-Dise %C3%B1o/1461297.html

http://www.lcc.uma.es/~av/Libro/indice.html

http://sites.google.com/site/tutoriasdeingenieria/algoritmos/que-son-los-algoritmos

http://www.monografias.com/trabajos15/ingenieria-software/ingenieria-software.shtml
Publicado por PNFI03031. Algoritmica y Programacin. en 3/30/2011 09:34:00 p.m

********* FIN OTRO