182 čtení

Kód Smell 298 - Jak opravit ztrátu času systému Microsoft Windows

podle Maximiliano Contieri5m2025/05/04
Read on Terminal Reader

Příliš dlouho; Číst

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.
featured image - Kód Smell 298 - Jak opravit ztrátu času systému Microsoft Windows
Maximiliano Contieri HackerNoon profile picture

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í

  1. Validovat všechny cesty kódu
  2. Používejte mechanismy standardního podávání zpráv
  3. Průzkumy v extrémně přísných případech
  4. Refactor Policy kontroluje předčasně
  5. Proveďte výkonnostní testy
  6. 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

ChatGPT

ChatGPT

Claude

Claude

Perplexity

Perplexity

Copilot

Copilot

Gemini

Gemini

DeepSeek

DeepSeek

Meta AI

Meta AI

Grok

Grok

Qwen

Qwen

Chatky

Chatky

Claude

Claude

Zmatenost

Zmatenost

Copilot

Copilot

Dvojčata

Dvojčata

hluboký

hluboký

Cílem AI

Cílem AI

Grochová

Grochová

Květen

Květen

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.


L O A D I N G
. . . comments & more!

About Author

Maximiliano Contieri HackerNoon profile picture
Maximiliano Contieri@mcsee
I’m a sr software engineer specialized in Clean Code, Design and TDD Book "Clean Code Cookbook" 500+ articles written

ZAVĚŠIT ZNAČKY

TENTO ČLÁNEK BYL PŘEDSTAVEN V...

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks