Aki használ Sonar-t (illetve mostanában már SonarQube a neve, mert lett egy támogatott és egy közösségi kiadás belőle), annak ismerős lehet a magas számosságú Magic number (jobban mondva Unnamed numerical constants) bejegyzés, mint Minor súlyosságú hiba. A Magic number – mint programozástechnikai hiba – elismert és létező jelenség, az alábbi (a Wikipedia linkről idézett) kódrészletben az 52 és az 53 tipikusan ilyen szám:
Code Block |
---|
for i from 1 to 52 j := i + randomInt(53 - i) - 1 a.swapEntries(i, j) |
Logikus kicserélni arra egy változóra, amely megmagyarázza az értelmét:
Code Block |
---|
constant int deckSize := 52 for i from 1 to deckSize j := i + randomInt(deckSize + 1 - i) - 1 a.swapEntries(i, j) |
Ettől egy kicsit javult a programunk olvashatósága és könnyebb érhetősége, de még maradt egy szám, amelyet nem magyaráztunk meg, az 1, amelynek ráadásul több értelmezése is van:
- egytől kezdjük a ciklusban a számolást
- egyet adunk hozzá a kártyák számához
- egyet vonunk le a kiszámolt indexből
Nyilvánvaló, hogy ha kicserélnénk ezt a számot három különböző konstansra, akkor a könnyen olvasható és és érthető programunkból olvashatatlan és érthetetlen program lesz:
Code Block |
---|
constant int deckSize := 52 constant int deckStart := 1 constant int deckOffset := 1 constant int randomOffset := 1 for i from deckStart to deckSize j := i + randomInt(deckSize + deckOffset - i) - randomOffset a.swapEntries(i, j) |
Ebből kifolyólag a Magic number ellenőrzésekor létezik egy kivétellista, amely ezeket a gyakori – és általában nem változtatott – számokat tartalmazza; SonarQube esetén ez öt elemű:
- -2, -1, 0, 1, 2
Ezzel sikerült átesni a ló másik oldalára, több száz Magic number hiba keletkezik a projektekben, amelyeknek a bűne alapvetően az, hogy a használt konstans például 3 vagy 4. Ha kicsit körülnézünk, akkor láthatunk több nagyobb projektet, ahol ezt a listát kibővítették azokkal a konstansokkal, amelyek gyakran előfordulnak és a hibák kijavítása többet ront a programon, például:
- http://maven.apache.org/plugins/maven-deploy-plugin/checkstyle.html: -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 32, 64, 100, 128, 256, 512, 1000, 1024