martes, abril 30

Test plan sample: SoftwareTesting and Quality assurance Templates

Test plan is in high demand. Ya it should be! Test plan reflects your entire project testing schedule and approach. This article is in response to those who have demanded sample test plan.
In my previous article I have outlined Test plan Index. In this article I will elaborate that index to what each point mean to do. So this Test plan will include the purpose of test plan i. e to prescribe the scope, approach, resources, and schedule of the testing activities. To identify the items being tested, the features to be tested, the testing tasks to be performed, the personnel responsible for each task, and the risks associated with this plan.
Find what actually you need to include in each index point.
I have included link to download PDF format of this test plan template at the end of this post.
Test Plan Template:
(Name of the Product)
Prepared by:
(Names of Preparers)
(Date)
TABLE OF CONTENTS
1.0 INTRODUCTION
2.0 OBJECTIVES AND TASKS
2.1 Objectives
2.2 Tasks
3.0 SCOPE
4.0 Testing Strategy
4.1 Alpha Testing (Unit Testing)
4.2 System and Integration Testing
4.3 Performance and Stress Testing
4.4 User Acceptance Testing
4.5 Batch Testing
4.6 Automated Regression Testing
4.7 Beta Testing
5.0 Hardware Requirements
6.0 Environment Requirements
6.1 Main Frame
6.2 Workstation
7.0 Test Schedule
8.0 Control Procedures
9.0 Features to Be Tested
10.0 Features Not to Be Tested
11.0 Resources/Roles & Responsibilities
12.0 Schedules
13.0 Significantly Impacted Departments (SIDs)
14.0 Dependencies
15.0 Risks/Assumptions
16.0 Tools
17.0 Approvals
1.0 INTRODUCTION
A brief summary of the product being tested. Outline all the functions at a high level.
2.0 OBJECTIVES AND TASKS
2.1 Objectives
Describe the objectives supported by the Master Test Plan, eg., defining tasks and responsibilities, vehicle for communication, document to be used as a service level agreement, etc.
2.2 Tasks
List all tasks identified by this Test Plan, i.e., testing, post-testing, problem reporting, etc.
3.0 SCOPE
General
This section describes what is being tested, such as all the functions of a specific product, its existing interfaces, integration of all functions.
Tactics
List here how you will accomplish the items that you have listed in the “Scope” section. For example, if you have mentioned that you will be testing the existing interfaces, what would be the procedures you would follow to notify the key people to represent their respective areas, as well as allotting time in their schedule for assisting you in accomplishing your activity?
4.0 TESTING STRATEGY
Describe the overall approach to testing. For each major group of features or feature combinations, specify the approach which will ensure that these feature groups are adequately tested. Specify the major activities, techniques, and tools which are used to test the designated groups of features.
The approach should be described in sufficient detail to permit identification of the major testing tasks and estimation of the time required to do each one.
4.1 Unit Testing
Definition:
Specify the minimum degree of comprehensiveness desired. Identify the techniques which will be used to judge the comprehensiveness of the testing effort (for example, determining which statements have been executed at least once). Specify any additional completion criteria (for example, error frequency). The techniques to be used to trace requirements should be specified.
Participants:
List the names of individuals/departments who would be responsible for Unit Testing.
Methodology:
Describe how unit testing will be conducted. Who will write the test scripts for the unit testing, what would be the sequence of events of Unit Testing and how will the testing activity take place?
4.2 System and Integration Testing
Definition:
List what is your understanding of System and Integration Testing for your project.
Participants:
Who will be conducting System and Integration Testing on your project? List the individuals that will be responsible for this activity.
Methodology:
Describe how System & Integration testing will be conducted. Who will write the test scripts for the unit testing, what would be sequence of events of System & Integration Testing, and how will the testing activity take place?
4.3 Performance and Stress Testing
Definition:
List what is your understanding of Stress Testing for your project.
Participants:
Who will be conducting Stress Testing on your project? List the individuals that will be responsible for this activity.
Methodology:
Describe how Performance & Stress testing will be conducted. Who will write the test scripts for the testing, what would be sequence of events of Performance & Stress Testing, and how will the testing activity take place?
4.4 User Acceptance Testing
Definition:
The purpose of acceptance test is to confirm that the system is ready for operational use. During acceptance test, end-users (customers) of the system compare the system to its initial requirements.
Participants:
Who will be responsible for User Acceptance Testing? List the individuals’ names and responsibility.
Methodology:
Describe how the User Acceptance testing will be conducted. Who will write the test scripts for the testing, what would be sequence of events of User Acceptance Testing, and how will the testing activity take place?
4.5 Batch Testing
4.6 Automated Regression Testing
Definition:
Regression testing is the selective retesting of a system or component to verify that modifications have not caused unintended effects and that the system or component still works as specified in the requirements.
Participants:
Methodology:
4.7 Beta Testing
Participants:
Methodology:
5.0 HARDWARE REQUIREMENTS
Computers
Modems
6.0 ENVIRONMENT REQUIREMENTS

6.1 Main Frame
Specify both the necessary and desired properties of the test environment. The specification should contain the physical characteristics of the facilities, including the hardware, the communications and system software, the mode of usage (for example, stand-alone), and any other software or supplies needed to support the test. Also specify the level of security which must be provided for the test facility, system software, and proprietary components such as software, data, and hardware.
Identify special test tools needed. Identify any other testing needs (for example, publications or office space). Identify the source of all needs which are not currently available to your group.
6.2 Workstation
7.0 TEST SCHEDULE
Include test milestones identified in the Software Project Schedule as well as all item transmittal events.
Define any additional test milestones needed. Estimate the time required to do each testing task. Specify the schedule for each testing task and test milestone. For each testing resource (that is, facilities, tools, and staff), specify its periods of use.
8.0 CONTROL PROCEDURES
Problem Reporting
Document the procedures to follow when an incident is encountered during the testing process. If a standard form is going to be used, attach a blank copy as an “Appendix” to the Test Plan. In the event you are using an automated incident logging system, write those procedures in this section.
Change Requests
Document the process of modifications to the software. Identify who will sign off on the changes and what would be the criteria for including the changes to the current product. If the changes will affect existing programs, these modules need to be identified.
9.0 FEATURES TO BE TESTED
Identify all software features and combinations of software features that will be tested.
10.0 FEATURES NOT TO BE TESTED
Identify all features and significant combinations of features which will not be tested and the reasons.
11.0 RESOURCES/ROLES & RESPONSIBILITIES
Specify the staff members who are involved in the test project and what their roles are going to be (for example, Mary Brown (User) compile Test Cases for Acceptance Testing). Identify groups responsible for managing, designing, preparing, executing, and resolving the test activities as well as related issues. Also identify groups responsible for providing the test environment. These groups may include developers, testers, operations staff, testing services, etc.
12.0 SCHEDULES
Major Deliverables
Identify the deliverable documents. You can list the following documents:
- Test Plan
- Test Cases
- Test Incident Reports
- Test Summary Reports
13.0 SIGNIFICANTLY IMPACTED DEPARTMENTS (SIDs)
Department/Business Area Bus. Manager Tester(s)
14.0 DEPENDENCIES
Identify significant constraints on testing, such as test-item availability, testing-resource availability, and deadlines.
15.0 RISKS/ASSUMPTIONS
Identify the high-risk assumptions of the test plan. Specify contingency plans for each (for example, delay in delivery of test items might require increased night shift scheduling to meet the delivery date).
16.0 TOOLS
List the Automation tools you are going to use. List also the Bug tracking tool here.
17.0 APPROVALS
Specify the names and titles of all persons who must approve this plan. Provide space for the signatures and dates.
Name (In Capital Letters) Signature Date
1.
2.
3.
4.

http://www.softwaretestinghelp.com/test-plan-sample-softwaretesting-and-quality-assurance-templates/

lunes, abril 29

Agradar a todo el mundo

Decía el actor americano Bill Cosby que: “No sé cuál es la clave del éxito pero la clave del fracaso es intentar agradar a todo el mundo”.
Podrás empeñarte en tomar decisiones que gusten a todo el mundo o que no molesten a nadie, a veces conseguirás ese objetivo, pero en la mayoría de los casos habrá alguien que no esté de acuerdo con algo.
Y eso pese a que has filtrado tus actuaciones de manera que no has aplicado la estrategia idónea sino una edulcorada que será menos efectiva, por lo que al final es posible que no tengas ni una cosa (la finalidad que perseguías con tu actuación) ni la otra (que todo el mundo esté conforme con las decisiones que has tomado).
Se trata de ser pragmático. A veces la solución edulcorada será más positiva (que no más efectiva) y en otras ocasiones será un gran error. Hay que analizar todas las perspectivas posibles, desde el convencimiento de que no somos infalibles y que entre los extremos del vale todo y no vale nada encontraremos una solución adecuada.

