Starzenie się oprogramowania

W inżynierii oprogramowania starzenie się oprogramowania to tendencja do awarii oprogramowania lub spowodowania awarii systemu po ciągłym działaniu przez określony czas lub z powodu ciągłych zmian w systemach otaczających oprogramowanie. Starzenie się oprogramowania ma kilka przyczyn, w tym niezdolność starego oprogramowania do przystosowania się do zmieniających się potrzeb lub zmieniających się platform technologicznych oraz tendencję poprawek oprogramowania do wprowadzania dalszych błędów. W miarę starzenia się oprogramowanie staje się mniej dostosowane do swojego celu i ostatecznie przestaje działać tak, jak powinno. Ponowne uruchomienie lub ponowna instalacja oprogramowania może działać jako rozwiązanie krótkoterminowe. Proaktywną metodą zarządzania błędami w przypadku incydentów związanych ze starzeniem się oprogramowania jest odmładzanie oprogramowania . Metodę tę można sklasyfikować jako technikę różnorodności środowiska, która jest zwykle wdrażana za pomocą agentów odmładzania oprogramowania (SRA).

Zjawisko to zostało po raz pierwszy zidentyfikowane przez Davida Parnasa w eseju, w którym badano, co z tym zrobić:

„Programy, podobnie jak ludzie, starzeją się. Nie możemy zapobiec starzeniu się, ale możemy zrozumieć jego przyczyny, podjąć kroki w celu ograniczenia jego skutków, tymczasowo odwrócić część szkód, które wyrządził, i przygotować się na dzień, w którym oprogramowanie przestanie działać. dłużej opłacalny”.

Zarówno z akademickiego, jak i przemysłowego punktu widzenia zjawisko starzenia się oprogramowania nasiliło się. Ostatnie badania skupiły się na wyjaśnieniu jego przyczyn i skutków. i wycieki pamięci , wraz z uszkodzeniem danych i niepublikowanymi blokadami plików to szczególne przyczyny starzenia się oprogramowania.

Proaktywne zarządzanie starzeniem się oprogramowania

Starzenie się oprogramowania

Awarie oprogramowania są bardziej prawdopodobną przyczyną nieplanowanych przestojów systemów niż awarie sprzętu. Wynika to z faktu, że oprogramowanie wykazuje z czasem rosnący wskaźnik awaryjności z powodu uszkodzenia danych, gromadzenia się błędów numerycznych i nieograniczonego zużycia zasobów. W szeroko stosowanym i specjalistycznym oprogramowaniu częstą czynnością mającą na celu usunięcie problemu jest ponowne uruchomienie, ponieważ starzenie się następuje ze względu na złożoność oprogramowania, które nigdy nie jest wolne od błędów. Niemal niemożliwe jest pełne zweryfikowanie, czy oprogramowanie jest wolne od błędów. Nawet oprogramowanie o wysokim profilu, takie jak Windows i macOS, musi otrzymywać ciągłe aktualizacje, aby poprawić wydajność i naprawić błędy. Rozwój oprogramowania jest zwykle napędzany potrzebą dotrzymania terminów wydania, a nie zapewnieniem długoterminowej niezawodności. Projektowanie oprogramowania odpornego na starzenie się jest trudne. Nie wszystkie programy starzeją się w tym samym tempie, ponieważ niektórzy użytkownicy korzystają z systemu intensywniej niż inni.

Odmłodzenie

Aby zapobiec awariom lub degradacji oprogramowania, odmładzanie oprogramowania może być stosowane proaktywnie, ponieważ nieuchronne starzenie się prowadzi do awarii systemów oprogramowania. Ta proaktywna technika została zidentyfikowana jako opłacalne rozwiązanie podczas badań w AT&T Bell Laboratories nad oprogramowaniem odpornym na błędy w latach 90. Odmładzanie oprogramowania polega na usuwaniu nagromadzonych błędów i zwalnianiu zasobów systemowych, na przykład poprzez opróżnianie tabel jądra systemu operacyjnego, usuwanie elementów bezużytecznych, ponowne inicjowanie wewnętrznych struktur danych i być może najbardziej znaną metodą odmładzania jest ponowne uruchomienie systemu.

Istnieją proste techniki i złożone techniki osiągnięcia odmłodzenia. Metodą znaną większości osób jest ponowne uruchomienie sprzętu lub oprogramowania . Bardziej technicznym przykładem może być serwera WWW Apache. Apache wdraża jedną z form odmładzania, zabijając i odtwarzając procesy po obsłużeniu określonej liczby żądań. Inną techniką jest ponowne uruchamianie maszyn wirtualnych działających w środowisku przetwarzania w chmurze .

Międzynarodowa korporacja telekomunikacyjna AT&T wdrożyła odmłodzenie oprogramowania w systemie czasu rzeczywistego zbierającym dane bilingowe w Stanach Zjednoczonych dla większości central telefonicznych.

Niektóre systemy, w których zastosowano metody odmładzania oprogramowania, obejmują:

  1. Systemy przetwarzania transakcji
  2. Serwery WWW
  3. Systemy statków kosmicznych

