Magiczny sznurek - Magic string
W programowaniu komputerowym , wykorzystując ciąg magia jest wejście programista uważa, że nigdy nie będzie pochodzić z zewnątrz i która aktywuje inaczej ukryte funkcje. Użytkownik tego programu prawdopodobnie zapewniłby dane wejściowe, które w większości sytuacji dają oczekiwaną odpowiedź. Jeśli jednak użytkownik faktycznie niewinnie dostarcza predefiniowane dane wejściowe, wywołując wewnętrzną funkcjonalność, reakcja programu jest często dla użytkownika dość nieoczekiwana (w ten sposób wydaje się „magiczna”).
tło
Zazwyczaj implementacja magicznych ciągów jest spowodowana ograniczeniami czasowymi. Deweloper musi znaleźć szybkie rozwiązanie, zamiast głębiej zagłębiać się w problem i znajdować lepsze rozwiązanie.
Na przykład podczas testowania programu, który pobiera dane osobowe użytkownika i weryfikuje numer jego karty kredytowej, programista może zdecydować o dodaniu magicznego skrótu ciągu, w którym wprowadzenie mało prawdopodobnego wpisu „***” jako numeru karty kredytowej spowodowałoby, że program aby automatycznie postępować tak, jakby karta była ważna, bez tracenia czasu na jej weryfikację. Jeśli programista zapomni usunąć magiczny ciąg, a użytkownik końcowego programu wpisze „***” jako zastępczy numer karty kredytowej podczas wypełniania formularza, użytkownik niechcący uruchomi ukrytą funkcjonalność.
Rozkład
Sytuacje / problemy przyczyny
Często istnieją znaczne ograniczenia czasowe, które pozostają poza kontrolą dewelopera od samego początku jego zaangażowania w projekt. Typowe problemy, które mogą w rezultacie prowadzić do tego anty-wzorca:
- Null! = Null lub dowolna odmiana, w której typ danych nie jest porównywany bitowo z przypuszczalnie identycznym typem. Jest to problem, który może wystąpić nawet w tym samym środowisku programistycznym (tym samym języku programowania i kompilatorze). Ten problem ma długą historię dla typów liczbowych i logicznych i większość kompilatorów dobrze sobie z tym radzi (z odpowiednimi ostrzeżeniami i błędami, domyślną rozdzielczością itp.). Typy dopuszczające wartość null, takie jak ciągi, mają trudność z historycznie różnymi definicjami wartości NULL . Wyświetlane błędy / ostrzeżenia są często ogólnymi lub domyślnymi błędami „najlepiej dopasowanymi”, których komunikat w rzeczywistości nie opisuje, co się dzieje. Jeśli deweloper nie może uzyskać wystarczającej liczby wskazówek, aby wyśledzić problem poprzez debugowanie, pójście na skróty i zakodowanie w „domyślnym” ciągu znaków, może być jedynym sposobem na dotrzymanie harmonogramu projektu. Jednym z rozwiązań może być zastosowanie wzorca Null Object .
- Zaprogramowany w rogu. Czasami projekt wydaje się prosty, a nawet prosty, ale okazuje się, że ma logiczną wadę, zależną od możliwych danych wejściowych użytkownika, z powodu często nieprzewidzianych okoliczności pod koniec planowanego rozwoju. W związku z tym deweloper może odczuwać potrzebę wdrożenia danych wejściowych użytkownika ze specjalnymi zabezpieczeniami / dodatkami operacyjnymi, aby poradzić sobie w takich okolicznościach. Może to być szczególnie ironiczne, ponieważ czasami staje się oczywiste, że bardziej solidna konstrukcja od samego początku prawdopodobnie pozostawiłaby miejsce na naprawienie usterki. Jednak wdrożenie tego prawdopodobnie zajęłoby zbyt dużo czasu i mogłoby być sprzeczne z podstawową koncepcją inżynieryjną KISS , utrzymując prosty projekt i implementację oraz spełniając tylko początkowe niezbędne wymagania.
- Umożliwienie zewnętrznego dostępu do flagi globalnej . Nadmierna pewność, że flagi globalnej nigdy nie można ustawić przypadkowo lub złośliwie (często jest to całkiem rozsądne założenie), uzasadnia taką implementację do celów testowania i debugowania, szczególnie w przypadku małych aplikacji z prostymi interfejsami. Jeśli jednak dystrybucja programu jest znaczna, zwykle jest tylko kwestią czasu, zanim ktoś ustawi flagę. Oczywistym rozwiązaniem jest to, aby nigdy nie używać zmiennej globalnej w taki sposób. Deweloper może również udostępnić flagę w sposób okolicznościowy . Zatem magiczny łańcuch sam w sobie byłby traktowany przez program jak każde inne wejście. Użytkownik musi następnie odtworzyć ustawienie, jak również utworzyć zbiór innych zdarzeń, na które interfejs użytkownika dyskretnie zezwala, aby flaga zaakceptowała ustawienie; scenariusz o wiele bardziej nieprawdopodobny, choć wciąż możliwy.
Ścisłe formatowanie
Ograniczenie formatu danych wejściowych jest możliwym rozwiązaniem konserwacyjnym (naprawa błędów). Zasadniczo oznacza to sprawdzanie poprawności informacji wejściowych w celu sprawdzenia, czy są one we właściwym formacie, aby zmniejszyć możliwość wykrycia magicznego ciągu przez użytkownika. Przykłady obejmują weryfikację numeru telefonu w celu upewnienia się, że zawiera on tylko cyfry (i ewentualnie spacje i znaki interpunkcyjne w ograniczonym zakresie) lub sprawdzenie, czy imię i nazwisko osoby zawiera imię i nazwisko (i jest odpowiednio duże). Wyjątek dotyczy magicznego ciągu w kodzie walidacji, aby nie został odrzucony przez walidację. Oczekuje się, że ponieważ użytkownik prawdopodobnie szybko zauważyłby ścisłe wymuszanie formatowania, prawdopodobnie nie przyszłoby mu do głowy, aby spróbować wprowadzić ciąg niezgodny z formatem. Dlatego jest bardzo mało prawdopodobne, aby użytkownik spróbował magicznego ciągu.
Podobnie jak w przypadku każdego procesu sprawdzania poprawności danych wejściowych, ważne jest, aby upewnić się, że format nie jest restrykcyjny w sposób, który nieumyślnie ogranicza korzystanie z aplikacji przez niektórych użytkowników. Przykładem tego jest ograniczenie wprowadzania numeru telefonu lub kodu pocztowego w oparciu o system jednego kraju (np. Wymaganie od każdego użytkownika podania pięciocyfrowego kodu pocztowego ), co powoduje problemy dla uprawnionych użytkowników, którzy mają siedzibę w innych krajach.
Celowe wdrożenie
Jak to często bywa w przypadku anty-wzorców, istnieją specyficzne scenariusze, w których magiczne łańcuchy są właściwym rozwiązaniem dla implementacji. Przykłady obejmują kody i pisanki . Ponadto zdarzają się przypadki, gdy użytkownicy wymyślają magiczne ciągi, a systemy, które nie zakodowały ich w celu ich zaakceptowania, mogą powodować nieoczekiwane rezultaty, takie jak brakujące tablice rejestracyjne.
Zobacz też
- Magiczna liczba (programowanie)
- Błędy formatowania czasu i przechowywania w przypadku problemów, które mogą być spowodowane przez magię
- Wartość wartownicza (znana również jako wartość flagi, wartość wyłączenia, fałszywa wartość, wartość sygnału, fikcyjne dane)
- Wartość kanaryjna , specjalna wartość do wykrywania przepełnień bufora
- Kody do gier wideo, które mają to samo pochodzenie
- XYZZY (polecenie)
Bibliografia
-
^
Chris Falter (2008-03-06), A Good Solution for Magic String Data , „Egghead Cafe Tuturiols” w Egghead Cafe , pobrane 2009-05-11 Link zewnętrzny w
|publisher=( pomoc ) CS1 maint: zniechęcony parametr ( link ) -
^ Frank Naude (06.12.2008), NULL , „Oracle Wiki” w Oracle Wiki , pobrano 13.05.2009 Link zewnętrzny w
|publisher=( pomoc ) CS1 maint: zniechęcony parametr ( link ) -
^ Wang Lam (2003-05-21), The Behavior of NULL's in SQL , „Stanford University” w Stanford InfoLab , pobrano: 2009-05-13 Link zewnętrzny w
|publisher=( pomoc ) CS1 maint: zniechęcony parametr ( link ) - ^ Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates; 2004, Head First Design Patterns , wydanie pierwsze, O'Reilly, rozdział 6, str. 214, wzorzec polecenia , ISBN 0-596-00712-4 , ISBN 978-0-596-00712-6
-
^ James McCaffrey (2009), Test Automation for ASP.NET Web Apps with SSL , „Microsoft” at MSDN , pobrano 2009-05-13 Link zewnętrzny w
|publisher=( pomoc ) CS1 maint: zniechęcony parametr ( link ) - ^ Andrew Cumming; 2007, SQL Hacks , wydanie 1, O'Reilly, str. 174, Zapobiegaj atakowi typu SQL Injection Attack , ISBN 0-596-52799-3 , ISBN 978-0-596-52799-0
- ^ Brian Knight, Allan Mitchell, Darren Green, Douglas Hinson, Kathi Kellenberger; 2005, usługi integracji Professional SQL Server 2005 , wydanie pierwsze, John Wiley and Sons, rozdział 5, str. 129, Obsługa brudnych danych , ISBN 0-7645-8435-9 , ISBN 978-0-7645-8435-0
-
^ Sezen, Tonguc Ibrahim; Isikoglu, Digdem (2007-04-27). „OD OZANÓW DO MODÓW BOGA: OSZUSTWA W INTERAKTYWNEJ ROZRYWCE OD RÓŻNYCH KULTUR” (PDF) : 8 . Źródło 2009-01-24 . Cite Journal wymaga
|journal=( pomoc ) CS1 maint: zniechęcony parametr ( link ) - ^ https://www.snopes.com/autos/law/noplate.asp