REALIZADO POR: Anderson González Andrés García Gregorio López Jessica Blanco Tony Da cámara Joseph Huizi Marzo 2012 ALGORÍTMICA Y PROGRAMACIÓN TRIMESTRE 1 UNIDAD 1 ALGORITMOS Y PROGRAMAS Concepto de Algoritmos y Programas. Lenguaje algorítmico y de programación. Partes de un algoritmo. Características y elementos para construir un algoritmo. Formas de representar un algoritmo: Lenguaje Natural, pseudocódigo y diagrama de flujo. Traza de un algoritmo (corrida en frío). DESCRIPCION DE LA UNIDAD 1 ALGORITMOS Y PROGRAMAS Es un conjunto prescrito 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. Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución. Un algoritmo es el medio por el que se explica cómo puede resolverse un problema, mediante aproximaciones paso a paso. Se puede formular de muchas formas con el cuidado de que no exista ambigüedad. CARACTERISTICAS DE LOS ALGORITMOS Las principales características de los algoritmos son: El algoritmo debe ser sencillo e indicar el orden de realización de cada paso Un algoritmo debe estar definido. El algoritmo de ser finito. Un algoritmo describe la transformación de una entrada en la salida La entrada se refiere a algo que existe y es utilizado por el algoritmo para transformarlo en los resultados que uno planifica. LENGUAJE DE ALGORÍTMICA Y PROGRAMACIÓN Lenguaje máquina: Todo se programa con 1 y 0, que es lo único que entiende el ordenador. Ventaja: No necesita ser traducido. Inconveniente: La dificultad, la confusión, para corregir errores, es propia de cada máquina. De bajo nivel o ensamblador: Se utilizan mnemotécnicos (abreviaturas). Ventaja: No es tan difícil como el lenguaje máquina. Inconvenientes: Cada máquina tiene su propio lenguaje, necesitamos un proceso de traducción. El programa escrito en ensamblador se llama programa fuente y el programa que se obtiene al ensamblarlo se llama programa objeto. Lenguajes de alto nivel: Los más cercanos al lenguaje humano. PARTES DE UN ALGORITMO Todo algoritmo debe obedecer a la estructura básica de un sistema, es decir: entrada, proceso y salida. Entrada: Corresponde al insumo, a los datos necesarios que requiere el proceso para ofrecer los resultados esperados. Proceso: Pasos necesarios para obtener la solución del problema o la situación planteada. Salida: Resultados arrojados por el proceso como solución. En el ejemplo del algoritmo de la sumatoria de los dos números, tenemos: Entrada: Valores de de las variables A y B. Proceso: Asignar a la variable Suma, el valor de A mas el valor de B. Salida: Impresión del valor de la variable Suma, que contiene la sumatoria de los valores de A y B. CARACTERÍSTICAS Y ELEMENTOS PARA CONSTRUIR UN ALGORITMO VARIABLES Son elementos que toman valores específicos de un tipo de datos concreto. La declaración de una variable puede realizarse comenzando con var. Principalmente, existen dos maneras de otorgar valores iniciales a variables: 1. Mediante una sentencia de asignación. 2. Mediante un procedimiento de entrada de datos (por ejemplo: 'read'). Estructuras secuenciales La estructura secuencial es aquella en la que una acción sigue a otra en secuencia. Las operaciones se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso. La asignación de esto consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona será reconocida con el nombre de la variable que recibe el valor. La asignación se puede clasificar de la siguiente forma: 1. Simples: Consiste en pasar un valor constante a una variable (a ← 15) 2. Contador: Consiste en usarla como un verificador del número de veces que se realiza un proceso (a ← a + 1) 3. Acumulador: Consiste en usarla como un sumador en un proceso (a ← a + b) 4. De trabajo: Donde puede recibir el resultado de una operación matemática que involucre muchas variables (a ← c + b*2/4). FORMAS DE REPRESENTAR UN ALGORITMO: LENGUAJE NATURAL, PSEUDOCÓDIGO Y DIAGRAMA DE FLUJO Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación específico. La descripción de un algoritmo usualmente se hace en tres niveles: 1. Descripción de alto nivel: Se establece el problema, se selecciona un modelo matemático y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles. 2. Descripción formal: Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución. 3. Implementación: Se muestra el algoritmo expresado en un lenguaje de programación específico o algún objeto capaz de llevar a cabo instrucciones. También es posible incluir un teorema que demuestre que el algoritmo es correcto, un análisis de complejidad o ambos. Diagrama de flujo Los diagramas de flujo son descripciones gráficas de algoritmos; usan símbolos conectados con flechas para indicar la secuencia de instrucciones y están regidos por ISO. Los diagramas de flujo son usados para representar algoritmos pequeños, ya que abarcan mucho espacio y su construcción es laboriosa. Por su facilidad de lectura son usados como introducción a los algoritmos, descripción de un lenguaje y descripción de procesos a personas ajenas a la computación. Pseudocódigo El pseudocódigo (falso lenguaje, el prefijo pseudo significa falso) es una descripción de alto nivel de un algoritmo que emplea una mezcla de lenguaje natural con algunas convenciones sintácticas propias de lenguajes de programación, como asignaciones, ciclos y condicionales, aunque no está regido por ningún estándar. Es utilizado para describir algoritmos en libros y publicaciones científicas, y como producto intermedio durante el desarrollo de un algoritmo, como los |diagramas de flujo, aunque presentan una ventaja importante sobre estos, y es que los algoritmos descritos en pseudocódigo requieren menos espacio para representar instrucciones complejas. El pseudocódigo está pensado para facilitar a las personas el entendimiento de un algoritmo, y por lo tanto puede omitir detalles irrelevantes que son necesarios en una implementación. Programadores diferentes suelen utilizar convenciones distintas, que pueden estar basadas en la sintaxis de lenguajes de programación concretos. Sin embargo, el pseudocódigo, en general, es comprensible sin necesidad de conocer o utilizar un entorno de programación específico, y es a la vez suficientemente estructurado para que su implementación se pueda hacer directamente a partir de él. Así el pseudodocódigo cumple con las funciones antes mencionadas para representar algo abstracto los protocolos son los lenguajes para la programación. Busque fuentes más precisas para tener mayor comprensión del tema. Sistemas formales La teoría de autómatas y la teoría de funciones recursivas proveen modelos matemáticos que formalizan el concepto de algoritmo. Los modelos más comunes son la máquina de Turing, máquina de registro y funciones μ-recursivas. Estos modelos son tan precisos como un lenguaje máquina, careciendo de expresiones coloquiales o ambigüedad, sin embargo se mantienen independientes de cualquier computadora y de cualquier implementación. Implementación Muchos algoritmos son ideados para implementarse en un programa. Sin embargo, los algoritmos pueden ser implementados en otros medios, como una red neuronal, un circuito eléctrico o un aparato mecánico y eléctrico. Algunos algoritmos inclusive se diseñan especialmente para implementarse usando lápiz y papel. El algoritmo de multiplicación tradicional, el algoritmo de Euclides, lacriba de Eratóstenes y muchas formas de resolver la raíz cuadrada son sólo algunos ejemplos. Traza de un algoritmo (corrida en frío) La traza de un algoritmo (o programa) indica la secuencia de acciones (instrucciones) de su ejecución, así como, el valor de las variables del algoritmo (o programa) después de cada acción (instrucción). UNIDAD 2 ESTÁNDARES DE CALIDAD EN EL DISEÑO DE ALGORITMOS Y CONSTRUCCIÓN DE PROGRAMAS Introducción a los estándares de calidad. Forma de trazabilizar un algoritmo. Formas y técnicas de documentar algoritmos y programas. Introducción a la elaboración del manual del sistema, usuario y programas. Técnicas de escritura y pruebas de algoritmos y programas. DESCRIPCION DE LA UNIDAD 2 INTRODUCCION A LOS ESTANDARES DE CALIDAD Sin importar cualquiera que sea el tipo de software a ser desarrollado sea de sistemas (Son programas que sirven a otros programas en el trabajo de desarrollo como compiladores editores, tiempo real(software encargado de analizar datos del mundo en forma real talos como análisis de datos, control autorizado monitoreo de datos),gestión a esta categoría se incluyen el software comercial a nivel empresarial nominas, inventarios),ingeniería y científicos(es software que posee un amplio manejo numérico empleado en biología, astronomía, CAD),comportado (software que se encuentra residente en memoria, tales como: controles automáticos en los vehículos, sistema operativo), computación personal (software comercial de uso local como procesadores de texto,hojaselectrocnicas,navegadoresweb,calendarios,agendas,recetarios) inteligencia artificial (software de procesamiento especial sistemas expertos. Sistemas basados en el conocimiento, generalmente no usan algoritmos numéricos) .Todos los tipos de software mencionados requieren que los analistas, diseñadores y desarrolladores apliquen características y elementos de calidad para que se logren productos a las necesidades del usuario, estas necesidades s comienzan a encontrar un camino de solución a través de la aplicación de elementos de calidad, así se presentan dos de los más valiosos como son eficiencia y la eficacia. El uso eficiente y eficaz de la tecnología de los computadores es un objetivo que aun esta distante. Referencia bibliográfica donde puede encontrarse esta información más detallada: http://erickjoseluis.blogspot.com/2011/04/introduccion-los-estandares-de-calidad.html FORMA DE TRAZABILIZAR UN ALGORITMO ESTÁNDARES DE CALIDAD EN EL DISEÑO DE ALGORITMOS Y CONSTRUCCIÓN DE PROGRAMAS Todos los tipos de software a ser desarrollados requieren un control de calidad, sea software de sistemas (Son programas que sirven a otros programas en el trabajo de desarrollo como compiladores, editores), ingeniería y científico (es software queposee un amplio manejo numérico usado en biología, astronomía, CAD), computación personal (software comercial de uso local como procesadores de texto,hojas electrónicas, navegadores web, calendarios, agendas, recetarios), inteligencia artificial (software de procesamiento especial sistemas expertos, sistemas basados en el conocimiento, algoritmos no numéricos). Hoy en día hay muchos programadores pero no todos desarrollan sus programas con calidad, a este tipo de productos se les llama software basura, algunos ni cuentan con un respaldo del programador, o simplemente no tiene un soporte de calidad que se adapte al usuario. Por eso se presentan dos de los más valiosos controles de calidad, como son la eficiencia y la eficacia. La ingeniería del software pretende utilizar los recursos computacionales de tal manera que se produzcan soluciones eficientes y eficaces a los problemas informáticos, el éxito de un proyecto. Construcción de un programa El desarrollo de software es un proceso por el cual, dado un problema, se encuentra un programa (o un conjunto de programas) que lo resuelva eficientemente. Análisis del Problema Una vez que se ha comprendido lo que se desea de la computadora, es necesario definir: Los datos de entrada. Cuál es la información que se desea producir (salida), los métodos y fórmulas que se necesitan para procesar los datos. Una recomendación muy practica es el que nos pongamos en el lugar de la computadora y analicemos que es lo que necesitamos que nos ordenen y en que secuencia para producir los resultados esperados. Niveles de construcción de un programa Programas de bajo nivel: Son programas que explotan las características propias de la computadora por ejemplo rutinas graficas, manejos de puertos, interfaces con el usuario, etc. Con este tipo de programas no puede seguirse estrictamente las fases del diseño y generalmente son rutinas que deben ser optimizadas, aun sacrificando su claridad (suelen ser rutinas que solo estudiaran especialistas). Programas de alto nivel: Son programas que entregan resultados independientemente de la maquina. Para construirlos hay que enlazar herramientas ya disponibles. En este tipo de programas conviene seguir estrictamente las fases del diseño y generalmente no deben ser optimizadas, ya que requiere claridad para que las entienda un no especialista. Para facilitar el proceso de mantenimiento, hay que evitar mezclar niveles al construir rutinas. INTRODUCCIÓN A LOS ESTÁNDARES DE CALIDAD En algunos momento se definió a la Calidad como: Lo que se hace bien y a la primera, concepto erróneo ya que, no se puede determinar la calidad de un servicio, producto o proceso, tomando en cuenta solo el aspecto de desarrollo, olvidando por completo al proceso de depuración que inherentemente involucra una serie de corrección de errores, por lo que, la definición de calidad esta mas allá de la observación de una parte de dicho proceso. La mayoría de los clientes busca calidad al mejor precio, sin embargo, lo que puede ser excelente para algunos, no lo es para otros. Cuando un individuo adquiere un producto o servicio, lo hace para satisfacer una necesidad, pero siempre espera que la nueva adquisición funcione como lo esperado, o al menos como se lo prometieron en el anuncio publicitario. Muchas veces la calidad se paga, justificando de esta forma el dicho de que lo barato sale caro. El significado de calidad puede adquirir múltiples interpretaciones, ya que todo dependerá del nivel de satisfacción o conformidad del cliente. Sin embargo, las calidades el resultado de un esfuerzo arduo, se trabaja de forma eficaz para poder satisfacer el deseo del consumidor. Dependiendo de la forma en que un producto o servicio sea aceptado o rechazado por los clientes, podremos decir si éste es bueno o malo. Muchas veces el nivel de calidad se mide de acuerdo a la reacción y preferencias del cliente. Desde el mismo momento en que éste llega al establecimiento comercial, sabe exactamente qué va a comprar y dónde ubicarlo, va directo al lugar donde se encuentra el producto de su preferencia. En ocasiones, no encontrará lo que está buscando y por tanto se decidirá por otro producto de mayor o menor precio, sin embargo, cuando su nivel de preferencia se afinca en una determinada marca, el cliente prefiere seguir buscando en otros establecimientos en vez de resolverse con un producto sustitutivo. FORMAS DE TRAZABILIZAR UN ALGORITMO La traza de un Algoritmo se puede definir como la ejecución manual de forma secuencial de las sentencias que lo componen. La función principal que posee realizar la traza de un algoritmo es la de comprobar que éste funciona correctamente o para realizar la etapa de depuración en la que se intenta corregir errores, simplificar el algoritmo al máximo e incrementar su eficacia y velocidad. Formas de representar un algoritmo: * Pseudocódigo: Es una técnica para el diseño de programas que permite definir las estructuras de datos. * Diagrama De Flujo: Es una técnica que representa de forma grafica los algoritmos, aunque su empleo ha disminuido considerablemente por la aparición de los lenguajes de programación. *Diagrama N-S: también conocido como diagrama de Chapín es una técnica de especificación de algoritmos que combina la descripción textual, propia del pseudocódigo, con la representación gráfica del diagrama de flujo. FORMAS Y TÉCNICAS DE DOCUMENTAR UN ALGORITMO Y UN PROGRAMA Son comentarios, etiquetas de texto, que facilitan la comprensión del programa Documentación La documentación del programa es fundamental para diseñadores y usuarios .En pseudocódigo solo se documentarán los algoritmos internamente, esto es, se efectuarán comentarios de ciertas acciones o grupos de acciones para permitir al diseñador o al equipo del diseño releer el algoritmo con facilidad. Para documentar internamente un algoritmo en pseudocódigo se empleará la doble barra () y a continuación el texto o la frase explicativa. Al ejecutar el algoritmo, este texto a la derecha de la debe ser ignorado, pues no constituye a una acción algorítmica. Documentar el código de un programa es añadir suficiente información como para explicar lo que hace, punto por punto, de forma que no sólo los ordenadores sepan qué hacer, sino que además los humanos entiendan qué están haciendo y por qué. Porque entre lo que tiene que hacer un programa y cómo lo hace hay una distancia impresionante: todas las horas que el programador ha dedicado a pergeñar una solución y escribirla en el lenguaje que corresponda para que el ordenador la ejecute ciegamente .Documentar un programa no es sólo un acto de buen hacer del programador por aquello de dejar la obra rematada. Es además una necesidad que sólo 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: Todos los programas tienen errores y descubrirlos sólo es cuestión de tiempo y de que el programa tenga éxito y se utilice frecuentemente Todos los programas sufren modificaciones a lo largo de su vida, al menos todos aquellos que tienen éxito. Por una u otra razón, 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 revisión de código es por lo que es importante que el programa se entienda: para poder repararlo y modificarlo. INTRODUCCIÓN A LA ELABORACIÓN MANUAL DE USUARIO Manual De Usuario Expone los procesos que el usuario puede realizar con el sistema implantado. Para lograr esto, es necesario que se detallen todas y cada una de las características que tienen los programas y la forma de acceder e introducir información. Permite a los usuarios conocer el detalle de qué actividades ellos deberán desarrollar para la consecución de los objetivos del sistema. Reúne la información, normas y documentación necesaria para que el usuario conozca y utilice adecuadamente la aplicación desarrollada. Objetivos Que el usuario conozca cómo preparar los datos de entrada. Que el usuario aprenda a obtener los resultados y los datos de salida. Servir como manual de aprendizaje. Servir como manual de referencia. Definir las funciones que debe realizar el usuario. Informar al usuario de la respuesta a cada mensaje de error. Pasos a seguir para definir como desarrollar el manual de usuario. Identificar los usuarios del sistema: personal que se relacionará con el sistema. Definir los diferentes tipos de usuarios: se presentan los diferentes tipos de usuarios que usarían el sistema. Ejemplo: usuarios directos, indirectos. Definir los módulos en que cada usuario participará: Se describen los módulos o procesos que se ejecutarán por cada usuario en forma narrativa breve y clara. Importancia Del Manual De Usuario El Manual de Usuario facilita el conocimiento de: Los documentos a los que se pueden dar entrada por computadora. Los formatos de los documentos. Las operaciones que utiliza de entrada y salida de los datos. El orden del tratamiento de la computadora con los datos introducidos. El momento en que se debe solicitar una operación deseada. Los resultados de las operaciones realizadas a partir de los datos introducidos. Al elaborar el Manual de Usuario, hay que tener en cuenta a quién va dirigido es decir, el manual puede ser manejado desde el director de la empresa hasta el introductor de datos. Por consiguiente, debe redactarse de forma clara y sencilla para que lo entienda cualquier tipo de usuario. Contenido Diagrama general del sistema Muestra en forma condensada el flujo general de la información y de las actividades que se realizan en el sistema. Proporciona una visión general del sistema. Representar los diagramas utilizando para ello diagramas de bloques. Diagrama particular detallado. Presentar gráficamente todos los pasos que se efectúen dentro del departamento usuario a quien está dirigido este manual. Deben especificarse los archivos de entrada, salida, los resultados, revisiones y procesos manuales. Explicación Genérica De Las Fases Del Sistema En este punto se explica en forma específica y detallada todas las operaciones que aparecen representadas en forma gráfica en el diagrama particular. Se analizan cada una de las fases señalando: El proceso principal que se desarrolla. La entrada de la información. La obtención de un resultado parcial. El envío de información a otra dependencia. Instalación Del Sistema La instalación del sistema proporciona detalles completos sobre la forma de instalar el sistema en un ambiente particular. Iniciación Al Uso Del Sistema En este punto se explica cómo iniciarse en el sistema y cómo se pueden utilizar sus cualidades comunes. Esta documentación debe decir al usuario cómo salir de un problema cuando las cosas funcionan mal. Manual De Referencia Es el documento definitivo de cara al usuario y debe ser completo. Describe con detalle las cualidades del sistema y su uso, los informes de error generados y las situaciones en que surgen esos errores. Dependiendo del sistema, los documentos al usuario se pueden proporcionar por separado o reunidos en varios volúmenes. Los sistemas de ayuda en línea evitan que el usuario pierda tiempo en consultas manuales. Caducidad De Documento Fuente Y Destino Final Como el usuario trabajará con documentos fuentes, éstos podrán tener un período de retención y un destino especificado. TÉCNICAS DE ESCRITURA Y PRUEBAS DE ALGORITMOS Y PROGRAMAS Lenguaje Natural Diagramas de Flujo PseudoCòdigo Diagramas de Flujo Se basan en la utilización de diversos símbolos para representar operaciones específicas. Se les llama diagramas de flujo porque los símbolos utilizados se conectan por medio de flechas para indicar la secuencia de operación. Pseudocódigo Es una descripción de un algoritmo de programación informático de alto nivel compacto e informal que utiliza las convenciones estructurales de un lenguaje de programación verdadero, pero que está diseñado para la lectura humana en lugar de la lectura en máquina, y con independencia de cualquier otro lenguaje de programación. Lenguaje natural Es el lenguaje hablado o escrito por humanos para propósitos generales de comunicación. Son aquellas lenguas que han sido generadas espontáneamente en un grupo de hablantes con propósito de comunicarse, a diferencia de otras lenguas, como puedan ser una lengua construida, los lenguajes de programación o los lenguajes usados en el estudio de la lógica formal, especialmente la lógica matemática. UNIDAD 3 DATOS Y ENTIDADES PRIMITIVAS Concepto y diferencia entre dato e información, tipos de datos. Los Operadores: Concepto y tipos de operadores. Las Expresión: concepto, tipos y evaluación de expresiones, Los Identificadores: Concepto, Reglas de escritura, las variables: clasificación de variables según su contenido (numéricas, lógicas y alfanuméricas) y su uso (de trabajo, contador y acumulador), constantes. DESCRIPCIÓN DE LA UNIDAD 3 Tipos de Datos: Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple carácter, tal como ‘b’, un valor entero tal como 35. El tipo de dato determina la naturaleza del conjunto de valores que puede tomar una variable Tipos de Datos Simples: Datos Numéricos: Permiten representar valores escalares de forma numérica, esto incluye a los números enteros y reales. Este tipo de datos permiten realizar operaciones aritméticas comunes. Datos Lógicos: Son aquellos que solo pueden tener dos valores, cierto o falso, ya que representan el resultado de una comparación entre otros datos, numéricos o alfanuméricos. Datos Alfanuméricos: Es una secuencia de caracteres alfanuméricos que permiten representar valores identificables de forma descriptiva, esto incluye nombre de personas, direcciones, etc. Es posible representar números como alfanuméricos, pero estos pierden su propiedad matemática, es decir, no es posible hacer operaciones con ellos. Este tipo de datos se representan encerrados entre comillas. OPERADORES Y OPERANDOS Operadores: Son elementos que relacionan de forma diferente, los valores de una o más variables y/o constantes. Es decir, los operadores nos permiten manipular valores. EXPRESIONES Las expresiones son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones especiales. EVALUACIÓN DE EXPRESIONES Como ya sabemos la sintaxis en lógica es la forma correcta de escribir una fórmula y la semántica es lo que significa. Como en lógica solamente tenemos dos valores una fórmula solamente puede ser verdadera o falsa. Para determinar su valor seguimos las reglas simples que dimos en las definiciones básicas de acuerdo a su tabla de verdad. Esto lo hacemos mediante interpretaciones. Una interpretación de una fórmula es un conjunto de valores que se les asignan a sus proposiciones atómicas. Al interpretar una fórmula lo que finalmente vamos a obtener es un valor de verdad, bien sea verdadero o falso. Pero para poder encontrarlo muchas veces el proceso en laborioso porque puede estar formada por varias proposiciones atómicas. Primeramente se le asignan valores de verdad a los átomos y se puede encontrar el valor de la expresión. PARA MAS INFORMACION CONSULTA EN: http://www.mitecnologico.com/Main/EvaluacionDeExpresiones ¿Qué son los identificadores? La mayoría de los elementos de un algoritmo escrito en pseudocódigo se diferencian entre sí por su nombre. Por ejemplo, los tipos de datos básicos se nombran como: entero, real, lógico y carácter Cada uno de ellos es un identificador. Un identificador es el nombre que se le da a un elemento de un algoritmo (o programa). Por ejemplo, el tipo de dato entero hace referencia a un tipo de dato que es distinto a todos los demás tipos de datos, es decir, los valores que puede tomar un dato de tipo entero, no son los mismos que los que puede tomar un dato de otro tipo. Los identificadores entero, real, logico y caracter están predefinidos, forman parte del lenguaje algorítmico. No obstante, en un algoritmo también pueden existir identificadores definidos por el programador. Por ejemplo, un algoritmo puede utilizar variables y constantes definidas por el programador. Además, los algoritmos también se deben nombrar mediante un identificador. En pseudocódigo, a la hora de asignar un nombre a un elemento de un algoritmo, se debe de tener en cuenta que todo identificador debe cumplir unas reglas de sintaxis. Para ello, en nuestro pseudocódigo CEE (C en Español), vamos a seguir las mismas reglas de sintaxis que existen en lenguaje C: 1. Consta de uno o más caracteres. 2. El primer carácter debe ser una letra o el carácter subrayado (_), mientras que, todos los demás pueden ser letras, dígitos o el carácter subrayado (_). Las letras pueden ser minúsculas o mayúsculas del alfabeto inglés. Así pues, no está permitido el uso de las letras 'ñ' y 'Ñ'. 3. No pueden exitir dos identificadores iguales, es decir, dos elementos de un algoritmo no pueden nombrarse de la misma forma. Lo cual no quiere decir que un identificador no pueda aparecer más de una vez en un algoritmo. De la segunda regla se deduce que un identificador no puede contener caracteres especiales, salvo el carácter subrayado (_). Es importante resaltar que las vocales no pueden llevar tilde ni diéresis. Ejemplo 1: Algunos identificadores válidos que pueden ser definidos por el programador son: numero dia_del_mes PINGUINO1 _ciudad Z LAS VARIABLES En programación, una variable es un espacio de memoria reservado para almacenar un valor que corresponde a un tipo de dato soportado por el lenguaje de programación. Una variable es representada y usada a través de una etiqueta (un nombre) que le asigna un programador o que ya viene predefinida. Por ejemplo, en la variable de nombre "num", se almacena el número 8 (de tipo entero). De forma genérica, para utilizarla y sumarle un uno se debería programar: num = num + 1. Una variable puede ser del tipo boleano, entero, decimal de coma flotante, caracter, cadena de texto, arreglo, matriz, tipo definido por el usuario, etc. Estos son tipos de datos. Una variable, por lo general, como su nombre lo indica, puede variar su valor durante la ejecución del programa. Dependiendo del lenguaje de programación usado, también puede cambiar el tipo de dato que almacena. CONSULTAR EN: http://www.alegsa.com.ar/Dic/variable.php TIPOS DE VARIABLES Las variables pueden ser de los siguientes tipos: (El número indicado en segundo lugar indica el número de Bytes que ocupa en memoria.) Booleana (2) Admite los valores 0 y 1, o True (verdadero) y False (falso) Byte (1) Números enteros, en el rango de 0 a 255 Integer (2) Números enteros en el rango de -32768 a 32767 Long (4) Números enteros en el rango de -2147483648 a 2147483647 Single (4) Punto flotante, simple precisión Doble (8) Punto flotante, doble precisión. Currency (8) Entero, con punto decimal fijo (Típico de monedas) String (*) Cadenas alfanuméricas de longitud variable o fija Date (8) Fechas Objet (4) Referencia a objetos Variant (**) Otros tipos de datos Una variable tipo String ocupa el mismo número de bytes que caracteres tenga la cadena. Una variable tipo Variant ocupa 16 bytes si se trata de un número y 22 bytes + longitud de la cadena si se trata de un dato tipo cadena de caracteres. Existen también variables definidas por el usuario (Ya verá la sentencia Type). En este tipo de variables se pueden introducir muchos datos de distinto tipo. Los bytes necesarios para almacenar esa variable dependerán de los datos que se hayan definido. Dentro de las variables Objet (variables que se refieren a objetos) existe una gran variedad que a estas alturas del curso no debemos complicarnos con ellas. Pero para adelantar algo, veremos que una variable puede ser del tipo Form - Formulario - , tipo Picture, etc. etc. Cada tipo de variable ocupa unos determinados bytes. Si no se define una variable, VB toma como tipo por defecto para la variable el tipo Variant. Este tipo ocupa mas bytes que, por ejemplo, un integer. Si el tipo de dato que vamos a introducir en una variable es un integer, y no la hemos declarado como tal, VB asumirá para esa variable que es del tipo Variant, lo que le llevará a gastar más bytes de memoria (16) que los que necesitaría (2) si la hubiésemos declarado previamente. Si esa variable va a estar en el rango de 0 a 255, y no declaramos previamente que la variable va a ser del tipo Byte, o la declaramos como integer, p. e., estamos desperdiciando memoria RAM y posiblemente, retardando la ejecución del programa. Lo mismo podemos decir del resto de las variables, y lo importante que es definirlas y definirlas bien. PARA MAS INFORMACION CONSULTAR EN: http://javier-campusomega.blogspot.com/2009/03/tipos-de-variables.html UNIDAD 4 METODOLOGÍA PARA EL ANÁLISIS Y PLANTEAMIENTO DE PROBLEMAS Identificación del Problema. Identificación de los datos necesarios (entradas). Identificación de los datos a obtener (salidas). Descripción de las operaciones a utilizar (cálculos). Descripción de los pasos para llegar a la solución (procesos). DESCRIPCION DE LA UNIDAD 4 METODOLOGÍA PARA LA CONSTRUCCIÓN DE PROGRAMAS. Presentaremos de forma muy general los principales pasos que se deben seguir para resolver problemas aplicando técnicas de programación. Esta metodología será desarrollada a lo largo de todo el curso, en la medida que se estudien las restantes unidades del mismo. FORMULACIÓN Y ANÁLISIS DEL PROBLEMA Consiste en entender de qué se trata el problema planteado y esbozar su posible solución, concluyendo con una clara definición de tres aspectos: 1º qué es lo que nos piden, es decir, definición del resultado o solución deseada (para qué). 2º cómo obtener lo que nos piden (qué hacer). 3º qué necesitamos para obtener los resultados pedidos (con qué). Esto último nos facilitará la construcción de lo que denominaremos Especificación Funcional. - Especificación Funcional: Consiste en determinar las funciones que se van a realizar (qué hacer) y sus respectivas entradas (con qué) y salidas (para qué): 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 operación(es) que deben efectuarse sobre las entradas para obtener las salidas deseadas.´ - Especificación de los Argumentos o Parámetros: Consiste en la documentación de los argumentos o parámetros (sean estos de entrada, salida o intermedios) requeridos en la solución del problema, mediante la elaboración de una tabla que contemple los siguientes aspectos: - Establecimiento de Restricciones y Atributos: Consiste en determinar bajo qué restricciones se ha de operar y cuales son las medidas de rendimiento y calidad que debe tener el sistema (programa). DISEÑO Consiste en diseñar cómo hace el programa la tarea solicitada. En forma general consiste en dividir el programa en subprogramas y cada subprograma en módulos. El criterio de descomposición más utilizado es el de tipo funcional, el cual produce una estructura jerárquica en la que cada módulo ejecuta una o más funciones y para cada módulo se produce una especificación de programa o módulo, la cual contiene lo siguiente: Nombre del Programa o Módulo. Función que desarrolla. Parámetros o Argumentos. Parámetros o Argumentos de Entrada. Parámetros o Argumentos de Salida. Estructura de Datos Requerida. Lenguaje de Programación. Algoritmo. Donde ALGORITMO es un conjunto finito de pasos en secuencia que indican como se resuelve un determinado problema. UNIDAD 5 PROGRAMACIÓN ESTRUCTURADA Teoremas de la programación estructurada. Estructuras de control Estructuras de decisión: concepto, tipos y sintaxis: Condicional, simples, dobles, múltiples, anidadas y selectivas. Estructuras de control iterativas: Concepto y tipos, Ciclo Mientras y Repetir: sintaxis y métodos para salir del ciclo. Ciclo para: Sintaxis. Ciclos anidados. DESCRIPCION DE LA UNIDAD 5 TEOREMAS D ELA PROGRAMACIÓN ESTRUCTURADA La programación estructurada es una técnica para escribir programas (programación de computadora) de manera clara. Para ello se utilizan únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN). Hoy en día las aplicaciones informáticas son mucho más ambiciosas que las necesidades de programación existentes en los años 1960, principalmente debido a las aplicaciones gráficas, por lo que las técnicas de programación estructurada no son suficientes. Ello ha llevado al desarrollo de nuevas técnicas, tales como la programación orientada a objetos y el desarrollo de entornos de programación que facilitan la programación de grandes aplicaciones. A finales de los años 1970 surgió una nueva forma de programar que no solamente daba lugar a programas fiables y eficientes, sino que además estaban escritos de manera que facilitaba su comprensión posterior. El teorema del programa estructurado, propuesto por Böhm-Jacopini, demuestra que todo programa puede escribirse utilizando únicamente las tres instrucciones de control siguientes: Secuencia Instrucción condicional. Iteración (bucle de instrucciones) con condición al principio. Solamente con estas tres estructuras se pueden escribir todos los programas y aplicaciones posibles. Si bien los lenguajes de programación tienen un mayor repertorio de estructuras de control, éstas pueden ser construidas mediante las tres básicas citadas. ESTRUCTURAS DE CONTROL Estructura secuencial Una estructura de programa es secuencial si las instrucciones se ejecutan una tras otra, a modo de secuencia lineal, es decir que una instrucción no se ejecuta hasta que finaliza la anterior, ni se bifurca el flujo del programa. Ejemplo: INPUT x INPUT y auxiliar= x x= y y= auxiliar PRINT x PRINT y Esta secuencia de instrucciones permuta los valores de x e y, con ayuda de una variable auxiliar, intermedia. 1º Se guarda una copia del valor de x en auxiliar. 2º Se guarda el valor de y en x, perdiendo su valor anterior, pero se mantiene una copia del contenido en auxiliar. 3º Se copia a y el valor de auxiliar, que es el valor inicial de x. El resultado es el intercambio de los valores entre x e y, en tres operaciones secuenciales. Estructura selectiva o de selección La estructura selectiva permite que la ejecución del programa se bifurque a una instrucción (o conjunto) u otra/s, según un criterio o condición lógica establecida, sólo uno de los caminos en la bifurcación será el tomado para ejecutarse. Ejemplo: IF a > b THEN PRINT a ; " es mayor que " ; b ELSE PRINT a ; " no es mayor que " ; b END IF La instrucción selectiva anterior puede presentar uno de dos mensajes: a es mayor que b o a no es mayor que b, según el resultado de la comparación entre a y b; si el resultado de a > b es verdadero, se presenta el primer mensaje, si es falso se exterioriza el segundo. Las palabras clave IF, THEN, ELSE, y END IF; constituyen la propia estructura de la instrucción condicional (palabra reservadas), proporcionada por el lenguaje, el usuario no debe utilizar sus nombres salvo para este fin. El caso ejemplo se ha codificado en BASIC. IF señala el comienzo de la instrucción condicional, y se espera que después siga la condición lógica de control de la instrucción. THEN señala el fin de la condición, y después estará la instrucción a ejecutar si la condición es verdadera. ELSE es opcional, le sigue la instrucción que se ejecutará si la condición es falsa. END IF indica el final de la estructura, luego de ésta el programa seguirá su curso. Ampliando un poco el ejemplo anterior, con estructuras anidadas: IF a > b THEN PRINT a ; " es mayor que " ; b ELSEIF a < b THEN PRINT a ; " es menor que " ; b ELSE PRINT a ; " es igual que " ; b END IF Este ejemplo permite considerar situaciones en las que se tiene más de dos alternativas. En este caso se ha considerado tres, pero hay situaciones en las que deben considerarse más casos y para ellos se puede repetir las veces que sea necesario la opcional ELSEIF. Estructura iterativa Un bucle iterativo o iteración de una secuencia de instrucciones, hace que se repita su ejecución mientras se cumpla una condición, el número de iteraciones normalmente está determinado por el cambio en la condición dentro del mismo bucle, aunque puede ser forzado o explícito por otra condición. Ejemplo: a= 0 b= 7 DO WHILE b > a PRINT a a= a + 1 LOOP Esta instrucción tiene tres palabras reservadas WHILE, DO y LOOP. DO WHILE: señala el comienzo del bucle ("haga mientras") y después de estas palabras se espera la condición lógica de repetición, si la condición es verdadera pasa el control al cuerpo del bucle, en caso contrario el flujo salta directamente al final de la estructura, saliendo de la misma. LOOP: señala el final del cuerpo de la estructura de bucle. El bucle mientras, se repite mientras la condición sea verdadera, esta condición se comprueba o chequea antes de ingresar al cuerpo del bucle, por lo que el mismo puede que no se ejecute nunca (cuando la condición es falsa desde un principio) o bien que se repita tantas veces como resulte y mientras la condición sea cierta. En el ejemplo se tienen definidas dos variables a y b, que al iniciarse el bucle contienen los valores a=0 y b=7. La condición del bucle es b > a. Si a=0 y b=7. la condición es verdadera, en el cuerpo del bucle se escribe el valor de a en pantalla y luego se incrementa esa variable en una unidad. Entonces pasa a ser a=1 y b=7. ... (se repite la secuencia) ... Cuando a=6 y b=7. la condición sigue siendo verdadera, se escribe el valor de a en pantalla y se incrementa en una unidad. Cuando se llega a que a=7 y b=7. Entonces la condición ya resulta falsa y la instrucción WHILE finaliza, saliendo por LOOP. La salida por pantalla de este ejemplo es 0 1 2 3 4 5 6, y se iteró 7 veces. El lenguaje utilizado en el ejemplo (BASIC), además de tener otras del tipo iterativas, permite utilizar la misma estructura indicada, pero de la siguiente forma: a= 0 b= 7 WHILE b > a PRINT a a= a + 1 WEND Que es absolutamente análoga, en éste formato la palabra reservada WEND marca el fin del bucle y no se utiliza ni DO ni LOOP. Estructuras de control En lenguajes de programación, las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa. Con las estructuras de control se puede: De acuerdo a una condición, ejecutar un grupo u otro de sentencias (If-ThenElse y Select-Case) Ejecutar un grupo de sentencias mientras exista una condición (Do-While) Ejecutar un grupo de sentencias hasta que exista una condición (Do-Until) Ejecutar un grupo de sentencias un número determinado de veces (For-Next) Etc Todas las estructuras de control tienen un único punto de entrada y un único punto de salida. Las estructuras de control se puede clasificar en : secuenciales, iterativas y de control avanzadas. Esto es una de las cosas que permite que la programación se rija por los principios de la programación estructurada. Los lenguajes de programación modernos tienen estructuras de control similares. Básicamente lo que varía entre las estructuras de control de los diferentes lenguajes es su sintaxis, cada lenguaje tiene una sintaxis propia para expresar la estructura. Tipos de estructura de control Algunas estructuras de control en el lenguaje Java Antecedentes El término "estructuras de control", viene del campo de la ciencia computacional. Cuando se presentan implementaciones de Java para las estructuras de control, nos referimos a ellas con la terminología de la Especificación del lenguaje Java, que se refiera a ella como instrucciones. Ejecución secuencial Pero por lo general las instrucciones se ejecutan una después de la otra, en el orden en que están escritas, es decir, en secuencia. Este proceso se conoce como ejecución secuencial. Transferencia de control En Java, como en otros lenguajes de programación por excelencia como C y/o C++, el programador puede especificar que las siguientes instrucciones a ejecutarse tal vez no sea la siguiente en secuencia. Esto se conoce como transferencia de control. Hay que tener en cuenta que la instrucción goto es una palabra reservada pero no se utiliza ni se recomienda. Un programa bien estructurado no necesita de esta instrucción. Si sabes programar no utilizaras goto. Estructuras de decisiones simples y dobles: http://webdelprofesor.ula.ve/ingenieria/gilberto/pr1/08_EstructurasDeDecision.pdf PROGRAMACIÓN EN C++ ITERACIONES Y DECISIONES Para mas información visita: http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B/Iteraciones_y_deci siones UNIDAD 6 PROGRAMACIÓN MODULAR Funciones y procedimientos: Definición y Declaración. Ámbito de variables: Datos locales y globales. Llamada de una función y pase d parámetros. DESCRIPCIÓN DE LA UNIDAD 6 Funciones y procedimientos: Definición y Declaración: http://altair.lcc.uma.es/clases/laboratorio/curso200102/tema4.pdf Procedimientos y funciones en C++ http://www.lcc.uma.es/~pastrana/LP/curso0506/Practica05/P05_05.pdf ÁMBITO DE VARIABLES Existe una clasificación de las variables, según dónde y cómo se declaren: Variables locales o automáticas: son las que se declaran en el interior de un bloque y valen solo allí. Solamente tienen visibilidad dentro de ese bloque y su valor se pierde al finalizar éste. Estas variables se crean al entrar a ejecutarse el bloque en el stack, y desaparecen al finalizar; esto hace que de llamada en llamada de una misma función puedan ocupar distintas posiciones en la memoria, y por lo tanto no conservan su valor. Variables externas o globales: Son definidas fuera de las funciones, y ocupan una posición de memoria fija. Para usarlas dentro de una función debo declararlas (explícita o implícitamente). Como externa (forma explícita) o por el contexto (forma implícita). La declaración es implícita si la declaración de la variable se encuentra antes en el archivo. Hay que tener en cuenta que estas variables pueden ser modificadas desde cualquier función, y por lo tanto aumenta la posibilidad de modificar inadvertidamente su valor. Variables estáticas: son permanentes y privadas a la función que las declara. Una variable estática global, es privada al archivo donde se la define. Una variable estática declarada dentro de una función, trabaja como una variable automática, con la diferencia que como ocupa un lugar permanente y fijo en la memoria, guarda su valor de llamada en llamada. Una función es normalmente externa, pero declarada estática es privada al archivo que la declara. VISITA ESTE SITIO PARA MAYOR INFORMACIÓN: http://www.ib.cnea.gov.ar/~servos/CursoC/ambitode.htm PASÓ DE PARAMTROS A UNA FUNCIÓN: http://webdelprofesor.ula.ve/ingenieria/amoret/pd1/clase14.pdf UNIDAD 7 TÉCNICAS DE MANTENIMIENTO DE PROGRAMAS Técnica de prueba caja negra. Reingeniería de programas. TÉCNICA DE PRUEBA CAJA NEGRA Algunos de los métodos empleados en las pruebas de caja negra son los siguientes: Métodos de prueba basados en grafos : en este método se debe entender los objetos (objetos de datos, objetos de programa tales como módulos o colecciones de sentencias del lenguaje de programación) que se modelan en el software y las relaciones que conectan a estos objetos. Una vez que se ha llevado a cabo esto, el siguiente paso es definir una serie de pruebas que verifiquen que todos los objetos tienen entre ellos las relaciones esperadas. En este método: 1. Se crea un grafo de objetos importantes y sus relaciones. 2. Se diseña una serie de pruebas que cubran el grafo de manera que se ejerciten todos los objetos y sus relaciones para descubrir errores. Beizer describe un número de modelados para pruebas de comportamiento que pueden hacer uso de los grafos: Modelado del flujo de transacción. Los nodos representan los pasos de alguna transacción (por ejemplo, los pasos necesarios para una reserva en una línea aérea usando un servicio en línea), y los enlaces representan las conexiones lógicas entre los pasos (por ejemplo, vuelo.información.entrada es seguida de validación /disponibilidad.procesamiento). Modelado de estado finito. Los nodos representan diferentes estados del software observables por el usuario (por ejemplo, cada una de las pantallas que aparecen cuando un telefonista coge una petición por teléfono), y los enlaces representan las transiciones que ocurren para moverse de estado a estado (por ejemplo, petición-información se verifica durante inventario-disponibilidadbúsqueda y es seguido por cliente-factura-información-entrada). Modelado de flujo de datos. Los nodos objetos de datos y los enlaces son las transformaciones que ocurren para convertir un objeto de datos en otro. Modelado de planificación. Los nodos son objetos de programa y los enlaces son las conexiones secuenciales entre esos objetos. Los pesos de enlace se usan para especificar los tiempos de ejecución requeridos al ejecutarse el programa. Gráfica Causa-efecto. La gráfica Causa-efecto representa una ayuda gráfica en seleccionar, de una manera sistemática, un gran conjunto de casos de prueba. Tiene un efecto secundario beneficioso en precisar estados incompletos y ambigüedades en la especificación. Un gráfico de causa-efecto es un lenguaje formal al cual se traduce una especificación. El gráfico es realmente un circuito de lógica digital (una red combinatoria de lógica), pero en vez de la notación estándar de la electrónica, se utiliza una notación algo más simple. No hay necesitad de tener conocimiento de electrónica con excepción de una comprensión de la lógica boleana (entendiendo los operadores de la lógica y, o, y no). Partición equivalente: Pressman, presenta la partición equivalente como un método de prueba de caja negra que divide el campo de entrada de un programa en clases de datos de los que se pueden derivar casos de prueba. Un caso de prueba ideal descubre de forma inmediata una clase de errores que, de otro modo, requerirían la ejecución de muchos casos antes de detectar el error genérico. La partición equivalente se dirige a la definición de casos de prueba que descubran clases de errores, reduciendo así el número total de casos de prueba que hay que desarrollar. Una clase de equivalencia representa un conjunto de estados válidos o no válidos para condiciones de entrada. Típicamente, una condición de entrada es un valor numérico específico, un rango de valores, un conjunto de valores relacionados o una condición lógica. El objetivo de partición equivalente es reducir el posible conjunto de casos de prueba en uno más pequeño, un conjunto manejable que evalúe bien el software. Se toma un riesgo porque se escoge no probar todo. Así que se necesita tener mucho cuidado al escoger las clases. La partición equivalente es subjetiva. Dos probadores quienes prueban un programa complejo pueden llegar a diferentes conjuntos de particiones. En el diseño de casos de prueba para partición equivalente se procede en dos pasos : 1. Se identifican las clases de equivalencia. Las clases de equivalencia son identificadas tomando cada condición de entrada (generalmente una oración o una frase en la especificación) y repartiéndola en dos o más grupos. Es de notar que dos tipos de clases de equivalencia están identificados: las clases de equivalencia válidas representan entradas válidas al programa, y las clases de equivalencia inválidas que representan el resto de los estados posibles de la condición (es decir, valores erróneos de la entrada). 2. Se define los casos de prueba. El segundo paso es el uso de las clases de equivalencia para identificar los casos de prueba. El proceso es como sigue: se asigna un número único a cada clase de equivalencia. Hasta que todas las clases de equivalencia válidas han sido cubiertas por los casos de prueba, se escribe un nuevo caso de prueba que cubra la clase de equivalencia válida. Y por último hasta que los casos de prueba hayan cubierto todas las clases de equivalencia inválidas, se escribe un caso de la prueba que cubra una, y solamente una, de las clases de equivalencia inválidas descubiertas. 3. Análisis de valores límite: los errores tienden a darse más en los límites del campo de entrada que en el centro. Por ello, se ha desarrollado el análisis de valores límites (AVL) como técnica de prueba. El análisis de valores límite lleva a una elección de casos de prueba que ejerciten los valores límite. El análisis de valores límite es una técnica de diseño de casos de prueba que completa a la partición equivalente. En lugar de seleccionar cualquier elemento de una clase de equivalencia, el AVL lleva a la elección de casos de prueba en los extremos de la clase. En lugar de centrarse solamente en las condiciones de entrada, el AVL obtiene casos de prueba también para el campo de salida. Condiciones sublímite. Las condiciones limite normales son las más obvias de descubrir. Estas son definidas en la especificación o son evidentes al momento de utilizar el software. Algunos límites, sin embargo, son internos al software, no son necesariamente aparentes al usuario final pero aún así deben ser probadas por el probador. Estas son conocidas como condiciones sublímites o condiciones límite internas. Una condición sublímite común es la tabla de caracteres ASCII, por ejemplo, si se está evaluando una caja de texto que acepta solamente los caracteres AZ y az, se debe incluir los valores en la partición inválida justo «debajo de» y «encima de» esos caracteres de la tabla ASCII, [", y {. Prueba de la tabla ortogonal : hay aplicaciones donde el número de parámetros de entrada es pequeño y los valores de cada uno de los parámetros está claramente delimitado. Cuando estos números son muy pequeños (por ejemplo, 3 parámetros de entrada tomando 3 valores diferentes), es posible considerar cada permutación de entrada y comprobar exhaustivamente el proceso del dominio de entrada. En cualquier caso, cuando el número de valores de entrada crece y el número de valores diferentes para cada elemento de dato se incrementa, la prueba exhaustiva se hace impracticable. La prueba de la tabla ortogonal puede aplicarse a problemas en que el dominio de entrada es relativamente pequeño pero demasiado grande para posibilitar pruebas exhaustivas. El método de prueba de la tabla ortogonal es particularmente útil al encontrar errores asociados con fallos localizados -una categoría de error asociada con defectos de la lógica dentro de un componente software. La prueba de tabla ortogonal permite proporcionar una buena cobertura de pruebas con bastantes menos casos de prueba que en la estrategia exhaustiva. Adivinando el error: dado un programa particular, se conjetura, por la intuición y la experiencia, ciertos tipos probables de errores y entonces se escriben casos de prueba para exponer esos errores. Es difícil dar un procedimiento para esta técnica puesto que es en gran parte un proceso intuitivo y ad hoc. La idea básica es enumerar una lista de errores posibles o de situaciones propensas a error y después escribir los casos de prueba basados en la lista. Por ejemplo, la presencia del valor 0 en la entrada de un programa es una situación con tendencia a error. Por lo tanto, puede ser que se escriba los casos de prueba para los cuales los valores particulares de la entrada tienen valor 0 y para qué valores particulares de la salida se colocan de manera forzada a 0. Información extraída de: http://gemini.udistrital.edu.co/comunidad/grupos/arquisoft/fileadmin/Estudiantes/Prueb as/HTML%20-%20Pruebas%20de%20software/node28.html REINGENIERIA DE PROGRAMAS Reingeniería del software se puede definir como: “modificación de un producto software, o de ciertos componentes, usando para el análisis del sistema existente técnicas de Ingeniería Inversa y, para la etapa de reconstrucción, herramientas de Ingeniería Directa, de tal manera que se oriente este cambio hacia mayores niveles de facilidad en cuanto a mantenimiento, reutilización, comprensión o evaluación.” Cuando una aplicación lleva siendo usada años, es fácil que esta aplicación se vuelva inestable como fruto de las múltiples correcciones, adaptaciones o mejoras que han podido surgir a lo largo del tiempo. Esto deriva en que cada vez que se pretende realizar un cambio se producen efectos colaterales inesperados y hasta de gravedad, por lo que se hace necesario, si se prevé que la aplicación seguirá siendo de utilidad, aplicar reingeniería a la misma. Entre los beneficios de aplicar reingeniería a un producto existente se puede incluir: * Pueden reducir los riegos evolutivos de una organización. * Puede ayudar a las organizaciones a recuperar sus inversiones en software. * Puede hacer el software más fácilmente modificable * Amplía las capacidades de las herramientas CASE * Es un catalizador para la automatización del mantenimiento del software * Puede actuar como catalizador para la aplicación de técnicas de inteligencia artificial para resolver problemas de reingeniería La reingeniería del software involucra diferentes actividades como son: * Análisis de inventarios * Reestructuración de documentos * Ingeniería inversa * Reestructuración de programas y datos * Ingeniería directa con la finalidad de crear versiones de programas ya existentes que sean de mejor calidad y los mismos tengan una mayor facilidad de mantenimiento. Para mas información acerca del tema visita: http://cnx.org/content/m17438/latest/