Ponowne użycie kodu
Ponowne użycie kodu może być realizowane na różnych poziomach:
- copy and paste – najgorsze i najpopularniejsze rozwiązanie, często gwałci zasadę „raz i tylko raz” („once and only once”), stanowi źródło błędów
- techniki programistyczne – dziedziczenie, programowanie generyczne, stosowanie WebServices, programowanie aspektowe
- komponenty, biblioteki i zestawy narzędziowe (toolboxes) – elementy umieszczane w programach
- szkielety (frameworks) – oprogramowanie wymagające uzupełnienia o pewne elementy dla uzyskania konkretnej, pełnej funkcjonalności
- całe, gotowe programy – ponowne wykorzystanie ze zmienioną konfiguracją (np. programy ERP – SAP itp.) lub w ramach nowego środowiska (np. linie produktów dla różnych systemów operacyjnych)
Ponowne użycie kodu posiada wiele zalet:
- redukuje koszt i czas tworzenia oprogramowania (mniej elementów musi zostać wyspecyfikowanych, zaprojektowanych, zaimplementowanych i przetestowanych)
- zwiększa niezawodność systemów (ponownie używany kod zazwyczaj został już wszechstronnie sprawdzony i przetestowany)
- zmniejsza ryzyko związane z tworzeniem oprogramowania (w przypadku nowo tworzonego kodu zawsze mogą pojawić się nieprzewidywane problemy)
- popularne komponenty wielokrotnego użytku tworzą standardy, które ułatwiają tworzenie i stosowanie programów
- w oparciu o elementy wielokrotnego użycia można tworzyć generatory programów lub istotnych podsystemów (np. interfejsów użytkownika, parserów, kodu na bazie modelu UML)
Ponowne użycie kodu ma też wady i niesie pewne problemy:
- nie istnieją jeszcze sposoby łatwego wyszukiwania pasującego istniejącego kodu do zastosowania w tworzonych programach
- zanim zastosuje się gotowy kod należy go zrozumieć (może to być trudne i kosztowne, zaś brak zrozumienia może prowadzić do rozmaitych problemów)
- zastosowanie gotowego kodu może wymagać istotnego dostosowania reszty systemu
- testowanie całości systemu może także być utrudnione, jeśli ponownie użyty kod w wielu miejscach przenika się z kodem wytwarzanym
- w fazie użytkowania i konserwacji, przy modyfikacjach i rozszerzeniach systemu jest się uzależnionym od kodu, co do którego nie wiadomo czy będzie ewoluował, a jeśli tak to w jakim kierunku