Když podmíněná logika mlčí kritické signály
TL;DR: Vynechání zpráv o stavu v podmíněných větvích způsobuje tiché zpoždění a závodní podmínky.
TL;DR: Vynechání zpráv o stavu v podmíněných větvích způsobuje tiché zpoždění a závodní podmínky.
Problémy
- Zpoždění uživatele
- Špatné zkušenosti
- Nepředvídatelné časy
- Neúplná inicializace
- Skryté závislosti
- Nesprávné řízení politiky
- Tiché selhání
- Zpětná kompatibilita se rozpadá
Řešení
- Validovat všechny cesty kódu
- Používejte mechanismy standardního podávání zpráv
- Průzkumy v extrémně přísných případech
- Refactor Policy kontroluje předčasně
- Proveďte výkonnostní testy
- Přenos zpráv mimo podmíněné
Kontextová
Když do inicializačního kódu přidáte podmíněnou logiku (např. skupinové zásady), vynechání kritických kroků, jako jsou zprávy o připravenosti, způsobí zpoždění v celém systému.
Edge případy jsou výjimečné podmínky, které se vyskytují mimo normální provozní parametry.
Když s těmito případy okrajů nesprávně zacházíte, váš kód se může chovat nepředvídatelně.
TohleMicrosoft blogový článekklasický příklad, kde chybí řízení případuWindows 7 má pomalejší čas přihlašování, když si uživatelé zvolili pevné barevné pozadí namísto obrázku tapety.
Kód zodpovědný za načítání desktopových tapet je téměř "připravený" pouze tehdy, když úspěšně načte obrázek tapety.
Ale když uživatelé vybrali pevné barevné pozadí (krajový případ), tato kódová cesta nikdy nevyvolala oznámení „připravené“.
V důsledku toho systém čekal na plný časový úsek 30 sekund předtím, než pokračoval v sekvenci přihlášení.
Tento problém ukazuje, jak může chybějící zdánlivě malý okrajový případ výrazně ovlivnit uživatelský zážitek.
To, co mělo být 5-sekundový proces přihlašování, se stalo frustrujícím zpožděním 30 sekund pro uživatele, kteří si vybrali jednoduchou možnost konfigurace.
Tento nevinný 30-sekundový zpoždění vynásobte každým uživatelem, který měl verzi.
Dobrý design softwaru vyžaduje, abyste zvážili všechny možné cesty prostřednictvím vašeho kódu, nejen ty běžné.
Když vynecháte manipulace s případy edge, vytváříte technický dluh, který se projevuje jako záhadné problémy s výkonem, časy a špatné uživatelské zkušenosti.
Vzorový kód
Špatně 🙂
public static class WallpaperInitializer
{
private static bool wallpaperWasDefined = false;
public static void InitializeWallpaper()
{
if (wallpaperWasDefined)
// Assume this was defined previously
// and PLEASE DON'T use NULLs in case you hadn't
{
LoadWallpaperBitmap();
Report(WallpaperReady); // Missed if wallpaper is undefined
}
// No default report, causing delays
}
private static void LoadWallpaperBitmap()
{
}
private static void Report(string status)
{
// The Asynchronous loading keeps on
}
}
Správně 🙂
public static class WallpaperInitializer
{
private static bool wallpaperWasDefined = false;
public static void InitializeWallpaper()
{
if (wallpaperWasDefined)
{
LoadWallpaperBitmap();
}
Report(WallpaperReady);
// Always report, regardless of condition
}
private static void LoadWallpaperBitmap()
{
}
}
Detekce
- [x] poloautomatické
Používejte statické analytické nástroje k označení podmínek, které chrání kritické výzvy k podávání zpráv.
Hodnocení kódu by mělo ověřit, že všechny cesty inicializace signalizují dokončení.
Týden ️
- Výkonnost
Úroveň
- [x] Zprostředkování
Proč je důležitý ️
Reálné chování systému (např. rychlost přihlášení) závisí na přesném modelování stavů připravenosti.
Software by měl udržovat vzájemnou korespondenci mezi stavem reálného světa a stavem programu.
Když uživatelé vyberou pevné barevné pozadí v systému Windows, tato volba představuje platný stav v reálném světě.
(Moje osobní volba se také vrátila)
Program musí správně modelovat tuto volbu s odpovídajícím programovým stavem, který se správně chová.
Když tuto bijeci přerušíte tím, že nebudete zvládat případy okrajů, zavedete propojení mezi očekáváními uživatelů a chováním systému.V tomto příkladu uživatelé očekávali, že jejich volba pevného barevného pozadí bude fungovat normálně, ale místo toho zažili záhadné zpoždění.
Chybějící bijection vytváří kognitivní disonance: "Udělal jsem jednoduchou volbu, proč se můj počítač chová podivně?" Toto odpojení poškozuje důvěru a spokojenost uživatelů.
Každá zlomená bijection zavádí trhlinu v modelu spolehlivosti systému, čímž se časem stává stále nepředvídatelnější.
Porušení tohoto odkazu způsobuje nesoulady mezi očekáváním uživatele a provedením softwaru, což vede k nepředvídatelným zpožděním aMapyPorušování reálného světa.
Až do generace
Generátory AI mohou vytvořit tuto vůni tím, že naivně zabalení pozůstalého kódu do podmíněných bez ověření všech cest.
Jak na detekci
Požádejte umělou inteligenci, aby „zajišťovala, že zprávy o stavu budou prováděny ve všech pobočkách“ a označí nebo opraví tento zápach přesunutím Report() mimo podmíněné položky.
Vyzkoušejte je!
Pamatujte: Asistenti AI dělají spoustu chyb
Nabídka: Najít chybějící další zprávy
Nabídka: Najít chybějící další zprávy
Without Proper Instructions |
With Specific Instructions |
---|---|
Závěr
Vždy signalizujte dokončení bezpodmínečně v inicializačním kódu.
Podmíněná logika by měla modifikovat chování, ne umlčet kritické kroky vykazování.
Vztahy
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxx
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xviii
Více informací
Disclaimer
Vůně jsou mojeNázor.
Testování vede k neúspěchu a neúspěch vede k pochopení.
Testování vede k neúspěchu a neúspěch vede k pochopení.
Burt Rutan
Tento článek je součástí série CodeSmell.