sábado, 10 de diciembre de 2016

COMPUTACIÓN MÓVIL

Protocolos de Comunicación.


viernes, 27 de noviembre de 2015

Proceso de Desarrollo de Software, Desarrollo del Software II


    El proceso de desarrollo de software "es aquel en que las necesidades del usuario son traducidas en requerimientos de software, estos requerimientos transformados en diseño y el diseño implementado en código, el código es probado, documentado y certificado para su uso operativo". Concretamente "define quién está haciendo qué, cuándo hacerlo y cómo alcanzar un cierto objetivo" [Jacobson 1998].

Para desarrollar software es necesario:

·         Entender la naturaleza del software naturaleza del software.
·         Utilizar un proceso de desarrollo proceso de desarrollo bien definido y probado (adaptado a las características del software a desarrollar).
·         Gestionar el desarrollo Gestionar el desarrollo de software como un proyecto de ingeniería.

Codificación del Software.


Una vez que los algoritmos de una aplicación han sido diseñados, ya se puede iniciar la fase de codificación. En esta etapa se tienen que traducir dichos algoritmos a un lenguaje de programación específico; es decir, las acciones definidas en los algoritmos hay que convertirlas a instrucciones.

Para codificar un algoritmo hay que conocer la sintaxis del lenguaje al que se va a traducir. Sin embargo, independientemente del lenguaje de programación en que esté escrito un programa, será su algoritmo el que determine su lógica.

La lógica de un programa establece cuáles son sus acciones y en qué orden se deben ejecutar. Por tanto, es conveniente que todo programador aprenda a diseñar algoritmos antes de pasar a la fase de codificación.

Durante la fase de programación, el código puede adoptar varios estados, dependiendo de la forma de trabajo y del lenguaje elegido, a saber:

Código fuente: es el escrito directamente por los programadores en editores de texto, lo cual genera el programa. Contiene el conjunto de instrucciones codificadas en algún lenguaje de alto nivel. Puede estar distribuido en paquetes, procedimientos, bibliotecas fuente, etc.

Código objeto: es el código binario o intermedio resultante de procesar con un compilador el código fuente. Consiste en una traducción completa y de una sola vez de éste último. El código objeto no es inteligible por el ser humano (normalmente es formato binario) pero tampoco es directamente ejecutable por la computadora. Se trata de una representación intermedia entre el código fuente y el código ejecutable, a los fines de un enlace final con las rutinas de biblioteca y entre procedimientos o bien para su uso con un pequeño intérprete intermedio.

El código objeto no existe si el programador trabaja con un lenguaje a modo de intérprete puro, en este caso el mismo intérprete se encarga de traducir y ejecutar línea por línea el código fuente (de acuerdo al flujo del programa), en tiempo de ejecución. En este caso tampoco existen el o los archivos de código ejecutable. Una desventaja de esta modalidad es que la ejecución del programa o sistema es un poco más lenta que si se hiciera con un intérprete intermedio, y bastante más lenta que si existen el o los archivos de código ejecutable.

Código ejecutable: Es el código binario resultado de enlazar uno o más fragmentos de código objeto con las rutinas y bibliotecas necesarias. Constituye uno o más archivos binarios con un formato tal que el sistema operativo es capaz de cargarlo en la memoria RAM (eventualmente también parte en una memoria virtual), y proceder a su ejecución directa. Por lo anterior se dice que el código ejecutable es directamente «inteligible por la computadora». El código ejecutable, también conocido como código máquina, no existe si se programa con modalidad de «intérprete puro».

Procesamiento de Errores.


    A la hora de tratar los errores los errores que nuestro programa genere nos surgen generalmente tres grandes escenarios:
·         Que el usuario comenta un error a la hora de comunicarse con el programa (por ejemplo en la entrada de datos).

·         Que el programador no diseñe bien el programa y esté por tanto mal programado o bien que el sistema sobre el que se ejecuta el programa sea inestable o no esté funcionando correctamente.

Efectos de software con defectos.

    Tenemos que tener claro que cuando hablamos de prevenir las cosas lo que vamos a prevenir son los defectos en el software. Los defectos del software no son simples “molestias”:

   - Un producto con defectos deja de usarse
  - Puede producir enormes pérdidas (incluso de vidas humanas, si muchos accidentes la NASA son por este motivo un software desarrollado con defectos)
  - Producen retrasos en las entregas, enormes dificultades técnicas… y son responsables de muchas horas extraordinarias.

