sábado, 12 de mayo de 2012

Mitos y desarrollo del Software.




Universidad Pedagógica de el Salvador.

Cátedra:
                        Ingeniería en sistema de                                             software.

Alumno:
                    Alex Balmore Gómez Cornejo.

Tema:

                    Mitos y desarrollo del
                        Software.




Índice.

Introducción.                                             3
Objetivos.                                                    4
Mitos del software.                                 5-6
Mitos de gestión.                                      7
Mitos del cliente.                                     8
Desarrollo ágil.                                         9
Procesos xp.                                         10
DAS.                                                               11
Scrum.                                                          12
Procesos escrum.                                     13
Conclusión.                                                 14

Fin.





Introducción.



Actualmente en nuestro País resaltan personajes con buena calidad de software
La humanidad sin creerlo pero nosotros tenemos la capacidad de ser grandes desarrolladores de ello surge la necesidad de comprender como evaluar u software dejando de fuera mitos surgidos en muchos casos por la manera de cómo fue desarrollado el sistema











Objetivos.

General.

               Desarrollo del software.

Especifico.

Ø Comprendes los mitos de software.
Ø Tipos de mitos que surgen y como invadirlos.
Ø Indagar sobre otros mitos de programación y procesos.













Mitos Del Software
(admón.).


Los mitos del software-creencias del desarrollo  acerca del software y de los procesos empleados para construirlo- se pueden rastrear hasta los primeros días de la computación del desarrollo. Los mitos tienen ciertos atributos que los convierten en reales no cambiantes.
Muchas de las causas de la crisis del software pueden ser encontradas en una mitología que surge durante los primeros años del desarrollo del software Los mitos del software propagaron información errónea y con fusión

Mito:

Si fallamos en la planificación podemos añadir más programadores
y recuperar el tiempo perdido.
Realidad:

Ley de Brooks: "Agregar gente a un proyecto atrasado, lo
atrasa aún más".
Razón: Crear software no es una tarea particional, como dice el
Principio de Brooks: "Gestar a un bebé tarda 9 meses, no importa cuántas mujeres sean asignadas a la tarea.
























Mito:
Una declaración general de los objetivos es suficiente para
comenzar a escribir los programas; podemos dar los detalles más adelante.

Realidad:
 Una mala definición inicial es la principal causa del trabajo en
vano. Es esencial una descripción formal y detallada del ámbito de la
información, funciones, rendimiento, interfaces y criterios de validación.
Esto solo puede determinarse después de una exhaustiva comunicación
entre el cliente y el analista.





Mito:

Una vez que hicimos el programa y funciona, nuestro trabajo ha terminado.
Realidad:

Los datos industriales indican que entre el 50% y el 70% de
todo el esfuerzo dedicado a un programa se realizará después de que se
le haya entregado al cliente por primera vez









Mitos _de Gestión
(Profesional).
Los gestores están normalmente bajo la presión de cumplir presupuestos, hacer que no se retrase el proyecto y mejorar la calidad. El gestor se agarra a un mito del software aun que tal creencia sólo disminuya la presión temporalmente.

Mito:
¿Por qué debemos cambiar nuestra forma de desarrollar el Software? Estamos haciendo el mismo tipo de programación a hora que hace diez años.
Realidad:
Aunque el dominio de la aplicación puede ser el mismo, la demanda de una mayor productividad y calidad, y el papel crítico del software en objetivos comerciales estratégicos, ha aumentado sustancialmente.






Mitos_del_cliente.
Un cliente que solicita una aplicación software puede ser interno a la compañía o una compañía exterior El cliente cree en los mitos que existen sobre el software debido a que los gestores y trabajadores responsa sables hacen muy poco para corregir la mala Información Los mitos conducen a que el cliente se cree una falsa expectativa y finalmente, quede insatisfecho con el desarrollo del software
Mito:
Una declaración general de los objetivos es suficiente para comenzar a escribir los programas, podemos dar los detalles más adelante
Realidad:
Una mala definición inicial es la principal causa del trabajo baldío en software. Una descripción formal y detallada del dominio de la información, funciones, rendimiento, interfaces, ligaduras de diseño y criterios de Validación es esencial. Estas características pueden determinarse sólo después de una exhaustiva comunicación entre el cliente y el analista.


