domingo, 21 de febrero de 2016

METODOLOGIA VS METODO

1.¿Qué beneficios proporciona un proceso?
Permite reutilizar experiencias pasadas: un proceso de software es creado en base a la experiencia de muchos expertos que han aportado a lo largo de los años sus fracasos y sus victorias y por lo tanto al utilizar un proceso de software estamos utilizando un esquema que funciona (bajo ciertas situaciones) y puede ser aceptado y argumentado por muchas personas.

·     Puede llegar a ser efectivo si se usa bien: ya que como ha sido probado y corregido por muchas personas se puede decir que generalmente conduce a la creación de un proyecto de software correcto, aunque para esto se tiene que escoger un buen proceso y aplicar de forma correcta los procedimientos del proceso.

·      Es medible: Ser medible significa que puede determinarse el tiempo que puede tomar el esfuerzo e incluso el impacto que pueda tener el proyecto lo cual es una herramienta muy efectiva para aceptar un proyecto que podemos realizar, o rechazar algo que esté fuera de nuestras capacidades o no valga la pena.

·        Facilita el trabajo en equipo: Un proceso de software facilita el trabajo en equipo ya todos tiene una idea común de cómo realizar el proyecto, que pasos seguir como dividirse el trabajo.

2.¿De dónde vienen los proyectos?

Los proyectos surgen debido a que hay necesidades insatisfechas (problemas), o bien, oportunidades que se pueden aprovechar. Es decir, los proyectos son respuestas a algo y por tanto, no deberían surgir como ideas aisladas, sin ningún contacto con la realidad. Antes de proponer una idea de proyecto debe tenerse muy claro cuál es el problema a resolver, o la oportunidad a aprovechar. Además, conviene plantear alternativas de solución (ya que casi siempre, para un mismo problema, existen diferentes soluciones), seleccionar las que parecen mejores y someterlas a un análisis cuidadoso de costos y beneficios a fin de optar finalmente por una de ellas, la que mayores probabilidades tenga de ser la más rentable.

3. ¿Cuál modelo elegir y por qué?     

·         Dimensión del proyecto (Tamaño del programa).
·         Tiempo Límite de entrega.
·         Conocer las necesidades del Cliente.
·         Tipo de Usuario que tendrá acceso para administrar y consultar.
Presupuesto del proyecto.
·         Factibilidad de implementación del programa.

4  4. Dónde y cuándo elegir metodología de desarrollo y un ciclo de vida

Selección de metodologías

Este aspecto no ha sido tratado de manera adecuada, sobre todo en el ámbito de las metodologías tradicionales, y en el caso de las ágiles no existe un criterio unificado.

Selección de metodologías ágiles, por criterios de presencia

Los diseñadores de software tienen interés de trabajar con metodologías lo suficientemente documentadas, que nos faciliten la obtención de información, pero también es interesante trabajar con metodologías que dispongan de algún tipo de certificación y training. Según estas condiciones, hemos determinado seis clasificaciones que permiten seleccionar una metodología, según se encuentran mejor posicionadas, en el acumulado final. Las clasificaciones son: La metodología con mayor presencia en Internet. La metodología mejor documentada. Metodologías certificadas y con training. Metodologías con comunidades. Metodología más utilizada por empresas. Presencia empresarial. Metodología más utilizada en proyectos software.

Se considera como metodologías certificadas aquellas que emiten un certificado que aseguren el cumplimiento y seguimiento de la metodología, así como sus técnicas y prácticas. Una metodología dispone de training, si se encuentra alguna institución, organización o compañía que ofrezca formación de la metodología. Se considera que una metodología tiene comunidad, contemplando si se ha formado una comunidad relevante o si está asociada a la Agile Alliance, soportando y cumpliendo sus principios. Se consideran los proyectos realizados, en su mayoría por metodologías que se han aplicado en empresas privadas y por lo tanto no existe mucha documentación pública al respecto. Por lo tanto, determinar esta clasificación requiere de una búsqueda exhaustiva.

Selección de metodología, por criterios de conocimientos
En función del grupo de trabajo o de diseño, se consideran los siguientes criterios en función de los conocimientos que el equipo de desarrollo tenga de las metodologías a evaluar. Estos criterios son:
·   Grado de conocimiento Soporte orientado a objetos
·   Adaptable a cambios Basado en casos de uso
·   Posee documentación adecuada
·  Facilita la integración entre las etapas de desarrollo
·  Relación con UML
·  Permite desarrollo software sobre cualquier tecnología

Selección de ciclo de vida

1.    Disponibilidad de recursos
2.    Complejidad del Proyecto
3.    Entendimientos de requerimientos
4.    Conocimiento del dominio del problema
5.    Manejo de la perspectiva de riesgos
6.    Magnitud del proyecto (Tamaño del proyecto)