http://jummp.wordpress.com/2013/12/23/agradar-a-todo-el-mundo/

Las precondiciones, postcondiciones y resultado esperado

Sumario -> Las precondiciones y postcondiciones contenidos en los casos de uso que nos llegan con el requerimiento que nos comunica el área funcional y/o de desarrllo (según el esquema de contratación que tengamos) para generar los lotes de prueba, constituyen la materia prima de los casos de prueba que debemos identificar para saber si podemos reutilizar scripts o bien, diseñar nuevos, sin perder de vista el/los resultado/s esperado/s.
Detalle -> En ambos casos lo que se representa es un estado y no la ejecución de una serie de acciones (previas o posteriores al caso de uso).
Muchos analistas funcionales consideran importante y necesario incluirlos para una mayor claridad de ‘Entendimiento’.
Para nosotros es necesario entender el alcance de estas variables ya que nos permitirá llevar a cabo la ‘Preparación de los Datos’ que se usarán en la ejecución de las pruebas considerando las Precondiciones, y tambien para aquellas donde algunas de los Postcondiciones sean Inputs (precondiciones) en otros casos de uso y/o casos de prueba.
Toda esta información estará contenida en el documento de ‘Enfoque de Prueba’, siempre y cuando este tipo de documento haya sido definido como parte del portfolio de documentos internos y entregables del proyecto de testing.
Ahora bien, pasemos a ver la forma de gestionar estas variables (pre y pos condición).
Dependiendo del conocimiento, experiencia y presupuesto con el que cuente el grupo de testing, se registrarán en:
1. Templates Word
2. Templates Excel
3. Herramienta Open Source
4. Herrqmienta Arancelada
Estas variables también nos definen complejidad, criticidad y dependencia/s, tema no menor a la hora de planificar y/o replanificar ‘Regresiones’ con la detección de fallos, ademas de permitir evaluar el impacto cuando se necesita concretar unn pasaje a ‘Producción’, habiendo quedado ‘bugs’ por corregir.
Fuente de inspiración: Las precondiciones y postcondiciones en los casos de uso
http://jummp.wordpress.com/2011/07/22/las-precondiciones-y-postcondiciones-en-los-casos-de-uso/
http://testingbaires.com/las-precondiciones-postcondiciones-y-resultado-esperado/

jueves, abril 25

¿Grandes técnicos o grandes personas?

¿Qué prefieres en tu equipo grandes técnicos o grandes personas? Los términos no son excluyentes pero pongámonos en la situación de que tuviéramos que elegir, ¿a quién contratarías?, ¿a alguien que sabes que es una gran persona pero no es un gran técnico o a un gran técnico aunque sepas que va a ser complicado que encaje en tu organización o en tu equipo de trabajo?.
La urgencia del momento puede hacer que te decantes por alguien que a corto plazo te pueda sacar las castañas del fuego sin embargo si analizas la situación con una mayor perspectiva es muy probable que te decantes por personas que sabes que van a encajar mejor en tu equipo, en la cultura de tu organización y en las que puedes confiar y que eso se encuentre por encima de la capacidad técnica.
Eso es así porque mientras la técnica, con tiempo y con esfuerzo por parte de la persona y paciencia por parte de la organización, se puede aprender, resulta mucho más complicado cambiar a las personas, entre otras cosas porque para ello se necesita que sea la persona la que decida evolucionar y no todos creen que deben o necesitan hacerlo.
Esta estrategia, como la mayoría, no es infalible porque como decía antes, requiere que la persona ponga de su parte para aprender lo necesario para ser cada vez más eficiente y productiva en su trabajo. Se puede ser una gran persona y encajar adecuadamente en el equipo pero que después no se encuentre motivada ante el tipo de trabajo que se le presenta y/o para recorrer esas millas extras que le permitan con el paso del tiempo adquirir el nivel de conocimientos adecuado.

http://jummp.wordpress.com/2013/12/20/grandes-tecnicos-o-grandes-personas/

Google Data Center

Google Data Center, es el concepto que esta relacionado con los centro de datos de la compañía Google que reveló fotos del interior de sus servidores. Además, se puede visitar uno de ellos a través de Street View.

Centro de Datos de Google, Data Centers

El gigante de las búsquedas decidió dar a conocer uno de sus centros de datos (Google Data Center), donde se puede ver su estructura y organización. La compañía publicó imágenes de su centro en Lenoir, en California, y habilitó las visitas virtuales a través de Street View. La firma explicó en su blog oficial que se trata de una oportunidad para conocer a “la gente y los lugares que mantienen a Google en funcionamiento”.
Cuantas veces realizamos búsquedas ya sea para aprender algo, para entretenernos, para encontrar algo o alguien; sin embargo no nos damos cuenta de la magnitud de los equipos, programas y los lugares donde éstos están para cumplir con nuestras peticiones de usuario.
El crecimiento de Google en los últimos años obligó a la compañía a ir aumentando sus infraestructuras, que mucho tiene que ver con la creación de centros de datos que sostienen la actividad de la compañía. Hasta el momento, Google había comentado detalles de esos centros, como su consumo energético o composición. Sin embargo, la compañía había guardado con gran recelo las “visitas” a dichos espacios.
Es difícil dejar de pensar en todas las pruebas, entre ellas performance y disponibilidad, que son necesarias para mantener el servicio, y su calidad, disponible para todos nosotros a diario.
http://testingbaires.com/google-data-center/
.

La importancia de la comunicación interpersonal para un Tester

Sumario ->
Se propone discutir acerca de la importancia que tiene la comunicación durante el proceso de pruebas del software asignado, y cómo los equipos de test tienen que ser capaces de entender los aspectos funcionales y técnicos del negocio, además de saber interactuar con los distintos stakeholders del proyecto.
Desarrollo
Cada día se hace más importante, a mi modo de ver, poder crear/recrear/mantener/afianzar una buena comunicación no sólo entre nuestros pares sino además con nuestros clientes (internos y/o externos).
Si bien contamos con más herramientas y entornos de trabajo que nos permiten no solo mantener comunicación de manera remota (por chat y/o por videoconferencia) sino además, compartir archivos de trabajo con nuestros compañeros y/o clientes; todas estas actividades requiere una cierta prolijidad de nuestra parte, organización, respetar normas de calidad, administrar el tiempo y saber escribir y comunicarnos adecuadamente para que entiendan el mensaje que queremos trasmitir.
La comunicación oral y/o escrita, es un ejercicio diario que puede adquirirse y hay cursos que permiten adquirir las denominadas ‘habilidades blandas’, como por ejemplo la redacción de informes, sino además para administrar tiempos, para lograr una comunicación eficaz, etc etc etc.
Indudablemente la comunicación es muy importante durante el proceso de pruebas del software.
El equipo de QA (como en algunas empresas lo denominan) deben ser capaces de entender los aspectos funcionales y técnicos del negocio sobre el cual se aplica el software que tiene que testear, comprender las limitaciones y restricciones de la tecnología y poder comunicarse de forma efectiva y eficaz con los distintos stakeholders del proyecto, como son:
- el Analista Funcional
- el Desarrollador
- el Arquitecto
- el Operador
- el Responsable del Proyecto
- el Responsable Comercial
- el Usuario final
Lograr todo ésto no es tan sencillo ya que no siempre se logra esta sintonía entre cada una de las personas que participan en el proyecto.
Cuando hay que establecer un Equipo de QA en una empresa y por ende, en sus respectivos proyectos para atender a sus clientes (internos y/o externos), se deben fijar y acordar/negociar la política y procedimientos de QA, ya que nuestra actividad puede darse verticalmente y/o atravesando horizontalmente todas las gerencias involucradas.
Establecer los criterios de trabajo y la forma de comunicación no es tarea sencilla, ya que a nadie le gusta -a decir verdad aunque digan muchos lo contrario- que se han equivocado y que se ha cometido un error. No en vano figuran estos aspectos en el Foundation Level Syllabus como: (a) La psicología de las pruebas y (b) El código deontológico.
Por otra parte, a pesar de tener estos criterios y forma de comunicación establecida, nada ni nadie nos garantiza que haya que ir haciendo ajustes a medida que uno va interactuando y progresando con el testing asignado.
A continuación, expongo algunas claves que pueden evaluarse para manejar ciertas situaciones que se dan durante la ejecución de un proyecto (no tienen ningún ordenamiento) y que permiten mejorar la comunicación entre las partes:
- Charlas ‘face to face’ es mucho más provechoso que intercambio de correos interminables.
- Video Conferencias para Proyectos Distribuídos es la opción mandatoria.
- Acercarse al analista o al desarrollador para ‘discutir’ -en el buen sentido de la palabra- un requerimiento, vale más que un chat o un correo electrónico.
- Definir reuniones de avance de 15 minutos diarios entre el analista y/o desarrollador, para instancias de proyectos críticos, puede ser una buena alternativa.
- Adelantar la Agenda de una reunión de manera tal de exponer el objetivo y alcance de la misma (Recomendación: escribir los títulos de los temas y ser lo más cortos posibles)
- Armar una Minuta de reunión lo más concreta posible y ofreciendo al principio de la misma los resultados obtenidos, si se alcanzó o nó con el objetivo y alcance, y la próxima fecha de reunión (Recomendación: enviar una copia a todos los que participaron de la misma)
- Tratar de esforzarse en entender el problema que tiene tanto el Analista y/o Desarrollador, como el Usuario final a fin de componer una condición de prueba lo más acorde a la realidad para obtener el resultado esperado.
- Acordar los casos en que pueda aplicar la entrega de una Orden de Magnitud en vez de una Estimación, entendiendo que luego habrá que transitar el proceso de Estimar donde el Esfuerzo de prueba previamente entregado puede conservarse o variar en más.
- Diseñar un template para Estimar el Esfuerzo de Prueba lo suficientemente inteligente (fórmulas y macros mediante) que permita a la hora de tener que negociar, ir modificándola a pedido de nuestro cliente y que automáticamente se vayan modificando los totales de ciertas celdas para ir tomando decisiones.
- Recurrir a casos de prueba pre elaborados para la reutilización de los mismos y así acelerar los tiempos de Diseño y/o Preparación de Datos. Para esta tarea es imprescindible contar con una herramienta para la gestión de las pruebas.
- Tener un procedimiento para explicar detalladamente cómo se originó la incidencia detectada junto con la respectiva evidencia complementaria, para permitir que otras áreas pueden reproducirla.
- Antes de enviar un correo o comunicar una incidencia, en caso de tener dudas, solicitar la opinión de alguien del equipo
- Tener preparado un esquema de extracción de informes de estado cuando la parte cliente nos solicita conocer el estado del testing para un determinado requerimiento.