Evaluación


Desarrollo ágil.

¿Qué es?
Podría decirse que es el trabajo desarrollado para la realización de un proyecto. Hay innumerables métodos de desarrollo ágil pero todos tienen un fin que es crear un software confiable. El software desarrollado en una unidad de tiempo es llamado una iteración, la cual debe durar de una a cuatro semanas.

Esto consta de:

Planificación.
Análisis de requerimientos.
Diseño.
Codificación.
 Revisión y documentación.
Lo que se pretende con esto es crear un demo el cual se haya desarrollado sin ningún error al momento de la ejecución. Estos métodos ágiles enfatizan las comunicaciones cara a cara en vez de la documentación.
Programación extrema xp.
Este método de programación  está basado en metodologías tradicionales adaptables  a los cambios, en cualquier etapa del desarrollo. Es considerado como la mejor metodología de desarrollo todo por lo que esta de acorde y se puede modificar y incluso darle cambios drásticos sin  que el obtenga daños en ninguna de sus etapas.




Procesos de xp.
Codificar
Es necesario codificar y plasmar nuestras ideas a través del código. En programación, el código expresa la interpretación del problema, así podemos utilizar el código para comunicar, para hacer comunes las ideas, y por tanto para aprender y mejorar.
 Hacer pruebas
Las pruebas dan la oportunidad de saber si lo implementado es lo que en realidad se tenía en mente. Las pruebas nos indican que nuestro trabajo funciona, cuando no podemos pensar en ninguna prueba que pudiese originar un fallo en nuestro sistema, entonces habremos acabado por completo.
Escuchar
Si vamos a hacer pruebas tenemos que preguntar si lo obtenido es lo deseado, y tenemos que preguntar a quien necesita la información. Tenemos que escuchar a nuestros clientes cuáles son los problemas de su negocio, debemos de tener una escucha activa explicando lo que es fácil y difícil de obtener, y la realimentación entre ambos nos ayudan a todos a entender los problemas.
Diseñar
El diseño crea una estructura que organiza la lógica del sistema, un buen diseño permite que el sistema crezca con cambios en un solo lugar. Los diseños deben de ser sencillos, si alguna parte del sistema es de desarrollo complejo, lo apropiado es dividirla en varias. Si hay fallos en el diseño o malos diseños, estos deben de ser corregidos cuanto antes.
Resumiendo las actividades de Xp: Tenemos que codificar porque sin código no hay programas, tenemos que hacer pruebas por que sin pruebas no sabemos si hemos acabado de codificar, tenemos que escuchar, porque si no escuchamos no sabemos qué codificar ni probar, y tenemos que diseñar para poder codificar, probar y escuchar indefinidamente.





Desarrollo Adoptivo del Software
(DAS).
Es una propuesta de desarrollo para software y sistemas de mayor complejidad apoyada en la colaboración humana y de equipo.
Los métodos ágiles enfatizan las comunicaciones cara a cara en vez de la documentación. La mayoría de los equipos ágiles están localizados en una simple oficina abierta, a veces llamadas "plataformas de lanzamiento" La oficina debe incluir revisores, escritores de documentación y ayuda, diseñadores de iteración y directores de proyecto. Los métodos ágiles también enfatizan que el software funcional es la primera medida del progreso. Combinado con la preferencia por las comunicaciones cara a cara, generalmente los métodos ágiles son criticados y tratados como "indisciplinados" por la falta de documentación técnica.











Scrum.
Scrum, más que una metodología de desarrollo software, es una forma de auto-gestión de los equipos de programadores. Un grupo de programadores deciden cómo hacer sus tareas y cuánto van a tardar en ello. Scrum ayuda a que trabajen todos juntos, en la misma dirección, con un objetivo claro.
Scrum permite además seguir de forma clara el avance de las tareas a realizar, de forma que los "jefes" puedan ver día a día cómo progresa el trabajo.
Sin embargo, Scrum no es una metodología de desarrollo, puesto que no indica qué se debe hacer para hacer el código. Debería, por tanto, complementarse con alguna otra metodología de desarrollo. Se lleva bien con las metodologías ágiles y en concreto, con la programación extrema.