Debemos tener claro que nuestro objetivo es evitar producir programas defectuosos mediante 4 pasos:

·           -  Fundamentos del desarrollo (análisis, diseño, buena codificación).
·           -  Depuración.
·           -  Buen tratamiento de errores.
·           -  Pruebas y documentación.

Mecanismos.

Un mecanismo para controlar los errores de ejecución debe ser:

Robusto: El mecanismo debe obligar al programador a escribir código para manejar los errores de ejecución. Por ejemplo: ¿qué sucede si un archivo no se puede abrir?

Reusable: Podemos reutilizar el código, implementando diferentes manejadores de error en diferentes escenarios o siguiendo nuestra terminología, estos mecanismos los podremos utilizar en todas nuestras clases.

Extensible: Permita añadir nuevos tipos de errores y extender los ya existentes (nosotros esto ya sabemos como hacerlo: con la herencia).

Procesos de Validación.

Validación es el proceso de evaluación intensa que se lleva a cabo justo antes de entregar el producto al cliente, su objetivo es determinar si el producto en su totalidad satisface sus especificaciones.

Dentro del proceso de verificación y validación se utilizan dos técnicas de comprobación y
análisis de sistemas:

·       Inspecciones del software: analizan y comprueban las representaciones del sistema como el documento de requerimientos, los diagramas de diseño y el código fuente del programa. Las inspecciones de software y los análisis automatizados son técnicas estáticas puesto que no requieren que el sistema se ejecute.

·      Las pruebas del software: Llevan a cabo una implementación del software con losdatos de prueba y examinan las salidas del software y su comportamiento operacional para comprobar que se desempeñe conforme a lo requerido.

Pruebas.

·         Prueba de interfaz: Muchas fallas de aplicaciones se deben a problemas con las interfaces, por lo que es recomendable la aplicación de estas pruebas.

·         Prueba del sistema: La prueba del sistema es la culminación de las pruebas de integración. Consiste en pruebas que validan la aplicación completa, contra sus requerimientos.

·         Prueba de utilidad: Una buena interfaz puede mejorar mucho el valor de una aplicación. La prueba de utilidad valida la aceptación de la aplicación por los usuarios.

·         Prueba para los requerimientos de interfaz de usuario: La tarea principal de las pruebas de utilidad es asegurar que la aplicación satisface los requerimientos establecidos.

·         Pruebas de instalación: El hecho de que se haya probado la aplicación en el entorno propio no asegura que trabaje de marera apropiada.

Documentación de Software.


    La documentación de sistemas es el conjunto de información que nos dice qué hacen los sistemas, cómo lo hacen y para quién lo hacen.

La documentación consiste en material que explica las características técnicas y la operación de un sistema. Es esencial para proporcionar entendimiento de un sistema a quien lo vaya a usar para mantenerlo, para permitir auditoria del sistema y para enseñar a los usuarios como interactuar con el sistema y a los operandos como hacerlo funcionar.

Manual Administrativo.

Sirve como punto de partida al Sistema propuesto, ya que será función de la gerencia, de acuerdo con los usuarios de dicho Sistema, determinar silo expuesto en él satisface los requerimientos del propio sistema. Una vez lograda la aprobación, se estará en condiciones de iniciar el desarrollo del Sistema propuesto e ir integrando el resto de la documentación.

El manual tiene como finalidad el permitir a la alta gerencia tener la información necesaria y suficiente sobre un sistema en particular y servir como fuente dc consulta una vez que el Sistema ha sido implantado.

Contenido

-       Nombre del sistema.
-       Describir el nombre del sistema a implantar en la empresa.
-Equipo Encargado Del Sistema.
- Nombre del personal encargado del análisis y diseño del sistema.
- Resumen Administrativo.

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.

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.

Manual De Captación.

Permite tener una clara visión del proceso de Captación de los datos fuentes previo al procesamiento electrónico de los mismos.

Objetivos.

