viernes, 15 de julio de 2011

Patrones de Diseño

Que es un patron de diseño?
Un patrón de diseño es una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado suefectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reutilizable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.


Los patrones de diseño que utiliza mi proyecto:


Facade(Fachada): Provee de una interfaz unificada simple para acceder a una interfaz o un grupo de interfaces de un subsistemas.


- Este patron me ayudara en lo que es la ventana GUI, ya que ahi lo manejo completamente todo y al momento de ver las tablas o hacer las consultas se abren otras ventanas con ese tipo de informacion.


Flyweight (Peso Ligero): Reduce la redundancia cuando gran cantidad de objetos poseen identica informacion.


- Este me ayudara a lo que cuando se utiliza el statement simplemente lo declaro como 
st = statemente y al momento de mandarlo a llamar solo poner st.


Singleton (Instancia única): Garantiza la existencia de una única instancia para una clase y la creación de un mecanismo de acceso global a dicha instancia.


- Este patron me ayudara en lo que es el main ya que solamente instancia para poder hacer lo que se esta instanciando.


Chain of Responsibility (Cadena de responsabilidad): Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada.


- Este patron lo utilizo en el action performed de la clase GUI ya que como son muchos botones tiene que haber una secuencia de cada uno de ellos al momento de hablar al ActionListener.

Demostración final

Como se pudo apreciar en la clase, me falto mucho por implementar en lo que resta de las vacaciones intentare trabajar en ello para poder hacer un sistema que se aprecie.

Que le falto?
Que se pudiera realizar un prestamo.
Que me cree un pdf para dar el ticket.
Que se puedan realizar consultas de los juegos prestado.
Que aparezca la persona que tiene el juego.


Documentacion al usuario.


Para poder usar este sistema es simple en la ventana GUI se agrego una pestaña llamada ayuda donde usted puede ver que es lo que quiere hacer. 


Como punto numero uno.- Tenemos que usted quiere agregar a alguien como lo hace?, bien se dirige a la pestaña  Catalagos y escoge ya sea juego o clientes y le da click en agregar, aparecera una ventana donde podra llenar los requisitos que se necesitan para poder estar en el sistema.


Punto numero dos.- Como visualizar las tablas de los clientes, se dirige a la pestaña consultas y escoge la seccion de clientes da click en todos y podra visualizar la tabla, para ver la tabla de juegos, se dirige a la pestaña inventarios y le da click en la seccion de juegos usted podra ver los juegos.


Punto tres.- Como realizar un prestamo, se dirige a la pestaña prestamo, y escoge la seccion de realizar prestamo se abrira una ventana en este lugar llenara los requisitos que requiere para hacer el prestamo y le dara al boton imprimir.


Demo

Documentación técnica

Aqui dejo la liga sobre mi documentacion tecnica:
 Esta ligas es de un .RAR
http://www.megaupload.com/?d=61KQK5MB

Auto-generación de código


Lo diferente es que en mi proyecto yo use un actionPerfomed por cada accion que se debia hacer, en el código auto-generado solo tenia uno, en donde abarca todo eso.

En mi caso yo solo compare el ID de la tabla para poder elimnar y el codigo auto-generado lanza gets y sets para poder hacer lo mismo que yo, que quiere decir que me ahorre lineas al momento de agregar o eliminar ya sea un juego o un cliente.

Al comparar mi codigo con el auto-generado si puede haber ciertos aspectos en los que el codigo auto-generado me pueda ayudar, por eso siempre es bueno hacer un diagrama antes de empezar a programar creo yo que que es la mejor maner de empezar un buen sistema

Interfaz Grafica

Aqui les dejo una serie de mis ventanas.

Esta es cuando se va a entrar al sistema:


Aqui la ventana princpal con una tabla:

Esta es cuando no llenas un campo en agregar cliente, te apraece lo siguiente:

Aqui es cuando se llena correctamente los campos de la imagen anterior:

Ventana para eliminar, cuando no se pone nada:

Ventana eliminar cuando si se pone el id:
Y un simple JDialog para mostrar al acerca del Sistema:


Eventos, excepciones y errores

Evento:

Esta parte del codigo es el metodo que se tiene que implementar de ActionListener, el cual va a "escuchar" el menu desplegable de la ventana principale:
public void actionPerformed(ActionEvent ae) {
  if(ae.getSource() == Agregar){
   AgregarCliente a = new AgregarCliente();
  }else if(ae.getSource() == Eliminar){
   EliminarCliente DEL = new EliminarCliente();
  }else if(ae.getSource() == Nuevo){
   //AgregarJuego AJ = new AgregarJuego();
  }else if(ae.getSource() == Borrar){
   //EliminarJuego Bor = new EliminarJuego();
  }else if(ae.getSource() == TC){
   this.fillTable();
   System.out.println("Conectando...");
  }

Este pedazo es sencillo, lo que hace es utilizar un metodo "getSource" del objeto ActionEvent, 
para saber de que boton se produjo el evento, y despues lo que hace es compararlo con  cada uno de los botones disponibles para ver si el evento se produjo de tal boton.  Y asi realizar la accion que tenga ese boton.

Excepciones:
public void actionPerformed(ActionEvent e) {
   JButton b = (JButton)e.getSource();
   if(b==boton_aceptar){
    c = (campocliente.getText());
    t = (campotel.getText());
    d = (campodir.getText());
           l = (campoed.getText());
    u = (campocel.getText());
    r = (camporefe.getText());
     try{
      rows_updated = 0;
      PreparedStatement aux = objeto_base.ct.prepareStatement("INSERT INTO Clientes(Nombre, Edad, Direccion, Telefono, Celular, Referente)VALUES(?,?,?,?,?,?)");
      aux.setString(1,c); 
      aux.setString(2,l); 
      aux.setString(3,d);
      aux.setString(4,t); 
      aux.setString(5,u);
      aux.setString(6,r);
      rows_updated = aux.executeUpdate(); 
       
      JOptionPane.showMessageDialog(this, "Registro Agregado");
      this.setVisible(false);
    
     }catch(SQLException d){
      JOptionPane.showMessageDialog(this, "Error");
     }
  }else if(b==botoncancelar){
   this.setVisible(false);
  }
   
  }
  
 }
 Al igual que en el codigo que mencione arriba, primero fue igualar un boton local con el getSource del ActionEvent, para asi comparar solo botones.
Despues en el Try, lo que hace es prepar la sentencia de SQL para agregar cliente pasandole los parametros que extraje de los campos que lleno el usuario. 
Despues se ejecuta el update y me manda un mensaje de que se pudo hacer.
En el Catch, hay una excepcion del tipo "SQLException" la cual solo mostrara un mensaje  que diga que no se puedo, esto ayuda a que el programa no se quede buscando informacion.

Errores:
Un error que tiene el sistema, es uno simple donde no le pongo que funcionen las teclas por lo
tanto al momento de querer oprimir un boton se tiene que hacer con el mouse.

SISTEMAS DISTRIBUIDOS.

Sistemas distribuidos
Definición:

"Sistemas cuyos componentes hardware y software, que están en ordenadores conectados en red, se comunican y coordinan sus acciones mediante el paso de mensajes, para el logro de un objetivo. Se establece la comunicación mediante un protocolo prefijado por un esquema cliente-servidor".

Características:
    * Concurrencia.- Esta característica de los sistemas distribuidos permite que los recursos disponibles en la red puedan ser utilizados simultáneamente por los usuarios y/o agentes que interactúan en la red.
    * Carencia de reloj global.- Las coordinaciones para la transferencia de mensajes entre los diferentes componentes para la realización de una tarea, no tienen una temporización general, esta más bien distribuida a los componentes.
    * Fallos independientes de los componentes.- Cada componente del sistema puede fallar independientemente, con lo cual los demás pueden continuar ejecutando sus acciones. Esto permite el logro de las tareas con mayor efectividad, pues el sistema en su conjunto continua trabajando.

Sistemas Distribuidos en mi proyecto:

cliente-servidor.
En mi proyecto se pudiera realizar un sistema distribuido cliente-servidor en donde el cliente seriia el dispositivo y se solicita un servicio, luego una maquina seria el servidor.



El cliente pide ver los juegos disponibles con precios actualizados, y un servidor se los proporciona, al igual que si el cliente desea escoger uno, que se conecte a un servidor a donde esta el inventario y que este muestre los juegos disponibles en una lista, existen diferentes categorias de servidores, para mi proyecto se implementaria servidor de bases de datos para poder acceder al inventario.

