Información de interes...

Este BLOG tiene como finalidad divulgar, orientar y generar un espacio virtual de participación relacionado con la algorítmica y la programación. Diseñadores: Participantes (comunidad educativa) de la Sección I03-031 adscritos al Programa Nacional de Formación en Informática del Colegio Universitario Francisco de Miranda. Nota de los diseñadores: Toda la información recabada y suministrada en este blog es de carácter académico; en tal sentido, la que no es de autoria propia de los diseñadores refleja o indica la fuente de origen a fin de reconocer y agradecer por este medio los aportes teóricos y prácticos que nos han suministrados todas esas personas que de alguna u otra manera son colaboradores anónimos.

miércoles, 30 de marzo de 2011

Técnicas de Mantenimiento de Programas: Técnica de Prueba Caja Negra


 
Integrantes:

                                                   Guerrero Geraldine C.I 21.282.516
                                     Ortiz Moises C.I 20.652.961
                                                       Sebrihant Wendy C.I 21438446

Definición: Permite obtener condiciones de entrada, que ejecutan todos los requisitos funcionales de un programa. Las pruebas de caja negra no son una alternativa a las técnicas de prueba de caja blanca. Es un enfoque complementario.

Ámbito aplicación: Las pruebas de caja negra se llevan a cabo sobre la interfaz del software, obviando el comportamiento interno y  estructura del programa.

Utilidad: Las pruebas de caja negra se centran en lo que se espera de un módulo, es decir, intentan encontrar casos en que el módulo no se atiene a su especificación.

Características:

Los casos de prueba de la caja negra pretende demostrar que:
  • Las funciones del software son operativas.
  • La entrada se acepta de forma adecuada.
  • Se produce una salida correcta, y
  • La integridad de la información externa se mantiene.
Ventajas
A diferencia de la prueba de la caja blanca, que se lleva a cabo previamente en el proceso de prueba, la prueba ‘caja negra’ tiende a ser aplicada en posteriores fases de prueba. Ya que la prueba de la caja negra intencionadamente ignora la estructura de control, concentra su atención en el dominio de la información.

Desventajas

El problema con las pruebas de caja negra no suele estar en el número de funciones proporcionadas por el módulo (que siempre es un número muy limitado); sino en los datos que  pasan a estas funciones. El conjunto de datos posibles suele ser muy amplio (por ejemplo, un entero).

Diseño

La prueba verifica que el ítem que se está probando, cuando se dan las entradas apropiadas produce los resultados esperados.  Los datos de prueba se escogerán atendiendo a las especificaciones del problema, sin importar los detalles internos del programa, a fin de verificar que el programa corra bien. 

Tipos 

  • Prueba de partición equivalente

Este método de prueba de caja negra divide el dominio de entrada de un  programa en clases de datos, a partir de las cuales deriva los casos de prueba. Cada una de estas clases de equivalencia representa a un conjunto de estados válidos o inválidos para las condiciones de entrada.

  • 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. 

Objetivo
Determinar la funcionalidad del software, parte de tratar al programa como si fuera una función matemática, estudiando si las respuestas o salidas son ¨codominio¨ de los datos entrantes ¨dominio¨. La prueba de caja negra tiene otras metas, determinar la eficiencia del programa desde el desempeño en el equipo, el tiempo de retardo de las salidas hasta el nivel de recuperación del sistema luego de fallas o caídas sean estas producidas por manejo incorrecto de datos, equipo, o producidas externamente como cortes de energía.

Referencias Bibliográficas
·         Técnica de Prueba Caja Negra: Definición.
·        Técnica de Prueba Caja negra: Ámbito de Aplicación, Tipos de Prueba de Caja Negra.
·         Técnica de Prueba Caja Negra: Utilidad.
·        Técnica de Prueba Caja Negra: Características, Ventajas. 
http://trabajocolaborativo3.blogspot.com/2008/11/prueba-de-caja-negra.html.
·          Técnica de Prueba Caja Negra: Diseño 
http://pruebasoftware.blogcindario.com/2005/10/00002-disenos-de-casos-de-prueba.html.