http://testingbaires.com/la-importancia-de-la-comunicacion-interpersonal-para-un-tester/

lunes, abril 22

Desarrollo de software. Ciclo de vida clásico o en cascada

Este enfoque del desarrollo de software ha sido el más utilizado y en la actualidad, pese a la aparición de metodologías ágiles, sigue siendo la solución predominante, si bien, en cada organización o en cada de proyecto se puede llevar a cabo con ciertas variantes.
Además, en función del autor, las fases en que se divide el ciclo de vida clásico, pueden ser diferentes. Para este artículo voy a utilizar las que estableció Roger Pressman (no obstante para la descripción del alcance de las mismas voy a basarme principalmente en Métrica V.3, pero adaptándome a esta clasificación), si bien otras muchas alternativas podrían ser válidas:
- Análisis: Esta fase comprendería desde la posible obtención de unos objetivos o requisitos iniciales para determinar la viabilidad del sistema y escrutar las distintas alternativas de solución, pasando por la elaboración del catálogo de requisitos, hasta la realización de casos de uso, prototipado de pantallas e informes, como una primera especificación del plan de pruebas.
- Diseño: El análisis describe el sistema sin entrar en características propias de la implementación, es en esta fase donde se adapta ese análisis generalista a la solución concreta que se quiere llevar a cabo, definiéndose la arquitectura general del sistema de información, su división en subsistemas de diseño, el modelo de datos lógico, el modelo de clases (en el caso de un diseño orientado a objetos), la especificación detallada del plan de pruebas, etc…
- Codificación: En esta fase se realiza la construcción del sistema de información y las pruebas relacionadas con dicho proceso, como son las unitarias, integración y de sistema, así como otras actividades propias de las etapas finales de un desarrollo como es la realización de la carga inicial de datos (si bien en muchos casos se deja esto para cuando el producto está en producción) y/o la construcción del procedimiento de migración.
- Pruebas: En esta etapa se realizaría la instalación del sistema en un entorno de pruebas lo más parecido posible al de producción (entorno de preproducción) donde se realizarían las pruebas de implantación (que verifican principalmente aspectos no funcionales) y las de aceptación, donde los usuarios validan que el sistema hace lo que realmente esperaban (sin que se deba olvidar que los límites los establecen los modelos realizados previamente y que han debido ser validados). Por último se realizaría la implantación del sistema en el entorno de producción.
- Mantenimiento: Una vez que el sistema se encuentra en producción, se realizarán sobre el mismo diversas tareas de mantenimiento, que en función de su naturaleza se clasifican en correctivos, evolutivos, adaptativos y perfectivos. Estas tareas de mantenimiento serán consecuencia de incidencias y peticiones reportadas por los usuarios y los directores usuarios.
En el ciclo de vida clásico en función de las modificaciones y/o correcciones que se realizan en una etapa será necesario la vuelta a fases previas para hacer coherente el proceso de desarrollo y los modelos.
El principal inconveniente que se le ha achacado siempre a este tipo de ciclo de vida es que los usuarios tardan demasiado en ver los resultados, lo que hace que el tiempo transcurrido desde que se define el sistema hasta que está disponible sea lo suficientemente amplio como para que hayan ocurrido muchas cosas: desde que no estén la mayoría de las personas que participaron en la especificación, como cambios en los procesos, cambios de criterio, etc…, lo que provoca a hacer replantemiento de los requisitos en etapas más tardías del desarrollo con el coste que eso conlleva (un refinamiento de los requisitos es razonable siempre y cuando no se superen unos límites) y a que muy probablemente el sistema finalmente disponible esté alejado de lo que realmente quiere el conjunto de usuarios en estos momentos que es distinto a lo que querían hace meses y a lo que querrán dentro de otros tantos.
Otro inconveniente ligado con el anterior es que al tratarse el sistema como un todo, los modelos generados (catálogo de requisitos, casos de uso, etc…) serán lo suficientemente grandes como para no poder ser revisados y comprendidos en toda su magnitud, sobre todo por personal no informático. Esto crea una incertidumbre sobre los requisitos del sistema que más adelante traerá problemas.
No todo es malo en este modelo, ya que describe un procedimiento racional y ordenado de desarrollo de software, la clave para su éxito o su fracaso es como se gobierne el mismo y las circunstancias que rodeen al proyecto en el momento de su ejecución. Además, existen variantes que ofrecen una mayor flexibilidad al mismo y que permite reducir sus riesgos.

http://jummp.wordpress.com/2011/03/27/desarrollo-de-software-ciclo-de-vida-clasico-o-en-cascada/

jueves, abril 18

Mantenimiento correctivo y mantenimiento evolutivo