viernes, 8 de julio de 2011

Especificacion Tecnica

Lo que le falta es poder -agregar, -modificar y -eliminar un videojuego ya que en mi caso estoy manejando dos tablas una de los clientes y otra del inventario en este caso cd's de videojuegos, tambien poder -eliminar y -modificar a un cliente, que los botones de consultas sirvan que me muestren el inventario ya sea por titulos o por clasificacion segun lo desee el usuario.
Tambien me gustaria agregar algo que sea referente a la paga y los dias que se prestara el CD algo mas o menos asi:
$20 = 2 Dias
y que en una seccion de mi ventana principal aparezca esto:
Cliente        CD                  Dias de renta:
nombre        Juego       2Dias(7/07/2011) a (9/07/20011)

A mi pensar creo que eso sera lo mas dificil de hacer. 

Para agregarle funcionalidad a las cosas que me faltan es solo agregar los actionperformed para que funcionen ademas trabajara con los comandos de mysql ya que como habia dicho la persona que use el software querra checar por titulo o por clasificacion segun la necesidad.

DEMO

Ahora explicare los procesos que puede realizar mi programa por el momento, bien mi programa inicia pidiendo el usuario y contraseña antes de poder abrir la ventana principal si son los indicados se abrira y si no lo son te aparecera un aviso en donde te dira que estan incorrectos, tambien puede mostrarme la base de datos que se a realizado previamente en mysql, y agregar a una persona.


 
Esta es la ventana despues de que le oprimi ver tabla


Estas ventanas es cuando oprimo el boton de agregar en el menu catalagos y me pide estos datos y me aparece que el registro a sido agregado.









Aqui aparece el registro agregado.

Herencia y Polimorfismo

Bien esta entrada es para explicar sobre las herencias que tiene mi proyecto, es facil por el momento la unica herencia que estoy usando es la del JFrame ya que todas mis ventanas heredan los parametros de la libreria.

Despues pienso editar la entrada con las otras herencias que vayan surgiendo en el transcurso de mi proyecto.

El polimorfismo es un concepto de la programación orientada a objetos que nos permite programar en forma general, en lugar de hacerlo en forma específica. En general nos sirve para programar objetos con características comunes y que todos estos compartan la misma superclase en una jerarquía de clases, como si todas fueran objetos de la superclase. Esto nos simplifica la programación.
Sugiero que vean la entrega de los esqueletos para que vean de que se habla.Creo que se entiende mejor en el esqueleto de la calase GUI.

Esqueleto del Software

Estos son los esqueletos que llevo por el momento habra mas y al final editare esta entrada para mostrar completamente el esqueleto de mi software, por el momento estos son los que tengo:



public class GUI extends JFrame implements  ActionListener
{
private static final BaseDatos bdm = null;    
private final String [] titulos = {"NOMBRE", "EDAD", "DIRECCION", "TELEFONO", "CELULAR", "REFERENTE", "ID"};
private DefaultTableModel dtm = new DefaultTableModel();
private JTable personTable = new JTable(dtm);
private BaseDatos dbm = new BaseDatos();

private JMenuBar menuBar;
privaterivate JMenu Catalagos,Juegos,Clientes,Inventario,VJ,Prestamos,Clientela,Ayuda,Consultas;
private JMenuItem Salir,Agregar,Eliminar,Modificar,Nuevo,Otro,Borrar,Todos,PC,PCL,PT,JP,JD,TC,CM,CU,ADprivate JScrollPane scroll;

public GUI(){
 }

public void addComponents(){
}
public void actionPerformed(ActionEvent ae) {
}

//MANEJA LA VENTANA PARA AGREGAR CLIENTES
class AgregarCliente extends JFrame implements ActionListener{
private JLabel cliente, direccion, tel, edad, cel, refe;
private JTextField campocliente, campodir, campotel, campoed, campocel, camporefe;
private JButton boton_aceptar, botoncancelar;
private BaseDatos objeto_base = new BaseDatos();
private String c,d,t,l,u,r, query;

public AgregarCliente(){
}
public void agregarcomponentes(){
}
public void actionPerformed(ActionEvent e) {
}

//MANEJA LA VENTANA PARA ELIMINAR CLIENTES
class EliminarCliente extends JFrame implements ActionListener{
private JLabel text1;
private JLabel text2;
private JTextField campoID;
JButton botonaceptar;
private JButton botoncancelar;
    private String IDString;
    private int IDInt;
    private String query;
    BaseDatos obd = new BaseDatos();    
    