Programación Estructurada. Teoremas de la programación estructurada

Dayleth López C.I. 20.302.665

Programación estructurada
La programación estructurada es una forma de escribir programas de ordenador (programación de computadora) de manera clara. Para ello utiliza ú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.

TEOREMAS

 

Estructura secuencial

Una estructura de programa es secuencial si se ejecutan una tras otra a modo de secuencia, es decir que una instrucción no se ejecuta hasta que finaliza la anterior.

 

Estructura selectiva o de selección

La estructura selectiva permite que la ejecución del programa se bifurque a una instrucción u otra según un criterio o condición lógica, solo una de estas instrucciones se ejecutará.

Estructura iterativa
Un bucle iterativo o iteración de una secuencia de instrucciones, hace que se repitan mientras se cumpla una condición, en un principio el número de iteraciones no tiene porque estar determinado.

 

Ventajas de la programación estructurada

·         Los programas son más fáciles de entender, ya que pueden ser leídos de forma secuencial, sin necesidad de hacer seguimiento a saltos de línea (GOTO) dentro de los bloques de código para entender la lógica.
·         La estructura del programa es clara, puesto que las instrucciones están más ligadas o relacionadas entre sí.
·         Reducción del esfuerzo en las pruebas. El seguimiento de los fallos o errores del programa ("debugging") se facilita debido a la estructura más visible, por lo que los errores se pueden detectar y corregir más fácilmente.
·         Reducción de los costos de mantenimiento de los programas.
·         Programas más sencillos y más rápidos (ya que es más fácil su optimización).
·         Los bloques de código son auto explicativos, lo que facilita la documentación.
·         Los GOTO se reservan para construir las instrucciones básicas. Aunque no se usan de forma directa, por estar prohibida su utilización, están incluidas implícitamente en las instrucciones de selección e iteración.
·         Un programa escrito de acuerdo a estos principios no solamente tendrá una mejor estructura sino también una excelente presentación.
·         La programación estructurada ofrece estos beneficios, pero no se la debe considerar como una panacea ya que el desarrollo de programas es, principalmente, una tarea de dedicación, esfuerzo y creatividad.

 

Desventajas de la programación estructurada

·         El principal inconveniente de este método de programación es que se obtiene un único bloque de programa, que cuando se hace demasiado grande puede resultar problemático su manejo; esto se resuelve empleando la programación modular, definiendo módulos interdependientes programados y compilados por separado (en realidad esto no es necesario, pero es recomendable para su mantenimiento y funcionalidad).
·         En realidad, cuando se programa hoy en día (inicios del siglo XXI) se suelen utilizar, tanto las técnicas de programación estructurada como las de programación modular, de forma conjunta y por lo tanto es posible que cuando uno haga referencia a la programación estructurada esté considerando también las técnicas de modularización.
·         Un método un poco más sofisticado es la programación por capas, en la que los módulos tienen una estructura jerárquica en la que se pueden definir funciones dentro de funciones o de procedimientos.

 

Referencias Bibliográficas

  1. García-Bermejo Giner, José Rafael (2 de 2008) (en español). Programación estructurada en C (1 edición). Pearson Prentice Hall. ISBN978-84-8322-423-6.
  2. Valls Ferrán, José María; Camacho Fernández, David (9 de 2004) (en español). Programación estructurada y algoritmos en Pascal (1 edición). Pearson Alhambra. ISBN 978-84-205-4246-1.
  3. (en español) Programación estructurada II (1 ed. 4 imp. edición). Enseñanza Técnica y Sistemas, S.A.. 6 de 2000. ISBN 978-84-85838-90-5.
  4. (en español) Pseudocódigos y programación estructurada (1 edición). Centro Técnico Europeo de Enseñanzas Profesionales. 2 de 1997. ISBN 978-84-8199-065-2.
  5. Sánchez Andrés, María Ángeles (5 de 1996) (en español). Programación estructurada y fundamentos de programación (1 edición). McGraw-Hill / Interamericana de España, S.A.. ISBN 978-84-481-0557-0.

