lunes, 26 de diciembre de 2011

Proceso de diseño y pruebas

  • Proceso de diseño :
    • Diseño arquitectónico :
      • Los subsistemas que forman el sistema y sus relaciones se identifican y documentan.
    • Especificación abstracta : 
      • Para cada subsistema se produce una especificación abstracta de sus servicios y las restricciones bajo las cuales debe funcionar.
    • Diseño de la interfaz :
      • Para cada subsistema se diseña y documenta su interfaz con otros subsistemas.
    • Diseño de componentes : 
      • Se asignan servicios a los componentes y se diseñan sus interfaces.
    • Diseño de la estructura de datos : 
      • Se diseña en detalle y especifica la estructura de datos utilizada en la implementación del sistema.
    • Diseño de algoritmos : 
      • Se diseñan en detalle y especifican los algoritmos utilizados para proporcionar los servicios.

  • Proceso de pruebas :
    • Prueba de componentes : 
      • Se prueban los componentes individuales para asegurarse de que funcionan correctamente, estos pueden ser entidades simples como funciones o clases de objetos, o pueden ser agrupaciones coherentes de estas entidades.
    • Prueba del sistema : 
      • Los componentes se integran para formar el sistema. Este procesos comprende encontrar errores que son resultado de interacciones no previstas entre los componentes y su interfaz.
    • Prueba de aceptación : 
      • Es la etapa final en el proceso de pruebas antes de que se acepte que el sistema se ponga en funcionamiento. 
      • Éste se prueba con los datos proporcionados por el cliente más que con datos de prueba simulados. 
      • Puede revelar problemas en los requerimientos donde los recursos del sistema no cumplen las necesidades del usuario o donde el desempeño del sistema es inaceptable.

sábado, 17 de diciembre de 2011

Especificación del Software o Ingeniería de Requerimientos

Es el proceso de comprensión y definición de qué servicios se requieren del sistema y de identificación de las restricciones de funcionamiento y desarrollo del mismo. La ingeniería de requerimientos es una etapa particularmente crítica en el proceso del software ya que los errores en esta etapa originan inevitablemente problemas posteriores en el diseño e implementación del sistema.