Procesos del Scrum.
En Scrum un proyecto se ejecuta en bloques temporales cortos y fijos. Cada iteración tiene que proporcionar un resultado completo, un incremento de producto final que sea susceptible de ser entregado con el mínimo esfuerzo al cliente cuando lo solicite.

El proceso parte de la lista de objetivos/requisitos priorizada del producto, que actúa como plan del proyecto. En esta lista el cliente prioriza los objetivos balanceando el valor que le aportan respecto a su coste y quedan repartidos en iteraciones y entregas. De manera regular el cliente puede maximizar la utilidad de lo que se desarrolla y el retorno de inversión mediante la re planificación de objetivos que realiza al inicio de cada iteración. 






Conclusión.



Cada personal de desarrollo de sistemas debe de tener la manera de compren lo que su sistema requiere para evitar que surjan inconvenientes en procesos de demás que aun no se han detallado.
De igual manera  demos saber utilizar un método de programación  como el de xp para cuando el sistema u desarrollo requiera cambios no nos daría problemas u otros inconvenientes.

MODELO DE PROTOTIPOS Y MODELO EN ESPIRAL, CARACTERISTICAS Y DIFERENCIAS, Y SU PAPEL EN EL CICLO DE VIDA CLASICO


MODELO DE PROTOTIPOS Y MODELO EN ESPIRAL, CARACTERISTICAS Y DIFERENCIAS, Y SU PAPEL EN EL CICLO DE VIDA CLASICO

MODELO DE PROTOTIPO:
Es un modelo del ciclo de vida del software el  cual se utiliza para dar al usuario una vista preliminar de cómo se encuentra  el software. Este modelo es básicamente prueba y error ya que si al usuario no le gusta una parte del prototipo significa que la prueba fallo por lo cual se debe corregir el error que se tenga hasta que el usuario quede satisfecho.
CARACERISTICAS
Ø  Describe las fases principales de desarrollo de software.
Ø  Define las fases primarias esperadas de ser ejecutadas durante esas fases.
Ø  Ayuda a administrar el progreso del desarrollo del software
Ø  Provee un espacio de trabajo para la definición de un detallado proceso de desarrollo de software.
VENTAJAS
Ø  Ser fácilmente modificable.
Ø  Reducir los costos de rediseño si los problemas se detectan pronto y cuando son fáciles de localizar.
Ø  Este modelo es útil cuando el cliente conoce los objetivos generales para el software.

DESVENTAJAS
Ø  Hacer pensar a los usuarios que el producto final está prácticamente terminado.
Ø  Llevar a un número de cambios excesivo.



MODELO EN ESPIRAL:

Es un modelo de proceso de software evolutivo el cual es a base de una serie de ciclos los cuales se repiten en forma de espiral, esta orientado a evitar riesgos de trabajo. Cada vez que se avanza un ciclo se va alcanzando un nivel superior hasta concluir el proyecto.



CARACTERISTICAS
Ø  Es un modelo que puede combinarse con otros modelos de procesos de desarrollo (cascada y evolutivo).
Ø  Es el mejor modelo que se utiliza para desarrollar grandes sistemas.
Ø  El análisis de riesgo requiere la participación de personal con experiencia.
VENTAJAS
Ø  Modelo de proceso adaptable.
Ø  El modelo de espiral puede aplicarse a lo largo de la vida del software.
Ø  Es apropiado para desarrollar Sistemas Operativos.
DESVENTAJAS
Ø  No se ha utilizado mucho ya que es un modelo nuevo.
Ø  Debido a la complejidad no se recomienda utilizarlo en sistemas pequeños.
Ø  Es un modelo costoso.