Una de las pesadillas de las empresas de desarrollo de software es la confusión (queriendo o sin querer) que existe en muchas casos entre los conceptos de mantenimiento correctivo y evolutivo. ¿Por qué pesadilla? Porque la garantía de los desarrollos afecta sólo a los mantenimientos correctivos y por tanto no se facturan y en muchas ocasiones se “cuelan” evolutivos como mantenimientos correctivos y se convierte en trabajo adicional para las empresas, no previsto y que en muchas ocasiones requiere un notable esfuerzo y que, por supuesto, no se cobra.
Un mantenimiento correctivo es aquel que tiene como objetivo solventar una deficiencia en un componente del sistema de información (puede ser software o documental). Entiéndase deficiencia como algo que debería funcionar o estar correcto y que no lo está.
Un mantenimiento evolutivo es aquel que pretende modificar algo que funcionaba o estaba correcto, con el objeto de aumentar, disminuir o cambiar las funcionalidades del sistema, ya sea por las necesidades del usuario o por otras causas como pueden ser, por ejemplo, cambios normativos.
El problema está en la definición de qué es lo que debería funcionar o estar correcto en el sistema de información, es decir la delimitación clara de la frontera entre el correctivo y evolutivo. Y no es algo que esté nada claro en muchos casos, ya que por ejemplo, eso que esa funcionalidad que dice el cliente que debería estar y no contempla el programa, ¿es algo que se ha sacado ahora de la chistera o realmente se contempló en la definición y análisis del sistema de información?, ¿es algo que no se ha interpretado correctamente en el análisis?, ¿es algo que se suponía que se podía extrapolar del análisis aunque no aparezca explícitamente?.
Es cierto que hay muchos casos que las incidencias son de cajón y son correctivos y en la mayoría de las situaciones no dan problemas ni para el cliente, ni para el proveedor, que será consciente que son fallos suyos y los solucionará. También es cierto que hay evolutivos que son muy complicados de colar como correctivos, ya que una cosa es que la pared tenga que estar pintada de blanco o de color crema, que el pomo de la puerta sea plateado o dorado o que incluso el suelo sea de marmol o porcelánico y otra que te intenten comprar un piso de cuatro dormitorios por el precio de uno de un dormitorio. Sin embargo entre un caso (correctivos claros) y otros (evolutivos claros) hay todo un abanico de posibilidades que la mayoría de las veces dan lugar a conflicto (estos serán menos si el presupuesto del proyecto es holgado, el cliente es bueno, el proyecto se trata de una inversión para intentar conseguir más negocio con el cliente o a través del producto que se ha desarrollado, etc…).
Como ya he comentado en algún artículo en caso de conflicto casi siempre tiene las de perder el proveedor y lo más importante es tener asumida esa circunstancia. Eso no quiere decir que se deba decir a todo que sí, pero es más fácil negociar si no se pierde el tiempo en intentar remar a contracorriente.
Habrá negociación porque en los proyectos de desarrollo de software suelen cometer fallos las dos partes cliente y proveedor. Por esta razón siempre digo que las dos partes deben ser flexibles, ya que todos cometemos errores y además la naturaleza de los procesos de desarrollo de software no es rígida, sino en sí, un proceso evolutivo.

http://jummp.wordpress.com/2009/12/25/mantenimiento-correctivo-y-mantenimiento-evolutivo/

Lo importante de las Metodologías de desarrollo en un proyecto de desarrollo de software

Uno de los aspectos que más me preocupan en el desarrollo de proyectos informáticos es que el producto llegue al entorno de producción con el menor número de errores funcionales, que tenga un buen rendimiento y sea fácilmente mantenible a nivel de código y de documentación.
Esto que parece de perogrullo, es tremendamente difícil sobre todo si nos encontramos con proyectos de una gran envergadura con un parque de usuarios heterogéneo en localizaciones dispersas con distintos nivel de calidad en su ancho de banda.
Después de analizar las metodologías de desarrollo clásicas como Métrica v.3 y tratar de hacer uso de ella en mis proyectos (más bien un subconjunto de ella, pero aunque sea un subconjunto, por definición de Métrica v.3 sigue siendo Métrica v.3) he llegado a la conclusión de que sin ser una mala opción, hay algunos aspectos que sí es conveniente centrarse y en otros menos:
- Plan de proyecto. Contendrá el cronograma del proyecto (lo mejor es que ese cronograma se mantenga con una herramienta informática compartida: Redmine, dotProject, etc…), por lo que valdrá con una referencia a la url donde se puede seguir el cronograma del proyecto, el equipo de proyecto (igualmente lo mejor es que ese equipo de proyecto se vaya actualizando, por tanto lo mejor es una herramienta informática compartida y si es la misma que la del cronograma, mejor que mejor y se sepa si así lo desea el cliente su imputación de horas al proyecto) y la documentación que deberá acompañar al proyecto.
- Lo fundamental en un proyecto de desarrollo de software son los requisitos. La empresa que posea analistas con la suficiente capacidad para obtener del usuario lo que quiere (cosa tremendamente difícil) tienen una ventaja muy importante respecto a sus competidores. Este catálogo de requisitos es fundamental tenerlo actualizado en todas las fases del proyecto, incluido el mantenimiento. Si es necesario dedicar tiempo a una fase del proyecto concreta esta es el análisis de requisitos. El catálogo de requisitos debe ser completo y fácilmente inteligible por el usuario. Si hay presupuesto en el proyecto y puede facilitar el proceso de desarrollo el analista puede trabajar con los diagramas de casos de uso.
- Modelo de datos. Muy importante tenerlo documentado en la versión 1 del proyecto. Para posteriores versiones, si en el mantenimiento hay presupuesto y tiempo (aspectos no siempre disponibles) se puede mantener la documentación del modelo de datos, en caso contrario no pasa nada, siempre hay herramientas que te los puede obtener por ingeniería inversa a través de la base de datos.
- Interfaz de usuario. Es fundamental que el usuario conozca y valide la interfaz de usuario, ya que es donde ellos van a trabajar, de nada vale saber lo que quiere el usuario si después la interfaz de usuario no es ágil. Por este motivo también conviene invertir en esta fase del proyecto. Cuanto más se aproxime esta interfaz de usuario a su implementación real, más conciencia tendrá el usuario de lo que se va a encontrar y por tanto más posibilidades de éxito existen en el proyecto.
- Arquitectura del sistema. Debe ser breve, conciso y cuanto más gráfico mejor. Es importante para proyectos donde se deleguen funcionalidades en terceras herramientas (motor de tramitación, plataformas de autenticación y firma electrónica, etc…).
- Plan de pruebas (unitarias, integración, sistema, implantación y aceptación). Aunque es una realidad que nosotros, los clientes, tengamos nuestros propios medios para garantizar la calidad de las entregas, son absolutamente necesarias dos premisas: Que la empresa desarrolladora realice un primer filtro de pruebas muy importante (nunca es perdido el tiempo que se dedica a probar) y que se entregue un manual de pruebas al cliente donde como mínimo se pueda garantizar, tras realizar las pruebas, que el sistema funciona y que además verifica los requisitos funcionales y no funcionales más importantes.
- Manual de usuario. Debe estar siempre actualizado. Ser muy completo y tener casos de uso reales en los que se refleje, al menos, el 90% de la casuística del programa. Si el manual está accesible on-line por los usuarios mejor que mejor, independientemente de eso es aconsejable que sea también fácilmente imprimible.
A todo lo anterior es necesario sumar la necesidad de utilizar un sistema de control de versiones buenos, como por ejemplo Subversion y hacer un buen uso del mismo (política correcta de etiquetado de versiones, etc…), utilizar unos mecanismos estándar para el despliegue de los proyectos: MAVEN + Hudson + Artifactory, por ejemplo y algo fundamental, un libro blanco de desarrollo que homogeinice los desarrollos que se realizan para tu organización.

http://jummp.wordpress.com/2009/01/18/lo-importante-de-las-metodologias-de-desarrollo-en-un-proyecto-de-desarrollo-de-software/

lunes, abril 15

Antipatrón. Facilitador proteccionista

Una objetivo fundamental de un jefe o gestor de proyectos, Scrum Master o cualquiera que sea el nombre que queramos darle, es la de tratar de conseguir un contexto lo más estable posible que permita que todas las partes involucradas en el proyecto desempeñen su función de la manera más eficiente posible.
Además del trabajo sobre el contexto que va más sobre líneas generales del proyecto: relación de confianza, gestión adecuada de expectativas, del valor ganado y de la inversión realizada hasta el momento, etc…, en el día a día del proyecto existen contingencias que pueden afectar al rendimiento del equipo de proyecto y que conviene solucionar cuanto antes para que el impacto sobre la productividad y los resultados sea el menor posible.
Está claro que un facilitador eficiente hace mucho bien al proyecto, parece un trabajo fácil pero no lo es en absoluto porque tiene mucho de inteligencia emocional, ya que para resolver esos problemas del día a día o para tratar de mantener un equilibrio en el proyecto se requiere mucha interacción y comunicación con otras personas que probablemente tengan unas prioridades y objetivos diferentes a los del equipo de proyecto.
Cuando el facilitador lo hace bien, las personas que trabajan con él tienden a despreocuparse de la resolución de determinadas contingencias que perfectamente podrían resolver ellos y/o el propio facilitador con el objetivo de que el equipo esté centrado en su trabajo decide asumir que toda la intendencia del proyecto pase por él.
Esto puede llegar a convertirse en un antipatrón por varios motivos: el facilitador se puede terminar convirtiendo en un cuello de botella, si el facilitador por el motivo que sea no puede dedicar tanto tiempo al proyecto se necesitará que los desarrolladores den un paso al frente para resolver estos problemas y/o para tratar de que el equipo siga gestionándose de manera adecuada pudiendo darse el caso de que no se encuentren preparados para realizar esas tareas o no las consideren de la suficiente importancia, degradándose paulatinamente el rendimiento y productividad del equipo impactando directamente en los resultados.

http://jummp.wordpress.com/2013/12/03/antipatron-facilitador-proteccionista/

Reducción de tiempos muertos

