Etapas de la metodología de solución de problemas

La Real Academia de la Lengua lo describe como “conjunto de métodos que se siguen en una investigación científica o en una exposición doctrinal” o simplemente, como “la ciencia del método”.

Una metodología es un conjunto ordenado de pasos para modelar y resolver un sistema, aunque pudiera parecerse la definición a la de un algoritmo: “conjunto finito ordenado de pasos para resolver un problema”; la metodología es más compleja ya que cada paso involucra diversas acciones correspondientes a una etapa en particular. Como resultado de cada acción, se obtienen determinados productos similares, pero con particularidades que ayudan a modelar mejor la solución.

Normalmente se establece una metodología de cascada con la finalidad de que se verifique el avance en cada una de las etapas. Si el trabajo se realiza de manera correcta, no se tendría que regresar a corregir etapas previas, ya que implicaría un trabajo adicional para realizar estos ajustes. En sistemas de gran escala, un pequeño cambio en las fases tempranas involucra adecuaciones importantes en las etapas posteriores.

La definición del problema, el análisis y el diseño de la solución son las etapas más abstractas; aunque se tienen en consideración las etapas posteriores de implementación: codificación, pruebas y mantenimiento. El proceso de la documentación se debe realizar en todas las etapas de la metodología, y debemos tener en cuenta que existen productos específicos para cada etapa.

