miércoles, 18 de mayo de 2011
(C) 12 Sistemas distribuidos
¿Qué es un sistema distribuido?
Las nuevas y poderosas computadoras comenzaron a ser desarrolladas durante la década del 40, que es también cuando comenzó a hacerse evidente que las computadoras podían usarse para mucho más que simples cálculos.
Cluster de computadores: En un cluster todos los nodos se encuentran en el mismo lugar, conectados por una red local y así englobar todos lo recursos, en cambio en un grid no tienen por qué estar en el mismo espacio geográfico, pueden estar en diferentes puntos del mundo.
También suele presentarse que GRID se le llama cuando el resultado obtenido del englobe de las máquinas da una supercomputadora, con un cluster solo se busca mejorar el rendimiento de las máquinas englobándolas en una sola.
Un sistema distribuido es una colección de computadoras independientes; es decir autónomas, que aparecen ante los usuarios del sistema como una única computadora.
Algunos ejemplos de sistemas distribuidos son:
· Una red de estaciones de trabajo en un departamento de una universidad o compañía, donde además de cada estación personal, podría existir una pila de procesadores en el cuarto de máquinas, que no estén asignados a usuarios específicos sino que se utilicen de manera dinámica cuando sea necesario.
· Una fábrica de robots, donde los robots actúan como dispositivos periféricos unidos a la misma computadora central.
· Un banco con muchas sucursales por el mundo, cada oficina tiene una computadora maestra para guardar las cuentas locales y el manejo de las transacciones locales, la cuál se puede comunicar con cualquier computadora de la red. Las transacciones hechas se realizan sin importar dónde se encuentre la cuenta o el cliente.
la computación distribuida o informática en malla, es un nuevo modelo para resolver problemas de computación masiva utilizando un gran número de ordenadores organizadas en racimos incrustados en una infraestructura de telecomunicaciones distribuida.
Características
- Para cada uno de los usuarios debe de ser similar al trabajo en el Sistema Centralizado.
- Seguridad interna en el sistema distribuido.
- Se ejecuta en múltiples Computadoras.
- Tiene varias copias del mismo Sistema Operativo o de diferentes Sistemas Operativos que proveen los mismos servicios.
- Entorno de trabajo cómodo.
- Dependiente de redes (LAN, MAN, WAN, etc.).
- Compatibilidad entre los dispositivos conectados.
- Transparencia (El uso de múltiples procesadores y el acceso remoto debe de ser invisible).2
- Interacción entre los equipos.
- Diseño de software compatible con varios usuarios y sistemas operativos
Objetivo
La computación distribuida ha sido diseñada para resolver problemas demasiado grandes para cualquier supercomputadora y mainframe, mientras se mantiene la flexibilidad de trabajar en múltiples problemas más pequeños. Por lo tanto, la computación en grid es naturalmente un entorno multiusuario; por ello, las técnicas de autorización segura son esenciales antes de permitir que los recursos informáticos sean controlados por usuarios remotos. La historia de la computación puede remontarse a cientos de años atrás, cuando se creaban máquinas para ayudar en tareas de cálculos -como el ábaco. La primera calculadora mecánica fue creada en 1623 por Wilhelm Schickard, y Charles Babbage diseñó la máquina diferencial en la época victoriana. Eran máquinas que se limitaban a realizar una sola tarea, o como mucho, algún subconjunto de todas las posibles tareas.Las nuevas y poderosas computadoras comenzaron a ser desarrolladas durante la década del 40, que es también cuando comenzó a hacerse evidente que las computadoras podían usarse para mucho más que simples cálculos.
Cluster de computadores: En un cluster todos los nodos se encuentran en el mismo lugar, conectados por una red local y así englobar todos lo recursos, en cambio en un grid no tienen por qué estar en el mismo espacio geográfico, pueden estar en diferentes puntos del mundo.
También suele presentarse que GRID se le llama cuando el resultado obtenido del englobe de las máquinas da una supercomputadora, con un cluster solo se busca mejorar el rendimiento de las máquinas englobándolas en una sola.
(C) 11 Interfaces graficas de usuario
La interfaz gráfica de usuario, conocida también como GUI (del inglés graphical user interface) es un programa informático que actúa de interfaz de usuario, utilizando un conjunto de imágenes y objetos gráficos para representar la información y acciones disponibles en la interfaz. Su principal uso, consiste en proporcionar un entorno visual sencillo para permitir la comunicación con el sistema operativo de una máquina o computador.
Habitualmente las acciones se realizan mediante manipulación directa, para facilitar la interacción del usuario con la computadora. Surge como evolución de los intérpretes de comandos que se usaban para operar los primeros sistemas operativos y es pieza fundamental en un entorno gráfico. Como ejemplos de interfaz gráfica de usuario, cabe citar los entornos de escritorio Windows, el X-Window de GNU/Linux o el de Mac OS
por ejemplo en python la interfaz grafica les dejo un tutorial
(C) 10 pruebas unitarias
na prueba unitaria es una forma de probar el correcto funcionamiento de un módulo de código.
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.
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:- 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.
- 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.
- Documenta el código: Las propias pruebas son documentación del código puesto que ahí se puede ver cómo utilizarlo.
- 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.
- Los errores están más acotados y son más fáciles de localizar: dado que tenemos pruebas unitarias que pueden desenmascararlos.
Limitaciones
Es importante darse cuenta de que las pruebas unitarias no descubrirán todos los errores del código. Por definición, sólo prueban las unidades por sí solas. Por lo tanto, no descubrirán errores de integración, problemas de rendimiento y otros problemas que afectan a todo el sistema en su conjunto. Además, puede no ser trivial anticipar todos los casos especiales de entradas que puede recibir en realidad la unidad de programa bajo estudio. Las pruebas unitarias sólo son efectivas si se usan en conjunto con otras pruebas de software.Herramientas
- JUnit: Entorno de pruebas para Java creado por Erich Gamma y Kent Beck. Se encuentra basado en SUnit creado originalmente para realizar pruebas unitarias para el lenguaje Smalltalk.
- TestNG: Creado para suplir algunas deficiencias en JUnit.
- JTiger: Basado en anotaciones, como TestNG.
- SimpleTest: Entorno de pruebas para aplicaciones realizadas en PHP.
- PHPUnit: framework para realizar pruebas unitarias en PHP.
- CPPUnit: Versión del framework para lenguajes C/C++.
- NUnit: Versión del framework para la plataforma.NET.
- FoxUnit: framework OpenSource de pruebas unitarias para Microsoft Visual FoxPro
- MOQ : Framework para la creación dinámica de objetos simuladores (mocks). http://code.google.com/p/moq/
sábado, 16 de abril de 2011
(C) 9.- Deteccion de eventos y errores del proyecto
Ejercicio. Detección de eventos, errores y excepciones de mi proyecto.los evento que he usado hasta ahorita en mi proyecto son:
- Hacer click en un botón.
Los errores que pudiera tener el proyecto son:
- Cuando una persona ingresa numeros mientras deben de ir letras .
- cuando falte un dato en un campo
- ¿Forma de manejarlos?
(C) 7 .-Patrones de Diseño
Patrones de diseño "Design Patterns"
Es evidente que a lo largo de multitud de diseños de aplicaciones hay problemas que se repiten o que son análogos, es decir, que responden a un cierto patrón.
Patrones de creación
- Abstract Factory. Proporciona una interfaz para crear familias de objetos o que dependen entre sí, sin especificar sus clases concretas.
- Builder. Separa la construcción de un objeto complejo de su representación, de forma que el mismo proceso de construcción pueda crear diferentes representaciones.
- Factory Method. Define una interfaz para crear un objeto, pero deja que sean las subclases quienes decidan qué clase instanciar. Permite que una clase delegue en sus subclases la creación de objetos.
- Prototype. Especifica los tipos de objetos a crear por medio de una instancia prototípica, y crear nuevos objetos copiando este prototipo.
- Singleton. Garantiza que una clase sólo tenga una instancia, y proporciona un punto de acceso global a ella.
- Adapter. Convierte la interfaz de una clase en otra distinta que es la que esperan los clientes. Permiten que cooperen clases que de otra manera no podrían por tener interfaces incompatibles.
- Bridge. Desvincula una abstracción de su implementación, de manera que ambas puedan variar de forma independiente.
- Composite. Combina objetos en estructuras de árbol para representar jerarquías de parte-todo. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos.
- Decorator. Añade dinámicamente nuevas responsabilidades a un objeto, proporcionando una alternativa flexible a la herencia para extender la funcionalidad.
- Facade. Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema. Define una interfaz de alto nivel que hace que el subsistema se más fácil de usar.
- Flyweight. Usa el compartimiento para permitir un gran número de objetos de grano fino de forma eficiente.
- Proxy. Proporciona un sustituto o representante de otro objeto para controlar el acceso a éste.
Patrones de comportamiento
- Chain of Responsibility. Evita acoplar el emisor de una petición a su receptor, al dar a más de un objeto la posibilidad de responder a la petición. Crea una cadena con los objetos receptores y pasa la petición a través de la cadena hasta que esta sea tratada por algún objeto.
- Command. Encapsula una petición en un objeto, permitiendo así parametrizar a los clientes con distintas peticiones, encolar o llevar un registro de las peticiones y poder deshacer la operaciones.
- Interpreter. Dado un lenguaje, define una representación de su gramática junto con un intérprete que usa dicha representación para interpretar las sentencias del lenguaje.
- Iterator. Proporciona un modo de acceder secuencialmente a los elementos de un objeto agregado sin exponer su representación interna.
- Mediator. Define un objeto que encapsula cómo interactúan un conjunto de objetos. Promueve un bajo acoplamiento al evitar que los objetos se refieran unos a otros explícitamente, y permite variar la interacción entre ellos de forma independiente.
- Memento. Representa y externaliza el estado interno de un objeto sin violar la encapsulación, de forma que éste puede volver a dicho estado más tarde.
- Observer. Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambia de estado se notifica y actualizan automáticamente todos los objetos.
- State. Permite que un objeto modifique su comportamiento cada vez que cambia su estado interno. Parecerá que cambia la clase del objeto.
- Strategy. Define una familia de algoritmos, encapsula uno de ellos y los hace intercambiables. Permite que un algoritmo varíe independientemente de los clientes que lo usan.
- Template Method. Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura.
- Visitor. Representa una operación sobre los elementos de una estructura de objetos. Permite definir una nueva operación sin cambiar las clases de los elementos sobre los que opera.
Ingenieria de software
viernes, 15 de abril de 2011
(C) 6.- Documentacion tecnica
La documentación de los programas es un aspecto sumamente importante, tanto en el desarrollo de la aplicación como en el mantenimiento de la misma. Mucha gente no hace este parte del desarrollo y no se da cuenta de que pierde la posibilidad de la reutilización de parte del programa en otras aplicaciones
La documentación de un programa empieza a la vez que la construcción del mismo y finaliza justo antes de la entrega del programa o aplicación al cliente. Así mismo, la documentación que se entrega al cliente tendrá que coincidir con la versión final de los programas que componen la aplicación.Una vez concluido el programa, los documentos que se deben entregar son una guía técnica, una guía de uso y de instalación.
HERRAMIENTA
documentación puede ser presentada como páginas de teto en la consola, que se sirve a un navegador Web, o guardarse en archivos HTML.
para mi proyecto no pude generar la documentancion tendra que ser manualmente
Suscribirse a:
Entradas (Atom)