środa, maja 19

Kreatywność użytkownika ??, nie istnieje / a może jest za duża

Witam;

Ostatnim czasem zakrzątam sobie głowę SCJP, Grails i CleanCode, ale dzisiaj postanowiłem przerwać moje działania i napisać małego posta.

Czy można tak zbudować ekran by nie można było wpisać niepoprawnych informacji?. Nie, na tym mógł bym zakończyć posta, ale ….

Programiści starają się zbudować ekran, a na nim tak doskonałe walidatory by nie pozwalały na wprowadzenie błędnych danych, ale ….(to już 2 ale)

Niech nasza formatka posiada dwa pola: 'imię', 'nazwisko'.

1. Nasze pola są mandatory.
Po pewnym czasie zobaczymy na bazie pola wypełnione 'spacją'. Użytkownik był sprytny, że wprowadzał spacje, nasz błąd. Naprawa banalna, dodajemy trim() wołamy isEmpty() i mamy walidatora poprawionego.

2. Nasze pola są mandatory, odporne na psute stringi.
Aż tu pewnego dnia zobaczymy na bazie pola 'imię' = '????', 'nazwisko' = ????. Naprawimy to poprzez sprytnego regexp'a. Teraz nasze pole powinno się zaczynać od literki, następnie może zawierać tylko takie znaki jakie my zdefiniowaliśmy. Success.

3. Nasze pola są mandatory, odporne na puste stringi, można wpisać tylko to, co chcemy. Jednym słowem nie do złamania.
Pewnego dnia przychodzi zgłoszenie od klienta, raport użytkowników nie zawiera poprawnych danych. Oczywiście nasze pola są mega bezpieczne i jak może raport źle działać przecież sam go pisałem:P, więc do zgłoszenie zabieramy się z dużą rezerwą i niedowierzaniem. Testowa generacja raportu pozwala stwierdzić, że pojawił się string 'Brak danych'. Konsternacja. Sam pisałem raport wiem, że wstawiałem żadnych domyślnych wartości, więc co pozostaje, przepytanie kolegów czy nie wprowadzali jakiejś nowej modyfikacji. Nikt się nie przyznaje. Szukamy dalej, aż tu nagle naszym oczom ukazuje się user'a który to 'imię' = 'Brak', nazwisko = 'Danych'.
A teraz jak poprawić walidację.


A w międzyczasie nasz kreatywny user świętuje zwycięstwo.



Z inwencją twórczą user'ów się nie wygramy. Mam, nadzieję, że użytkownicy naszych systemów są na tyle inteligentni i wiedzą, że wpisanie 'Brak Danych' == null.


to tak z życia programisty ;p


Pozdrawiam,
Arkadiusz Borek