Como nivel básico, se sugiere que la documentación que se elabore para los productos mencionados y marcados sea de la siguiente manera:

  • Los que están indicados con un asterisco (*) se desarrollen como parte de la documentación.
  • Los que están indicados con el símbolo de suma (+) se desarrollen de manera opcional.
  • Los que están con el símbolo menos (–) se desarrollen de manera optativa o siguiendo una plantilla dado el alcance es básico.
  • Planteamiento de un problema

    Es una descripción breve y concisa, debe escribirse en dos a tres renglones. Debe ser lo suficientemente claro, preciso y completo. Cuando el sistema es demasiado extenso, puede acompañarse de objetivo general, objetivos particulares y el alcance al que se pretende llegar en cada versión del sistema.

    Sin embargo, en caso de tener un planteamiento concreto sobre futuras características que pueda llegar a desarrollar el producto, este puede ser un buen momento para especificar el alcance futuro. Escribirlo bajo este apartado le da la posibilidad al equipo de desarrollo, la posibilidad de contemplar requisitos adicionales para que la solución pueda extenderse con facilidad en posteriores revisiones.

    Generalmente, construir una primera versión de un sistema puede llegar a ser tardado, y en algunas ocasiones las restricciones de presupuesto o de tiempo son un factor muy importante para posponer la creación de un sistema más completo.

    El personal que se dedica a la programación de un sistema de cómputo no tiene que ser experta en todos los temas, el planteamiento del problema debe realizarse en el lenguaje que se utiliza en el contexto de los requerimientos, es decir: en el dominio del problema. Con la finalidad de establecer un puente de comunicación entre el cliente (quien solicita el sistema) y el equipo de desarrollo (quien realiza el sistema), comúnmente se agrega un glosario con términos relacionados con el problema: conceptos, roles, acciones, fórmulas, relaciones, etc.

    La información recabada previamente se resume en términos generales en los siguientes productos a documentar:

    Calcule el área de un triángulo a partir de conocer su base y altura.

    Diseñe una clase que modele distintos triángulos, conteniendo los atributos y métodos necesarios para almacenar asignar y recuperar la información de cada uno de ellos.

    Diseñe una especialización de la clase para modelar triángulos equiláteros a partir de la clase original (la base, y la altura guardan una relación de proporcionalidad).

    El programa se desarrollará para un entorno que sólo una persona lo utilizará cada vez (monousuario).

    Un triángulo es una figura geométrica que se compone y delimita por las líneas que unen a tres puntos no colineales. Si una de esas líneas se coloca de forma horizontal, suele nombrarse como la “base del triángulo” $(b)$, a partir de ahí hasta el punto que no forma la base se traza una línea perpendicular, la distancia de la base a dicho punto se conoce como la altura del triángulo $(h)$.

    Triángulo

    Así, el área $(a)$ se calcula utilizando la siguiente fórmula:

    $a←bh/2$

    Dónde:

    • $a$ es el área del triángulo.

    • $b$ es la longitud de la base.

    • $h$ es la longitud de la altura.

    Alcance actual: Se calculará únicamente el área si se conocen los valores del área y de la altura, no se manejarán unidades, no se dibujará en pantalla. Solo se solicitan los datos y se muestra el resultado.

    Alcance futuro: Se podrá incluir en un formulario, se podrá dibujar en la pantalla, por el momento no se calculará a partir de conocer tres puntos en el espacio o conocer la longitud de tres segmentos de recta.

    Alcance actual y futuro

    Todos los puntos anteriores y lo que se desarrolle en cada etapa de la solución deberá documentarse y verificarse por alguien más del equipo de desarrollo y ser validado con el cliente (quien solicita el programa o sistema de cómputo).

    En el planteamiento del sistema, debe quedarle muy claro al cliente y al desarrollador qué se espera como productos finales, qué insumos deberán entregarse al desarrollador, cómo se mostrarán los resultados, quiénes intervendrán en la solución, los tiempos de entrega, los mecanismos de verificación de avance, los roles de las personas o sistemas que interactuarán, la forma como se recaba y reporta la información y cómo se desea que se entregue, los costos y en su caso las penalizaciones por incumplimiento de cada parte (en tiempo o en dinero).

    Aunque no se entrega en el documento de análisis, el encargado de solicitar los requerimientos debe ser capaz de visualizar la lógica del sistema, es decir, cuáles son las interrelaciones que se realizarán y qué es lo que se necesita mínimamente como entrada para llegar a la solución requerida.

  • Análisis de la solución

    Durante esta etapa, el equipo de desarrollo documentará la solución de manera teórica. Identificará quiénes intervienen en el sistema, qué acciones deberán realizar en él, cómo será la interfaz con la que interactuarán y deberá ser capaz de definir cuáles son los posibles errores que puede cometer el usuario al interactuar con el sistema con la intención de encontrar soluciones durante el análisis.

    A su vez, el desarrollador identificará que información es necesario obtener en el sistema y qué acciones se ejecutarán sobre esos datos (principio de abstracción). Se identificará el orden adecuado (a grandes rasgos) de las instrucciones que resolverán el sistema (algoritmos y diagramas de flujo). Se establecerán las partes del sistema (clases) y el flujo de información a través de dichas partes de acuerdo a los algoritmos planteados (en diagrama de secuencia).

    Los productos que se integrarán esta etapa son:

    Curso normal
    1. El sistema crea un triángulo
    2. El sistema solicita el valor de la base
    3. El usuario proporciona el valor de la base 4. El sistema asigna el valor proporcionado al triángulo
    5. El sistema solicita el valor de la altura
    6. El usuario proporciona el valor de la altura 7. El sistema asigna el valor proporcionado al triángulo
    8. El sistema solicita al triángulo el valor de su área
    9. El sistema muestra al usuario el valor proporcionado por el triángulo

    • El valor de la longitud de la base debe ser distinto de cero.

    • El valor de la longitud de la altura debe ser distinto de cero.

    • El valor de la longitud de la base debe ser positivo.

    • El valor de la longitud de la altura debe ser positivo.

    • El área no puede ser cero o negativo.

    • Los números deben estar escritos correctamente.

    Triángulo
    base
    altura
    área
    calcularArea()
  • Diseño de la solución

    A partir de los requerimientos no funcionales que se obtuvieron en el planteamiento del problema y los productos que se obtienen del análisis, se plantea la arquitectura del sistema (qué elementos técnicos se necesitan para su implementación), se indican los mecanismos de lectura y escritura del estado del objeto (valor de cada atributo).

    También, como se puede apreciar, en esta etapa se definen las pruebas (unitarias) que se ejecutarán sobre cada Clase para revisar si los métodos trabajan adecuadamente y sobre el sistema en su conjunto (pruebas de integración) para revisar que el programa haga lo de que se esperaba en el planteamiento y alcance del problema original.

    Los productos a entregar durante el diseño son los siguientes:

    • Uso de Java BlueJ.

    • Uso de programa monousuario.

    • Interfaz de consola para la ejecución.

    • Vista separada de la lógica.

    Triángulo
    - float base
    - float altura
    - float area
    +Triangulo()
    + Triangulo(float b, float h)
    - void calcularArea()
    + float getBase()
    + void setBase(float value)
    + float getAltura()
    + void setAltura(float value)
    + float getArea()
  • Implementación

    El planteamiento, análisis y diseño de un problema y su solución constituyen la parte analítica, teórica o abstracta en el ciclo de desarrollo. Si éstas se concluyen de manera satisfactoria, la implementación debe reducirse a codificar los productos obtenidos en los diagramas y ejecutar las pruebas de la etapa de diseño para corroborar el buen funcionamiento del sistema.

    Como producto final, se deberá proporcionar el código, el manual de usuario, y en caso de requerirse, el plan de capacitación a los usuarios finales.

    Los productos a entregar son los siguientes:

    Descripción de los pasos que debe ejecutar el usuario para poder utilizar el programa. Puede ir desde unas cuantas líneas si el programa es corto pero podría incluir varios libros o documentos electrónicos si el sistema de cómputo es de grandes dimensiones e incluye a distintos usuarios trabajando de manera simultánea utilizando diferentes roles.

  • Pruebas

    A partir el diseño de las pruebas unitarias y de integración, el equipo de programación (testers) revisará las variables de entrada y si es que se obtienen los valores que se esperan, incluyendo los casos que pueden generar pruebas para corroborar si el programa resolvió el problema.

    Las pruebas se documentan para conocer el proceso de revisión y corroborar que se realizaron adecuadamente. Éstas deben replicar el ambiente donde se ejecutará el sistema (en producción), no basta con que funcionen en el equipo de los desarrolladores (sistema en desarrollo).

    Los productos a entregar son los siguientes:

  • Mantenimiento

    En caso de que las pruebas no se ejecuten de manera adecuada, se procederá a realizar la revisión y corrección del código que pudiera estar mal codificado o analizado.

    Existen tres tipos de mantenimiento:

    Correctivo: se realiza para corregir errores en el código.

    Operacional: se establece qué acciones deben realizarse, así como su periodicidad para garantizar que el sistema trabaje adecuadamente y se realiza una política permanente de respaldos del sistema y de los datos.

    Aumentar características: se evalúa el desempeño del sistema y se establece el siguiente ciclo de desarrollo para incrementar la funcionalidad del sistema.

  • Documentación

    El proceso de documentación es permanente y debe realizarse la validación escrita por parte del equipo de desarrollo y del cliente. Se recomiendan revisiones entre pares, previas a la entrega final. En caso de requerirse cambios, estos deben documentarse, así como indicar quién tiene la responsabilidad de realizarlos; además de acordar el impacto económico y en tiempo de los mismos. El control de cambios también se documenta y firma para aceptarlo.