Subscribe Now!

martes, 10 de marzo de 2015

TAREAS USUALES DE UN PROYECTO INFORMÁTICO


DISEÑO

DESARROLLAR UN PLAN DIFERENCIADO DE TEST DE DIFERENCIACIÓN PARA CADA ALTERNATIVA
TDD como metodología de diseño de software

TDD o Test Driven Development es una práctica de programación que consiste en escribir primero las pruebas (generalmente unitarias), después escribir el código fuente que pase la prueba satisfactoriamente y, por último, refactorizar el código escrito. Con esta práctica se consigue entre otras cosas: un código más robusto, más seguro, más mantenible y una mayor rapidez en el desarrollo.
TDD no es para hacer pruebas, es una práctica que envuelve el desarrollo en su conjunto, especialmente el diseño de Software. De hecho, algunos dicen que su última letra, debería significar diseño y no desarrollo. Es decir, diseño orientado por las pruebas.
TDD Fue creado por Kent Beck (quien también inventó Extreme Programming y JUnit), y en esencia, es un proceso a seguir, lo cual ya lo hace diferente a un simple enfoque de pruebas primero.
Este ciclo también se lo conoce como rojo (hacer que la prueba falle), verde (hacer que la prueba pase) y refactor. Aunque al principio pueda parecer muy parecido a un enfoque de probar primero, al combinarlo con practicas de desarrollo ágil, TDD toma un enfoque mucho más amplio, y cambia su atención de las pruebas al diseño. TDD está mucho más relacionado con el diseño emergente que con las pruebas, de hecho, que TDD genere una gran cantidad de pruebas es un efecto secundario positivo, pero no es su propósito final.
El proceso de diseño de software, combinando TDD con metodologías ágiles, sería el siguiente:
1.   El cliente escribe su historia de usuario
2.   Se escriben junto con el cliente los criterios de aceptación de esta historia, desglosándolos mucho para simplificarlos todo lo posible
3.   Se escoge el criterio de aceptación más simple y se traduce en una prueba unitaria
4.   Se comprueba que esta prueba falla
5.   Se escribe el código que hace pasar la prueba
6.   Se ejecutan todas las pruebas automatizadas
7.   Se refactoriza y se limpia el código
8.   Se vuelven a pasar todas las pruebas automatizadas para comprobar que todo sigue funcionando
9.   Volvemos al punto 3 con los criterios de aceptación que falten y repetimos el ciclo una y otra vez hasta completar nuestra aplicación
un ejemplo práctico de este ciclo:
1.   Supongamos que el cliente nos pide que desarrollemos una calculadora que sume números (es lo primero que se me ha ocurrido)
2.   Acordamos con el cliente que el criterio de aceptación sería que si introduces en la calculadora dos números y le das a la operación de suma, la calculadora te muestra el resultado de la suma en la pantalla
3.   Partiendo de este criterio, comenzamos a definir el funcionamiento del algoritmo de suma y convertimos el criterio de aceptación en una prueba concreta, por ejemplo, un algoritmo que si introduces un 3 y un 5 te devuelve un 8:
4.   public void testSuma() {
5.          assertEquals(8, Calculadora.suma(3,5));
}
Este punto es para mi el más importante de TDD y que supone un cambio de mentalidad, primero escribo cómo debe funcionar mi programa y después, una vez lo tengo claro, paso a codificarla.
Al escribir el test estoy diseñando cómo va a funcionar el software, pienso que para cubrir la prueba voy a necesitar una clase calculadora con una función que se llame suma y que tenga dos parámetros. Esta clase todavía no existe pero cuando la cree, ya se cómo va a funcionar. Este caso es muy trivial, pero muchas veces no sabemos exactamente qué clases hacer o qué métodos ponerle exactamente. Es más, muchas veces perdemos el tiempo haciendo métodos y clases que pensamos que luego serán útiles, cuando la cruda realidad es que muchas veces no se van a usar nunca. Con TDD sólo hacemos lo que realmente necesitamos en ese momento.
Realmente es la forma natural de pensar, primero pensamos en Qué queremos hacer y después pasamos al Cómo, la diferencia es que con TDD el test ya queda escrito y se ejecutará cada vez que compilamos nuestro programa.
6.   Por supuesto, si intentamos pasar este test nos dará un error, porque la clase Calculadora aún no existe.
7.   Ahora pasamos a escribir el código de la clase, es fácil porque ya sabemos exactamente cómo se va a comportar:
8.   public class Calculadora {
9.          public static int suma (int a, int b) {
10.                        int c = a + b;
11.                        return c;
12.                        }
}
13.       Ahora ejecutamos la prueba y ya tenemos el código funcionado con la prueba pasada.
14.       Una vez todo esté funcionando, pasamos a refactorizar y a eliminar código duplicado, este ejemplo es extremadamente sencillo, y en un caso real no haríamos tantos pasos para algo tan evidente, pero el código mejorado podría ser por ejemplo:
15.            public class Calculadora {
16.                        public static int suma (int a, int b) {
17.                        return a+b;
18.                        }
}
En ejemplos más complejos, según vayamos escribiendo más test, deberíamos buscar código duplicado y agruparlo en funciones o utilizar la herencia o el polimorfismo.
19.       Es importante pasar todos los test después de refactorizar por si nos hemos cargado algo.
20.       Ahora deberíamos volver al punto 3 con tests más complicados y repetir el proceso, por ejemplo, podíamos pasar a que el algoritmo admita sumar números decimales, etc.
Esta forma de trabajar es también muy buena para entender el código. Sabemos que la calidad del diseño de un software está también relacionada con el conocimiento del equipo de desarrollo en relación al dominio en cuestión. En este sentido, las pruebas son una muy buena forma de entender el código y su funcionamiento, muchas veces incluso mejor que la documentación.
También hay que decir que no todo es perfecto en TDD, cuando llegue el momento de crear un test sobre la interfaz de la calculadora la cosa se complica. Los puntos flojos que veo en TDD son:
·         Hay que utilizarlo y entenderlo bien para que sea realmente productivo, te ayuda a centrarte en lo importante y a no sobrediseñar, pero es importante saber refactorizar el código según vaya evolucionando para que sea consistente.
·         Pruebas sobre interfaces gráficas. Aunque hay soluciones parciales propuestas, para mi TDD solo funciona en la capa de negocio, no encaja con interfaces visuales.
·         Bases de datos. Hacer pruebas de código que trabaja con base de datos es complejo porque requiere generar unos datos conocidos antes de hacer las pruebas y verificar que el contenido de la base de datos es el esperado después de la prueba. Los objetos simulados (MockObjects) son otra opción, pero personalmente creo que se pierde tiempo con esto.

