182 bacaan

Code Smell 298 - Cara memperbaiki limbah waktu Microsoft Windows

oleh Maximiliano Contieri5m2025/05/04
Read on Terminal Reader

Terlalu panjang; Untuk membaca

Mengabaikan laporan status di cabang bersyarat menyebabkan keterlambatan diam dan kondisi balapan.
featured image - Code Smell 298 - Cara memperbaiki limbah waktu Microsoft Windows
Maximiliano Contieri HackerNoon profile picture

Ketika Logika Kondisional Membungkam Sinyal Kritis


TL;DR: Mengalihkan laporan status di cabang kondisional menyebabkan keterlambatan diam dan kondisi balapan.

TL;DR: Mengalihkan laporan status di cabang kondisional menyebabkan keterlambatan diam dan kondisi balapan.

Masalah

  • Pengguna Terlambat
  • Pengalaman yang buruk
  • Waktu yang tak terduga
  • Inisialisasi yang tidak lengkap
  • Ketergantungan tersembunyi
  • Kegagalan kebijakan
  • Kegagalan diam
  • Kompatibilitas Terbalik

Solusi

  1. Memeriksa semua jalur kode
  2. Menggunakan mekanisme pelaporan default
  3. Tes kasus edge secara ketat
  4. Pemeriksaan kebijakan awal
  5. Lakukan tes kinerja
  6. Memindahkan laporan di luar kondisi

Konteksnya

Ketika Anda menambahkan logika bersyarat (misalnya, kebijakan kelompok) ke kode inisialisasi, melewatkan langkah-langkah penting seperti laporan ketersediaan menyebabkan penundaan di seluruh sistem.


Edge case adalah kondisi luar biasa yang terjadi di luar parameter operasi normal.


Ketika Anda tidak menangani kasus-kasus margin ini dengan benar, kode Anda dapat berperilaku tidak dapat diprediksi.


iniDaftar Blog MicrosoftMenampilkan contoh-contoh di mana pengolahan sampel yang hilangmenyebabkan Windows 7 memiliki waktu login yang lebih lambat ketika pengguna memilih latar belakang warna padat alih-alih gambar wallpaper.


Kode yang bertanggung jawab untuk mengunggah wallpaper desktop hampir "siap" hanya ketika berhasil mengunggah gambar wallpaper.


Tetapi ketika pengguna memilih latar belakang warna padat (kalau tepi), jalur kode ini tidak pernah memicu pemberitahuan "siap".


Akibatnya, sistem menunggu 30 detik penuh sebelum melanjutkan dengan urutan login.


Masalah ini menunjukkan bagaimana kehilangan kasus tepi yang tampaknya kecil dapat secara signifikan mempengaruhi pengalaman pengguna.


Apa yang seharusnya menjadi proses login 5 detik menjadi penundaan 30 detik yang mengecewakan bagi pengguna yang memilih opsi konfigurasi sederhana.

Mengalikan keterlambatan 30 detik yang tidak bersalah ini dengan setiap pengguna yang memiliki versi.


Desain perangkat lunak yang baik mengharuskan Anda mempertimbangkan semua jalur yang mungkin melalui kode Anda, bukan hanya yang umum.


Ketika Anda melewatkan kasus edge handling, Anda menciptakan utang teknis yang memanifestasikan sebagai masalah kinerja misterius, timeout, dan pengalaman pengguna yang buruk.

Kode sampel

Salah ya 🙂

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
    }
}

yang benar 🙂

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()
    {
    
    }
}

Deteksi

  • [x] Semi-Otomatis

Gunakan alat analisis statis untuk menandai kondisi yang melindungi panggilan pelaporan kritis.


Ulasan kode harus memverifikasi bahwa semua jalur inisialisasi menandakan penyelesaian.

Tanggal ️

  • Prestasi

Tingkat

  • [x] yang menengah

Mengapa pernikahan sangat penting ️

Perilaku dunia nyata sistem (misalnya, kecepatan login) tergantung pada pemodelan yang akurat dari keadaan siap.


Perangkat lunak harus mempertahankan korespondensi satu-ke-satu antara negara dunia nyata dan negara program.


Ketika pengguna memilih latar belakang warna padat di Windows, pilihan itu mewakili keadaan dunia nyata yang valid.


(Keputusan pribadi saya juga kembali saat itu)


Program harus benar memodelkan pilihan ini dengan status program yang sesuai yang berperilaku dengan benar.


Ketika Anda memecahkan bijection ini dengan gagal menangani kasus tepi, Anda memperkenalkan penyimpangan antara harapan pengguna dan perilaku sistem. Dalam contoh ini, pengguna mengharapkan pilihan latar belakang warna padat untuk bekerja secara normal, tetapi sebaliknya, mereka mengalami penundaan misterius.


Bijection yang hilang menciptakan disonansi kognitif: "Saya membuat pilihan sederhana, mengapa komputer saya berperilaku aneh?"


Setiap bijection yang rusak memperkenalkan retak dalam model keandalan sistem, membuatnya semakin tidak dapat diprediksi dari waktu ke waktu.


Melanggar tautan ini menyebabkan ketidaksesuaian antara harapan pengguna dan eksekusi perangkat lunak, menyebabkan penundaan yang tidak dapat diprediksi danPetapelanggaran dunia nyata.

Generasi yang

Generator AI dapat menciptakan bau ini dengan naif membungkus kode warisan dalam kondisi tanpa memvalidasi semua jalur.

Untuk deteksi

Meminta AI untuk "menjamin laporan status berjalan di semua cabang," dan itu akan menandai atau memperbaiki bau ini dengan memindahkan Report() di luar kondisi.

Coba saja ya! 🙂

Ingat: Asisten AI membuat banyak kesalahan

Prompt yang disarankan: temukan laporan lain yang hilang

Prompt yang disarankan: temukan laporan lain yang hilang

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

ChatGPT

ChatGPT

Claude yang

Claude yang

Persepsi

Persepsi

Anak Pilot

Anak Pilot

Gemini

Gemini

DeepSeek

DeepSeek

Target yang

Target yang

Gokil

Gokil

Qiang

Qiang

Kesimpulan

Selalu menandakan penyelesaian tanpa syarat dalam kode inisialisasi.


Logika bersyarat harus memodifikasi perilaku, bukan membungkam langkah-langkah pelaporan kritis.

Relasi

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

Informasi lebih lanjut

Disclaimer

Aroma adalah milikkuPendapat.


Pengujian membawa kepada kegagalan, dan kegagalan membawa kepada pemahaman.

Pengujian membawa kepada kegagalan, dan kegagalan membawa kepada pemahaman.

Burt Rutan


Artikel ini adalah bagian dari seri CodeSmell.


Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks