Varázsszavak (antiminta)

A Wikipédiából, a szabad enciklopédiából

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és]

A 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és]

A 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és]

A 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]

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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és]

Ez 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.