ACTUALIZACIÓN: Estoy buscando una técnica para calcular datos para todos los casos límite de mi algoritmo (o algoritmo arbitrario para el caso).
Lo que intenté hasta ahora es solo pensar en lo que podrían ser casos límite + producir algunos datos "aleatorios", pero no sé cómo puedo estar más seguro de que no me perderé algo que los usuarios reales serán capaces de echar a perder ..Cómo generar datos de prueba para un algoritmo "agrupar por datos de otras filas"
quiero comprobar que no se perdió algo importante en mi algoritmo y que no sé cómo generar datos de prueba para cubrir todas las situaciones posibles:
El tarea consiste en informe instantáneas de los datos para cada Event_Date
, pero haga una fila separada para las ediciones que pueden pertenecer al siguiente Event_Date
- véase el Grupo 2) en la entrada y salida de Ilustración de los datos:
Mi algoritmo:
- hacer una lista de
event_date
s y calcularnext_event_date
s para ellos - une los resultados al
main_audit_table
y calcule el mayortransaction_id
para cada instantánea (Grupos 1-4 en mi dibujo ción) - agrupadas porid
,event_date
y de 2 opciones en función de sitransaction_date < next_event_date
es verdad o no - unirse
main_audit_table
a los resultados para obtener los otros datos del mismotransaction_id
- unirse
costs_audit_table
a los resultados - utilizar el mayortransaction_id
que es menor que el resultado detransaction_id
Mi pregunta (s):
- ¿Cómo puedo generar datos de prueba que cubran todos los escenarios posibles, así que sé que tengo el algoritmo correcto?
- ¿Puedes ver algún error en la lógica de mi algoritmo?
- ¿Hay un foro mejor para este tipo de preguntas?
Mi código (que tiene que ser probado):
select
snapshots.id,
snapshots.event_date,
main.event,
main.transaction_date as last_change,
costs.costs as costs_2012
from (
--snapshots that return correct transaction ids grouped by event_date
select
main_grp.id,
main_grp.event_date,
max(main_grp.transaction_id) main_transaction_id,
max(costs_grp.transaction_id) costs_transaction_id
from main_audit_table main_grp
join (
--list of all event_dates and their next_event_dates
select
id,
event_date,
coalesce(lead(event_date) over (partition by id order by event_date),
'1.1.2099') next_event_date
from main_audit_table
group by main_grp.id, main_grp.event_date
) list on list.id = main_grp.id and list.event_date = main_grp.event_date
left join costs_audit_table costs_grp
on costs_grp.id = main_grp.id and
costs_grp.year = 2012 and
costs_grp.transaction_id <= main_grp.transaction_id
group by
main_grp.id,
main_grp.event_date,
case when main_grp.transaction_date < list.next_event_date
then 1
else 0 end
) snapshots
join main_audit_table main
on main.id = snapshots.id and
main.transaction_id = snapshots.main_transaction_id
left join costs_audit_table costs
on costs.id = snapshots.id and
costs.transaction_id = snapshots.costs_transaction_id
¿Puede aclarar cómo se modelan estos datos y cómo logró asignar esos grupos? – Kodra
@Kodra como modelo: son * tablas de auditoría de IBM Tivoli Service Request Manager * (un_ordenador con docenas de campos personalizados) + tablas de auditoría personalizadas, sin documentación actualizada y mis habilidades de ingeniería inversa son tan buenas como las suyas. . – Aprillion
@Kodra la asignación de grupo debe ser clara desde el punto 2. de mi algoritmo - si no, por favor dígame qué es exactamente lo que no está claro para que pueda reformularlo, gracias – Aprillion