Varázsszavak (antiminta)
A számítógép-programozásban a varázsszó egy olyan bemenet, ami egy egyébként rejtett funkciót támogat. A felhasználókat nem értesítik erről, mivel azt hiszik, hogy úgysem fogják megtalálni. Ez azonban nem igaz; ha elegen használják a programot, akkor előbb-utóbb felfedezik ezeket, akár véletlenül is. Számukra megmagyarázhatatlan módon, mintegy varázsszóra a program elkezd máshogy működni.[1] Így lehet csalni a pályán, plusz pontokra, életerőre, erőforrásokra szert tenni egy játékban.
Háttere
szerkesztésA varázsszavak használatának oka a szűk határidő. Ahelyett, hogy a programozó mélyebben belemerülne a problémába, és jobb megoldást találna, varázsszavakat kezd használni.
Például egy űrlap tesztelésekor a programozó arra utasíthatja a programot, hogy ha bankszámlaszámnak a csupa csillagot adja meg, akkor az automatikusan, a szám ellenőrzése nélkül haladjon tovább. Az idő szorításában lehet, hogy bent hagyja, és reméli, hogy nem találják meg. Azonban helykitöltőként használva mégiscsak ráakadhat, ezzel a program váratlanul ellenőrzés nélkül továbbengedi.
Elemzés
szerkesztésA túl közeli határidő már a projekt kezdetétől nyomaszthatja a programozókat, amin a vezetőség vagy a felhasználók nem akarnak változtatni. Gyakori helyzetek, amikor ez az antiminta jelentkezhet:
- Null != null:[2][3] vagy ennek bármely variációja, amikor egy adattípust nem bitenként hasonlítanak össze egy feltételezett azonos típussal. Ez előfordulhat ugyanabban a környezetben is (nyelv, fordító). Szám- és logikai típusok esetén ennek a problémának hosszabb története van, és a fordító ezt jelzi is. Nullázható típusoknál a nullnak történetileg különböző jelentései alakultak ki. A fordító efféle üzenetei nem elég informatívak, mivel túl általánosak. Nehéz őket visszanyomozni és megoldani, így a varázsszó bent marad. Ezt a problémát az üres objektum programtervezési minta oldhatja meg.[4]
- Sarokba programozás: A terv egyszerűnek és logikusnak látszik, azonban kiderül, hogy logikailag hibás, mivel nem vett figyelembe bizonyos körülményeket vagy bemeneteket. Ezért a bemeneten biztonsági vagy más műveleteket végeznek, hogy megfeleljenek ezeknek a körülményeknek is. Egy robosztusabb terv kevesebb teret hagyott volna a programozóknak, és tovább tartott volna megvalósítani, mint ezt, és a KISS elvekkel is konfliktusba került volna, ami azt mondja, hogy ragaszkodjunk a kezdeti elképzelésekhez, és tartsuk egyszerűen a megvalósítást.
- Külső hozzáférés egy globális beállításhoz:[5] Abban bíznak, hogy egy globális logikai változó, flag beállítása nem veszélyes vagy nem állítható át véletlenül. Erről a programnak magának kell gondoskodnia, hiszen erre nem lehet számítani, mivel idő kérdése, hogy valaki rátaláljon. A változót lehet lokálissá is tenni, így a varázsszó hatása csak annyi, mint bármely más bemenetnek.[6] A felhasználónak így lehetősége adódik reprodukálnia a beállítást, úgy, ahogy más beállításokat is, melyeket a felhasználói felület megenged.
A bemenet formájának korlátozása segíti a varázsszavak elkerülését, viszont okozhatja a kemény kód szintén bosszantó hibáit. Példaként felhozható a telefonszámok esete (esetleges tagolással) vagy a neveké (egy név elő- és utónévből áll, nagybetűkkel kezdődik, kisbetűkkel folytatódik). Kivétel az a varázsszó, ami be van építve az érvényesítési kódba. A felhasználó is észreveszi, ezért nem próbál meg olyan bemenetet megadni, ami varázsszóként hat.
Az érvényesítésnek el kell kerülnie a kemény kód problémáit, mivel egyes felhasználók számára használhatatlanná teheti a programot. Például az irányítószámok ellenőrzése, ahol is az egyik országban megadott formátum okozhat problémákat[7] (Magyarországon négy, Görögországban öt számjegy), vagy hogy az Amazon.com nem szállít megrendeléseket a Petőfi Sándor utcába, mivel nem megfelelő karakterek vannak az utca nevében.
Szándékos alkalmazás
szerkesztésA varázsszavak alkalmasak arra, hogy játékok rejtett kiegészítőit csalogassák elő, vagy rejtett beépített alkalmazásokat indítsanak el, easter eggeket jelenítsenek meg. A csaló kódok is ilyen varázsszavak. Vannak olyan esetek, amikor a programnak érvényes adatokat kell elfogadnia, például már kiosztott rendszámtáblákat, ekkor az elfogadásra váró felhasználót meglepetés éri.
Jegyzetek
szerkesztés- ↑ Chris Falter (2008-03-06), A Good Solution for Magic String Data, "Egghead Cafe Tuturiols" at Egghead Cafe, <http://www.eggheadcafe.com/tutorials/aspnet/b916e3a9-d056-4669-8bf3-aa98ed6669c3/a-good-solution-for-magi.aspx>. Hozzáférés ideje: 2009-05-11 Archiválva 2009. november 13-i dátummal a Wayback Machine-ben
- ↑ Frank Naude (2008-12-06), NULL, "Oracle Wiki" at Oracle Wiki, <http://www.orafaq.com/wiki/NULL>. Hozzáférés ideje: 2009-05-13
- ↑ Wang Lam (2003-05-21), The Behavior of NULL's in SQL, "Stanford University" at Stanford InfoLab, <http://infolab.stanford.edu/~ullman/fcdb/oracle/or-nulls.html>. Hozzáférés ideje: 2009-05-13
- ↑ Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates; 2004, Head First Design Patterns, 1st ed., O'Reilly, Chapter 6, pg. 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" at MSDN, <http://msdn.microsoft.com/en-us/magazine/cc163943.aspx>. Hozzáférés ideje: 2009-05-13
- ↑ Andrew Cumming; 2007, SQL Hacks, 1st ed., O'Reilly, pg. 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, Professional SQL server 2005 integration services, 1st ed., John Wiley and Sons, Chapter 5, pg. 129, Handling Dirty Data, ISBN 0-7645-8435-9, ISBN 978-0-7645-8435-0
Fordítás
szerkesztésEz a szócikk részben vagy egészben a Magic string című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.