Programación Modular. Funciones y Procedimientos: Definición y Declaración.

Cleimar Pérez, C.I. 20.174.279
Vanessa Olmos, C.I. 22.505.059
Jesús Vásquez, C.I. 10.110.581
Programación Modular
La programación modular permite dividir un problema en módulos o subproblemas más simples que permitan la solución del mismo, si estos no llegaran a ser suficiente, tiene que seguirse dividiendo en subproblemas hasta que se halle el resultado y poder ser manipulados con cualquier lenguaje de programación. A esta técnica de programación comúnmente se le denomina “Top Down” o “descendente” y “divide y vencerás”.
El diseño descendiente es aquel que comienza desde lo más general hasta lo más específico, en cuanto son problemas grandes, a los cuales se convertirán en subproblemas muchos más pequeños.
            Los módulos funcionan de manera que puedan resolver los subproblemas creados o las divisiones que los mismos poseen, permitiendo trabajar en conjuntos para el desarrollo de la solución. Ya que este proviene de propuestas tecnológicas que son adoptadas por una comunidad de programadores cuyo núcleo central es incuestionable en cuanto a que unívocamente trata de resolver uno o varios problemas claramente delimitados, con programaciones grandes y complejas. Cabe destacar que este tipo de programación es guiada o estructurada por una evolución de programas que han sido estudiados y manejados  a través del tiempo.
Este tipo de programación, para poder resolver un problema tiene que ser dividido a subproblemas
Teniendo en cuenta sus características, algunos módulos no trabajan en común, pero a través de una serie de comunicaciones detalladas, pueden manejarse y entenderse correctamente.
Características
·        Fácil comprensión a causa de la modularidad
·        Reutilización de módulos
·        Disminuye la complejidad del algoritmo
·        Disminuye el tamaño total del programa
·        Facilidad de localizar los errores en el algoritmo
·        No se hay inconveniente modificación de algún  módulo ya que no afecta a los demás
·        Da la mejor comprensión del problema y reduce el código.
·        Debe tener claras las dependencias del lenguaje (Esto permite cambiar de lenguaje en medio del diseño sin ningún trauma).
Los módulos son llamados rutinas o subrutinas que en los lenguajes de programación son conocidos como procedimientos y funciones.

Funciones y Procedimientos

            Los procedimientos y funciones son subprogramas que realizan tareas específicas. Para invocarlo, es decir, para hacer que se ejecute, basta con escribir su nombre en el cuerpo de otro procedimiento o en el programa principal. La diferencia entre procedimiento y función está dada por su utilización dentro de nuestro diseño de la solución, un procedimiento realiza una tarea y al finalizar retorna al punto donde fue invocado, no así la función al ejecutarse obtiene un valor el cual es retornado al punto donde fue invocado por ejemplo raíz cuadrada es una función por que retorna un resultado.  

Declaración de Funciones y Procedimientos

Al igual que los identificadores (Variables), los procedimientos y funciones deben declararse dentro del programa. La declaración de un procedimiento NO indica a la computadora que ejecute las instrucciones dadas, sino que indica a la computadora cuáles son estas instrucciones y dónde están localizadas cuando sea necesario.

La declaración puede realizarse según las necesidades del programador podrían presentarse como procedimientos, funciones, variables entre otras, que por una u otra cosa permiten el desarrollo del programa.

Referencias:

Estándares de calidad en el diseño de algoritmos y construcción de programas

Peralta David       CI 20.853.399
Martínez Carlos   CI 21.132.921
Subero Kerlly       CI 23.926.616


   Antes de empezar con el tema primero debemos saber que un algoritmo es una serie de operaciones detalladas, a ejecutar paso a paso y que conduce a la resolución de un problema. Un algoritmo puede tener varias soluciones o formas de realizarse, conformado por una serie de sentencias o pasos que posteriormente serán  escritas en un lenguaje de programación. De un modo más formal, un algoritmo es una secuencia finita de instrucciones realizables.