-           Documentar al usuario a cerca del recorrido a través de las pantallas del sistema.
-       Conocer la forma cómo el usuario puede utilizar el equipo necesario para la ejecución del sistema.

Contenido.

-          Diagrama General Del Sistema.

Este diagrama debe ser presentado gráficamente y en forma sencilla. Representar los diagramas utilizando para ello diagramas de bloques ( es el mismo diagrama que se presenta en el Manual Administrativo).

-          Diagramas De Pantalla.

Presentar en este punto el flujo del sistema en las pantallas utilizadas por cada módulo.

Plan de Mantenimiento.


El estándar IEEE 1219 [IEEE, 1993] define el Mantenimiento del Software como “la modificación de un producto software después de haber sido entregado [a los usuarios o clientes] con el fin de corregir defectos, mejorar el rendimiento u otros atributos, o adaptarlo a un cambio en el entorno”.

Tipos de Mantenimiento.

Mantenimiento Correctivo: El mantenimiento correctivo tiene por objetivo localizar y eliminar los posibles defectos de los programas. Un defecto en un sistema es una característica del sistema con el potencial de causar un fallo. Un fallo ocurre cuando el comportamiento de un sistema es diferente del establecido en la especificación.

 Entre otros, los fallos en el software pueden ser de:

 Procesamiento, por ejemplo, salidas incorrectas de un programa.
 Rendimiento, por ejemplo, tiempo de respuesta demasiado alto en una búsqueda de información.
 Programación, por ejemplo, inconsistencias en el diseño de un programa.
 Documentación, por ejemplo, inconsistencias entre la funcionalidad de un programa y el manual de usuario.

Mantenimiento Adaptativo:

Este tipo de mantenimiento consiste en la modificación de un programa debido a cambios en el entorno (hardware o software) en el cual se ejecuta.

Mantenimiento Perfectivo: Algunos autores dividen este tipo de mantenimiento en dos:

 Mantenimiento de Ampliación: orientado a la incorporación de nuevas funcionalidades.
 Mantenimiento de Eficiencia: que busca la mejora de la eficiencia de ejecución.
 Este tipo de mantenimiento aumenta cuando un producto software tiene éxito comercial y es utilizado por muchos usuarios, ya que cuanto más se utiliza un software, más peticiones de los usuarios se reciben demandando nuevas funcionalidades o mejoras en las existentes.

Mantenimiento Preventivo: consiste en la modificación del software para mejorar sus propiedades (por ejemplo, aumentando su calidad y/o su mantenimiento) sin alterar sus especificaciones funcionales.










domingo, 22 de noviembre de 2015

Representación del Conocimiento.

         

La IA busca representar generalizaciones, es decir, no representar cada situación individual, sino agrupar las situaciones que comparten propiedades importantes. De tal forma que pueda:

a        a)    Ser entendido por las personas que lo provean.
b        b)    Ser modificado para corregir errores y reflejar cambios en el mundo.
c        c)    Usarse en muchas situaciones aun sin ser totalmente exacto o completo.
d        d) Usarse superando su propio volumen y disminuir el rango de posibilidades que deben considerarse.
e        e)    Caracterizarse las técnicas de IA  con independencia del problema a tratar.

      El conocimiento puede ser de tipo procedimental, declarativo o heurístico.

·      Conocimiento procedimental: es aquel que es compilado y se refiere a la forma de realizar una cierta tarea.

·  Conocimiento declarativo: es conocimiento pasivo, sentencias que expresan hechos del mundo que nos rodea. Por ejemplo, la información en una base de datos.

·    Conocimiento heurístico: es algo especial para resolver problemas complejos. Es un criterio, estrategia, método o proceso que simplifica resolver problemas.


         Jerarquía del Conocimiento.






§  Metaconocimiento: conocimiento acerca del conocimiento y la experiencia.
§  Conocimiento: información especializada que nos es útil.
§  Información: datos procesados que resultan de interés.
§  Datos: elementos de interés potencial.
§  Ruido: elementos de poco interés que ocultan datos.

Existen 2 tipos de conocimiento:

·         Formal:
o   Reglas de producción.
o   Lógica de predicados.
·         No formal:
o   Redes Semánticas.
o   Frames.
o   Scripts.
o   Dependencia Conceptual.



    Lógica de Predicados.


   Está basada en la idea de que las sentencias realmente expresan relaciones entro objetos, así como también cualidades y atributos de tales objetos.
