Stringa magica - Magic string
Nella programmazione di computer , una stringa magica è un input che un programmatore ritiene non arriverà mai esternamente e che attiva funzionalità altrimenti nascoste. Un utente di questo programma probabilmente fornirebbe un input che fornisce una risposta attesa nella maggior parte delle situazioni. Tuttavia, se l'utente fornisce in modo innocente l'input predefinito, invocando la funzionalità interna, la risposta del programma è spesso del tutto inaspettata per l'utente (apparendo quindi "magica").
sfondo
In genere, l'implementazione delle stringhe magiche è dovuta a vincoli di tempo. Uno sviluppatore deve trovare una soluzione rapida invece di approfondire un problema e trovare una soluzione migliore.
Ad esempio, durante il test di un programma che prende i dati personali di un utente e verifica il numero della sua carta di credito, uno sviluppatore può decidere di aggiungere una scorciatoia a stringa magica in cui inserire l'improbabile input di "***" come numero di carta di credito causerebbe il programma per procedere automaticamente come se la carta fosse valida, senza perdere tempo a verificarla. Se lo sviluppatore dimentica di rimuovere la stringa magica e un utente del programma finale inserisce "***" come segnaposto numero di carta di credito durante la compilazione del modulo, l'utente inavvertitamente attiva la funzionalità nascosta.
Risoluzione
Situazioni / problemi di causa
Spesso ci sono vincoli di tempo significativi fuori dal controllo dello sviluppatore fin dall'inizio del loro coinvolgimento in un progetto. Problemi comuni che potrebbero portare a questo anti-pattern di conseguenza:
- Null! = Null o qualsiasi variazione in cui un tipo di dati non viene confrontato bit per bit con un tipo presumibilmente identico. Questo è un problema che può verificarsi anche all'interno dello stesso ambiente di sviluppo (stesso linguaggio di programmazione e compilatore). Questo problema ha una lunga storia per i tipi numerici e booleani e la maggior parte dei compilatori lo gestisce bene (con avvisi ed errori applicabili, risoluzione predefinita, ecc ...). I tipi nullable come le stringhe hanno la difficoltà di definizioni storicamente diverse per NULL . Gli errori / avvertimenti prodotti sono spesso generali o un errore predefinito "best fit" il cui messaggio non descrive effettivamente cosa sta succedendo. Se lo sviluppatore non riesce a ottenere abbastanza indizi per rintracciare il problema attraverso il debug, prendere una scorciatoia e codificare in una stringa "predefinita", potrebbe essere l'unico modo per mantenere il progetto nei tempi previsti. Una soluzione a questo potrebbe essere l'applicazione del pattern Null Object .
- Programmato in un angolo. A volte un progetto sembra lineare e persino semplice ma risulta avere un difetto logico, dipendente dai possibili input dell'utente, dovuto a una circostanza spesso imprevista verso la fine dello sviluppo pianificato. Pertanto, uno sviluppatore potrebbe sentire la necessità di implementare un input dell'utente con speciali autorizzazioni di sicurezza / operative per affrontare tali circostanze. Ciò può essere particolarmente ironico poiché a volte diventerà ovvio che un design più robusto dall'inizio probabilmente avrebbe lasciato spazio per gestire il difetto. Tuttavia, l'implementazione potrebbe richiedere troppo tempo e potrebbe essere in conflitto con il concetto ingegneristico fondamentale di KISS , mantenendo un design e un'implementazione semplici e soddisfacendo solo i requisiti iniziali necessari.
- Consentire l'accesso esterno a un flag globale . L'eccessiva certezza che un flag globale non possa mai essere impostato accidentalmente o in modo dannoso (spesso un presupposto abbastanza ragionevole) giustifica tale implementazione per scopi di test e debug, specialmente per piccole applicazioni con interfacce semplici. Tuttavia, se la distribuzione del programma è considerevole, di solito è solo una questione di tempo prima che qualcuno imposti la bandiera. Una soluzione ovvia è non usare mai una variabile globale in questo modo. Uno sviluppatore potrebbe anche rendere la bandiera accessibile in modo circostanziale . Quindi la stringa magica da sola verrebbe trattata dal programma come qualsiasi altro input. L'utente deve quindi riprodurre l'impostazione e produrre una raccolta di altri eventi, che l'interfaccia utente consente in modo discreto, affinché il flag accetti l'impostazione; uno scenario molto più improbabile, sebbene ancora possibile.
Formattazione rigorosa
Limitare il formato dell'input è una possibile soluzione di manutenzione (correzione di bug). In sostanza, questo significa convalidare le informazioni di input per verificare che siano nel formato corretto, al fine di ridurre la possibilità che la stringa magica venga scoperta dall'utente. Gli esempi includono la convalida di un numero di telefono per garantire che contenga solo cifre (e possibilmente spazi e punteggiatura in misura limitata) o il controllo che il nome di una persona abbia un nome e un cognome (e sia adeguatamente maiuscolo). Viene fatta un'eccezione per la stringa magica nel codice di convalida in modo che non venga rifiutata dalla convalida. Ci si aspetta che, dal momento che un utente noterebbe probabilmente rapidamente l'applicazione rigorosa della formattazione, probabilmente non verrà in mente all'utente di provare a inserire una stringa non conforme al formato. Pertanto, è molto improbabile che l'utente provi la stringa magica.
Come con qualsiasi processo di convalida dell'input, è importante assicurarsi che il formato non sia restrittivo in modo tale da limitare involontariamente l'uso dell'applicazione da parte di alcuni utenti. Un esempio di ciò è limitare l' inserimento del numero di telefono o del codice postale in base al sistema di un paese (ad esempio, richiedere a ogni utente di fornire un codice postale di cinque cifre ), causando problemi agli utenti legittimi che risiedono in altri paesi.
Attuazione mirata
Come spesso accade con gli anti-pattern, esistono scenari specifici in cui le stringhe magiche sono una soluzione corretta per un'implementazione. Gli esempi includono codici cheat e uova di Pasqua . Inoltre, ci sono casi in cui gli utenti inventano stringhe magiche e sistemi che non hanno codificato per accettarle possono produrre risultati inaspettati come targhe mancanti.
Guarda anche
- Numero magico (programmazione)
- Formattazione dell'ora e bug di archiviazione , per problemi che possono essere causati dalla magia
- Valore sentinella (noto anche come valore flag, valore trip, valore anomalo, valore segnale, dati fittizi)
- Valore canarino , valore speciale per rilevare gli overflow del buffer
- Codici cheat dei videogiochi che hanno la stessa origine
- XYZZY (comando)
Riferimenti
-
^
Chris Falter (2008-03-06), A Good Solution for Magic String Data , "Egghead Cafe Tuturiols" presso Egghead Cafe , consultato l'11 maggio 2009. Link esterno in
|publisher=( aiuto ) Manutenzione CS1: parametro sconsigliato ( collegamento ) -
^ Frank Naude (2008-12-06), NULL , "Oracle Wiki" su Oracle Wiki , consultato il 13 maggio 2009. Link esterno in
|publisher=( aiuto ) Manutenzione CS1: parametro sconsigliato ( collegamento ) -
^ Wang Lam (21/05/2003), The Behavior of NULL's in SQL , "Stanford University" at Stanford InfoLab , recuperato il 13/05/2009. Link esterno in
|publisher=( aiuto ) Manutenzione CS1: parametro sconsigliato ( collegamento ) - ^ Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates; 2004, Head First Design Patterns , 1a ed., O'Reilly, Capitolo 6, pag. 214, The Command Pattern , ISBN 0-596-00712-4 , ISBN 978-0-596-00712-6
-
^ James McCaffrey (2009), Test Automation for ASP.NET Web Apps with SSL , "Microsoft" su MSDN , recuperato il 13 maggio 2009. Link esterno in
|publisher=( aiuto ) Manutenzione CS1: parametro sconsigliato ( collegamento ) - ^ Andrew Cumming; 2007, SQL Hacks , 1a ed., O'Reilly, pag. 174, Prevent an 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, Servizi di integrazione di Professional SQL Server 2005 , 1a ed., John Wiley and Sons, Capitolo 5, pag. 129, Handling Dirty Data , ISBN 0-7645-8435-9 , ISBN 978-0-7645-8435-0
-
^ Sezen, Tonguc Ibrahim; Isikoglu, Digdem (2007-04-27). "DAGLI OZANI AI MODI DI DIO: TRUCCO IN INTRATTENIMENTI INTERATTIVI DA DIVERSE CULTURE" (PDF) : 8 . Estratto 2009-01-24 . Cite journal richiede
|journal=( aiuto ) Manutenzione CS1: parametro sconsigliato ( collegamento ) - ^ https://www.snopes.com/autos/law/noplate.asp