Un aspecto que puede hablar bien a las claras de la salud de una empresa a nivel de gestión, planificación y control es la reducción progresiva de tiempos que tienen los trabajadores sin tener tareas asignadas. ¿Cuántas veces sucede que mientras hay algunos equipos de la empresa qué tienen cargas de trabajo elevadas, otros equipos o personas específicas pueden pasar horas o días sin tener una tarea asignada?.
Me estoy refiriendo exclusivamente a la no asignación de tareas por motivos de descoordinación, mala gestión, mala planificación o también, por qué no decirlo, por la falta de actitud del trabajador (de nada vale una planificación o gestión exquisita si después el que tiene que ejecutar la tarea no responde o no indica que está disponible cuando la ha terminado). No me refiero como es lógico a la no asignación de tareas por falta de negocio (aunque en muchos casos sea factible asignar tareas no facturables, pero que pueden resultar interesantes para la empresa, como por ejemplo, desarrollos internos, esas mejoras de aplicaciones internas que nunca da tiempo a hacer, esa mejora en el framework que tantas veces se había considerado necesaria, probar ese producto que leímos en aquel blog y que nos permitiría mecanizar tal proceso, etc…).
Evidentemente no es nada fácil que una persona se vaya moviendo entre proyectos (o incluso que se ponga a trabajar en un módulo que desconoce del proyecto en el que está trabajando), ya que por regla general (sobre todo si no hay una infraestructura de desarrollo común) se necesita un período de adaptación, salvo que la tarea que se le asigne no requiera de ese aprendizaje previo (no es fácil, pero no imposible).
El control lo debe hacer el jefe de proyecto o el jefe de equipo (que puede ser perfectamente el analista principal del proyecto), el cual debe encargarse de que los parones de los miembros del equipo de proyecto sean los menores posibles, ya que por un lado provoca gastos al proyecto (al fin y al cabo un porcentaje del trabajador está asignado al proyecto) y a la empresa (que es la que asume las no ganancias o pérdidas del proyecto). Y no solo eso, ya que si hay personas que no tienen carga de trabajo asignada y otras sí, siempre surgirán las comparaciones, lo que restará por un lado productividad a los que tienen tareas que hacer y por otro también provocará que el ambiente se enturbie.
Si el jefe de proyecto (porque tenga muchos proyectos y no pueda estar al día a día de lo que ocurre en el mismo, aunque al final la cuenta económica del proyecto hablará bien a las claras de lo rentable que ha sido y de la productividad del equipo (con esto no quiero decir que si un proyecto presenta pérdidas sea por el equipo, ya que esto depende de múltiples factores)) no tiene la posibilidad de hacer un seguimiento en profundidad de la ejecución de tareas por parte del personal del proyecto, debe delegar ese seguimiento en el jefe de equipo o analista principal del proyecto. Esta figura, sí que sabrá cómo está repartida la carga y sí que podrá prever tiempos muertos, cuando los detecte, deberá informar al jefe de proyecto para que intente minimizar los tiempos muertos o si no es posible y este se prolonga permita que el trabajador pueda repartir su tiempo con otro proyecto que sí tenga necesidades de recibir algún tipo de apoyo.

http://jummp.wordpress.com/2009/09/13/reduccion-de-tiempos-sin-tareas-asignadas/

jueves, abril 11

El papel de los usuarios en un proyecto de desarrollo de software

Software Testing Profesional
Todos sabemos que cuanto mayor sea la ayuda de los usuarios en un proyecto de desarrollo de software, mayores serán las probabilidades de éxito que tenga el mismo.
No obstante es importante hacer algunas matizaciones:
1) El proyecto no se hace sólo, porque incluso existiendo una gran ayuda por parte de los usuarios, si no se consigue interpretar con precisión lo que quieren y no se dinamiza un feedback continuo de los mismos durante todo el proceso de desarrollo, se incrementarán las posibilidades de que algún requisito funcional no se haya recogido adecuadamente o de que se haya realizado un software con una usabilidad incómoda para los usuarios.
Estas circunstancias son fuente de innumerables problemas en las fases finales del proyecto y provocan retrasos, sobrecostes y grandes dificultades para cerrar el proyecto, además de crear conflictos con el cliente que pueden perjudicar las relaciones futuras con el mismo. Esto hace que sea fundamental el papel que desempeñan tanto el jefe de proyectos, como el equipo de analistas funcionales y analistas programadores.
2) Es importante que entre el grupo usuarios asignados al proyecto haya usuarios que vayan a estar implicados en el futuro uso del sistema de información, es decir, no es suficiente que el equipo de usuarios esté formado por “ideólogos” o “teóricos” que se nutrirán del resultado del trabajo de la herramienta, sino que es fundamental que participen usuarios que después se tengan que poner el mono de trabajo y vayan a trabajar con el software. Es importante conseguir la combinación de ambos tipos de usuarios (tampoco es positivo que en el grupo de usuarios no participen usuarios directores, ya que pueden existir conflictos entre usuarios que éstos deben solucionar y también es recomendable que el software no sólo se diseñe para el corto plazo, sino que sirva para tareas de gestión, planificación, etc… y esta visión la proporcionan principalmente los usuarios directores), por lo que el jefe de proyectos debe poner en conocimiento del cliente esta necesidad, como es lógico explicando los riesgos de que no se aplique esta estrategia.
3) Los analistas están para ayudar y para colaborar con los usuarios en la especificación y diseño de la solución, pero no están para “dar lecciones” a los usuarios y enseñarle cómo deben hacer su trabajo. Si los usuarios hacen su trabajo de una determinada manera, aunque no sea la más ortodoxa, siempre tendrá una justificación que sólo se entendería si realmente estuviéramos haciendo su trabajo durante un tiempo y viéramos los problemas con los que se enfrentan cotidianamente. La clave por tanto está en la colaboración y en el diálogo, es decir, se pueden proponer cosas al usuario, se le pueden dar ideas, pero no se le puede dar una vuelta al calcetín de cómo hacen sus tareas, salvo que ellos mismos lo soliciten y procurando en estos casos y en consenso con los usuarios que los cambios sean tranquilos.
4) Es fundamental documentar el proyecto, en primer lugar con la documentación que se especifique en las normativas de desarrollo de la organización para la que se realiza el servicio, con las matizaciones que indique el Director del Proyecto, en segundo lugar con la documentación que establezcan las normativas internas de calidad de tu organización (no requerirá un sobreesfuerzo, ya que en la mayor parte de los casos coincidirá) y a todo lo anterior sumarle toda la documentación de trabajo que sea necesaria para trabajar con los usuarios, que no tienen por qué entender de modelos de datos, de diagramas de casos de uso, etc…, es más, es un error trabajar con los usuarios utilizando dichas herramientas, ya que estas son de utilidad técnica y no hablan el mismo lenguaje de los usuarios. Este tipo documentación, por tanto, no tiene por qué tener los formalismos de la técnica y tiene como objetivo que el usuario capte lo que el analista está interpretando y se pueda ir perfilando a partir de esto, tanto requisitos, como casos de uso, interfaces, etc… Es muy importante trabajar todo esto, ya que comenzar demasiado pronto con la construcción, es algo muy arriesgado, ya que los costes de modificar algo en las distintas fases de la construcción pueden ser muy importantes y provocar que se tengan que reconstruir varias veces distintas funcionalidades de la aplicación.

http://jummp.wordpress.com/2010/02/13/el-papel-de-los-usuarios-en-un-proyecto-de-desarrollo-de-software/

Un buen entorno de preproducción

Un problema que ocurre desgraciadamente con relativa frecuencia consiste en no tener dentro del departamento TIC de una organización un entorno de preproducción.
En muchos casos, existe un entorno que se utiliza para probar aplicaciones, pero que dista mucho de ser considerado entorno de preproducción, ya que suelen tener las siguientes características:
- No se tiene seguridad al 100% que si un producto funciona en el entorno de pruebas funcione en el entorno de producción. Esto va a provocar que se produzcan casos donde una misma versión de una aplicación funcione correctamente en pruebas y no en el entorno de producción y al revés, es decir, que funcione en producción, pero que no funcione en pruebas.
- Además del problema de la falta de coherencia con el entorno de producción, se le suelen dedicar muy poco recursos hardware, esto hace que tampoco resulten muy significativas las pruebas de rendimiento que se realicen. Esto provoca además, que la realización de pruebas funcionales o pruebas de aceptación sean desesperantes, ya que suelen ser entornos con un mal tiempo de respuesta.
Es cierto que mejor tener un entorno así que nada (pero la diferencia entre eso y la nada no es mucho), pero no es conveniente conformarse con eso. La inversión en un entorno de preproducción es algo esencial, evitará muchísimos problemas y además posee un rápido retorno de la inversión.
Por tanto un entorno de preproducción resulta esencial en todo departamento TIC, por lo que no hay que mimar solo las infraestructuras de producción, debiéndose dotar de recursos hardware, software y humanos suficientes al entorno de preproducción para que sea coherente con el de producción, garantizándose que si el producto funciona correctamente en preproducción, además de cumplir los requisitos de seguridad, rendimiento, etc…, tendrá un comportamiento similar en el entorno de producción.