Teniendo claridad en estos factores podemos determinar con mayor precisión en el ciclo de vida que vamos a implementar para dar solución al problema propuesto.

5   5. Mediante un ejemplo aplicar lo que es metodología y ciclo de vida

Metodología RUP






Es una metodología cuyo fin es entregar un producto de software. Se estructura todos los procesos y se mide la eficiencia de la organización.

Es un proceso de desarrollo de software el cual utiliza el lenguaje unificado de modelado UML, constituye la metodología estándar más utilizada para el análisis, implementación y documentación de sistemas orientados a objetos.

El RUP es un conjunto de metodologías adaptables al contexto y necesidades de cada organización. Describe cómo aplicar enfoques para el desarrollo del software, llevando a cabo unos pasos para su realización. 

Un ejemplo claro de esta metodología sería aplicarlo a nuestro propio sistema de ventas por catálogo, en el que a la vez trabajamos con un ciclo de vida en espiral.

 Ciclo de Vida en Espiral

El modelo de la espiral es un modelo orientado a riesgo que divide el proyecto de software en miniproyectos. Cada proyecto se encargará de resolver uno o varios riesgos hasta que estén todos controlados. Una vez que estén los riesgos más importantes controlados se finaliza igual que el ciclo de vida en cascada.

En el ciclo de vida en espiral localizan los riesgos, genera un plan para manejarlos y se establece una aproximación a la siguiente iteración. Con cada iteración se produce una aproximación al producto final.

En el modelo en espiral se comienza con una parte pequeña del proyecto y se expande tras reducir los riesgos para la siguiente iteración. En cada iteración seguimos los siguientes pasos:
Determinar objetivos, alternativas y límites.
Identificar y resolver riesgos.
Evaluar las alternativas.
Generar entregas de esta iteración, y comprobar que son correctas.
Planificar la siguiente iteración.

Si se decide ejecutar la siguiente iteración, hay que establecer un enfoque para ella.

6    6. ¿Cómo podría formar un equipo de alto rendimiento en su empresa?
      
     Un equipo de alto rendimiento debe poseer las siguientes características:
1Todos los miembros de un equipo deben conocer cuáles son las expectativas de su trabajo y mostrarse 100% comprometidos con la labor que van a llevar a cabo para cumplirlas.
2. Los mejores resultados se consiguen tras un proceso de planteamiento y decisión de estrategias. Para garantizar el éxito de cualquier operación, lo ideal es que el equipo esté compuesto por profesionales con perfiles distintos, que aporten una visión propia para luego encajar en el planteamiento grupal.
3. Roles bien definidos. Este punto también es sustancial ya que aunque el trabajo se desarrolle en equipo, cada miembro debe cumplir un rol determinado y con unas tareas específicas que estarán acotadas de antemano. Tener claro este punto evitará posibles roces entre los integrantes.
4. El líder por medio de su conducta y sus palabras debe lograr incentivar a los miembros del equipo para que trabajen en conjunto por una meta común.
5. Capacidad para proponer y decidir
Es importante que los equipos sientan que tienen cierta autonomía a la hora de tomar decisiones sobre su trabajo. Obviamente, el objetivo viene marcado por la empresa pero el verdadero activo son los miembros del grupo al que se le ha encomendado el proyecto concreto. Si se sienten maniatados y sin capacidad de maniobra, su implicación y compromiso se verán seriamente afectados.
6. Reconocimiento
Cuando las cosas salen bien y las metas se alcanzan, los miembros del equipo responsables de ese resultado deben ser recompensados tanto como unidad grupal, como de forma individual. Este refuerzo potenciará la motivación de los integrantes del grupo y favorecerá que trabajen más contentos y en consecuencia, de forma más eficiente.


Principios de Desarrollo del Software


1.  PRINCIPIOS DEL ANÁLISIS 

1.  Debe representarse y entenderse el dominio de información de un problema.
2.  Debe definirse las funciones que debe realizar el software.
3.  Debe representarse el comportamiento del software.
4.  Debe dividirse los modelos que representan información, función y comportamiento de manera que se descubran los detalles por capas.
5.  El proceso de análisis deriva ir desde la información esencial hasta el detalle de la implementación.

2.  PRINCIPIOS DEL  DISEÑO  

1.  El diseño deberá poderse rastrear hasta el modelo de análisis
2.  El diseño no deberá inventar nada que ya esté inventado
3.  El diseño deberá minimizar la distancia intelectual entre el software y el problema, como si de misma vida real se tratara.
4.  El diseño deberá presentar uniformidad e integración
5.  El diseño deberá estructurarse para admitir cambios

3.  LOS PRINCIPIOS DE CONSTRUCCIÓN

1.  Minimizar la Complejidad
2. Escribiendo código sencillo y fácil de leer código sencillo y fácil de leer
3.Utilizando estándares
4.Técnicas de codificación
5. Técnicas de aseguramiento de calidad