COMPARACION ENTRE MODELOS PROTOTIPO Y ESPIRAL


CRITERIO

PROTOTIPADO
ESPIRAL
Disponibilidad de recursos

Algunos
Algunos
Complejidad del proyecto

Media
Alta
Entendimiento de requerimientos

Vago
Vago
Tecnología del producto

Vago
Vago
Manejo de la perspectiva de riesgo

Si
Si
Conocimiento del dominio de problemas
Regular
Pobre

Desarrollo adaptativo de software (DAS)


Desarrollo adaptativo de software (DAS)

El desarrollo adaptativo de software (DAS) lo propuso Jim Highsmith 1998 como una técnica para construir software y sistemas complejos. Los apoyos filosóficos del DAS se enfocan en la colaboración humana y la organización propia del equipo. Highsmith 1998 expone lo anterior cuando escribe:

La organización propia es una propiedad de los sistemas adaptativos complejos, similar a un "aja" colectivo; es en el momento de energía creativa cuando surge la solución a algún problema persistente. La organización propia emerge cuando los individuos, los agentes independientes (células en un cuerpo, especies en un ecosistema, desarrolladores en un equipo de software) cooperan [colaboran] para crear salidas emergentes. Una salida emergente es una propiedad más allá de la capacidad de cualquier agente individual. Por ejemplo, las neuronas individuales del cerebro no poseen conciencia, pero en forma co­lectiva generan la propiedad de la conciencia. Tendemos a ver este fenómeno del surgi­miento colectivo como un accidente, o al menos como independiente y sin reglas. El estudio de la organización propia demuestra que dicha visión es errónea.

El desarrollo adaptativo del software (DAS) fue propuestos por Jim Highsmith como una metodología para desarrollar el software y sistemas muy complejos. El se centra en la colaboración humana y la organización del equipo.
El ciclo de vida del DAS se conforma de tres fases como muestra en la figura: Especulación, colaboración y aprendizaje.




CMM


CMM
Su significado a las siglas es modelo de madures de capacidades, está basado en 5 etapas en que una empresa  a apega a los procesos  comunes y repetibles  para realizar el trabajo de dicha empresa.
este modelo de madurez fue desarrollado de 1984 a 1987 por watts humphrey y el instituto de ingeniería del software.
el objetivo de estas  5 etapas del modelo de madurez es para evaluar que tan sofisticada es una organización en el establecimiento y apego a procesos estándares

http://www.tenstep.com.mx/images/0.0.1.1..gif

Descripción de las 5 etapas del modelo de madurez de capacidades.
*      Caos (Ad-Hoc/crisis): es cuando la empresa cuenta con pocos procesos comunes. Los éxitos de estos procesos que se hagan en la empresa dependen  de la fortaleza y habilidades de la gente. Las organizaciones muestran muy poco interés a querer construir u n ambiente que sea el adecuado para tener un buen soporte que ayude a que todos los proyectos tengan éxito.
*      Administración  de proyectos estandarizada: en esta etapa la organización busca un grado de crecimiento  o alcanzar otro nivel al implementar procesos estándares para la administración de proyectos. Está tratando de de establecer los cimientos sobre los cuales mejora en el futuro.
*       técnicas estándar:  

¿Qué es un Método Formal?


Definición: "Método formal es cualquier técnica que trate la construcción y/o el análisis de modelos matemáticos que contribuyen a la automatización del desarrollo de sistemas informáticos"
El papel de los métodos formales en la Ingeniería del Software
Los métodos formales se basan en el empleo de técnicas, lenguajes y herramientas definidos matemáticamente para cumplir objetivos tales como facilitar el análisis y construcción de sistemas confiables independientemente de su complejidad, delatando posibles inconsistencias o ambigüedades que de otra forma podrían pasar inadvertidas.