http://jummp.wordpress.com/2009/06/24/un-buen-entorno-de-preproduccion/



En esta nueva entrada vamos a hablar de una temática que se multiplica en todos los proyectos, Responsive Web design.

¿Que es Responsive Web Design?

Es el proceso de creación de un único sitio web que tiene la capacidad de reconfigurar dinámicamente su diseño, navegación, contenido e imágenes basadas en el tamaño y la orientación de la pantalla del usuario y el navegador en la que se presenta.
Un sitio Web responsive logra esta flexibilidad mediante el uso de un código HTML único que se presenta de manera diferente mediante el uso de CSS,  media queries, Fluid Grids e imágenes flexibles.

¿Como afecta al testing?

Los equipos de testing tienen que sumar a su larga lista de browsers y plataformas una  larga lista de dispositivos y tamaños de pantallas. Esto solo hace multiplicar las distintas combinaciones de pruebas a realizar. Por eso es importante hacer seguimiento de esto desde el principio del proyecto y definir las distintas prioridades de Browsers/Plataformas y dispositivos para evitar posteriores dolores de cabeza.

¿Dispositivos reales o virtuales?

Dispositivos
Dispositivos
Actualmente existen una gran cantidad de servicios que ofrecen dispositivos y plataformas virtualizados por una cuota anual muy baja o pagando por hora. Algunos ofrecen dispositivos reales y otros emuladores, al igual que se puede emular los distintos dispositivos en forma local. Algunos problemas comunes con estos servicios de virtualización de dispositivos es el tiempo de respuesta mientras se interactua con el dispositivo,  la disponibilidad para usar algunos de los dispositivos mas demandados y la falta de interacción del tipo ”touch” que uno pueda tener con el dispositivo, lo que no nos da una perspectiva real de la experiencia de usuario con el sitio bajo pruebas. En el caso de que solo usemos emuladores de los dispositivos, es muy probable que no veamos el resultado final del sitio en el dispositivo y sea un riesgo que tengamos que mitigar.
La otra opción es la utilización de dispositivos reales, comprando cada uno de los dispositivos o solicitando los dispositivos personales a los integrantes del equipo. Esto hace que las pruebas sean llevadas a cabo de la mejor manera, pero comprar equipos puede resultar costoso, hay equipos que no son fáciles de conseguir (por ser muy nuevo o muy viejo) y puede ser que determinados equipos solo se usen en uno o dos proyectos.
La elección de cualquiera de estas opciones dependerá mayormente de la cantidad de proyectos que demanden responsive y el presupuesto del mismo, igualmente, el ideal de los casos es cubrir con dispositivos reales aquellas pruebas criticas y emular/virtualizar aquellos dispositivos que no resultan de gran importancia.

¿Cuales dispositivos debo soportar? ¿Cuales no?

Dispositivos por trafico
Dispositivos por trafico
Este es un punto directamente relacionado con el anterior, así como en testing no se puede testear todas la combinaciones posibles, también aplica para las pruebas responsive, hay una gran cantidad de dispositivos (que se sigue renovando frecuentemente) con distintas dimensiones de pantalla y distintas densidades. Por eso es importante tener una buena estrategia de selección de dispositivos/resoluciones a cubrir dentro del alcance de las pruebas, al mismo tiempo, también es importante priorizar los mismos. Una opción es considerar tres pilares: recolectar toda la estadística actual de acceso al sitio en caso de que sea un re-diseño,  determinar cuales son los dispositivos mas utilizados al momento de sacar el sitio y por ultimo, el sector del mercado al que apunta el cliente. Con estos tres pilares debemos buscar la forma de equilibrar nuestra lista de dispositivos y definir cuales aplican a las diferentes prioridades.

Herramientas

Una vez que ya determinamos que resoluciones/dispositivos vamos a soportar, tenemos que conseguir los mismos, ya sea virtualizados o reales como ya vimos en el primer punto. Vamos a ver algunas herramientas a tener en cuenta:
  1. Adobe Edge Inspect:
    • Pros:  Es compatible con todos los navegadores nuevos sin ningún conflicto de plugins, como Apple tiene con Flash y está basado en HTML5, CSS3 y Javascript por lo que es fácil de trabajar con otros desarrolladores sin que tengan que saber Edge Adobe. Permite hacer un mirror desde la PC y ver las mismas pantallas en los dispositivos conectados, pudiendo tomar screenshots desde los mismos.
    • Cons:  No se puede utilizar en los navegadores más antiguos que ahora mismo es aproximadamente el 40% del trafico web y algunas de las características avanzadas de programación siguen siendo mucho más rápido en Flash.
  2. mattkersley:
    • Pros: Sirve para tener una rápida mirada de como responde el diseño antes distintas resoluciones y poder tomar screenshots de manera sencilla de los principales bugs de diseño
    • Cons: No tiene una gran variedad de resoluciones, no permite la navegación dentro de los Iframes y no sirve como prueba final del comportamiento responsive.
  3. Reponsinator:
    • Pros: Al igual que las demás ’tools’ online, solo sirve para hacer pruebas de alto nivel del comportamiento Resonsive de la aplicación  Igualmente tiene un mayor soporte a distintas resoluciones de los dispositivos mas importantes.
    • Cons: No sirve como prueba final, no nos deja definir resoluciones custom y no permite la navegación en el frame.
  4. ScreenFly:
    • Pros:  Es otra herramienta para una prueba de alto nivel, tiene una variedad de opciones mucho mayor a las otras que nombre previamente y permite definir resoluciones custom.
    • Cons: No sirve como prueba final.
  5. BrowserStack:
    • Pros: Permite emular casi todos los dispositivos y resoluciones disponibles en el mercado, permite automatizar pruebas y pruebas sobre sobre localhost en forma remota.
    • Cons: Es paga, solo emula los dispositivos, y puede resultar un poco lento y tedioso.
  6. UserAgents:
    • Pros: Es una herramienta que ya tenemos disponible en los browsers y nos permite crear resoluciones custom
    • Cons: No sirve como prueba fina, solo sirve como vistazo a alto nivel de como cambia el layout en distintos tamaños de pantalla.

Consideraciones para las pruebas

Es importante saber algunos puntos más al momento de realizar las pruebas.
  1. Desktop no es una resolución a considerar: Es lo mismo que diga que Celular (“phone”) es una resolución cuando en realidad hay una gran combinaciones de resoluciones disponibles para ese grupo y a las mismas las llamamos iphone4, iPad, etc…. Si somos específicos con las resoluciones/versiones de los dispositivos, ¿Porque no serlo con las resoluciones de las pantallas de escritorio?  Comúnmente para escritorio se tiene como referencia un tamaño y de ahí para arriba se debe respetar ese diseño.
  2. Asegurarse de que todos hablemos de lo mismo: Dividir las resoluciones en small, medium y large puede ser algo practico desde el punto de vista de negocio, pero para un desarrollador/tester es importante definir a que dimensiones/dispositivos nos referimos con esos términos ya que uno puede considerar que large screen es solo para ‘Desktop’ pero dependiendo de la resolución definida para este termino también puede aplicar para tablets de ultima generación.
  3. La orientación de los dispositivos es importante: Para los que están mas acostumbrados a pruebas en maquinas de escritorio es común que se les escapen las consideraciones que tiene que hacer cuando cambia la visión de Landscape a Portrait (o viceversa) en un dispositivo mobil (celular/tablet) y en el caso del comportamiento responsive, muchas veces suele haber algunas inconsistencias ya que esas resoluciones en landscape suelen ser subestimadas.
  4. Touch: Es importante que aseguremos que la experiencia touch del sitio sea la mejor para el usuario y que la misma sea funcional.
  5. Reporte de errores: Es importante que se defina una estrategia de reporte de errores para aquellos dispositivos que no tienen soporte para screenshots, ya sea por ser muy viejo (al que le toco sacar screeenshots en un blacberry torch entenderá muy bien este punto) o porque se requieren artilugios para lograrlo. Una posibilidad es tomar fotos con otro dispositivo o hacer vídeos con otro dispositivo, de esta manera es rápido y sencillo.