2.  Anticipar los Anticipar los Cambios
1.El software se ve afectado por los cambios en su entorno y está destinado a cambiar a lo largo del tiempo
2.Aplicación de técnicas específicas

3.  Pensar en la Verificación posterior
1.Construir de forma que los fallos puedan ser encontrados lo antes Construir de forma que los fallos puedan ser encontrados lo antes posible (al codificar, hacer pruebas u operar el sistema)
2.Seguir estándares de codificación
3.Hacer pruebas unitarias
4.Organizar el código para soportar pruebas automatizadas
5.Restringir el uso de técnicas complejas

4.  Aplicar Estándares
1.Formatos de comunicación (documentos, contenidos).
2.Versiones estándares de lenguajes de programación (Java, C++, C#,…).
3.Reglas de codificación (nombres de variables comentarios) Reglas de codificación (nombres de variables, comentarios,…).
4. Notaciones de diagramas (UML,…).
5.Intercambio entre herramientas (XLM,…).

4.  LOS PRINCIPIOS DE CODIFICACIÓN 

1.  Aplicar técnicas para crear código fuente comprensible (reglas de asignación de nombres y de formato del código, clases, tipos enumerados, constantes etiquetadas,…)
2.  Manejar condiciones de error (errores previstos e imprevistos, excepciones)
3.  Prevenir brechas de seguridad a nivel de código (llenado de buffers, overflow de índices de vectores) de índices de vectores,…)
4.  Uso eficiente de recursos escasos (hilos, bloqueos en bases de datos,…)
5.  Organizar el código fuente (sentencias, rutinas, clases, paquetes,…)
6.  Documentar el código

5.  PRINCIPIOS DE VALIDACIÓN 

1.  Especificación de los requerimientos: Una especificación documentada de los requisitos del software proporciona la base para la validación y la verificación. El proceso de validación del software no puede completarse si un establecimiento de las especificaciones de los requisitos.

2.  Prevención de defectos: Las necesidades del aseguramiento de la calidad del software fijan su atención en la prevención de defecto en el proceso de desarrollo del software y no en probar la calidad del código del software después de que se escribe.

3.  Tiempo y esfuerzo: La validación del software requiere de tiempo y esfuerzo. La preparación para la validación debe comenzar con anticipación; es decir, durante la planificación del diseño y desarrollo y el diseño de la entrada de datos. La conclusión final que muestra que el software se encuentra validado debe estar basada en la evidencia recolectada a partir de los esfuerzos planificados dirigidos a los largo el ciclo del vida el software.

4.  Ciclo de vida del software: El ciclo de vida del software contiene las tareas de ingeniería  de software y la documentación necesaria para soportar la validación del software. El ciclo de vida del software puede ser seguido completamente o tener variaciones en su desarrollo, debido a las propias características  y naturaleza del software que se desea desarrollar.

5.  Planificación: Los planes de validación del software especifican aspectos tales como el alcance, el método de validación, los recursos, el cronograma, los tipos y la magnitud de las actividades que se deben llevar a cabo para la validación.

6.  Procedimientos: Los procedimientos deben identificar las acciones específicas o la sucesión de acciones que deben tomarse para completar las actividades individuales de validación.

7.   Validación del software después de un cambio: El alcance de la validación debe estar basado en la complejidad del software y en los riesgos de la seguridad; no en el tamaño de la organización  o la restricción de los recursos.

8.  Independencia de la validación: Las actividades de validación deben ser conducidas cumpliendo el precepto básico de la gestión de la calidad sobre la independencia de la revisión. La autoevaluación es sumamente difícil.

9.  Flexibilidad y responsabilidad: La aplicación específica  de estos principios de validación del software pueden ser muy diferente de una aplicación a otra. El fabricante o desarrollador de software tiene flexibilidad a la hora de escoger cómo aplicar estos principios de validación pero es el responsable de demostrar que el software se ha validado.

6.  PRINCIPIOS DE PRUEBA 

1.  Las pruebas revelan la presencia de bugs, no la ausencia de ellos. Probar reduce la probabilidad de que existan bugs pero nunca se puede asegurar que no quede ninguno oculto. Además, cada tipo de pruebas que realicemos (de sistema, de integración, añadir auditorías de código…) son más efectivas para detectar un tipo de bug.

2.  Es imposible probarlo todo. El flujo de control de un sistema software no trivial como los que acostumbramos a utilizar en el día a día contiene miles de decisiones. Estas decisiones se pueden combinar entre ellas para dar lugar a una infinidad de posibles caminos. De entrada, probar todos los caminos es un problema inabordable. Y eso si no tenemos en cuenta la prueba de requisitos no funcionales, como el rendimiento de un sistema ante una exigente carga de usuarios, o requisitos específicos de seguridad (por ejemplo, en un sistema bancario) para protegerse de usuarios malintencionados. Todo esto hace necesaria una estrategia de pruebas (un plan) y priorizar a partir de una gestión de riesgos, de calidad y de proyecto.

