Када условна логика ћути критичне сигнале
ТЛ;ДР: Прескакање извештаја о статусу у условним гранама изазива тиха одлагања и услове трке.
ТЛ;ДР: Прескакање извештаја о статусу у условним гранама изазива тиха одлагања и услове трке.
Проблеми
- Закашњење корисника
- Loše iskustvo
- Непредвидиво време
- Некомплетна иницијализација
- Скривене зависности
- Неправилно управљање политиком
- Tihi neuspeh
- Повратна компатибилност прекида
Rešenja
- Валидација свих путева кода
- Koristite default izveštajne mehanizme
- Тест Едге случајеви строго
- Рефакторска политика проверава рано
- Napravite test performansi
- Преместите извештаје изван условних
контекст
Када додате условну логику (нпр. групне политике) код иницијализације, прескочивање критичних корака као што су извештаји о спремности доводи до одлагања широм система.
Edge slučajevi su izuzetni uslovi koji se javljaju izvan normalnih operativnih parametara.
Када не управљате правилно овим случајевима ивица, ваш код се може понашати непредвидљиво.
ovoMicrosoft blog postистиче класичан пример у којем недостаје руковање случајем ивицеВиндовс 7 је имао спорије вријеме пријављивања када су корисници изабрали солидну позадину у боји уместо слике позадине.
Код одговоран за учитавање тапета за десктоп је готово "спреман" само када је успешно учитао слику тапета.
Али када су корисници изабрали солидну позадину у боји (код), овај пут кода никада није изазвао обавештење "припремљено".
Као резултат тога, систем је чекао пуних 30 секунди пре него што је наставио са секвенцом пријављивања.
Овај проблем показује како недостатак наизглед мале ивице може значајно утицати на корисничко искуство.
Оно што би требало да буде процес пријављивања од 5 секунди постало је фрустрирајуће кашњење од 30 секунди за кориснике који су изабрали једноставну опцију конфигурације.
Помножите ово невино кашњење од 30 секунди са сваким корисником који је имао верзију.
Добар дизајн софтвера захтева од вас да размотрите све могуће путеве кроз ваш код, а не само уобичајене.
Када прескочите случајеве руковања, стварате технички дуг који се манифестује као мистериозни проблеми у перформансама, временски прекиди и лоше корисничко искуство.
Примерни код
Pogrešno 🙂
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
}
}
Pravo 🙂
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()
{
}
}
Детекција
- [x] полуаутоматски
Користите статичке алате за анализу да бисте означили услове који штите критичне позиве за пријављивање.
Прегледи кода треба да потврде да сви путеви иницијализације сигнализирају завршетак.
Данас ️
- перформансе
Ниво
- [x] Средњи
Зашто је бијекција важна ️
Понашање система у стварном свету (нпр. брзина пријављивања) зависи од тачног моделирања стања спремности.
Софтвер треба да одржава кореспонденцију један-на-један између стања стварног света и стања програма.
Kada korisnici izaberu solidnu boju pozadine u sistemu Windows, taj izbor predstavlja važeće stanje u stvarnom svetu.
(Moj lični izbor takođe se vraća tada)
Програм мора правилно моделирати овај избор са одговарајућим програмским стањем који се правилно понаша.
Када прекинете ову бијекцију тако што нећете управљати случајевима ивице, уводите одвајање између очекивања корисника и понашања система.У овом примеру, корисници су очекивали да њихов избор солидне боје за позадину ради нормално, али су уместо тога доживели мистериозна одлагања.
Недостатак бијекције ствара когнитивну дисонанцу: "Направио сам једноставан избор, зашто се мој рачунар понаша чудно?" Ово одвајање оштећује поверење и задовољство корисника.
Свака сломљена бијекција уводи пукотину у модел поузданости система, чинећи га све непредвидљивијим током времена.
Прекидање ове везе узрокује неслагања између очекивања корисника и извршења софтвера, што доводи до непредвидивих кашњења имапеНарушења реалног света.
И генерација
АИ генератори могу створити овај мирис наивно умотавањем наследног кода у условне без валидације свих путева.
Детекција
Помозите АИ да "осигура извештаје о статусу да се изврше у свим гранама", и то ће обележити или поправити овај мирис померањем извештаја() изван условних.
Пробајте их!
Запамтите: Асистенти АИ праве много грешака
Предложена порука: пронађите недостајуће друге извештаје
Предложена порука: пронађите недостајуће друге извештаје
Without Proper Instructions |
With Specific Instructions |
---|---|
Закључак
Увек сигнализирати завршетак безусловно у коду иницијализације.
Условна логика треба да модификује понашање, а не да ћути критичне кораке извештавања.
Везе
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
Више информација
Disclaimer
Мирис кода је мојмишљење.
Testiranje vodi ka neuspehu, a neuspeh vodi ka razumevanju.
Testiranje vodi ka neuspehu, a neuspeh vodi ka razumevanju.
Берт Рутан
Ovaj članak je deo CodeSmell serije.