Característica del algoritmo
  • Debe ser finito, es decir, debe tener una sentencia de finalización de manera que no se convierta en un ciclo indefinido. Si se realiza un algoritmo, se debe terminar en algún momento
  • Debe tener preciso, es decir, debe cumplir con lo solicitado.
  • Debe tener un orden de ejecución de cada sentencia o paso.
  • Debe ser definido, es decir, un algoritmo al ser realizado más de una vez, debe generar el mismo resultado en cada iteración. Si se sigue un algoritmo dos o tres veces, se debe obtener el mismo resultado.
     Por otra parte en los estándares de calidad hablamos precisamente de las necesidades que tiene el usuario, estas necesidades se comienzan a encontrar en un camino de la solución a través de la aplicación de elementos de calidad. Los software requieren que los analistas diseñadores y desarrolladores del área apliquen características para resolver algún tipo de problema o circunstancia que se le presente al usuario. Evaluando así la calidad del producto, la eficiencia y la eficacia de estos. Debemos tener en cuenta que el algoritmo nos enseña a analizar cualquier tipo de problema que se nos presente.
Diseño de algoritmo
  • Entrada: Se refiere a los datos que refleja el enunciado del problema. Conduce al diseño de un algoritmo por medio de códigos.
  • Proceso: Es el procedimiento de calculo donde se definen cada una de las variables. Se implementa el algoritmo en un código escrito en un lenguaje de programación. Señala las ideas desarrolladas en las etapas de análisis y diseño.
  • Salida: Es el resultado a ser emitido por el algoritmo.
Diagrama de flujo: Es la representación grafica de la entrada, proceso y salida indicados para la solución de un problema.
Pseudocodigo: Forma escrita, donde se vacía los datos en un lenguaje de programación. Es comúnmente utilizado por los programadores para omitir secciones de código o para explicación del paradigma que tomo el mismo programador  para hacer ser códigos, esto quiere decir que el pseudocódigo no es programable sino facilita la programación.


Ventajas:
  •  Fácil implementación.
  • No requiere memoria adicional.
  • Soluciona cualquier tipo de problema que este dentro de las necesidades del usuario.
  • Permite la realización de un programa dado.
Desventajas:
  • Muy lento.
  • Realiza numerosas comparaciones.
  • Realiza numerosos intercambios.

Referencias bibliograficas.
http://www.monografias.com/trabajos15/algoritmos/algoritmos.shtml#TIPOS
http://www.buenastareas.com/ensayo/est%C3%Alndares-De-Calidad-En-El-Dise% C3%Blo/1461297.html
Fabelo, Ricardo. “algoritmo y programación I y II”, unidad Algoritmo Pág. 15

miércoles, 23 de febrero de 2011

Aspectos generales de la Algoritmíca

Unidad Curricular
ALGORÍTMICA Y PROGRAMACIÓN
Módulo
Trayecto
Trimestre
Código
Créditos
ALGORÍTMICA Y PROGRAMACIÓN
1
1
PIAP114
4

Algunos enlaces para consultar  (pulsar Ctrl + click para activar el vinculo)
·      Wikilibros alberga un libro o manual sobre Algoritmia.
·      Wikcionario tiene definiciones para algoritmo.
·      Portal de algoritmia
·      Tema 2 Algoritmos
·      Algoritmos

Actualizado al 12FEB2011

Algoritmos y Programas

Algoritmo: Disponible en: http://es.wikipedia.org/wiki/Algoritmo

A modo introductorio:
En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo (del latín, dixit algorithmus y éste a su vez del matemático persa al-Jwarizmi) es una lista bien definida, ordenada y finita de operaciones que permite hallar la solución a un problema. En la vida cotidiana se emplean algoritmos en multitud de ocasiones para resolver diversos problemas. Algunos ejemplos se encuentran en los instructivos (manuales de usuario), los cuales muestran algoritmos para usar el aparato en cuestión o inclusive en las instrucciones que recibe un trabajador por parte de su patrón. También existen ejemplos de índole matemáticos, como el algoritmo de la división para calcular el cociente de dos números, el algoritmo de Euclides para calcular el máximo común divisor de dos enteros positivos, o el método de Gauss para resolver un Sistema lineal de ecuaciones.