    public EliminarCliente(){
    }
    private void agregarcomponentes() {
        }
    public void actionPerformed(ActionEvent e) {
    }    
}//fin de clase

class ModificarCliente extends JFrame implements ActionListener {
    private JButton botoncancelar, botonaceptar;
    private JLabel texto1;
    private JTexField campoid;
    private String IDString;
    private int IDInt;
    private String query;
    BaseDatos obd = new BaseDatos();
    
    public ModificarCliente() {    
    }
        private void addComponents{                
        }

        public void actionPerformed(ActionEvent e){
        }      
}//fin de clase



En este Esqueleto agregue varias clases para que sea mas facil acceder a ellas pero quizas cammbie.




public class BaseDatos {
    private final static String DRIVER = "com.mysql.jdbc.Driver";
    private final static String BD = "jdbc:mysql://localhost:3306/Su base de datos";
    private final static String USER = "root";
    private final static String PASS = "Su Contraseña";    
    public String usuario;
    public String contra;

    Connection ct; //Variable para la conexion
    Statement st; //Para consultas

    //Constructor
    public BaseDatos()
    }//fin constructor

     public void MostrarTodo(){
     }
        public Statement getSt() {
        return st;
    }
}








public class login extends JFrame implements ActionListener{
    private String usuario;
    private String contra;
    private JButton btninicio;
    private JButton btncancelar;
    private JLabel texto1;
    private JLabel texto2;
    private JTextField campouser;
    private JPasswordField campopas;
    private BaseDatos cosa = new BaseDatos();
    private String u,p;
    