Conclusión

Realizar pruebas sobre un sitio Responsive requiere de una gran planificación y tiempo, es una tarea que no debe minimizarse y debe tener un presupuesto adecuado. Continuamente salen nuevos dispositivos al mercado por lo que es importante que se realicen las pruebas suficientes para asegurar que se cumplen un mínimo de los requisitos. Para sacar un mejor provecho de los dispositivos reales es importante que este aceitado el proceso de pedido y devolución del mismo, así como el proceso de Update (actualización de los Sistemas operativos de los mismos) para que todos los proyectos tengan la posibilidad de utilizar dispositivos reales y encontrar la mayor cantidad de bugs y poder vivir la experiencia de usuario de la mejor manera.

http://josepablosarco.wordpress.com/2013/04/10/testing-responsive-web-design/#more-731

lunes, abril 8

La importancia de entregar los productos software al cliente muy bien probados

Si para cumplir los plazos de un proyecto se entrega sea como sea y esté como esté un producto software al cliente no supone ninguna solución, es más, si lo que se entrega presenta muchos errores y una calidad deficiente es casi peor el remedio que la enfermedad. Esto todavía es de una mayor gravedad si encima se actúa de la misma manera cuando se está fuera de plazo.
Es demasiado frecuente encontrarnos con que las empresas de desarrollo de software no prueban lo suficientemente bien los productos antes de entregarlos, se limitan a hacer unas cuantas pruebas de rutina y ya consideran que está todo lo suficientemente bien, como para para realizar la entrega.
Hace poco, un compañero me comentó que había una empresa que le había gustado especialmente, porque todo lo que le entregaba prácticamente no tenía errores, lo que agilizaba muchísimo el paso a producción y daba pocos quebraderos de cabeza posteriormente en el entorno de producción. Esta situación que debería ser una norma para el conjunto de desarrollos que nos llegan, no es así, lo que provoca que cuando se hacen las cosas como deberían ser parecen hechos extraordinarios y excepcionales.
Si un producto se entrega con el menor número posible de errores es bueno para el cliente, pero todavía lo es más para el proveedor.
Motivos:
1) Aunque simplemente sea un ingrediente más de la calidad del software, entregar un producto que prácticamente no falla (tanto a nivel funcional como no funcional) habla bastante bien de la empresa que lo ha entregado. Además, si se llega a esta dinámica es porque realmente se están haciendo las cosas bien en el proveedor a nivel procedimental y metodologico, es decir, se ha diseñado y ejecutado internamente un plan de pruebas, de calidad, que probablemente habrá sido resultado de una fase de análisis y diseño que se ha ejecutado y documentado correctamente. Además, se conocerá el entorno tecnológico del cliente, se tendrá documentado y probablemente incluso se habrá intentado replicar hasta donde haya sido posible y se sabrá cómo se realiza el procedimiento de paso a pruebas y producción que utiliza.
Los clientes no queremos problemas, no queremos que el proceso de paso a producción sea eterno, no queremos que la implantación nos robe más y más tiempo y por supuesto, no queremos que el producto empiece a fallar en producción por todos lados. Como no queremos problemas, se tiende a valorar muchísimo más todo aquello que no los da.
2) Para un cliente entregar un producto con muchas incidencias y empezar a parchearlo una y otra vez, hasta tener un producto estable, cuesta mucho más esfuerzo y por tanto dinero que habíendolo entregado existiendo un procedimiento serio de pruebas del producto. Si bien de esta segunda manera puede parecer más costoso entregar el producto (de hecho lo es), al final y haciendo cuentas es mucho más barato que tener que estar corrigiendo incidencias y pasando las mismas a pruebas y a producción en distintas iteraciones. Además, entre iteración e iteración se incrementa el riesgo de que se intenten colar mantenimientos evolutivos como correctivos (aprovechando la débil frontera que existe en ocasiones entre ambos y en muchos casos la escasa documentación de los proyectos y de la ausencia de actas de reunión), lo que a su vez complicará muchísimo más todo y disparará, en consecuencia, los costes.

http://jummp.wordpress.com/2010/03/08/la-importancia-de-entregar-los-productos-software-al-cliente-muy-bien-probados/

jueves, abril 4

La importancia de un buen análisis funcional

De todos es sabido que cuanto antes se solucione un problema en un proyecto de desarrollo de software, menos coste tiene para el mismo y de ello salen beneficiados tanto proveedor como cliente.
Por ese motivo resulta esencial que un proyecto sea sólido desde la base, siendo la misma el análisis funcional, lo que hace que sea muy importante la figura del analista que es la persona o grupo de personas (si el proyecto es grande) que se tienen que encargar de entender, interpretar y traducir lo que el usuario demanda, sentando las bases de los posteriores procesos de diseño y construcción del sistema de información.
Hacer un buen análisis es una tarea bastante compleja, ya que resulta muy complicado obtener todos los requerimientos del usuario desde etapas muy tempranas, ya que por regla general el usuario empieza a descubrir el detalle de todo lo que quiere cuando empieza a utilizar el producto ya construido con ejemplos reales de su día a día de trabajo (también suelen comentar nuevos requisitos o enmendar requisitos previos, en otras etapas conforme se le vaya presentando la evolución del proyecto, de hecho no es malo que se corrijan, ya que cuanto más avanzado esté el proyecto, el esfuerzo de hacer los cambios es mucho mayor). De hecho es prácticamente inevitable no hacer evolutivos que solventen esos flecos que no se detectaron en análisis para dejar el producto lo más próximo posible a lo que los usuarios necesitan y demandan. Como consecuencia de lo anterior, y como es lógico, se puede considerar que un análisis funcional es más bueno conforme sea menor el número de ajustes que haya que hacer en etapas posteriores del proyecto.
Es importante matizar que un proyecto de desarrollo de software no es una barra libre y que es importante que el usuario conozca sus responsabilidades en el proceso de definición del sistema y que no se pueden estar cambiando de requisitos continuamente, como tampoco podría estar cambiando frecuentemente de opinión si le están construyendo una casa. Todo lo anterior además hay que compatibilizarlo con que todas las partes están interesadas en el que el proyecto vaya a buen término, por lo que tampoco es una buena política ser inflexibles en la modificación del catálogo de requisitos, porque si el resultado final no es el que quiere el usuario, el sistema de información tendrá muchas papeletas para no ser utilizado. Equilibrio complicado: evitar que los usuarios modifiquen continuamente requisitos y tener un poco de mano izquierda cuando se planteen esos cambios. Como ese equilibrio es complicado de mantener y es fuente frecuente de conflictos, hay que intentar que el análisis tenga la mayor calidad posible.
Hacer un análisis funcional por tanto es una tarea compleja, a lo que hay que sumar que en muchos casos hay que aprender mucho sobre el proceso de negocio que se pretende informatizar, para entender de mejor manera lo que el usuario demanda, ya que resulta todo más fácil si el lenguaje que se utiliza es el mismo. En muchas ocasiones esos procesos de negocio son tremendamente complejos y además se dispone también de poco tiempo para entenderlos, teniendo en cuenta que por regla general y como he comentado muchas veces en mi blog, los proyectos informáticos suelen estar infravalorados (por el que contrata y/o por el que es contratado (para conseguir el contrato)).
Dado que el análisis funcional consiste en abstraer un conjunto de necesidades de los usuarios es muy importante la implicación de los mismos y eso no siempre se consigue. Si los usuarios no están implicados, por muy buen analista funcional que tenga el proyecto, las probabilidades de que este salga mal crecen exponencialmente. Evidentemente un buen analista puede paliar esos huecos que deja el usuario e incluso conseguir una mayor participación de los usuarios, pero más tarde o más temprano los problemas aparecerán y al final siempre termina pagando el proyecto (en primera instancia) y el que lo desarrolla (en segunda). Por todo lo anterior, se puede pedir que un analista funcional aprenda un proceso de negocio complejo, que consiga extraer de los usuarios lo que buscan y necesitan y que además lo haga en un tiempo record, pero lo que no se le puede pedir es que haga magia y resuelva problemáticas que le trascienden, como el caso que he comentado de la inacción de los usuarios en determinados proyectos, siendo esa falta la implicación la primera causa de que un análisis no salga bien y por tanto una de las causas más importantes del fracaso de un proyecto y no se trata en este caso de tirar pelotas fuera y ponerme del lado de mis colegas de profesión, se trata de algo que he podido vivir en diferentes proyectos de manera muy directa.
Nadie es infalible y un analista funcional tampoco lo es. Habrá errores (independientemente de que la causa de los mismos sea provocada por circunstancias adversas en el proyecto o no), puede que en este proyecto sean muy pocos y que en otros sean mayores, por eso es importante que el analista lo tenga asumido desde un principio, como también lo es que de esos errores se debe aprender y que resultarán fundamentales en la formación del mismo. Al final esos errores terminan curtiendo y permiten que cada vez los análisis que se realicen sean mejores. Por tanto, la experiencia resulta importante. En cualquier caso, suponer un análisis perfecto es suponer que en un proyecto se dan circunstancias ideales y que todas las variables que pueden influir en que las cosas vayan mejor o peor, están todas a favor.
De todo lo comentado en los párrafos anteriores se extrae que es importante que un analista funcional sea un buen comunicador, primero con el usuario ya que resulta fundamental que el usuario conozca todo lo que hemos entendido y cómo se pretende llevar a cabo (no conseguir eso es ir a ciegas) y segundo con el equipo de proyecto ya que tiene que trasladar a documentación y hacerles entender la interpretación de lo que el usuario quiere y cómo lo quiere.
Un buen análisis funcional no asegura el éxito del proyecto, ya que la ejecución técnica del mismo también tiene un peso importante, pero lo que sí es seguro es que si el análisis funcional no es bueno, la ejecución técnica difícilmente puede salvar las deficiencias del mismo y tocará corregir el producto una vez construido y además, por regla general, en diferentes evoluciones, lo cual es muy costoso y tampoco asegura que ese árbol que empezó torcido, termine por enderezarse.

