Simplificar condiciones complejas sin cambiar las decisiones
Aplanar condiciones anidadas puede ampliar accidentalmente la elegibilidad. Un cupón que solo se aplica dentro de una rama premium o de alto valor no debe convertirse en una regla global.
Resumen del laboratorio

Ilustración conceptual original (SVG)
| De un vistazo | Tu ruta |
|---|---|
| Nivel y tiempo | 300; 55 minutos (estimación de facilitación) |
| Acción inicial | Elige filas que distingan igualdad, superposición y comportamiento de tope. |
| Materiales del aprendiz | Descarga 09-conditionals.zip |
| Espacio de trabajo | Abre la raíz del kit extraído; ejecuta la baseline desde . relativa a esa raíz |
| Comprobación inicial esperada | El proyecto seleccionado compila. La compilación por sí sola no prueba el comportamiento. |
| Ayuda de configuración | Descarga, extrae, Git local y GitHub opcional |
[!NOTE] Mover una condición fuera de su padre puede ampliar la elegibilidad.
Conceptos · Primera tarea · Lista de evidencias · Restablecer
Objetivos de aprendizaje
- Deduce una tabla de decisiones antes de reescribir condiciones.
- Conserva la igualdad de umbrales, la precedencia, los topes de descuento y el comportamiento ante errores.
- Elige predicados con nombre o cláusulas de guarda según la semántica.
Antes de empezar
Prepara 09-conditionals usando la guía de configuración.
El fixture principal es
ECommercePricingEngine.
La demostración de aprobación de préstamos es opcional y puramente ficticia; no es una política crediticia
ni un sistema para tomar decisiones financieras reales.
Conceptos y casos de uso
| Técnica | Útil cuando | Riesgo |
|---|---|---|
| Predicado con nombre | Una condición tiene un nombre significativo en el dominio | Ocultar condiciones diferentes tras un mismo nombre |
| Cláusula de guarda | Una entrada no válida sale de forma anticipada | Omitir tareas obligatorias de auditoría o limpieza |
| Tabla de decisiones | Las reglas se solapan | Suponer que las filas son mutuamente excluyentes |
| Estrategia por política | Las políticas distintas evolucionan independientemente | Añadir una jerarquía de clases para bifurcaciones triviales |
Escenario del ejercicio
PricingEngine.CalculateFinalPrice evalúa la membresía, los eventos estacionales, los cupones,
el envío y los topes específicos de categoría. Conserva las salidas actuales mientras aclaras
una familia de condiciones.
Tarea 1 - Establecer el ámbito de decisiones
-
Lee
ECommercePricingDemo.csySecurityTest.cs. -
Identifica
User,Coupon,Order,SafeAddDiscounty la lógica específica de categoría. -
Solicita un inventario de reglas con referencias al código fuente, aún no una propuesta de reescritura.
-
Compila y ejecuta:
dotnet build ECommercePricingEngine.csproj -m:1 -p:UseSharedCompilation=false dotnet run --no-build --project ECommercePricingEngine.csproj -
Registra los resultados, incluidas las advertencias y las entradas rechazadas. Los escenarios de demostración y los métodos etiquetados como de seguridad no constituyen un informe exhaustivo de seguridad ni de cobertura.
Tarea 2 - Deducir una tabla de límites
Empieza con estas dimensiones y después registra el valor esperado real a partir del código fuente y la línea base para cada fila seleccionada:
| Dimensión | Casos |
|---|---|
| Membresía | Guest, Silver, Gold, Premium |
| Pedido de alto valor | Justo por debajo, igual y por encima del umbral pertinente |
| Cupón | Ausente, válido, caducado, tipo no válido, valor excesivo |
| Tope de categoría | Electrónica y una categoría que no sea electrónica |
| Envío | Nacional, internacional, cupón de envío gratuito |
| Pedido no válido | Null, vacío, precio negativo, total excesivo |
No generes a ciegas todo el producto cartesiano. Elige casos que distingan ramas e interacciones y después explica las carencias de cobertura restantes.
Tarea 3 - Planificar una transformación equivalente
Plan a refactor of membership conditions only. Keep coupon order, category caps,
shipping, and public output unchanged. Show how each selected decision-table row
maps to the new structure. Preserve > versus >= exactly. Do not edit yet.
Revisa el comportamiento de cortocircuito. Un switch puede mejorar la legibilidad, pero no demuestra
que se preserven las reglas solapadas ni los efectos secundarios.
Tarea 4 - Implementar y validar
- Pide a Agent que implemente la parte revisada sin cambios de dependencias.
- Compara la tabla de decisiones con el diff antes de aceptarlo.
- Convierte las filas elegidas en aserciones ejecutables usando los puntos de entrada actuales del proyecto o un pequeño harness de caracterización.
- Vuelve a ejecutar la misma compilación y demostración y las aserciones.
- Cambia deliberadamente una comparación estricta por una inclusiva; confirma que falle el caso de igualdad y después restáurala.
Verifica tu trabajo
- Las filas de la tabla de decisiones incluyen igualdad y condiciones solapadas.
- Los topes de descuento y las reglas de envío conservan su orden.
- Las entradas no válidas conservan su comportamiento documentado de fallo.
- Una comprobación ejecutable detecta la mutación negativa.
- No se usa como evidencia la afirmación «menos líneas significa correcto».
Solución de problemas
Si una condición aplanada produce un descuento adicional, reconstruye sus condiciones superiores originales. Si los registros cambian inesperadamente, inspecciona los retornos anticipados. Si solo pasan las rutas exitosas, añade un caso fallido y uno de igualdad antes de seguir refactorizando.
Práctica independiente
Repite una extracción en la copia opcional de LoanApprovalWorkflow usando solo datos sintéticos. Documenta la equivalencia de reglas sin presentar la demostración como un sistema de decisiones crediticias justo, conforme a la ley o listo para producción.
Restablecimiento
Guarda la tabla de decisiones y las salidas y después restaura únicamente los archivos modificados en tu copia desechable. No sobrescribas la salida de referencia importada con resultados inventados.