domingo, 31 de julio de 2011

Evaluación de Proyectos

     La evaluación de proyectos es un proceso por el cual se determina el establecimiento de cambios generados por un proyecto a partir de la comparación entre el estado actual y el estado previsto en su planificación. Es decir, se intenta conocer qué tanto un proyecto ha logrado cumplir sus objetivos o bien qué tanta capacidad poseería para cumplirlos.

    En una evaluación de proyectos siempre se produce información para la toma de decisiones, por lo cual también se le puede considerar como una actividad orientada a mejorar la eficacia de los proyectos en relación con sus fines, además de promover mayor eficiencia en la asignación de recursos. En este sentido, cabe precisar que la evaluación no es un fin en sí misma, mas bien es un medio para optimizar la gestión de los proyectos.

Según el nivel de gestión
La evaluación de proyectos la podemos clasificar de la siguiente manera:
  • Politica-Estratégica: La parte política verá la parte social y política, su consistencia para trascender en el tiempo y que sea en cierta forma equitativo.
  • Administrativa: En el caso administrativo, el fin siempre es la mayor racionalización de todos los recursos, el logro de sus planes, objetivos, metas, actividades, programas; expresión de la eficiencia y eficacia en su mayor expresión.
  • Técnica: Lo técnico es una mezcla de lo anterior y lo propio, ya que incide hoy en día al mejor logro de los dos puntos anteriores, por el avance en los descubrimiento, su rapidez, medición y precisión. Ya dependerá de cada ciencia que enfoque científico y técnico aplicarán.

Según la naturaleza de la evaluación

La evaluación de proyectos puede ser vista de dos ópticas diferentes:
  • Evaluación privada: Que incluye a la "evaluación económica" que asume que el proyecto está totalmente financiado con capital propio, por lo que no hay que pedir crédito, y por otro lado la "evaluación financiera", que incluye financiamiento externo.
  • Evaluación social: En la evaluación social, tanto los beneficios como los costos se valoran a precios sombra de eficiencia. Aquí interesa los bienes y servicios reales utilizados y producidos por el proyecto.

Ejecución

    Esta es la etapa de desarrollo del trabajo en sí.Durante la ejecución del proyecto, se debe poner énfasis en la comunicación para tomar decisiones lo más rápido posible en caso de que surjan problemas.

    La Ejecución de un proyecto Informática es desarrollar las estrategias ya planificadas.

    La ejecución comprende procesos de tipo gerencial y técnico que hacen también al mundo organizativo del proyecto. Estas consideraciones son llevadas a cabo de tal manera que cualquier proyecto de desarrollo local pueda iniciar sus actividades de manera ordenada con un despliegue coherente técnico que permitan alcanzar los objetivos y resultados establecidos en la formulación.

Implantación

El proceso de implantación constituye el último eslabón de la metodología de desarrollo de implantación del proyecto y es posterior al proceso de prueba. A pesar de todo el trabajo requerido para llegar a este punto, la fase de implantación puede ser la más difícil. 

Como con los procesos de desarrollo y prueba, la complejidad depende de las características de la tecnología. Si se trata de un producto estándar, la implantación puede ser relativamente fácil. Los usuarios también pueden estar relativamente familiarizados con ella si no difiere sustancialmente de la que se utilizaba con anterioridad. 

Sin embargo, cuando se trata de una nueva tecnología, que no ha sido aplicada con anterioridad o difiere sustancialmente de las prácticas previas, el proceso de implantación debe ser manejado con extremo cuidado y mucha atención en los detalles. 