BIBLIOGRAFIA
http://es.wikipedia.org/wiki/Desarrollo_guiado_por_pruebas
http://blogs.msmvps.com/lopez/2010/02/16/default-methods-in-ajsharp/

jueves, 5 de marzo de 2015

ENTREGABLES DE UN PROYECTO INFORMÁTICO
(ß------------dando un breve concepto de los entregables de un proyecto informático--------------------------------à)
El objetivo final del proyecto es la entrega de un subsistema informático (entregable). Los entregables son Productos que, en un cierto estado, se intercambian entre los clientes y los desarrolladores a lo largo de la ejecución del proyecto informático.
Los entregables se  clasifican como relativos al objetivo y relativos a la gestión del proyecto.

 ENTREGABLES RELATIVOS AL OBJETIVO: Son todos aquellos documentos que hacen referencia exclusivamente al sistema de información y al subsistema informático en desarrollo. Pertenecen a este conjunto los requisitos del sistema, la especificación del sistema, la documentación del diseño, él código fuente, los programas ejecutables, los manuales de usuario, etc.

ENTREGABLES RELATIVOS A LA GESTIÓN DEL PROYECTO: Hace referencia a aquellos documentos que se refieren a la situación en que se encuentra un proyecto, previsiones de costes, gastos realizados, informe sobre ambientes de trabajo, etc., siendo su objetivo el poder controlar el proyecto. Pertenecen a esta clase la planificación del proyecto, los presupuestos, los documentos de control de la planificación o de la calidad, los estudios de riesgos durante el desarrollo, etc.