http://jummp.wordpress.com/2009/11/28/la-importancia-de-un-buen-analisis-funcional/

Empresas de desarrollo de software: ¿estructura vertical u horizontal?

Muchas veces se plantea el debate si es mejor que las empresas de desarrollo de software muestren una estructura organizativa vertical u horizontal.
Mi experiencia profesional se ha basado en organizaciones donde la estructura es vertical y esto puede condicionar un poco mi opinión sobre este tema, no obstante, antes de escribir este artículo le he dado una pensada a esta disyuntiva y voy a tratar de ser lo más objetivo posible, pero sin olvidar lo que la experiencia me ha enseñado.
Desde mi punto de vista el factor más determinante es el tamaño de la empresa. Una empresa muy pequeña funcionará mejor horizontalmente (además de que le será complicado mantener costes de estructura elevados, salvo que siendo pequeña consiga una facturación muy importante) y una empresa de cierto tamaño será complicada de gestionar si lo horizontal predomina sobre la vertical, ya que al fin y al cabo habrá que tomar decisiones, gestionar múltiples equipos de trabajo, tratar con diversos clientes, realizar tareas comerciales, etc… y no todo el mundo podrá, estará preparado o tendrá la voluntad de hacer todo tipo de tareas. ¿Cuál es el tamaño a partir del cual se encuentra el punto de ruptura entre lo horizontal y lo vertical? Creo que es difícil generalizar y dependerá en gran medida de las características del personal que componga la organización, cuanto más compromiso tengan con la empresa y más flexibles sean a la hora de asumir tareas y competencias, más sencillo será seguir manteniendo una estructura eminentemente horizontal, pese a que crezca el número de empleados.
Apostar por una solución vertical o una solución horizontal, es como apostar por el negro o por el blanco olvidando toda la gama de tonalidades intermedia.
En una solución vertical, salvo determinados puestos que por sus características no será posible, es necesario que cuando sea preciso determinados puestos realicen tareas que puedan estar por debajo o incluso por encima de sus funciones, es decir, si la empresa, el proyecto, el equipo de trabajo lo necesita, hay que olvidarse de galones y tener la flexibilidad suficiente para echar una mano donde sea preciso. Esta flexibilidad, permitirá dotar de mayores características horizontales a una organización vertical.
En una solución horizontal, es necesario que determinados puestos se responsabilicen de determinadas tareas, ya que será necesario personas que tomen decisiones (aunque intente consensuar algunas de ellas), que representen la empresa ante clientes, ya sea para el seguimiento de proyectos o para actividades comerciales, que planifiquen y organicen, etc… Es decir, pese a que se intente mantener equipos de proyecto homogéneos, siempre será necesario que no haya un desequilibrio entre el número de empleados que tienen que realizar estas funciones y los que realizan las tareas propias de producción de software. Estas características, permitirá dotar de mayores características verticales a una organización predominantemente horizontal (digo lo de prediminante, ya que salvo empresas de desarrollo de software, muy, muy pequeñas todas tendrán una componente vertical).
Por tanto, como en tantas otras cosas, ¿qué es mejor si una organización vertical y horizontal? La respuesta es que depende y que habrá que tener en cuenta factores como el tamaño, la facturación y las características de los empleados (entre otros) para poder decir si a una organización le viene mejor una estructura eminentemente vertical u horizontal, pero que en cualquier caso, hay que intentar conseguir estructuras lo suficientemente flexibles que permitirán, independientemente del tipo de organización elegida, darle el componente horizontal o vertical que le falta y que será fundamental para conseguir el mejor aprovechamiento posible de los recursos humanos existentes e incrementar la adaptabilidad ante las diversas contingencias que se pueden producir en el día a día de funcionamiento de la organización.

http://jummp.wordpress.com/2009/12/28/empresas-de-desarrollo-de-software-estructura-%C2%BFvertical-u-horizontal/

martes, abril 2

Test Plan Template

From last couple of days I am getting more request on Sample test plan.
So for your reference I am including one sample test plan template here.
Its a Index of Test plan only.
Each point will help you to elaborate your test plan step by step.
Take this as a guideline and develop a full Test plan for Your project.
Table of Contents :
1. Introduction
1.1. Test Plan Objectives
2. Scope
2.1. Data Entry
2.2. Reports File Transfer
2.3. File Transfer
2.4. Security
3. Test Strategy
3.1. System Test
3.2. Performance Test
3.3. Security Test
3.4. Automated Test
3.5. Stress and Volume Test
3.6. Recovery Test
3.7. Documentation Test
3.8. Beta Test
3.9. User Acceptance Test
4. Environment Requirements
4.1. Data Entry workstations
4.2 MainFrame
5. Test Schedule
6. Control Procedures
6.1 Reviews
6.2 Bug Review meetings
6.3 Change Request
6.4 Defect Reporting
7. Functions To Be Tested
8. Resources and Responsibilities
8.1. Resources
8.2. Responsibilities
9. Deliverables
10. Suspension / Exit Criteria
11. Resumption Criteria
12. Dependencies
12.1 Personnel Dependencies
12.2 Software Dependencies
12.3 Hardware Dependencies
12.3 Test Data & Database
13. Risks
13.1. Schedule
13.2. Technical
13.3. Management
13.4. Personnel
13.5 Requirements
14. Tools
15. Documentation
16. Approvals 

http://www.softwaretestinghelp.com/test-plan-template/

lunes, abril 1

Desarrollo de software. Pruebas de regresión


Sucede con demasiada frecuencia que cuando se entrega una evolución de un software, ya sea en una iteración en un desarrollo iterativo incremental o en un mantenimiento correctivo o evolutivo, se realiza testing exclusivamente sobre las funcionalidades que se han desarrollado y no se comprueban otros segmentos del programa que se han podido ver afectados por los cambios realizados en el código.
En muchos casos son las prisas por cumplir plazos en el proyecto, en otros por la necesidad de solucionar una urgencia y en otros tantos porque no se piensa que determinados cambios en el código puedan provocar efectos colaterales en la aplicación.
Las posibilidades de que se produzcan este tipo de problemas dependerá mucho de la calidad de la codificación y de la sección del código que se esté tocando, ya que no es lo mismo tocar una clase con un alto acoplamiento que otra.
Para reducir el riesgo de que aparezcan efectos colaterales, es conveniente la realización de pruebas de regresión que se basan principalmente en realizar testing sobre funcionalidades de la aplicación que presentan riesgo de haber sido afectadas por los cambios. El esfuerzo necesario en realizar estas pruebas dependerá del nivel de automatización de las mismas que se tenga hasta el momento en el rango que va desde las pruebas unitarias hasta las funcionales.
Sobre las pruebas de regresión y en general sobre el hecho de que en la programación no hay que dar nada por sentado, podemos recordar la siguiente cita de Doug Linder: “Un buen programador es aquel que siempre mira a ambos lados antes de cruzar una calle que tiene un único sentido”.

http://jummp.wordpress.com/2011/06/18/desarrollo-de-software-pruebas-de-regresion/