    public login(){
    }
    public void Ventlogin(){
    }
        public void actionPerformed(ActionEvent e) {
    }
}





public class main {

public static void main(String[] args) {
BaseDatos bdm = new BaseDatos();
login x = new login();
GUI g = new GUI();
}
}

Seleccion e Instalacion de herramientas

Saludos doctora y  compaeñeros, en esta entrada explicare las herramientas a utilizar por mi parte.

Ahora mencionare que lo que se utilizara:
Como lenguaje utilizare: Java.
Como base de datos utilizare: MySQL.
Como lugar de trabajo utilizare el: Gedit Text Editor ( ya que me siento mas comodo trabajando aqui, tambien se podria utilizar la terminal).
Como sistema operativo utilizare: Ubuntu ( ya que en estos semestres e estado trabajando en este sistema y es muy accesible al momento de instalar o de programar algo).

Bien pasemos a como instalar Java, esto es facil ya que como mencione ubuntu tiene la facilidad de que se pueden instalar cosas con tan solo abrir la terminal y teclear:

sudo apt-get install nombre de lo que instalaras

En este caso instalaremos el Java opend jdk entonces se pone:

sudo apt-get install openjdk-6-jdk

damos enter y por si solo empezara a instalarse en ubuntu.
Se nos preguntara si deseamos continuar oprimimos la tecla Y luego enter y despues de unos segundos queda instalado.

Ahora para instalar Mysql es lo mismo solamente que cambiara el nombre de lo que instalaremos en este caso es:
sudo apt-get install mysql-server
sudo apt-get install mysql-admin
Practicamente sucede lo mismo que con java despues del comando tecleamos enter y empezara la instalacion.

Para poder realizar nuestras conexiones aun falta algo que es:
descargar unas librerias de esta pagina http//dev/mysql.com/downloads/connector/j.

Cuando se descargues esto se descomprime el archivo que sea tar.gz yse debe de utilizar el siguiente comando para ya poder hacer nuestras conexion JDBC claro esta moviendonos desde la terminal donde se encuentre nuestro archivo y es el :
sudo mv mysql-connector-java-5.1.16 /usr/lib/jvm/java-6-openjdk/jre/lib/ext.

Para realizar mis programas utilizo el gedit este se encuentra ya en ubuntu, para buscarlo es aplicaciones(aplications)->accesorios(accesories)->gedit en el menu de ubuntu.
Para lo que es el sistema operativo pueden hacer una memoria booteable con WUBI o simplemente particionar su computadora para instalarlo.

Ejemplo de una clase en java
import java.util.*; 
public class Suma { 
public static void main(String args[]) { 
int num1, num2; 
int sum = 0; 
Scanner console = new Scanner(System.in); 
System.out.println("Dame el primer numero"); 
num1 = console.nextInt(); 
System.out.println("Dame el segundo numero"); 
num2 = console.nextInt(); 
System.out.println("Sum = " +getSum(num1,num2)); 
} 
public static int getSum(int n1, int n2) {
return n1 + n2; 
} 
}

Un ejemplo simple y esto es lo que genera_

Aqui le dejo una liga de un tutorial de java:
http://www.chuidiang.com/java/index.php

jueves, 19 de mayo de 2011

Video donde explico el sistema

http://www.youtube.com/watch?v=AgQ9wDv6Mkc

Maestra aqui le dejo el enlace del video
Gracias y que tenga un buen dia.

Resumen Proyecto Final

Patrones de diseño
Mi proyecto utiliza diferentes patrones de diseño los cuales son  lo siguientes:
  • Composite
  • Facade (Fachada)
  • Strategy (Estrategia)
  • Abstract Factory (Fábrica abstracta)
  • Flyweight (Peso ligero)
  • Observer (Observador)

Eventos, excepciones, errores. (aplicados a mi sistema).
Eventos:

·         En el login cuando se haya puesto correctamente el servidor y la contraseña marcara una bienvenida.

·         Cuando haya ocurrido algún problema con un cliente como ya se mencionó se le pondrá una amonestación se marcara como una X en sus datos.
Excepciones:

·         Seria en el login que el servidor (persona que manejara el sistema) teclee números negativos en la contraseña, espacios o estén vacíos.

·         También en el login que presione la tecla enter en lugar de dirigir el cursor del mause al botón de entrar.
Error:
   
·         Sería que el sistema por alguna razón no elimine un artículo no disponible dentro de la base de datos.

Pruebas Unitarias
Una prueba unitaria es una forma de probar el correcto funcionamiento de un módulo de código. Esto sirve para asegurar que cada uno de los módulos funcione correctamente por separados.

JUnit es un conjunto de clases (framework) que permite realizar la ejecución de clases Java de manera controlada, para poder evaluar si el funcionamiento de cada uno de los métodos de la clase se comporta como se espera.
Interfaz Gráfica.
Es la ventana donde se realiza todo el sistema, los prestamos, el chequeo del inventario, etc.

Sistemas Distribuidos.
"Sistemas cuyos componentes hardware y software, que están en ordenadores conectados en red, se comunican y coordinan sus acciones mediante el paso de mensajes, para el logro de un objetivo. Se establece la comunicación mediante un protocolo prefijado por un esquema cliente-servidor".

2.-Base de Datos Distribuidas.- El cliente realiza la interacción con el usuario, ejecuta la aplicación, debe conocer la topología de la red, así como la disposición y ubicación de los datos. Se delega parte de la gestión de la base de datos al cliente.
Fuentes:
http://es.wikipedia.org/wiki/Patr%C3%B3n_de_dise%C3%B1o

miércoles, 18 de mayo de 2011

Otras Tecnologias (Recientes)

MapReduce es un framework introducido por Google para dar soporte a la computación paralela sobre grandes colecciones de datos en grupos de computadoras. Se han escrito implementaciones de MapReduce en C++, Java, Python y otros lenguajes.

Las funciones Map y Reduce están definidas ambas con respecto a datos estructurados en pares (clave, valor). Map toma uno de estos pares de datos con un tipo en un dominio de datos, y devuelve una lista de pares en un dominio diferente:
Map(k1,v1) -> list(k2,v2)
La función de mapeo es aplicada en paralelo para cada ítem en la entrada de datos. Esto produce una lista de pares (k2,v2) por cada llamada. Después de eso, el framework de MapReduce junta todos los pares con la misma clave de todas las listas y los agrupa, creando un grupo por cada una de las diferentes claves generadas.
La función reduce es aplicada en paralelo para cada grupo, produciendo una colección de valores para cada dominio:
                              Reduce(k2, list (v2)) -> list(v2)
Cada llamada a Reduce típicamente produce un valor v2 o una llamada vacía, aunque una llamada puede retornar más de un valor. El retorno de todas esas llamadas se recoge como la lista de resultado deseado.

Otra Tecnologia:



Hadoop es una plataforma que nos permite desarrollar aplicaciones que tengan que tratar con grandes cantidades de datos, hasta petabytes. Se trata de un subproyecto de Lucene, un proyecto de Apache que desarrolla software para realizar búsquedas. Hadoop es muy útil cuando vamos a realizar proyectos que necesiten de escalabilidad, ya hemos dicho que puede almacenar y procesar petabytes de informacion. A su vez, es perfecto para un cluster de servidores, distribuyendo la información entre los nodos, siendo posible disponer de miles de nodos. Al disponer los datos de forma distribuida, la búsqueda se puede realizar muy rápidamente ya que Hadoop puede acceder a ella de forma paralela. Y aunque los datos estén distribuidos, no hay que preocuparse de fallos ya que dispone de un sistema de seguridad.


Hadoop implemente el MapReduce de Google, usando un sistema distribuido para dividir las aplicaciones en pequeñas tareas. Hadoop se ha llegado a probar en un cluster de 2.000 máquinas y se está intentando alcanzar la cifra de 10.000 máquinas. Es necesario Java para su desarrollo y Linux, aunque se puede usar Windows para desarrollo, aunque el cluster no funciona del todo bien.

Fuentes:

Interfaz Grafica

Con la idea de simplificar el uso de los ordenadores para usuarios de todo tipo y no sólo para los expertos, se ha convertido en una práctica habitual utilizar metáforas visuales por medio de la llamada interfaz gráfica de usuario (IGU ó GUI en inglés) para que el usuario interactúe y establezca un contacto más fácil e intuitivo con el ordenador.
Una interfaz es un dispositivo que permite comunicar dos sistemas que no hablan el mismo lenguaje. Restringido a aspectos técnicos, se emplea el término interfaz para definir el juego de conexiones y dispositivos que hacen posible la comunicación entre dos sistemas. Sin embargo, cuando aquí hablamos de interfaz nos referimos a la cara visible de los programas tal y como se presenta a los usuarios para que interactúen con la máquina.
A continuación les hablare sobre la interfaz gráfica sobre un videojuego que como lo oímos en clase son lo más reconocidos en lo que se refiere a interfaces, mi iré un poquito lejos con un videojuego que me gusta y que tiene una interfaz simple pero entendible.
El juego del que hablo es: Phoenix Wright Ace Attorney para la consola Nintendo DS, les hablare un poco de este juego.
En este juego tú serás Phoenix Wright, un joven de 24 años que se acaba de licenciar en Derecho y ha empezado a trabajar en un bufete. El juego se divide en cinco capítulos o juicios que se irán complicando a medida que van avanzando. Durante cada capítulo tendrás que investigar para recoger pruebas. Los comandos que puedes usar son:
Este boton te permite observar las escenas de crimen para encontra mas pruebas a usar en los juicios, cabe destacar que en esta consola hay dos pantalas de ahi su nombre (Dual Screen), y una pantalla es tactil cuando oprimes el boton de examinar puedes tocar el area que deseas para ver si encuentras algo. 



Este boton como su nombre lo indica te permite conversar con la gente para ver que mas puedes usar en los juicios o para saber a donde ir, cuando es presionado (ya sea en la pantalla tactil o con un boton de la consola) se abriran conversaciones que podras tener con el personaje (como se muestra en la imagen) y asi entender la situacion. 

Con este boton al ser al ser presionado te permitira ir a lugares para seguir investigando, como en el boton de hablar, al ser presionado se abriran las partes a donde quieres ir (como se muestra en la imagen) para seguir investigando.

Este boton es para mostrarle a los personajes los objetos que tienes y ver como reaccionan ante ellos pueden desatar algo o pueden indicarte el camino. Como en la imagen siguiente se le presento un oso al personaje y sus facciones indica que nos dira algo XD.