Se deberá definir de forma clara el conjunto mínimo de entregables necesarios para dar por terminada cada fase de desarrollo. Aunque algunos entregables se desarrollan a lo largo de varias tareas. Los entregables nos proveen de:

1.    Un conjunto de componentes que formarán el producto una vez finalizado el desarrollo.

2.    Los medios para medir el progreso y la calidad del producto en desarrollo.

3.    Los materiales necesarios para la siguiente etapa.


Ø  Estudio de viabilidad:

·         Descripción breve del sistema propuesto y sus características.
·         Descripción breve de las necesidades del negocio en el sistema propuesto.
·         Propuesta de organización del equipo de desarrollo y definición de responsabilidades.
·         Estudio de los costes, que contendrán estimaciones groseras de la planificación y fechas, tentativas, de entrega de los productos.
·         Estudio de los beneficios que producirá el sistema.

Ø  Análisis:
·         Captura de requisitos:
o    Análisis del sistema actual (si existe).
o    Requisitos nuevos de los usuarios.
o    Descripción del sistema propuesto.
·         Especificación del sistema:
o    Descripción del sistema.
o    Requisitos de datos.
o    Requisitos de telecomunicaciones.
o    Requisitos de hardware.
o    Plan de pruebas de integración.

Ø  Diseño:
·         Descripción detallada del sistema, contendrá:
o    Programas, módulos reutilizables y objetos.
o    Ficheros y bases de datos.
o    Transacciones
o    Diccionario de datos
o    Procedimientos
o    Carga del sistema y tiempos de respuesta
o    Interfaces, tanto humanos como de máquinas.

·         Descripción de los controles del sistema propuestos.
Diseños alternativos recomendados.
·         Estándares de programación y diseño de programas, recomendados.
·         Técnicas de implementación recomendadas: codificación propia, compra de paquetes, contratación externa, etc.
·         Plan de pruebas de programas.

Ø  Codificación:
·         Documentos del diseño final del sistema y de cada programa.
·         Diagramas definitivos del sistema y de los programas.
·         Descripción detallada de la lógica de cada programa.
·         Descripción de las Entradas y Salidas (ficheros, pantallas, listados, etc.).
·         Listado de los programas, conteniendo comentarios.
·         Cadenas de ejecución si es necesario (JCL, scripts, etc.).
·         Resultado de las pruebas de cada unidad.
·         Resultado de las pruebas de cada programa.

·         Resultado de las pruebas de la integración.
·         Guía para los operadores del sistema.
·         Programa de entrenamiento de los operadores.
·         Manual de usuario del sistema.

Ø  Pruebas:

·         Plan de pruebas del sistema (actualizado).
·         Informe de los resultados de las pruebas.
·         Descripción de las pruebas, el resultado esperado, resultado obtenido y acciones a tomar para corregir las desviaciones.
·         Resultados de las pruebas a la documentación.

Ø  Instalación:
·         Planes detallados de contingencias de explotación, caídas del sistema y recuperación.
·         Plan de revisión post-instalación.
·         Informe de la instalación.
·         Carta de aceptación del sistema.

Ø  Mantenimiento:
·         Listado de fallos detectados en el sistema.
·         Listado de mejoras solicitadas por los usuarios (si no dan lugar a nuevos proyectos).
·         Traza detallada de los cambios realizados en el sistema.
·         Actas de las revisiones regulares del sistema y aceptación de los niveles de soporte.
·          
(ß------------------------------El tema a tratar es ------------------------------à)
ENTREGABLES DE LA INSTALACIÓN