3.  Cuanto antes se comience a probar…mejor. Corregir un bug con una revisión en la fase de captura de requisitos o en una prueba unitaria tiene un coste mucho menor a lo que costará corregir este bug cuando se detecte en una prueba de sistema, o peor aún, en una prueba de aceptación por el cliente. En demasiadas ocasiones existe una confianza excesiva en las pruebas de sistema, y todo el plan de pruebas (cuando existe) se reduce a estas. Se confía en que todos los componentes que no se probaron con una estrategia de pruebas unitarias y de integración se puedan entender bien a unos días del hito de entrega (cuando corregir un bug ya es demasiado caro).

4.  Las pruebas se deben adaptar a necesidades específicas. Esto viene a enlazar con lo que he comentado antes. Si tu producto se centra en el ámbito de la seguridad deberás adaptar tus casos de prueba para intentar forzar situaciones o posibles escenarios no amistosos. Si quieres probar una intranet donde los servicios más vitales son los de imputación de horas y el de vacaciones, es lógico centrarse en estos servicios y no invertir tiempo en otros componentes infrautilizados.  Además, hay que tener en cuenta que los recursos en los proyectos son siempre escasos, con lo que en el inicio del proyecto hay que preguntarse… qué estrategia debemos seguir para encontrar y corregir lo antes posible los bugs en las funcionalidades de mayor valor para nuestros usuarios

7.  PRINCIPIOS DE DESPLIEGUE

1.  Probar el producto en su entorno de ejecución final.
2.  Empaquetar el software para su distribución.
3.  Distribuir el software.
4.  Instalar el software.
5.  Proveer asistencia y ayuda a los usuarios.
6.  Formar a los usuarios y al cuerpo de ventas.
7.  Migrar el software existente o convertir bases de datos.

miércoles, 10 de febrero de 2016

Ingeniería de software clase 2

INGENIERIA DE SOFTWARE

INTRODUCCION A LA INGENIERIA DEL SOFTWARE

¿Que es la Ingeniería de software?

Una disciplina de la Ingeniería que concierne a todos los aspectos de la producción de software

Los Ingenieros de Software deben:

  • Adoptar un enfoque sistemático para llevar a cabo su trabajo
  • Utilizar las herramientas y técnicas apropiadas para resolver el problema planteado, de acuerdo a las restricciones de desarrollo y a los recursos disponibles

¿cuando?, ¿por que surge?

El termino "Ingeniería del Software" surge a final de los años 60 dentro de una conferencia dedicada a "la crisis del software".

¿que fué la crisis del software?

La crisis del software se fundamentó en el tiempo de creación de software, ya que en la creación del mismo no se obtenían los resultados deseados, además de un gran costo y poca flexibilidad.

Englobó a una serie de sucesos que se venían observando en los proyectos de desarrollo de software:

  • Los proyectos no terminaban en plazo.
  • Los proyectos no se ajustaban al presupuesto inicial.
  • Baja calidad del software generado.
  • Software que no cumplía las especificaciones.
  • Código inmantenible que dificultaba la gestión y evolución del proyecto.
  • ¿Cúal es el código de ética de los ingenieros de software?

    Los ingenieros de software deberán comprometerse a convertir el análisis, especificación, diseño, implementación, pruebas y mantenimiento de software en una profesión respetada y benéfica. De acuerdo a su compromiso con la salud, seguridad y bienestar social, los ingenieros de software deberán sujetarse a los ocho principios siguientes:

    1. Sociedad. Los ingenieros de software actuarán en forma congruente con el interés social.
    2. Cliente. y empresario. Los ingenieros de software actuarán de manera que se concilien los mejores intereses de sus clientes y empresarios, congruentemente con el interés social.
    3. Producto. Los ingenieros de software asegurarán que sus productos y modificaciones correspondientes cumplen los estándares profesionales más altos posibles.
    4. Juicio. Los ingenieros de software mantendrán integridad e independencia en su juicio profesional.
    5. Administración. Los ingenieros de software gerentes y líderes promoverán y se suscribirán a un enfoque ético en la administración del desarrollo y mantenimiento de software.
    6. Profesión. Los ingenieros de software incrementarán la integridad y reputación de la profesión congruentemente con el interés social.
    7. Colegas. Los ingenieros de software apoyarán y serán justos con sus colegas.
    8. Personal. Los ingenieros de software participarán toda su vida en el aprendizaje relacionado con la práctica de su profesión y promoverán un enfoque ético en la práctica de la profesión.

    Taller: Realizar un mapa conceptual de alguno de los temas presentados

    mapa conceptual del código de ética del ingeniero de software