Yazılım yaşlanması - Software aging

Gelen yazılım mühendisliği , yazılım yaşlanma eğilimi olan yazılım başarısız ya ya, çünkü yazılım çevreleyen sistemlerinde devam eden değişikliklerin belirli bir süre için sürekli olarak çalıştırdıktan sonra bir sistem hatası neden. Yazılım yaşlanmasının, eski yazılımın değişen ihtiyaçlara veya değişen teknoloji platformlarına uyum sağlayamaması ve yazılım yamalarının daha fazla hata yapma eğilimi gibi çeşitli nedenleri vardır. Yazılım eskidikçe amacına daha az uygun hale gelir ve sonunda olması gerektiği gibi çalışmayı durdurur. Rebooting veya yazılım kısa vadeli bir düzeltme görevi görebilir yeniden. Yazılım yaşlanma olayıyla başa çıkmak için proaktif bir hata yönetimi yöntemi, yazılım gençleştirmedir . Bu yöntem, genellikle yazılım gençleştirme aracıları (SRA) aracılığıyla uygulanan bir ortam çeşitliliği tekniği olarak sınıflandırılabilir.

Bu fenomen ilk olarak David Parnas tarafından, bu konuda ne yapılması gerektiğini araştıran bir makalede tanımlandı:

"Programlar da insanlar gibi yaşlanır. Yaşlanmayı engelleyemeyiz ama nedenlerini anlayabilir, etkilerini sınırlamak için adımlar atabilir, neden olduğu hasarın bir kısmını geçici olarak tersine çevirebilir ve yazılımın çalışmadığı güne hazırlanabiliriz. daha uzun ömürlü."

Hem akademik hem de endüstriyel açıdan yazılım yaşlanması olgusu artmıştır. Son araştırmalar, nedenlerini ve etkilerini netleştirmeye odaklandı. Veri bozulması ve yayınlanmamış dosya kilitleri ile birlikte bellek şişmesi ve sızıntısı, yazılım yaşlanmasının belirli nedenleridir.

Yazılım yaşlanmasının proaktif yönetimi

Yazılım yaşlanması

Yazılım arızaları, donanım arızalarına kıyasla planlanmamış sistem kesintilerinin daha olası bir nedenidir. Bunun nedeni, yazılımın zaman içinde veri bozulması, sayısal hata birikimi ve sınırsız kaynak tüketimi nedeniyle artan bir başarısızlık oranı sergilemesidir. Yaygın olarak kullanılan ve uzmanlaşmış yazılımlarda, bir sorunu gidermek için ortak bir eylem, yeniden başlatmadır, çünkü yaşlanma, yazılımın hiçbir zaman hatasız olmayan karmaşıklığı nedeniyle gerçekleşir. Bir yazılım parçasının hatasız olduğunu tam olarak doğrulamak neredeyse imkansızdır. Windows ve macOS gibi yüksek profilli yazılımlar bile performansı artırmak ve hataları düzeltmek için sürekli güncellemeler almalıdır. Yazılım geliştirme, uzun vadeli güvenilirlik sağlamaktan ziyade, son teslim tarihlerini karşılama ihtiyacı tarafından yönlendirilme eğilimindedir. Yaşlanmaya karşı bağışık olabilecek bir yazılım tasarlamak zordur. Bazı kullanıcılar sistemi diğerlerinden daha yoğun kullandığından, tüm yazılımlar aynı oranda eskimeyecektir.

gençleştirme

Çökmeleri veya bozulmayı önlemek için yazılım yenileme proaktif olarak kullanılabilir, çünkü kaçınılmaz yaşlanma yazılım sistemlerinde arızalara yol açar. Bu proaktif teknik, 1990'larda AT&T Bell Laboratuarlarında hataya dayanıklı yazılımlar üzerine yapılan araştırmalar sırasında uygun maliyetli bir çözüm olarak tanımlandı. Yazılım gençleştirme, örneğin işletim sistemi çekirdek tablolarını temizleyerek, çöp toplamayı kullanarak, dahili veri yapılarını yeniden başlatarak ve belki de en iyi bilinen gençleştirme yöntemi, sistemi yeniden başlatmak gibi birikmiş hata koşullarını ortadan kaldırarak ve sistem kaynaklarını serbest bırakarak çalışır.

Gençleşmeyi sağlamak için basit teknikler ve karmaşık teknikler vardır. Çoğu kişinin aşina olduğu yöntem, donanım veya yazılımın yeniden başlatılmasıdır . Daha teknik bir örnek, web sunucusu yazılımı Apache'nin gençleştirme yöntemi olabilir. Apache , belirli sayıda istek sunduktan sonra süreçleri öldürerek ve yeniden oluşturarak bir tür gençleştirme uygular. Başka bir teknik, bir bulut bilişim ortamında çalışan sanal makineleri yeniden başlatmaktır .

Çok uluslu telekomünikasyon şirketi AT&T , çoğu telefon santrali için Amerika Birleşik Devletleri'nde fatura verilerini toplayan gerçek zamanlı sistemde yazılım gençleştirmeyi uyguladı.

Yazılım gençleştirme yöntemlerini kullanan bazı sistemler şunları içerir:

  1. İşlem işleme sistemleri
  2. Web sunucuları
  3. Uzay aracı sistemleri