PLAN DE REVISIÓN POST-INSTALACIÓN
En este entregable se realizan las siguientes tareas:
Ø  Llevar a cabo las revisiones post-instalación:
·         Crear el informe de la revisión post-instalación.
·         Obtener la aprobación firmada de los informes de:
o   Usuarios finales del sistema
o   Operadores del sistema
o   Auditoría y garantía de la calidad
o   Desarrollo de sistemas
o   Soporte de sistemas y mantenimiento
o   Finanzas
·         Obtener la carta de aprobación del sistema
Ø  Establecer el calendario para otras revisiones post-instalación si es necesario.

Instalación del software
El ingeniero de soporte debe realizar un plan para instalar el producto software en el ambiente objetivo. Los recursos de información necesarios para aislar el producto de software se deben determinar y deben estar disponibles. El desarrollador debe asistir a las actividades del montaje. En caso de que el producto de software instalado reemplace un sistema existente, el desarrollador debe soportar actividades que corran paralelas y sean requeridas. El plan de instalación se debe documentar.
El ingeniero de soporte debe seguir el plan de instalación, se debe asegurar que la codificación y bases de datos se inicialicen, ejecuten y terminen según lo especificado en el contrato. Los eventos y resultados de la instalación deben ser documentados.
Post-Instalación del software
Esta actividad consiste de las siguientes tareas:
Se debe generar un documento de aceptación por parte del adquiriente que considere los resultados de revisión conjunta, Ensayos de Calificación de Software y Ensayos de Calificación del Sistema. Los resultados deben ser documentados.
El ingeniero de soporte debe completar el proyecto de software según los objetivos o según lo estipulado en el contrato.
Planear mecanismos de entrenamiento para los adquirientes de los desarrollos.

ESTABILIZACIÓN
El objetivo de este proceso, por cada solución o requerimiento, es garantizar el correcto funcionamiento entre la solución y operación de la solución en esta etapa y/o durante cada fase o iteraciones del proceso de implantación.
Se debe realizar el apoyo a la operación de la solución por un tiempo que se establezca de común acuerdo en el plan de proyecto según la complejidad de la solución. En esta fase se deben realizar los ajustes que se identifiquen, y que sean necesarios para la correcta operación.
Entradas
Reporte de incidentes
Reporte de solicitudes de apoyo.
Actividades
Acompañamiento, monitoreo, ajustes y actualización de parámetros, objetos y documentación cuando aplique.
Salidas
Reporte de las actividades realizadas en esta fase de estabilización.

BIBLIOGRAFÍA:

  • https://prezi.com/nauwfg25oksw/lista-de-riesgos-de-un-software/
  • http://www.monografias.com/trabajos14/implantacion-datos/implantacion-datos.shtml
  • http://www.dgti.salud.gob.mx/sites/dgti/descargas/pdf/Dictamenes_Txcnicos_2013.pdf
  • http://dis.unal.edu.co/grupos/unbd/manuales/ciclo/cap5_3.htm
  • http://cintel.org.co/wp-content/uploads/2013/10/ANEXO-Nro.-1-Especificaciones-Tecnicas1.pdf
  • https://sistemas.uniandes.edu.co/~isis2603/dokuwiki/lib/exe/fetch.php?media=principal:isis2603-modelosciclosdevida.pdf




miércoles, 18 de febrero de 2015

GLOSARIO

GLOSARIO DE TÉRMINOS






C
CALIDAD

“Calidad es un sistema eficaz para integrar los esfuerzos de mejora de la gestión, de los distintos grupos de la organización para proporcionar productos y servicios a niveles que permitan la satisfacción del cliente, a un costo que sea económico para la empresa, agregando posteriormente: calidad es la resultante de una combinación de características de ingeniería y de fabricación, determinantes del grado de satisfacción que el producto proporcione al consumidor durante su uso”.( Feigenbaum)


 
"la calidad es el grado o nivel de excelencia, es una medida de lo bueno de un producto o servicio. (Hansen)