 Tambien esta este botono para obtener información sobre las pruebas que has conseguido y sobre las personas que has conocido.

<-- aqui vemos que se esta revisando los objetos que se tiene



y aqui vemos que estamos revisando las caracteristicas de los personajes-------------->



Ya en los juicios solo aparecen dos botones:
 Este boton sirve para sacar mas informacion en las declaraciones de los personajes o saber que presentarles.
Este boton no es lo mismo que el anterior por que en el otro solo presentabas algo para saber por donde irte y en este es ya para resolver el juego. Este boton es mas complicado ya que si lo usas en un lugar mal indicado podrias perder el juego

Asi se presenta en el juego:
<-----Cuando estas buscando pistas o informacion 



Cuando estas en el juicio (en esta imagen estas viendo el testimonio) las flechas que aparecen son para leer lo que dijo antes o lo que va a decir es para que leas con atencion XD----->

domingo, 15 de mayo de 2011

Pruebas unitarias

Al desarrollar un nuevo software o sistema de información, la primera etapa de pruebas a considerar es la etapa de pruebas unitarias o también llamada pruebas de caja blanca (White Box), estás pruebas también son llamadas pruebas modulares ya que nos permiten determinar si un modulo del programa esta listo y correctamente terminado, estas pruebas no se deben confundir con las pruebas informales que realiza el programador mientras esta desarrollando el módulo

Características

Para que una prueba unitaria sea buena se deben cumplir los siguientes requisitos:
  • Automatizable: no debería requerirse una intervención manual. Esto es especialmente útil para integración continua.
  • Completas: deben cubrir la mayor cantidad de código.
  • Repetibles o Reutilizables: no se deben crear pruebas que sólo puedan ser ejecutadas una sola vez. También es útil para integración continua.
  • Independientes: la ejecución de una prueba no debe afectar a la ejecución de otra.
  • Profesionales: las pruebas deben ser consideradas igual que el código, con la misma profesionalidad, documentación, etc.
Aunque estos requisitos no tienen que ser cumplidos al pie de la letra, se recomienda seguirlos o de lo contrario las pruebas pierden parte de su función.

Ventajas

El objetivo de las pruebas unitarias es aislar cada parte del programa y mostrar que las partes individuales son correctas. Proporcionan un contrato escrito que el trozo de código debe satisfacer. Estas pruebas aisladas proporcionan cinco ventajas básicas:
  1. Fomentan el cambio: Las pruebas unitarias facilitan que el programador cambie el código para mejorar su estructura (lo que se ha dado en llamar refactorización), puesto que permiten hacer pruebas sobre los cambios y así asegurarse de que los nuevos cambios no han introducido errores.
  2. Simplifica la integración: Puesto que permiten llegar a la fase de integración con un grado alto de seguridad de que el código está funcionando correctamente. De esta manera se facilitan las pruebas de integración.
  3. Documenta el código: Las propias pruebas son documentación del código puesto que ahí se puede ver cómo utilizarlo.
  4. Separación de la interfaz y la implementación: Dado que la única interacción entre los casos de prueba y las unidades bajo prueba son las interfaces de estas últimas, se puede cambiar cualquiera de los dos sin afectar al otro, a veces usando objetos mock (mock object) para simular el comportamiento de objetos complejos.
  5. Los errores están más acotados y son más fáciles de localizar: dado que tenemos pruebas unitarias que pueden desenmascararlos.
Caja Blanca

En esta imagen se muestra lo que se considera una representación clásica de Software Testing White Box o pruebas de caja blanca, en este tipo de pruebas el cubo representaría un sistema en donde se pueden observar los diversos componentes que forman parte del mismo, cada uno de estos componentes debe ser probado en su totalidad (óvalos), y también sus interfases o comunicaciones con los demás componentes (flechas), este tipo de pruebas también son llamadas pruebas de caja de cristal ya que este útlimo termino   representa mejor el tipo de pruebas.
Caja negra

Sinónimos:

·         pruebas de caja opaca
·         pruebas funcionales
·         pruebas Pde entrada/salida
·         pruebas inducidas por los datos
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. Por ello se denominan pruebas funcionales, y el probador se limita a suministrarle datos como entrada y estudiar la salida, sin preocuparse de lo que pueda estar haciendo el módulo por dentro.
Las pruebas de caja negra están especialmente indicadas en aquellos módulos que van a ser interfaz con el usuario (en sentido general: teclado, pantalla, ficheros, canales de comunicaciones, etc etc) Este comentario no obsta para que sean útiles en cualquier módulo del sistema.

Fuentes:
http://www.calidadysoftware.com/testing/pruebas_unitarias1.php