Existen cuatro fases  principales en el proceso de ingeniería de requerimientos :
  • Estudio de viabilidad :
    • Se estima si las necesidades del usuario se pueden satisfacer con las tecnologías actuales de software y hardware. 
  • Obtención y análisis de requerimientos :
    • Es el proceso de obtener los requerimientos del sistema por medio de la observación de los sistemas existentes, discusiones con los usuarios potenciales y proveedores, el análisis de tareas, etc.
  • Especificación de requerimientos :
    • Es la actividad de traducir la información recopilada durante la actividad de análisis en un documento que define un conjunto de requerimientos.
    • En este tipo de documento se pueden incluir :
      • Requerimientos del usuario :
      • Requerimientos del sistema :
  • Validación de los requerimientos :
    • Esta actividad comprueba la veracidad, consistencia y completitud de los requerimientos.
    • Durante este proceso, inevitablemente se descubren errores en el documento de requerimientos.
    • Se debe modificar entonces para corregier estos problemas.

    Desarrollo en espiral

    Más que representar el proceso del software como una secuencia de actividades con retrospectiva a otra, se representa como una espiral. Cada ciclo en la espiral representa una fase del proceso del software.

    Sectores de un ciclo de la espiral :
    • Definición de objetivos :
      • Se identifican las restricciones del proceso y el producto, y se traza un plan detallado de gestión.
      • Se identifican los riesgos del proyecto.
    • Evaluación y reducción de riesgos : 
      • Se definen los pasos para reducir dichos riesgos del proyecto identificados.
      • Se definen los pasos para  reducir dichos riesgos. 
    • Desarrollo y validación:
      •  Después de la evaluación de riesgos, se elige un modelo para el desarrollo del sistema.
    • Planificación : 
      • El proyecto se revisa y se toma la decisión de si se debe continuar con un ciclo posterior de la espiral.
    " La diferencia principal  entre el modelo en espiral y otro modelos del proceso del software es la consideración explícita del riesgo en el modelo en espiral"

      Iteración de procesos - Entrega Incremental

      La entrega incremental es un enfoque intermedio que combina las ventajas de los modelos en cascada y el evolutivo. En un procesos de desarrollo incremental, los clientes identifican, a grandes rasgos, los servicios que proporcionará el sistema. Entonces, se definen varios incrementos en donde cada uno proporciona un subconjunto de la funcionalidad del sistema.

      "La asignación de los servicios a los incrementos depende de la prioridad del servicio con los servicios de prioridad más alta entregados primero"

      Una vez que un incremento se completa y entrega, así los clientes pueden ponerlo en servicio. Esto significa que tienen un entrega temprana de parte de la funcionalidad del sistema. Pueden experimentar con el sistema, lo cual les ayuda a clarificar sus requerimientos para los incrementos posteriores y para las últimas versiones del incremento actual.

      Ventajas :
      • Los clientes no tienen que esperar hasta que el sistema completo se entregue para sacar provecho de el.
      • Los clientes pueden utilizar los incrementos iniciales como prototipos y obtener experiencia sobre los requerimientos de los incrementos posteriores del sistema.
      • Existe un bajo riesgo de un fallo total del proyecto.
      • Puesto que los servicios de más alta prioridad se entregan primero, y los incrementos posteriores se integran en ellos, es inevitable que los servicios más importantes del sistema sean a los que se les hagan más pruebas. 
      Problemas : 
      • Los incrementos deben ser relativamente pequeños (no más de 20000 de líneas de código) y cada uno debe entregar alguna funcionalidad del sistema.
      • Puede ser dificil adaptar los requerimientos del cliente a incrementos de tamaño apropiado.
      • Puede ser difícil identificar los recursos comunes que requieren todos los incrementos.
      Variante :
      • Se ah desarrollado una variante de este enfoque incremental denominada programación extrema.
        • Esta se basa en el desarrollo y la entrega de incrementos de funcionalidad muy pequelos,
        • En la participación del cliente en el proceso,
        • En la mejora constante del código y en la programación por parejas.
        • Se estudia la programación por parejas y otros llamados métodos ágiles.

      viernes, 16 de diciembre de 2011

      Etapas del modelo Basado en Componentes

      • Especificación de los requerimientos y validación:
        • Son comparables con otros procesos.
      • Análisis de componentes :
        • En esta etapa, los requerimientos se analizan utilizando información acerca de los componentes que se han descubierto.
      • Diseño del sistema con reutilización :
        • En esta fase se diseña o se reutiliza un marco de trabajo para el sistema.
        • Los diseñadores toman en cuenta los componentes que se reutilizan y organizan el marco del trabajo para que los satisfaga.
      • Desarrollo e integración :
        • Para crear el sistema, el software que no se puede adquirir externamente se desarrolla y los componenetes y los sistemas COTS se integran.

      "La ingeniería de software basada en componentes tiene la ventaja obvia de reducir la cantidad de software a desarrollarse y así reduce los costos y los riesgos"

      Etapas del modelo en Cascada

      • Análisis y definición de requerimientos :
        • Los servicios, restricciones y metas del sistemas se definen a partir de las consultas con los usuarios. 
        • Entonces, se definen en detalle y sirven como una especificación del sistema.
      • Diseño del sistema y del software :
        • El proceso de diseño del sistema divide los requerimientos en sistemas hardware o software.
        • El diseño del software identifica y describe las abstracciones fundamentales del sistema software y sus relaciones.
      • Implementación y prueba de unidades :
        • La prueba de unidades implica verificar que cada una cumpla su especificación.
      • Funcionamiento y mantenimiento :
        • Por lo general, ésta es la fase más larga del ciclo de vida. El sistema se instala y se pone en funcionamiento práctico.
        • El mantenimiento implica corregir errores no descubiertos en las etapas anteriores del ciclo de vida, mejorar la implementación de las unidades del sistema y resaltar los servicios del sistema una vez que se descubren nuevos requerimientos.

        Modelos de procesos para el Desarrollo de Software

        • Modelo en cascada :
          • Considera las actividades fundamentales del proceso de especificación, desarrollo, validación y evolución, y los representa como fases separadas del proceso, tales como la especificación de requerimientos, el diseño del software, la implementación, las pruebas, etc.

        • Desarrollo evolutivo :
          • Este enfoque entrelaza las actividades de especificación, desarrollo y validación. Un sistema inicial se desarrolla rápidamente a partir de especificaciones abstractas. Éste se refina basándose en las peticiones del cliente para producir un sistema que satisfaga sus necesidades.

        • Ingeniería del software basada en componentes :
          • Este enfoque se basa en la existencia de un número significativo de componenetes en el sistema más que en desarrollarlos desde cero.

        Terminología sobre protección

        • Exposición :  
          • Posible pérdida o daño en un sistema informático.
            • Ejemplo:
              • Pérdida o daño de los datos o la pérdida de tiempo y esfuerzo si es necesaria una recuperación del sistema después de una violación de protección.
        • Vulnerabilidad : 
          • Debilidad en un sistema informático que se puede aprovechar para provocar pérdidas o daños.
        • Ataque : 
          • Aprovechamiento de la vulnerabilidad de un sistema. 
          • Generalmente se produce desde fuera del sistema y con una intención deliberada de causar algún daño.
        • Amenazas : 
          • Circunstancias que potencialmente puedan provocar pérdidas o daños.
          • Se pueden entender como una vulnerabilidad del sistema que está expuesto a un ataque.
        •  Control : 
          • Medida de protección que reduce la vulnerabilidad del sistema.
          • La encriptación podría ser un ejemplo de un control que reduce una vulnrabilidad de un sistema de control de acceso deficiente.

        Daños a un sistema por ataques externos

        • Denegación de servicios : 
          • El sistema puede verse forzado a entrar en un estado en que sus servicios normales no están disponibles. Esto, obviamente, afecta a la disponibilidad del sistema.
        • Corrupción de programas o datos :
          • Los componentes software del sistema pueden ser alterados de forma no autorizada. Esto puede afectar al comportamiento del sistema y, por lo tanto, a su fiabilidad y a su seguridad. Si es daño es grave, la disponibilidad del sistema puede verse afectada.
        • Revelación de información confidencial :
          • La información gestionanda por el sistema puede ser confidencial y los ataques externos pueden exponerla a personas no autorizadas.
          • ependiendo del tipo de datos podría afectar a la seguridad del sistema y puede permitir ataques posteriores que afecten a la disponibilidad o fiabilidad del sistema.
         "Una exposicion es análoga a un accidente y una vulnerabilidad es análoga a una contingencia"

        Garantia de seguridad

        La clave para garantizar la seguridad es asegurar que los accidentes no ocurran o que las consecuencias de éstos sean mínimas. Esto puede conseguirse de tres formas complementarias :
        • Evitación de contingencias :
          • Un sistema de corte que requiere que el operador presione dos botones distintos al mismo tiempo para utilizar las máquina evita la contingencia de que los dedos del operador estén cerca de las cuchillas.

          • Detección y elminación de contingencias :
            • Un sistema de una planta química puede detectar una presión excesiva y abrir una válvula de escape para reducir la presión antes de que ocurra una explosión. 

            • Limitación de daños :
              • El motor de un avión normalmente incluye extintores de incendios automáticos. Si se produce un fuego, a menudo éste se puede controlar antes de que suponga una amenaza para el avión.
            "Los accidentes ocurren generalmente cuando varias cosas van mal al mismo tiempo. Un análisis de accidentes serios sugiere que casi todos ellos se debieron a una combinación de malos funcionamientos más que a fallos aislados."

            Fiabilidad y Disponibilidad

            Supongamos que vamos a comparar un sistema A contra uno B. 
            • Suponiendo que el sistema A falla una vez al año, y un sistema B falla una vez al mes, entonces A claramente es más fiable que B. Sin embardo, supongamos que A tarda tres días en recuperarse después de un fallo, mientras que B tarda 10 minutos en reinicializarse. La disponibilidad de B a lo largo del año ( 120 minutos de tiempo sin servicio) es mucho mejor que la del sitema A (4230 minutos sin servicio).
            La fiabilidad y la disponibilidad de un sistema se pueden definir de forma más precisa como sigue :
            • Fiabilidad : La probabilidad de que se tengan operaciones libre de caídas durante un tiempo definido en un entorno dado para un propósito específico.
            • Disponibilidad : La probabilidad de que un sistema, en cierto momento, esté en funcionamiento y sea capaz de propordionar los servicios solicitados.

            Propiedades de un sistema "CONFIABILIDAD"

            • Reparabilidad : 
              • Los fallos de funcionamiento del sistema son inevitables, pero la interrupción causada por estos fallos se puede minimizar si el sitema se puede reparar rápidamente. Para que esto ocurra, debe ser posible diagnosticar el problema, acceder al componente que ha fallado y realizar los cambios para reparar ese componente.
            • Mantenibilidad :
              • Un software mantenible es un software que puede adaptarse para tener en cuenta los nuevos requerimientos con un coste razonable y con una baja probabilidad de introducir nuevos errores en el sistema al realizar los cambios correspondientes.
            • Supervivencia : 
              • La supervivencia es la capacidad de uns sistema para continuar ofreciendo su servicio mientras está siendo atacado y, potencialmente, mientras parte del sistema está inhabilitado. Se utilizan tres estrategias para asegurar que el sistema pueda continuar funcionando con un servicio mínimo, a saber: resistencia al ataque, reconocimiento del ataque y recuperación de daños ocasionados por un ataque.
            • Tolerancia a errores :
              • Esta propiedad puede considerarse como parte de la usabilidad y refleja hasta qué punto el sistema ha sido diseñado para evitar y tolerar un error en la entrada de datos del usuario del sistema. Es decir, cuando se producen errores por parte del usuario, el sistema debería, en la medida de los posible, detectar errores y repararlos de forma automática o pedir al usuario que vuevla a introducir sus datos.

            sábado, 26 de noviembre de 2011

            Bienvenidos

            Bienvenidos a mi blog, de ahora en adelante este será uno de los principales lugares en internet, donde encontrarán información y entretenimiento de diversos tipos, les invito a seguir dia a dia este blog. Atte: ZoidHack

            Mi curriculum : http://www.computrabajo.com.pe/cvs/elvisperezunt