Międzynarodowe sympozjum IEEE na temat inżynierii niezawodności oprogramowania (ISSRE) było gospodarzem piątego dorocznego międzynarodowego warsztatu na temat starzenia się i odmładzania oprogramowania ( woSAR ) w 2013 r. Tematy obejmowały:

  • Projektowanie, wdrażanie i ocena mechanizmów odmładzania
  • Modelowanie, analiza i wdrażanie harmonogramów odmładzania
  • Testy porównawcze odmładzania oprogramowania

Wycieki pamięci

Niektóre języki programowania , takie jak C i C++ , pozwalają programiście na przydzielanie pamięci sterty . Ponadto programista może zostać poproszony o zwolnienie pamięci, gdy pamięć nie jest już potrzebna. Zwolnienie pamięci jest konieczne, ponieważ niektóre systemy operacyjne (OS) nie wykonują wyrzucania elementów bezużytecznych po zakończeniu procesu . Z biegiem czasu może to zużywać coraz więcej pamięci, ostatecznie powodując brak pamięci w komputerze. W warunkach małej ilości pamięci komputer zwykle działa wolniej z powodu intensywnego działania wymieniać i rzucać . W takim przypadku aplikacje stają się powolne lub nawet przestają odpowiadać. Jeśli w komputerze zabraknie zarówno pamięci, jak i miejsca wymiany, system operacyjny może automatycznie uruchomić się ponownie — lub, co gorsza, zawiesić się.

Programy napisane w językach programowania korzystających z wyrzucania elementów bezużytecznych (np. Java ) nie są podatne na wycieki pamięci.

Czasami krytyczne komponenty samego systemu operacyjnego mogą być źródłem wycieków pamięci. Na przykład w systemie Microsoft Windows użycie pamięci przez wtyczkę Eksploratora Windows może wyczerpać dostępną pamięć do tego stopnia, że ​​cały komputer stanie się bezużyteczny. Może być konieczne ponowne uruchomienie.

Realizacja

Dwie metody realizacji odmłodzenia to:

  1. Odmładzanie oparte na czasie
  2. Odmładzanie oparte na przewidywaniach

Wzdęcia pamięci

Wyrzucanie śmieci to forma automatycznego zarządzania pamięcią , dzięki której system automatycznie odzyskuje nieużywaną pamięć. Na przykład .NET Framework zarządza przydzielaniem i zwalnianiem pamięci dla oprogramowania działającego w jego ramach. Jednak automatyczne śledzenie tych obiektów wymaga czasu i nie jest doskonałe.

Usługi sieciowe oparte na .NET zarządzają kilkoma logicznymi typami pamięci, takimi jak stos, sterta niezarządzana i zarządzana (wolne miejsce). Gdy pamięć fizyczna się zapełnia, system operacyjny zapisuje jej rzadko używane części na dysku, aby mógł je przenieść do innej aplikacji w procesie znanym jako stronicowanie lub zamiana. Ale jeśli pamięć musi być używana, należy ją ponownie załadować z dysku. Jeśli kilka aplikacji ma duże wymagania, system operacyjny może spędzić większość czasu na zwykłym przenoszeniu danych między pamięcią główną a dyskiem, co jest procesem znanym jako wyrzucanie dysku . Ponieważ Garbage Collector musi zbadać wszystkie alokacje, aby zdecydować, które są w użyciu, może to zaostrzyć to rzucanie. W rezultacie rozległe wymiany mogą prowadzić do wydłużenia cykli wyrzucania elementów bezużytecznych z milisekund do dziesiątek sekund. Powoduje to problemy z użytecznością.

Zobacz też

Dalsza lektura

  • R. Matias Jr. i PJ Freitas Filho, „Eksperymentalne badanie starzenia i odmładzania oprogramowania na serwerach WWW”, Proceedings of 30th Annual International Computer Software and Applications Conference (COMPSAC'06), tom. 01, s. 189 – 196, 2006.
  • M. Grottke, R. Matias Jr. i KS Trivedi, „Podstawy starzenia się oprogramowania”, Workshop of Software Aging and Rejuvenation (WoSAR/ISSRE), 2008.
  • R. Matias Jr, P. Barbetta, K. Trivedi, P. Freitas Filho „Testy przyspieszonej degradacji stosowane w eksperymentach starzenia się oprogramowania”, IEEE Transactions on Reliability 59 (1): 102–114,2010.
  • M. Grottke, L. Li, K. Vaidyanathan i KS Trivedi, „Analiza starzenia się oprogramowania na serwerze WWW”, IEEE Transactions on Reliability, tom. 55, nie. 3, s. 411–420, 2006.
  • M. Grottke, K. Trivedi, „Zwalczanie błędów: usuwanie, ponawianie, replikowanie i odmładzanie”, IEEE Computer 40 (2): 107–109, 2007.
  • Więcej artykułów na temat Proceedings of Workshop of Software Aging and Rejuvenation (WoSAR'08,'10, '11, '12, '13, '14) w IEEE Xplore.