01.11.2009 2 Komentáre

Varovné Príbeh žiaľu: chyba, ktorá unikla

http://markbeljaars.com/wp-content/plugins/sociofluid/images/digg_48.png ~ ~ V http://markbeljaars.com/wp-content/plugins/sociofluid/images/reddit_48.png ~ ~ V http://markbeljaars.com/wp-content/plugins/sociofluid/images/stumbleupon_48.png ~ ~ V http://markbeljaars.com/wp-content/plugins/sociofluid/images/delicious_48.png ~ ~ V http://markbeljaars.com/wp-content/plugins/sociofluid/images/furl_48.png ~ ~ V http://markbeljaars.com/wp-content/plugins/sociofluid/images/technorati_48.png ~ ~ V http://markbeljaars.com/wp-content/plugins/sociofluid/images/facebook_48.png ~ ~ V http://markbeljaars.com/wp-content/plugins/sociofluid/images/yahoobuzz_48.png ~ ~ V http://markbeljaars.com/wp-content/plugins/sociofluid/images/mixx_48.png ~ ~ V http://markbeljaars.com/wp-content/plugins/sociofluid/images/twitter_48.png ~ ~ V

Minulý týždeň som sa vydala aktualizovanú verziu svojej Tabuľka obsahu tvorca pluginu pre WordPress. Ja som sa pýši v mojich kódovanie, porucha hľadanie a testovanie schopnosti. To všetko sa zrútila v jednej jedinej noci.

Ak chcete znížiť dlhý príbeh krátky, nová verzia vyžaduje pomocnú funkciu pre zobrazenie Listové zásielky. Pomocná funkcia bola volaná len jednu funkciu, a preto rozhodol sa zahŕňať pomocné funkcie ako dieťa tejto funkcie. To je bežná prax v mnohých jazykoch ako úhľadne zabalí všetky funkcie a ich pomocníkmi v tesnej blízkosti. Materská funkcie podľa toho, ako sa hovorí zakaždým, keď sa zobrazí stránka a končí okamžite, pokiaľ táto stránka neobsahuje mapa stránok iniciátor tag.

Ok. Čas ubieha. Teraz je 2AM. Kód je teraz pripravený na testovanie. Viem, že ukončí materskej funkcie okamžite, pokiaľ sa nenájde iniciátor tag. To predtým pracoval, a ja som šiel nikde blízko, takže to by malo pokračovať v práci. Je to tak? Som skontrolovať mapa stránok stránky, vyskúšať všetky nové i staré možnosti a dokázať, že kód funguje, ako má. Rýchlo som synchronizovať SVN repozitár a ponáhľať do postele sa vyspať, ako vyjde slnko hore.

Druhý deň ráno som sa rozhodol skontrolovať veľký web viem, že používa svoj plugin. Nie je náhrada za reálneho sveta testovania. Jo, to všetko vyzerá dobre. V tej chvíli som si všimol miesto v mape stránok, ktorá vyzerala zaujímavo. Som klikol na odkaz a kategórie bol predstavovaný s prvou príspevok v kategórii a potom veľká škaredá správa php chyba. Mmm. Pozrel som sa na ďalšie veľké mieste. Mmm. Možno náhoda. Pozrime sa na jeden. Ach nie!

Takže čo sa stalo? Nezabudnite, že dieťa funkciu? Počul som, že sa hovorí, že deti môžu byť zlý a ukázalo sa, aby to bola pravda v tomto prípade. Ak blog stránka, kategórie stránky, tag stránka alebo dokonca domáce stránka bola navštívená, sú viac príspevkov zobrazí na jednej stránke. WordPress to tým, že predstiera, že každý príspevok je mini-stránky a spája všetky mini-stránky dohromady tvoria jednu veľkú stranu. To znamená, že rodič má funkcia sa nazýva viackrát. Zvyčajne nie je problém. Ale teraz, ako funkcia obsahuje podriadené funkcie, sú tieto deti funkcia vytvorená zakaždým, keď rodič funkcia sa nazýva (aj keď sa nepoužíva). Preto, keď potom po druhej sa zobrazí stránka spadne s chybovým duplicitné názov funkcie správe. Výsledkom bolo, že čistá malá chyba v zdanlivo nesúvisiace funkcie spôsobilo niekoľko veľmi veľkých stránky ísť dole.

Morálka príbehu: ak ste na internetových stránkach správcu, uistite sa, že spustiť kompletnú sadu testov po každej aktualizácii pluginov, bez ohľadu na to, ako veľký alebo malý, že môže byť plugin.


SpinChimp Leaderboard 728x90