Un'applicazione principale che utilizziamo ha un bug che il fornitore sta chiamando (una parolaccia nella nostra azienda) "funzionante come progettato".
In qualità di programmatore / analista di sistema questo è un bug - e contro tutto quello che mi è stato insegnato su sistemi / database di programmazione / applicazioni multiutente, ecc. dovrebbe agire quando vengono rimossi dati errati / contrassegnati cancellati ecc.
L'errore è che numerosi codici critici a volte downstream (nel proprio software!) cercano un singolo record nel database per quell'appuntamento corrente del client per il valore "X" (Tabella = ClientID, ClientVisitID, Code, CodeValue, DateStamp ).
Questo singolo record contiene il valore più "corrente" per i dati che cambiano in modo semi-regolare.
Se il mio staff imposta il valore di "X" su 123 in qualsiasi documento, datagrid o modulo di iscrizione, aggiorna il singolo record su "X" = 123 (a seconda della natura temporale di dove sono stati inseriti i dati, es. documento creato ieri rispetto alla colonna dell'ora nel datagrid per oggi).
Questo accelera i sistemi downstream che hanno bisogno del valore di "X" - devono solo guardare in un posto, altrimenti decidere di guardare nelle precedenti visite per il valore più aggiornato (a seconda delle regole per quanto tempo indietro ecc.)
Se il valore NO di "X" è stato registrato in questa visita, allora c'è una riga NO nella tabella dei record singola. Il sistema a valle segue quindi altre regole (ad es. Limiti su quanto a lungo guardare indietro) per ottenere il risultato.
Gli scenari
My staff records "X" = 100 in the last visit (a day ago)
My staff records nothing this visit
Nothing in the single row table (for this visit)
Downstream systems retrieve "X" as 100 from the last visit
-
My staff records "X" = 100 in the last visit (a day ago)
My staff records "X" = 120 in the current visit (today)
120 in the single row table, datestamp = today
Downstream systems retrieve "X" = 120 from single row table
-
My staff records "X" = 100 in the last visit (a day ago)
My staff records "X" = 999 (in error) in the current visit (today + 1 min)
999 in the single row table, datestamp = today + 1 min
My staff deletes the record (as allowed by the application)
**empty string (not null) in the single row table, datestamp = today + 1 min
Downstream system retrieve nothing, get nothing from the previous visit**
-
My staff records "X" = 100 in the last visit (a day ago)
My staff records "X" = 120 in the current visit (today)
120 in the single row table, datestamp = today
My staff records "X" = 999 (in error) in the current visit (today + 1 min)
999 in the single row table, datestamp = today + 1 min
My staff deletes the record (as allowed by the application)
**empty string (not null) in the single row table, datestamp = today + 1 min
Downstream system retrieve nothing, and act as if 120 never was recorded**
Quindi - Che cosa è il software design PROFOUND IRREFUTABLE ho bisogno di dire al mio fornitore che questo comportamento disobbedisce?
Quale standard di qualità nella programmazione è contrario?
Come faccio a inquadrarlo in un modo che abbia senso?