La estrategia de implantación, que debe ser explicitada en el plan integral de administración del proyecto, fijará los pasos necesarios para probar la nueva tecnología. Una estrategia de implantación para una nueva tecnología de uso electoral puede incluir los siguientes elementos:
 

  • Conferir la responsabilidad de la implantación a un comité técnico y a uno administrativo que resulten apropiados.

  •  


  • Recibir formalmente la versión definitiva del sistema.



  • Armar y desplegar el sistema según se requiera.



  • Conducir las pruebas finales de todos los elementos de la versión definitiva.



  • Estrategias

           Una estrategia es un conjunto de acciones planificadas sistemáticamente en el tiempo que se llevan a cabo para lograr un determinado fin. Proviene del griego ΣΤΡΑΤΗΓΙΚΗΣ Stratos = Ejército y Agein = conductor, guía.

         En el Proyecto Socio-Tecnológico las estrategias se formulan de acuerdo a las necesidades, devilidades y fortalezas que se emplean para llevar a cabo la ejecución de un proyecto, antes es necesario abordarlo para conocer sobre el luego se le dará el debido planteamiento a las estrategias para culminar con la ejecución.

    USO DE ESTRUCTURAS DE DATOS ESTATICAS Y DINAMICAS

          Las estructuras dinámicas de datos son estructuras que cuya dimensión puede crecer o disminuir durante la ejecución del programa. Una estructura dinámica de datos es una de elementos llamados nodos. Al contrario que un array, que contiene espacio para almacenar un número fijo de elementos, una estructura dinámica de datos se amplía y contrae durante la ejecución del programa.

         Las estructuras dinámicas de datos se pueden en dos grandes grupos:
    Lineales: listas enlazadas,
    pilas, colas
    No lineales:
    árboles , grafos

        Las estructuras dinámicas de datos son de gran

    Listas Enlazadas
    Una lista enlazada es un conjunto de elementos llamados nodos en los que cada uno de ellos contiene un dato y también la dirección del siguiente nodo.
    El primer elemento de la lista es la cabecera, que sólo contiene un puntero que señala el primer elemento de la lista.
    El último nodo de la lista apunta a NULL (nulo) porque no hay más nodos en la lista. Se usará el término NULL para designar el final de la lista.
    La lista enlazada se muestra en la siguiente figura:
    Cabecera
    Las operaciones que normalmente se ejecutan con listas incluyen:
    1. Recuperar información de un nodo específico.
    2. Encontrar el nodo que contiene una información específica.
    3. Insertar un nuevo nodo en un lugar específico.
    4. Insertar un nuevo nodo en relación a una información particular.
    5. Borrar un nodo existente.
    #include <iostream.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <stdio.h>
    class nodo
    {int num;
    nodo *sgte;
    public:
    nodo(){sgte=NULL;}
    void apns(nodo *n);
    nodo *rpns();
    void ingresar();
    int mostrar();
    };
    void nodo::apns(nodo *n)
    {sgte=n;}
    nodo *nodo::rpns()
    {return sgte;}
    void nodo::ingresar()
    {cin>>num;}
    int nodo::mostrar()
    {return num;}
    /////////////////////////////////////////
    class lista
    {nodo *cab;
    public:
    lista(){cab=NULL;}
    void insertar_i();
    void insertar_f();
    void eliminar_nodo();
    void mostrar_lista();
    void eliminar_i();
    void eliminar_f();
    void eliminar_lista();
    };
    void lista::insertar_f()
    {nodo *a;
    a=new nodo;
    a->ingresar();
    if(cab==NULL)
    {cab=a;}
    else
    {nodo *temp,*temp1,*temp2;
    temp=cab;
    while(temp2!=NULL)
    {temp1=temp->rpns();
    temp2=temp1->rpns();}
    temp->rpns();
    temp->apns(a);
    }
    }
    void lista::insertar_i()
    {nodo *a;
    a=new nodo;
    a->ingresar();
    if(cab==NULL)
    cab=a;
    else
    {nodo *temp;
    temp=cab;
    cab=a;
    cab->apns(temp);
    }
    }
          Listas Doblemente Enlazadas
          Hasta ahora se han manejado listas que se recorren en un asola dirección. En algunas aplicaciones es práctico o hasta indispensable poder recorrer una lista en ambas direcciones. Para estos casos se tienen las lista doblemente enlazadas. Esta propiedad implica que cada nodo debe tener dos apuntadores, uno al nodo predecesor y otro al nodo sucesor.

          Cabecera
          Listas Circulares
          Una lista circular es una lista en la cual el último nodo es enlazado al primer elemento de la lista. La ventaja de este tipo de estructura es que siempre se puede llegar a cualquier nodo siguiendo los enlaces. La desventaja es que si no se tiene cuidado una búsqueda puede resultar en un bucle infinito. Esto se puede evitar al determinar a un nodo como nodo-cabeza o nodo inicial.

           Pilas
          Una pila es un tipo especial de lista lineal en la cual un elemento sólo puede ser añadido o eliminado por un extremo llamado cima. Esto significa que los elementos se sacan de la pila en orden inverso al que se pusieron en ella.
    Las dos operaciones básicas asociadas a las pilas son:
    -Poner: es añadir un elemento a la pila.
    -Sacar: es extraer un elemento de la pila.

          La pila es una estructura con numerosas analogías en la vida real: una pila de platos, una pila de monedas, una pila de bandejas, etc.
    La representación consiste en un vector con espacio para un máximo de elementos y un contador que indica el número de elementos válidos almacenados en el vector.

          Colas
         Una cola es una lista en las que las supresiones se realizan solamente solamente al principio de la lista y las inserciones al final de la misma. Al igual que en el caso de las pilas, hay que prever un vector para almacenar el máximo número de elementos que puedan presentarse en el programa. A diferencia de las pilas, no basta con añadir un simple contador, tal que indique el número de elementos válidos; sino hay que prever dos índices que indiquen la posición del comienzo y del final de la cola. Si la cola no está vacía, en CABEZA está el primer elemento, y si la cola no está llena, en FIN es el lugar donde se copia el siguiente elemento que se incorpora a la misma.
    Las colas se usan para almacenar datos que necesitan ser procesados según el orden de llegada. En la vida real se tienen ejemplos numerosos de colas: la cola de un cine, la cola de un banco, etc; en todas ellas el primer elemento que llega es el primero que sale.

    Datos estáticos: su tamaño y forma es constante durante la ejecución de un programa y por tanto se determinan en tiempo de compilación. El ejemplo típico son los arrays. Tienen el problema de que hay que dimensionar la estructura de antemano, lo que puede conllevar desperdicio o falta de memoria.

    Datos dinámicos: su tamaño y forma es variable (o puede serlo) a lo largo de un programa, por lo que se crean y destruyen en tiempo de ejecución. Esto permite dimensionar la estructura de datos de una forma precisa: se va asignando memoria en tiempo de ejecución según se va necesitando.

    utilidad para almacenar datos del mundo real, que están cambiando constantemente. Por ejemplo si tenemos almacenados en un array los datos de los alumnos de un curso, los cuales estan ordenados de acuerdo al promedio, para insertar un nuevo alumno seria necesario correr cada elemento un espacio: Si en su lugar se utilizara una estructura dinámica de datos, los nuevos datos del alumno se pueden insertar fácilmente.

    PRINCIPIOS FUNDAMENTALES DE LA PROGRAMACION ESTRUCTURADA

       En la programación Estructurada los programadores deben profundizar mas que lo usual al procederá realizar el diseño original del programa, pero el resultado final es más fácil de leer y comprender, el objetivo de u programador profesional al escribir programas de una manera estructurada, es realizarlos utilizando solamente un numero de bifurcaciones de control estandarizados.      

         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.

         
        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.

     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
    

    lunes, 27 de junio de 2011

    Matriz del Marco Lógico

    Es una herramienta para facilitar el proceso de conceptualización, diseño, ejecución y evaluación de proyectos. Su propósito es brindar estructura al proceso de planificación y comunicar información esencial relativa al proyecto. Puede utilizarse en todas las etapas de preparación del proyecto: programación, identificación, orientación, análisis, presentación ante los comités de revisión, ejecución y evaluación ex-post.
    El Marco Lógico es una herramienta dinámica utilizada por el BID para facilitar el proceso de conceptualización, diseño, ejecución y evaluación de proyectos. El diseño del Marco Lógico debe ser un proceso participativo (todos los miembros del Equipo del Proyecto, beneficiarios y otros). Su fortaleza como herramienta, depende del grado de participación en el proceso de diseño, de los posibles involucrados y beneficiarios.
     La Matriz del Marco Lógico se basa en dos principios elementales:
    Primero: relación causa-efecto entre las diferentes partes de un problema que corresponde a los cuatro niveles (o filas) de la estructura, que se refieren a actividades (o insumos), componentes (o resultados), el propósito y la meta, estos últimos definidos objetivos jerárquicos del proyecto.

    Segundo: el principio de correlación que une a los cuatro niveles de objetivos a la evaluación de desempeño (indicadores y medios de verificación) y condiciones que puedan afectar el desempeño (o supuestos).

    Entre los distintos niveles de objetivo de la Matriz de Marco Lógico

                 Lógica Horizontal y Vertical del Marco Lógico

    La Matriz de Marco Lógico que se elabora para efectos de la evaluación debe reflejar lo que el programa es en la actualidad. Si bien muchos programas no han sido diseñados con el método del Marco Lógico, se debe realizar un ejercicio de reconstrucción de los distintos niveles de objetivos del programa (fin, propósito, componentes) con sus respectivos indicadores, que permitan medir el nivel de logro alcanzado.

    y postula lo siguiente:
    Lógica Horizontal de la Matriz de Marco Lógico: Se basa en el principio de la correspondencia, que vincula cada nivel de objetivo (fin, propósito, componente y/o actividades) a la medición del logro (indicadores y medios de verificación) y a los factores externos que pueden afectar su ejecución y posterior desempeño (supuestos principales).
         La Matriz de Marco Lógico de un Programa presenta un diseño coherente cuando se cumple su lógica horizontal y vertical.