Requisitos Funcionales y Programación Modular
Requisitos Funcionales y Programación Modular
Ciclo 2022-01
REQUISITOS FUNCIONALES
Los requisitos determinan lo que hará el sistema (cómo funcionará), restricciones sobre su
operación e implementación.
Concepto de requisito
(a) Una condición o capacidad que un usuario necesita para resolver un problema o lograr un
objetivo.
(b) Una condición o capacidad que debe tener un sistema o un componente de un sistema
para satisfacer un contrato, una norma, una especificación u otro documento formal.
(c) Una representación en forma de documento de una condición o capacidad como las
expresadas en (a) o en (b).
Los requisitos funcionales del usuario pueden ser frases muy generales sobre lo que el sistema
debería hacer. Se suelen expresar como objetivos del sistema.
Los requisitos funcionales del sistema deben describir los servicios que hay que proporcionar
con todo detalle.
Ejemplos:
“El sistema debe permitir a los usuarios buscar un ejemplar por título, autor o ISBN”
Es un requisito funcional que define una parte de funcionalidad del sistema.
“El sistema debe permitir al usuario introducir los datos de los estudiantes nuevos”
Requisito de usuario expresado en términos generales. ¿Qué servicio debe prestar el sistema?
“El sistema debe permitir a los usuarios buscar el producto por nombre, número de factura,
código de barras”
Requisito del sistema. Que define una parte de funcionalidad del sistema.
Se puede definir a la programación modular como aquella que usa el concepto de dividir un
problema complejo en subproblemas más pequeños, hasta que estos sean fáciles de tratar y
resolver por separado. Así la solución de los subproblemas en conjunto da como resultado la
solución del problema completo.
Aplicando este principio a la hora de hacer un programa, entonces habría que dividir el
programa en “subprogramas” que realicen tareas específicas. Es importante considerar que
para poner en práctica la modularización, es necesario un mecanismo que permita aplicarla
en los lenguajes de programación; este mecanismo existe prácticamente en todos los
lenguajes y consiste en la posibilidad de definir tareas específicas como módulos de código
independientes del programa principal. En consecuencia, estos módulos de código
independientes del programa deben poder invocarse desde el programa o módulo principal
para que empiecen a trabajar y deben acabar devolviendo el control al programa o módulo
principal cuando terminen de ejecutarse.
Diseño descendente
Es una técnica que permite diseñar la solución de un problema con base en la modularización
o segmentación dándole un enfoque de arriba hacia abajo (Top Down Design). Esta solución
permite dividir el problema en módulos que se estructuran e integran jerárquicamente (ver
figura 1), como si fuera el organigrama de una empresa.
Figura 1
Módulo
Dicha solución se organiza y divide en partes más pequeñas que sean fácilmente manejables
y que, lógicamente, puedan ser separadas; así cada una de estas partes se dedica a ejecutar
una determinada tarea, lo que redundará en una mayor concentración, entendimiento y
capacidad de solución a la hora de diseñar la lógica de cada una de estas.
Las partes en las que se divide una empresa (funcionalmente separadas) son el equivalente a
los módulos o segmentos del algoritmo, algunos de ellos son módulos directivos o de control,
que son los que se encargarán de distribuir el trabajo a los demás módulos, de tal forma que
se puede diseñar una especie de organigrama que indique la estructura general de un
algoritmo.
El proceso de segmentación consiste en hacer una abstracción del problema, del cual se tiene
inicialmente el panorama general. Enseguida se procede a “descomponer” o “dividir” el
problema en partes pequeñas y simples (ver figura 2).
Se forma un primer módulo enunciando el problema en términos de la solución de éste.
Se toma este módulo y se busca la forma de dividirlo en otros módulos más pequeños,
que ejecuten tareas o funciones específicas. Normalmente serán las mismas funciones
que se desea que ejecute el algoritmo, lo que permite de una forma simple definir los
módulos, y de esta forma dividir el problema en partes más manejables.
Se repite el paso anterior para cada módulo nuevo definido, hasta llegar a un nivel de
detalle adecuado, es decir, hasta hacer que cada módulo ejecute una tarea específica,
claramente definida y que el diseño y la codificación de la lógica del mismo resulte fácil.
Figura 2
Referencias