En los últimos años, la idea de que la formalización matemática del SW es el enfoque más apropiado para conseguir mejorar su calidad va adquiriendo cada vez más fuerza. Los partidarios de los métodos formales defienden que su empleo, a lo largo de todo el ciclo de vida, facilita el desarrollo de especificaciones claras, concisas y no ambiguas, permite el análisis funcional de la especificación y posibilita el desarrollo de implementaciones correctas respecto a su especificación. Sin embargo los detractores aseguran que el empleo de métodos formales supone un volumen de trabajo considerable, aumento en los costes y tiempo de desarrollo y que debe quedar supeditado a herramientas que lo automaticen.

Ventajas de los métodos formales
  • Se comprende mejor el sistema.
  • La comunicación con el cliente mejora ya que se dispone de una descripción clara y no ambigua de los requisitos del usuario.
  • El sistema se describe de manera más precisa.
  • El sistema se asegura matemáticamente que es correcto según las especificaciones.
  • Mayor calidad software respecto al cumplimiento de las especificaciones.
  • Mayor productividad

Problemática actual de los métodos formales
La falta de madurez en la práctica de los métodos formales es la causa de la imposibilidad de utilizarlos a nivel industrial tal y como se utilizan otros métodos de la Ingeniería del Software. Algunas de estas causas son las siguientes:
  • El desarrollo de herramientas que apoyen la aplicación de métodos formales es complicado y los programas resultantes son incómodos para los usuarios.
  • Los investigadores por lo general no conocen la realidad industrial.
  • Es escasa la colaboración entre la industria y el mundo académico, que en ocasiones se muestra demasiado dogmático.
  • Se considera que la aplicación de métodos formales encarece los productos y ralentiza su desarrollo.
Conclusión: Los métodos formales se implantarán en la industria probablemente a través de nuevos profesionales con conocimientos sólidos de las técnicas matemáticas.
Aún así, como ya veremos más adelante, los métodos formales están presentes en bastantes campos y no solo los referidos a la ingeniería y la ciencia informática.

Clasificación de los métodos formales
Se pueden encontrar multitud de métodos y técnicas formales con lo que los criterios de clasificación son bastante variados. La clasificación más común se realiza en base al modelo matemático subyacente en cada método, de esta manera podrían clasificarse en:
  • Especificaciones basadas en lógica de primer orden y teoría de conjuntos: permiten especificar el sistema mediante un concepto formal de estados y operaciones sobre estados. Los datos y relaciones/funciones se describen en detalle y sus propiedades se expresan en lógica de primer orden. La semántica de los lenguajes está basada en la teoría de conjuntos. Los métodos de este tipo más conocidos son: Z, VDM y B.
  • Especificaciones algebraicas: proponen una descripción de estructuras de datos estableciendo tipos y operaciones sobre esos tipos.
Para cada tipo se define un conjunto de valores y operaciones sobre dichos valores. Las operaciones de un tipo se definen a través de un conjunto de axiomas o ecuaciones que especifican las restricciones que deben satisfacer las operaciones. Métodos más conocidos: Larch, OBJ, TADs.
  • Especificación de comportamiento:
    • Métodos basados en álgebra de procesos: modelan la interacción entre procesos concurrentes. Esto ha potenciado su difusión en la especificación de sistemas de comunicación (protocolos y servicios de telecomunicaciones) y de sistemas distribuidos y concurrentes. Los más conocidos son: CCS,CSP y LOTOS.
    • Métodos basados en Redes de Petri: una red de petri es un formalismo basado en autómatas, es decir, un modelo formal basado en flujos de información. Permiten expresar eventos concurrentes. Los formalismos basados en redes de petri establecen la noción de estado de un sistema mediante lugares que pueden contener marcas. Un conjunto de transiciones (con pre y post condiciones) describe la evolución del sistema entendida como la producción y consumo de marcas en varios puntos de la red.
    • Métodos basados en lógica temporal: se usan para especificar sistemas concurrentes y reactivos. Los sistemas reactivos son aquellos que mantienen una continua interacción con su entorno respondiendo a los estímulos externos y produciendo salidas en respuestas a los mismos, por lo tanto el orden de los eventos en el sistema no es predecible y su ejecución no tiene por qué terminar.