Concepto:
Un algoritmo permite mostrar la manera de llevar a cabo procesos y resolver mecánicamente problemas matemáticos o de otro tipo. Al igual que las funciones matemáticas, los algoritmos reciben una entrada y la transforman en una salida, comportándose como una caja negra. Sin embargo, no toda caja negra que convierta una entrada en una salida se puede considerar un algoritmo: como una secuencia ordenada, finita y definida (formalización de su comportamiento) de instrucciones. De este modo se puede seguir y predecir su comportamiento, a partir del seguimiento de esa secuencia de instrucciones, que como es ordenada y definida, no da lugar a ambigüedades.

Consideraciones:
El concepto de algoritmo, aunque similar y obviamente relacionado, no debe confundirse con el concepto de programa. Mientras el primero es la especificación de un conjunto de pasos (operaciones, instrucciones, órdenes,...) orientados a la resolución de un problema (método); en el  segundo, ese conjunto de operaciones son especificadas en un determinado lenguaje de programación y para un computador concreto, susceptible de ser ejecutado (o compilado o interpretado).

Características de los algoritmos:  (Según, Donald Knuth)
·      Carácter finito. "Un algoritmo siempre debe terminar después de un número finito de pasos".
·      Precisión. "Cada paso de un algoritmo debe estar precisamente definido; las operaciones a llevar a cabo deben ser especificadas de manera rigurosa y no ambigua para cada caso".
·      Entrada. "Un algoritmo tiene cero o más entradas: cantidades que le son dadas antes de que el algoritmo comience, o dinámicamente mientras el algoritmo corre. Estas entradas son tomadas de conjuntos específicos de objetos".
·      Salida. "Un algoritmo tiene una o más salidas: cantidades que tienen una relación específica con las entradas".
·      Eficacia. "También se espera que un algoritmo sea eficaz, en el sentido de que todas las operaciones a realizar en un algoritmo deben ser suficientemente básicas como para que en principio puedan ser hechas de manera exacta y en un tiempo finito por un hombre usando lápiz y papel".

Medios de expresión de un algoritmo:
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:
·      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.
·      Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución.
·      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.

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.

Cuadro 1: Ejemplo de Diagrama De Flujo
Diagrama de flujo que expresa un algoritmo para calcular la raíz cuadrada de un número x









Pseudocódigo:
Pseudocódigo es la descripción de un algoritmo que asemeja a un lenguaje de programación pero con algunas convenciones del lenguaje natural. Tiene varias ventajas con respecto a los diagramas de flujo, entre las que se destaca el poco espacio que se requiere para representar instrucciones complejas. El pseudocódigo no está regido por ningún estándar. pseudo viene de falso y por ende es un código al que aunque es entendible no se aplica al proceso que debe realizar la maquina.

Cuadro 2: Ejemplo de pseudocódigo
Algoritmo Encontrar el máximo de un conjunto
función
//C es un conjunto no vacío de números//
// | C | es el número de elementos de C//
para hasta hacer
si entonces
devolver

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. Algunos algoritmos inclusive se diseñan especialmente para implementarse usando lápiz y papel.

Análisis de algoritmos.
Como medida de la eficiencia de un algoritmo, se suelen estudiar los recursos (memoria y tiempo) que consume el algoritmo. El análisis de algoritmos se ha desarrollado para obtener valores que de alguna forma indiquen (o especifiquen) la evolución del gasto de tiempo y memoria en función del tamaño de los valores de entrada.
El análisis y estudio de los algoritmos es una disciplina de las ciencias de la computación y, en la mayoría de los casos, su estudio es completamente abstracto sin usar ningún tipo de lenguaje de programación ni cualquier otra implementación; por eso, en ese sentido, comparte las características de las disciplinas matemáticas. Así, el análisis de los algoritmos se centra en los principios básicos del algoritmo, no en los de la implementación particular.