Oprogramowanie łatwe w utrzymaniu. Pisz kod podatny na przyszłe zmiany — Joost Visser

przez Karol Bocian | 10 września, 2021

Przeczytałem ostatnio kolejną książkę. W tym wpisie dzielę się informacjami, które w niej znalazłem oraz które wdrożyłem w swoim życiu. Staram się z każdej książki wdrażać minimum jedną rzecz.

Wdrożyłem:

  • Usprawnienie procesu naprawy błędów (najpierw fail test, a potem poprawka).

Notatki:

Pielęgnowalność oprogramowania to zdolność zmodyfikowania systemu.

Podstawowe rodzaje zadań związane z pielęgnowaniem oprogramowania:

  • Pielęgnacja korekcyjna – naprawianie wykrytych błędów.
  • Pielęgnacja adaptacyjna – dostosowywanie do zmian występujących w środowisku (aktualizacja systemu operacyjnego, protokołu przysyłania danych).
  • Pielęgnacja doskonaląca – reagowanie na zmieniające się wymagania klienta.
  • Konserwacja profilaktyczna – realizacja sposobów poprawiających jakość systemu lub zapobiegająca występowaniu przyszłych błędów.

Wytyczne dotyczące pielęgnowalności w skrócie:

  1. Pisanie krótkich jednostek kodu – mniejsze jednostki oprogramowania łatwiej jest zrozumieć, przetestować i wykorzystać.
  2. Pisanie prostych jednostek kodu – należy ograniczyć liczbę punktów decyzyjnych.
  3. Pisanie kodu 1 raz – zawsze unikaj powielania kodu.
  4. Ograniczenie wielkości interfejsu jednostek.
  5. Separowanie zagadnień w modułach – luźno sprzężone moduły są łatwiejsze do modyfikowania i tworzenia bardziej modułowych systemów.
  6. Luźne sprzężenie komponentów architektonicznych – luźno sprzężone wysokopoziomowe komponenty są łatwiejsze do modyfikowania i tworzenia bardziej modułowych systemów.
  7. Równoważenie architektury komponentów – zrównoważona architektura o odpowiedniej liczbie komponentów mających podobną wielkość pozwalają najłatwiej tworzyć modułowy system prosty do modyfikacji.
  8. Ograniczanie wielkości bazy kodu – wielki kod jest trudny w pielęgnacji.
  9. Automatyzowanie testów.
  10. Pisanie czystego kodu.