CONTROL
El proceso de medir los actuales resultados en relación con los planes, diagnosticando la razón de las desviaciones y tomando las medidas correctivas necesarias. (Robert B. Buchele)

El proceso para determinar lo que se está llevando a cabo, valorización y, si es necesario, aplicando medidas correctivas, de manera que la ejecución se desarrolle de acuerdo con lo planeado. (George R. Terry)

D
DIRECCION
 "Una vez constituido el grupo social, se trata de hacerlo funcionar: tal es la misión de la dirección, la que consiste para cada jefe en obtener los máximos resultados posibles de los elementos que componen su unidad, en interés de la empresa“. (Henrry Fayol)
  
"la función ejecutiva de guiar y vigilar a los subordinados". ( Koontz y Lo’donnel)

E
ESTRATEGIA 
Término de origen militar (strategos, en griego, significa "jefe de ejército) y adoptado por la administración de organizaciones. Forma en que quien acomete un trabajo complejo adapta sus recursos y habilidades al entorno cambiante, aprovechando sus oportunidades y evaluando los riesgos en función de los objetivos y las metas.

F
FLUJO DE LA INFORMACIÓN
La información se elabora para ser utilizada por distintos usuarios. Por ese motivo, circula entre distintas personas, sectores u organizaciones. En una organización esta circulación se llama flujo de la información, y expresa la forma en que pasa de un sector a otro de la misma.




M
MÉTODO
 (del lat. methodus): Modo de decir o hacer con orden una cosa.
La idea del método transciende de la ciencia y se aplica en general a la vida que llamamos metódica, en cuanto se produce siguiendo una ley fija, un camino ordenado o una regla adecuada para que resulte una obra de arte.

Siempre que obramos en relación a un fin previamente conocido o presentido, y aplicamos   a   su  cumplimiento  los  medios  propios,   obramos   metódicamente. Podemos, pues, referir la idea general del método a la aplicación ordenada de los medios adecuados para el cumplimiento de un fin o la relación del medio al fin. (Diccionario Enciclopédico Hispano-Americano, Tomo XIII, Editores Montaner y Simón
(España) y Sociedad Internacional (América), 1962, págs. 986-987.)






O
OBJETIVO
Es conveniente distinguir entre "objetivo", "propósito" e "impacto". La acepción que emplearemos es la de meta o finalidad perseguida con el proyecto encarado, observable. medible y comparable. La noción de propósito alude a las consecuencias indirectas, aunque también deseables, que podrían derivarse del objetivo, pero no tan medibles ni apreciables como éste. Por ejemplo, una investigación que se proponga desarrollar un secadero solar de madera, tendrá como objetivo construir un prototipo de secadero eficiente y económico; como propósito podría esperarse una mejora de la rentabilidad de la industria maderera con este desarrollo tecnológico, cosa de muy difícil medición. 

ORGANIZACIÓN
"Las organizaciones están compuestas de individuos o grupos en vistas a conseguir ciertos fines y objetivos, por medio de funciones diferenciadas que se procura que estén racionalmente coordinadas y dirigidas y con una cierta continuidad a través del tiempo"(Porter, Lawler & Hackman )

La organización es "la acción y el efecto de articular, disponer y hacer operativos un conjunto de medios, factores o elementos para la consecución de un fin concreto". (Simón Andrade Espinoza)

P
PLANIFICACION
"Proceso de elección y selección entre cursos alternativos de acción, con vistas a la asignación de recursos escasos, con el fin de obtener objetivos específicos sobre la base de un diagnóstico preliminar que cubre todos los factores relevantes que pueden ser identificados."(O.N.U.)
"La planificación o programación es una metodología para la toma de decisiones. Toda decisión envuelve una elección de alternativas, por tanto, podemos decir que se trata de una metodología para escoger entre alternativas". (Jorge Ahumada)