Los objetos pueden ser personas, objetos físicos o conceptos.
Las cualidades, relaciones o atributos, se denominan predicados. Los objetos se conocen como argumentos o términos del predicado.
Al igual que las proposiciones, los predicados tienen un valor de veracidad, pero a diferencia de las preposiciones, su valor de veracidad, depende de sus términos. Un predicado puede ser verdadero para un conjunto de términos, pero falso para otro.


Conocimiento Mediante Reglas.


    Permite lograr una búsqueda de aserciones lógicas en el estudio de los sistemas basados o encaminados en una serie de instrucciones permitiendo de este modo lograr las vías de ejecución del programa de forma similar a las construcciones tradicionales de control como If, Then, Else. Las cuales definen los caminos de ejecución de los programas tradicionales.


Inteligencia artificial emparejamiento:

Búsqueda inteligente Saber elegir entre las diferentes reglas que se pueden aplicar emparejamiento entre el estado actual y las precondiciones de las reglas.

Clases de emparejamiento.

Indexación: Realiza una búsqueda sencilla a través de todas las reglas, comparando las precondiciones de cada con el estado actual

Emparejamiento con variables: En los sistemas basados en reglas se necesita calcular todo el conjunto de reglas que emparejan con la descripción del estado actual.



Razonamiento Estadístico. (teorema Bayesiano).


      La metodología bayesiana está basada en la interpretación subjetiva de la probabilidad y tiene como punto central el Teorema de Bayes.

El objetivo de la estadística, y en particular de la estadística Bayesiana, es proporcionar una metodología para analizar adecuadamente la información con la que se cuenta (análisis de datos) y decidir de manera razonable sobre la mejor forma de actuar (teoría de decisión).

   Tipos de inferencia: clásica y bayesiana

• La toma de decisiones es un aspecto primordial en la vida de un profesional, por ejemplo, un médico debe de tomar decisiones.

• La metodología estadística clásica se puede ver como un conjunto de recetas que resultan apropiadas en determinados casos y bajo ciertas condiciones.

Sin embargo, existe una metodología unificada y general que se deriva de analizar el proceso lógico que debe de seguirse para tomar una decisión (teoría de la decisión), y que incluye como caso particular al conjunto de recetas clásicas.

• La estadística está basada en la teoría de probabilidades. Formalmente la probabilidad es una función que cumple con ciertas condiciones, pero en general puede entenderse como una medida o cuantificación de la incertidumbre.



Lógica Difusa.


    La lógica difusa es una rama de la inteligencia artificial que se funda en el concepto "Todo es cuestión de grado", lo cual permite manejar información vaga o de difícil especificación si quisiéramos hacer cambiar con esta información el funcionamiento o el estado de un sistema específico. Es entonces posible con la lógica borrosa gobernar un sistema por medio de reglas de 'sentido común' las cuales se refieren a cantidades indefinidas. Las reglas involucradas en un sistema borroso, pueden ser aprendidas con sistemas adaptativos que aprenden al ' observar ' como operan las personas los dispositivos reales, o estas reglas pueden también ser formuladas por un experto humano. En general la lógica borrosa se aplica tanto a sistemas de control como para modelar cualquier sistema continuo de ingeniería, física, biología o economía.

Ventajas.

  •  La principal ventaja de este sistema de control es su facilidad de  implementación. 
  •   Este tipo de sistemas están dando muy buenos resultados en procesos no lineales y de difícil modelación.
  •   El modo de funcionamiento es similar al comportamiento humano. Es una forma rápida y económica de resolver un problema.No se necesita conocer el modelo matemático que rige su funcionamiento.


Desventajas

  •  Mútiples difiniciones de operadores y reglas de inferencia difusas.
  •   Dificultad de interpretación de valores difusos (semántica no clara).
  •   No hay una buena justificación de operadores difusos.
  •  En las redes neuronales se precisa de un tiempo de aprendizaje para obtener los mejores resultados en la salida. (Al igual que ocurre con los humanos).
  •  Ante un problema que tiene solución mediante un modelo matemático,    obtenemos peores resultados usando Lógica Difusa.