Wytyczne dotyczące pielęgnowalności:

  1. Pisanie krótkich jednostek kodu – mniejsze jednostki oprogramowania łatwiej jest zrozumieć, przetestować i wykorzystać.
    • Ogranicz metodę do 15 linii.
    • Dobieraj starannie nazwy (metod, klas, zmiennych).
    • Krótka jednostka może zrobić tylko jedną rzecz — ma pojedynczą odpowiedzialność.
    • Techniki pomagające:
      • Wyodrębnianie metody — komentarze są zbędne, ponieważ nazwa metody przyjmuje ich rolę.
      • Zastąpienie metody obiektem metody.
  2. Pisanie prostych jednostek kodu – należy ograniczyć liczbę punktów decyzyjnych.
    • Ogranicz liczbę punktów decyzyjnych jednostki do 4.
    • Techniki pomagające:
      • Zastępowanie warunku polimorfizmem.
      • Zastępowanie zagnieżdżonego warunku klauzulami strzegącymi.
  3. Pisanie kodu 1 raz – zawsze unikaj powielania kodu.
    • Nie kopiuj kodu, ponieważ później będziesz musiał pamiętać, aby wszędzie wprowadzić poprawkę.
  4. Ograniczenie wielkości interfejsu jednostek.
    • Ogranicz liczbę parametrów (metody, konstruktora) do 4.
    • Wyodrębnij parametry do obiektów.
    • Techniki pomagające:
      • Obiekt parametru (obiekt transferu danych).
  5. Separowanie zagadnień w modułach – luźno sprzężone moduły są łatwiejsze do modyfikowania i tworzenia bardziej modułowych systemów.
    • Unikaj dużych modułów.
    • Przypisuj obowiązki do oddzielnych modułów.
    • Ukrywaj szczegóły implementacji za interfejsami.
  6. Luźne sprzężenie komponentów architektonicznych – luźno sprzężone wysokopoziomowe komponenty są łatwiejsze do modyfikowania i tworzenia bardziej modułowych systemów.
    • Zapewnij luźne połączenie między komponentami.
    • Minimalizuj względną ilość kodu widoczną dla innych komponentów.
  7. Równoważenie architektury komponentów – zrównoważona architektura o odpowiedniej liczbie komponentów mających podobną wielkość pozwalają najłatwiej tworzyć modułowy system prosty do modyfikacji.
    • Komponenty powinny być podobnej wielkości.
    • Liczba komponentów powinna być zbliżona do 9.
  8. Ograniczanie wielkości bazy kodu – wielki kod jest trudny w pielęgnacji.
    • Ograniczaj wielkość kodu.
    • Techniki pomagające:
      • Środki funkcjonalne:
        • Walcz z pełzającym zakresem.
        • Standaryzuj funkcjonalności.
      • Środki techniczne:
        • Unikaj kopiowania i wklejania kodu.
        • Refaktoryzuj.
        • Używaj zewnętrznych bibliotek i frameworków.
        • Dziel system.
  9. Automatyzowanie testów.
    • Automatyzuj testy.
    • Ogólne reguły pisania dobrych testów jednostkowych:
      • Testować należy przypadki normalne, specjalne i graniczne.
      • Testy to też kod produkcyjny.
      • Testy powinny być izolowane.
      • Wynik testu powinien odzwierciedlać jedynie działanie testowanego fragmentu.
  10. Pisanie czystego kodu.
    • Nie pozostawiaj ze sobą zapachów kodu. Możesz użyć SonarQube, który wskaże Ci zapaszki.
    • Zasada skauta: zostaw obozowisko czystsze, niż się je zostałeś.
    • Wytyczne — nie pozostawiaj za sobą:
      • Zapachów w kodzie.
      • Złych komentarzy (komentarze w kodzie są sygnałem złych rozwiązań inżynierskich).
      • Zakomentowanego kodu.
      • Martwego kodu.
      • Długich i mylących nazw identyfikatorów.
      • Magicznych stałych — umieszczaj je w konfiguracji lub w bazie danych.
      • Źle obsłużonych wyjątków:
        • Zawsze przechwytuj wyjątki.
        • Przechwytuj konkretne wyjątki.
        • Tłumacz konkretne wyjątki na ogólne komunikaty. Nie pokazuj użytkownikowi końcowemu szczegółów implementacyjnych.

Sposób mierzenia pielęgnowalności wykorzystywane przez SIG

SIG przyznaje gwiazdy ocenianym systemom. Ciekawe jest to, że pięć gwiazdek dostaje 5% najlepszych systemów ze wszystkich ocenianych w danym teście. Sprawia to, że 5 gwiazdek z roku 2020 oznacza inną jakość niż 5 gwiazdek z 2000 roku. System z 1 gwiazdką w 2020 roku może być lepszy niż ten z 5 gwiazdkami przyznanymi w 2000 roku.

SIG zaobserwował, że jakość oprogramowania powoli, ale jednak stale się poprawia.

Wszystkie posty związane z książkowymi wdrożeniami:

Źródła

Obraz główny

  • Praca własna

Materiały

      • Oprogramowanie łatwe w utrzymaniu. Pisz kod podatny na przyszłe zmiany — Joost Visser.

Linki oznaczone (*) są linkami afiliacyjnymi. Jeżeli uważasz, że czerpiesz korzyści z mojej pracy, to kup coś korzystając z powyższego linku. Sprawi to, że dostanę prowizję z afiliacji.

Kategoria: Książkowe wdrożenia

O Karol Bocian

Programowanie i świat agentów programowalnych, który poznał na Wydziale Matematyki i Nauk Informacyjnych, wciągnął go w przemysł IT. W trakcie swojej praktyki zawodowej Karol zrozumiał, że nie ważne co się robi i kim się jest, ale wiedza z zarządzania przydaje się wszędzie. Rozpoczął studia na kierunku Zarządzanie i Inżyniera Produkcji. W przypadku Karola zarządzanie to nie tylko teoria czy praca, ale prawie każdy element jego życia, to jego pasja.