IEEE Yazılım Güvenilirlik Mühendisliği Uluslararası Sempozyumu (ISSRE) Yaşlanma Yazılım ve Gençleştirme (üzerinde 5. yıllık Uluslararası Çalıştayı'na ev sahipliği yaptı woSAR dahil 2013 Konu):

  • Gençleştirme mekanizmalarının tasarımı, uygulanması ve değerlendirilmesi
  • Gençleştirme çizelgelemesinin modellenmesi, analizi ve uygulanması
  • Yazılım gençleştirme kıyaslaması

Bellek sızıntıları

İşletim sistemi kullanan sistemlerde kullanıcı programları, bir işlemi gerçekleştirmek için bellek blokları talep etmelidir . Bu işlem (örneğin bir alt program ) tamamlandıktan sonra, programın, diğer programların kullanımına açık hale getirmek için kendisine ayrılan tüm bellek bloklarını boşaltması beklenir. Çöp toplayıcı olmayan programlama dillerinde (örneğin C ve C++ ), gerekli bellek serbest bırakma işlevlerini çağırmak ve program içinde kullanılmayan tüm verileri hesaba katmak programcıya bağlıdır. Ancak bu her zaman olmaz. Yazılım hataları nedeniyle, program giderek daha fazla bellek tüketebilir ve sonunda sistemin belleğinin dolmasına neden olabilir. Düşük bellek koşullarında, yoğun takasın ( thrashing ) neden olduğu performans darboğazı nedeniyle sistem genellikle daha yavaş çalışır , uygulamalar yanıt vermez hale gelir ve beklenmedik bir şekilde büyük miktarda bellek talep edenler çökebilir. Sistemin hem belleğinin hem de takasının bitmesi durumunda, işletim sistemi bile çökebilir ve tüm sistemin yeniden başlatılmasına neden olabilir.

Bir çöp toplayıcı (örneğin Java ) kullanan programlama dillerinde yazılmış programlar, bellek sızıntılarını önlemek için genellikle bu özelliği kullanır. Bu nedenle, bu programların "yaşlanması", en azından kısmen, programlama dilinin çalışma zamanı ortamının kendisinde yerleşik olan çöp toplayıcının kalitesine bağlıdır .

Bazen işletim sisteminin kritik bileşenleri bir bellek sızıntısı kaynağı olabilir ve sistem kararlılığı sorunlarının arkasındaki ana suçlu olabilir. Örneğin Microsoft Windows'ta , Windows Gezgini eklentilerinin bellek kullanımı ve hizmetler gibi uzun ömürlü işlemler, sistemin güvenilirliğini kullanılamaz hale getirecek kadar etkileyebilir. Sistemin yeniden çalışması için yeniden başlatma gerekebilir.

Yazılım gençleştirme, bir uygulama tarafından kullanılan tüm belleği serbest bırakmaya zorladığı için bellek sızıntılarına yardımcı olur. Uygulama yeniden başlatılabilir ancak temiz bir sayfa ile başlar.

uygulama

Gençleştirme uygulamak için iki yöntem şunlardır:

  1. Zamana dayalı gençleştirme
  2. Tahmine dayalı gençleştirme

hafıza şişkinliği

Çöp toplama, sistemin kullanılmayan belleği otomatik olarak kurtardığı bir otomatik bellek yönetimi biçimidir . Örneğin, .NET Framework , altında çalışan yazılımlar için belleğin tahsisini ve serbest bırakılmasını yönetir. Ancak bu nesnelerin otomatik olarak izlenmesi zaman alır ve mükemmel değildir.

.NET tabanlı web hizmetleri yığın, yönetilmeyen ve yönetilen yığın (boş alan) gibi çeşitli mantıksal bellek türlerini yönetir. Fiziksel bellek doldukça, işletim sistemi bunun nadiren kullanılan kısımlarını diske yazar, böylece onu başka bir uygulamaya yeniden tahsis edebilir, bu işlem sayfalama veya takas olarak bilinir. Ancak belleğin kullanılması gerekiyorsa, diskten yeniden yüklenmesi gerekir. Birkaç uygulamanın tümü büyük taleplerde bulunuyorsa, işletim sistemi zamanının çoğunu yalnızca ana bellek ve disk arasında veri taşımak için harcayabilir, bu işlem disk thrashing olarak bilinir . Çöp toplayıcı, hangilerinin kullanımda olduğuna karar vermek için tüm tahsisleri incelemek zorunda olduğundan, bu thrash'i daha da kötüleştirebilir. Sonuç olarak, kapsamlı takas, milisaniyelerden onlarca saniyeye uzayan çöp toplama döngülerine yol açabilir. Bu, kullanılabilirlik sorunlarına neden olur.

Referanslar

daha fazla okuma

  • R. Matias Jr. ve PJ Freitas Filho, "Web sunucularında yazılım yaşlanması ve gençleştirme üzerine deneysel bir çalışma", Proceedings of the 30th Annual International Computer Software and Applications Conference (COMPSAC'06), Cilt. 01, s. 189 – 196, 2006.
  • M. Grottke, R. Matias Jr. ve KS Trivedi, "The Fundamentals of Software Aging", Workshop of Software Aging and Rejuvenation (WoSAR/ISSRE), 2008.
  • R. Matias Jr, P. Barbetta, K. Trivedi, P. Freitas Filho "Yazılım Yaşlandırma Deneylerine Uygulanan Hızlandırılmış Bozunma Testleri", IEEE İşlemleri Güvenilirlik 59(1): 102–114,2010.
  • M. Grottke, L. Li, K. Vaidyanathan ve KS Trivedi, "Bir web sunucusunda yazılım yaşlanmasının analizi", IEEE Transactions on Reliability, cilt. 55, hayır. 3, s. 411–420, 2006.
  • M. Grottke, K. Trivedi, "Fighting Bugs: Remove, Retry, Replicate and Rejuvenate", IEEE Computer 40(2): 107–109, 2007.
  • IEEE Xplore'da Proceedings of Software Aging and Rejuvenation Workshop (WoSAR'08,'10, '11, '12, '13, '14) hakkında daha fazla makale.