Una especificación escrita en lógica temporal describe las secuencias admisibles de estado (incluyendo estados concurrentes) para el sistema especificado.

En este trabajo nos centraremos en el uso de métodos formales en la gestión de la calidad de un proyecto software y métodos formales aplicados por todos sitios.


jueves, 3 de mayo de 2012

ANTIVIRUS



¿Qué son los antivirus?

Un antivirus es un programa cuya función es la prevención, detección y eliminación de virus y software malicioso como Spy ware (programas espía), dialers, troyanos, etc. Los antivirus son una herramienta específica para combatir el problema virus, pero es muy importante saber como funcionan y conocer bien sus limitaciones para obtener eficiencia en el combate contra los virus.
Normalmente un antivirus se carga en memoria y permanece allí para analizar todos los archivos que se ejecutan en el ordenador para comprobar que éstos no tienen software malicioso.
Cuando detecta software malicioso nos puede dar varias opciones a elegir, como por ejemplo poner el archivo en cuarentena, eliminarlo, renombrarlo o ignorar cualquiera de las opciones y no tomar ninguna decisión.
Cuando se piensa en comprar un antivirus, no debe perderse de vista que, como todo programa, para funcionar correctamente, debe estar bien configurado. Además, un antivirus es una solución para minimizar los riesgos y nunca será una solución definitiva, lo principal es mantenerlo actualizado.
La única forma de mantener su sistema seguro es mantener su antivirus actualizado y estar constantemente leyendo sobre los virus y las nuevas tecnologías. La función de un programa antivirus es detectar, de alguna manera, la presencia o el accionar de un virus informático en una computadora. Éste es el aspecto más importante de un antivirus, pero, las empresas deben buscar identificar también las características administrativas que el antivirus ofrece. La instalación y administración de un antivirus en una red es una función muy compleja si el producto no lo hace automáticamente. Es importante tener en claro la diferencia entre "detectar" e "identificar" un virus en una computadora. La detección es la determinación de la presencia de un virus, la identificación es la determinación de qué virus es. Aunque parezca contradictorio, lo mejor que debe tener un antivirus es su capacidad de detección, pues las capacidades de identificación están expuestas a muchos errores y sólo funcionan con virus conocidos.

Actualmente los mejores antivirus usan dos técnicas de chequeo:

1) La conocida técnica de escaneo, consistente en tener una gran base de datos con fragmentos víricos para comparar los archivos con esa inmensa biblioteca.
2) La tecnología heurística es fundamental en estos momentos, y en mi opinión, los antivirus han de ofrecer como alternativa al escaneo común (aún necesario) la búsqueda heurística. Excede a los propósitos de este instructivo profundizar los alcances de la técnica de búsqueda heurística, pero baste decir que esta técnica permite detectar virus que aún no estén en la base de datos del scanning, y es muy útil cuando padecemos la infección de un virus que aún no ha sido estudiado ni incorporado a los programas antivirus.




Clasificación de antivirus

  • Clasificación A, por acción: solo detección , detección y desinfección , detección y aborto de la acción ,detección y eliminación del archivo/objeto
  • Clasificación B, por método de detección: Comparación directa , Comparación por signatura , Comparación de signatura de archivo (detección por comparación con atributos guardados),por métodos heurísticas
  • Clasificación C, por instante de activación: Invocado por el/la usuario/a , Invocado por actividad del sistema (abrir, ejecutar, copiar, guardar archivo)
  • Clasificación D, por Objeto infectado: Sector de Arranque , Archivo Ejecutable , Macro virus (Excel, Word) , Java 

Actualmente existen dos tipos de antivirus:

- Antivirus residentes

Son los más comunes, los mas necesarios y los mas complejos. Son los antivirus que están constantemente vigilando el sistema para evitar que haya ningún tipo de intrusión.


- Analizadores bajo demanda

Utilizan el mismo motor de búsqueda que el residente, se encargan de analizar partes del sistema solamente cuando el usuario lo ordena. Son llamados en ocasiones especiales. Puede usarse, por ejemplo para analizar un disquete nuevo, o para revisar la información antigua