ソフトウェア工学において、ソフトウェアの老化とは、ソフトウェアが一定時間継続して実行された後に、またはソフトウェアを取り巻くシステムの継続的な変更により、故障し たりシステム障害を引き起こしたりする傾向のことです。ソフトウェアの老化には、古いソフトウェアが変化するニーズや技術プラットフォームに適応できないことや、ソフトウェアのパッチがさらなるエラーを導入する傾向など、いくつかの原因があります。ソフトウェアが古くなると、その目的に適さなくなり、最終的には正常に機能しなくなります。ソフトウェアを再起動したり再インストールしたりすることが、短期的な解決策となる場合があります。[1]ソフトウェア老化インシデントに対処するためのプロアクティブな障害管理方法は、ソフトウェアの若返りです。この方法は、通常、ソフトウェア若返りエージェント (SRA) を通じて実装される環境多様性技術として分類できます。
この現象は、デイビッド・パルナスが、これに対して何をすべきかを探ったエッセイの中で 初めて特定されました。 [2]
「プログラムは人間と同じように老化します。老化を防ぐことはできませんが、老化の原因を理解し、老化の影響を抑える対策を講じ、老化によって生じた損害の一部を一時的に回復させ、ソフトウェアがもはや機能しなくなる日に備えることはできます。」[3]
学術的および産業的観点から、ソフトウェアの老化現象が増加しています。最近の研究では、その原因と影響を明らかにすることに焦点を当てています。[4] メモリの肥大化とリーク、データの破損、解放されていないファイルロックは、ソフトウェアの老化の特定の原因です。
ソフトウェアの老朽化に対する積極的な管理
ソフトウェアの老朽化
ソフトウェア障害は、ハードウェア障害に比べて、計画外のシステム停止の原因となる可能性が高くなります。[5] [6]これは、データ破損、数値エラーの蓄積、無制限のリソース消費により、ソフトウェアの障害率が時間の経過とともに増加するためです。広く使用されている特殊なソフトウェアでは、エラーのない状態が続くソフトウェアの複雑さにより老化が発生するため、問題を解決するために再起動するのが一般的な方法です。ソフトウェアにバグがないことを完全に検証することはほぼ不可能です。WindowsやmacOSなどの知名度の高いソフトウェアでさえ、パフォーマンスを向上させてバグを修正するために継続的な更新を受ける必要があります。ソフトウェア開発は、長期的な信頼性を確保するためではなく、リリース期限に間に合わせる必要性によって推進される傾向があります。[7]老化の影響を受けないソフトウェアを設計することは困難です。一部のユーザーは他のユーザーよりもシステムを集中的に使用するため、すべてのソフトウェアが同じ速度で老化するわけではありません。[8]
若返り
クラッシュや劣化を防ぐために、ソフトウェアの若返りを積極的に採用することができます。これは、避けられない経年劣化がソフトウェア システムの障害につながるためです。この積極的な手法は、1990 年代にAT&T ベル研究所でフォールト トレラント ソフトウェアに関する研究中に、コスト効率の高いソリューションとして特定されました。 [9]ソフトウェアの若返りは、蓄積されたエラー状態を削除し、システム リソースを解放することによって機能します。たとえば、オペレーティング システムのカーネル テーブルのフラッシュ、ガベージ コレクションの使用、内部データ構造の再初期化などにより、この若返りは機能します。おそらく最もよく知られている若返り方法は、システムを再起動することです。
若返りを実現するには、単純な手法と複雑な手法があります。ほとんどの人がよく知っている手法は、ハードウェアまたはソフトウェアの再起動です。より技術的な例としては、Web サーバーソフトウェア Apache の若返り手法が挙げられます。Apacheは、一定数のリクエストを処理した後、プロセスを強制終了して再作成することで、若返りの 1 つの形式を実装しています。 [10]別の手法は、クラウド コンピューティング環境で実行されている仮想マシンを 再起動することです。 [11]
多国籍通信企業AT&Tは、米国のほとんどの電話交換局の課金データを収集するリアルタイムシステムのソフトウェアの刷新を実施した。[12]
ソフトウェア若返り手法を採用したシステムには以下のものがある: [13]
- トランザクション処理システム
- ウェブサーバー
- 宇宙船システム
IEEE国際ソフトウェア信頼性工学シンポジウム (ISSRE) は、2013 年に第 5 回国際ソフトウェア老化および若返りワークショップ (woSAR) を主催しました。トピックには次のものが含まれます 。
- 若返りメカニズムの設計、実装、評価
- 若返りスケジュールのモデル化、分析、実装
- ソフトウェアの若返りベンチマーク
メモリリーク
CやC++などの一部のプログラミング言語では、プログラマがヒープメモリを割り当てることができます。さらに、メモリが不要になったときにプログラマがメモリを解放する必要がある場合があります。一部のオペレーティングシステム(OS)はプロセス終了時にガベージコレクションを実行しないため、メモリの解放が必要です。時間が経つにつれて、これはますます多くのメモリを消費し、最終的にコンピュータのメモリ不足を引き起こす可能性があります。[14]メモリが少ない状態では、激しいスワッピングとスラッシングにより、コンピュータの動作が遅くなることがよくあります。これが発生すると、アプリケーションが遅くなったり、応答しなくなったりします。コンピュータのメモリとスワップ領域の両方が不足すると、OSが自動的に再起動したり、さらに悪いことにハングしたりすることがあります。[15]
ガベージ コレクターを使用するプログラミング言語 (例: Java ) で記述されたプログラムは、参照されなくなったメモリがガベージ コレクターによって解放されるため、メモリ リークが発生する可能性が低くなります。ただし、このような言語でメモリ リークが発生するコードを記述することが不可能というわけではありません。
OS自体の重要なコンポーネントがメモリリークの原因となることもあります。たとえば、Microsoft Windowsでは、 Windowsエクスプローラープラグインのメモリ使用により、使用可能なメモリが枯渇し、コンピュータ全体が使用できなくなる場合があります。再起動が必要になる場合があります。[16]
実装
若返りを実装するための 2 つの方法は次のとおりです。
- 時間に基づく若返り
- 予測に基づく若返り
メモリ膨張
ガベージ コレクションは、システムが未使用のメモリを自動的に回復する自動メモリ管理の形式です。たとえば、.NET Framework は、その下で実行されるソフトウェアのメモリの割り当てと解放を管理します。ただし、これらのオブジェクトを自動的に追跡するには時間がかかり、完璧ではありません。
.NET ベースの Web サービスは、スタック、アンマネージド ヒープ、マネージド ヒープ (空き領域) など、複数の論理タイプのメモリを管理します。物理メモリがいっぱいになると、OS はめったに使用されない部分をディスクに書き込み、別のアプリケーションに再割り当てできるようにします。このプロセスはページングまたはスワッピングと呼ばれます。ただし、メモリを使用する必要がある場合は、ディスクから再ロードする必要があります。複数のアプリケーションがすべて大きな要求を出している場合、OS はメイン メモリとディスク間でデータを移動するだけで多くの時間を費やす可能性があります。このプロセスはディスク スラッシングと呼ばれます。 [17]ガベージ コレクターは、どの割り当てが使用中かを判断するためにすべての割り当てを調べる必要があるため、このスラッシングが悪化する可能性があります。その結果、スワッピングが多発し、ガベージ コレクション サイクルが数ミリ秒から数十秒に延長される可能性があります。これにより、ユーザビリティの問題が発生します。
参照
参考文献
- ^ Shereshevsky, M.; Crowell, J.; Cukic, B .; Gandikota, V.; Yan Liu (2003). 「ソフトウェアの老化とメモリ リソースのマルチフラクタル性」。2003 International Conference on Dependable Systems and Networks、2003 年。議事録。pp. 721– 730。doi :10.1109/ DSN.2003.1209987。ISBN 978-0-7695-1952-4. S2CID 18697750。
- ^ Parnas, DL (1994). 「ソフトウェアの老化」.第 16 回国際ソフトウェア工学会議の議事録. pp. 279– 287. doi :10.1109/ICSE.1994.296790. ISBN 978-0-8186-5855-6. S2CID 790287。
- ^ 「ソフトウェアの老化 | the morning paper」 2014年10月14日. 2024年2月12日閲覧。
- ^ Grottke, Michael; Matias, Rivalino; Trivedi, Kishor S. (2008). 「ソフトウェアエイジングの基礎」。2008 IEEE 国際ソフトウェア信頼性工学会議ワークショップ (ISSRE WKSP) 。pp . 1– 6。doi :10.1109/ ISSREW.2008.5355512。ISBN 978-1-4244-3416-9. S2CID 11527276。
- ^ 「Oatd: -」.
- ^ Garg, S.; Van Moorsel, A.; Vaidyanathan, K.; Trivedi, KS (1998). 「ソフトウェアの劣化の検出と推定の方法論」。第 9 回ソフトウェア信頼性工学国際シンポジウムの議事録 (カタログ番号 98TB100257)。pp. 283– 292。doi : 10.1109/ ISSRE.1998.730892。ISBN 978-0-8186-8991-8. S2CID 8696313。
- ^ Castelli, V.; Harper, RE; Heidelberger, P.; Hunter, SW; Trivedi, KS; Vaidyanathan, K.; Zeggert, WP (2001-03-01). 「ソフトウェア老化の積極的な管理」. IBM Journal of Research and Development . 45 (2): 311– 332. CiteSeerX 10.1.1.28.7273 . doi :10.1147/rd.452.0311. ISSN 0018-8646.
- ^ Gross, KC; Bhardwaj, V.; Bickford, R. (2003). 「パフォーマンスが重要なコンピュータにおけるソフトウェア老化メカニズムのプロアクティブ検出」。第 27 回 NASA Goddard/IEEE ソフトウェア エンジニアリング ワークショップ、2002 年。議事録。pp . 17– 23。doi :10.1109/ SEW.2002.1199445。ISBN 978-0-7695-1855-8. S2CID 17167955。
- ^ Cotroneo, D., Natella, R., Pietrantuono, R., および Russo, S. 2014. ソフトウェアの老化と若返りに関する研究の調査。ACM J. Emerg. Technol. Comput. Syst. 10, 1, Article 8 (2014 年 1 月)、34 ページ。
- ^ Trivedi, KS および Vaidyanathan, K. 2007. ソフトウェアの老化と再生。Wiley Encyclopedia of Computer Science and Engineering。
- ^ ブルネオ、ダリオ;ディステファノ、サルヴァトーレ。ロンゴ、フランチェスコ。プリアフィト、アントニオ。マルコ、スカルパ (2013)。 「クラウド システムにおけるワークロード ベースのソフトウェアの活性化」。コンピュータ上の IEEE トランザクション。62 (6): 1072–1085。土井:10.1109/TC.2013.30。S2CID 23981532。
- ^ Trivedi, Kishor S.; Vaidyanathan, Kalyanaraman (2004-01-01). Reis, Ricardo (ed.).ソフトウェアの若返り - モデリングと分析. IFIP 国際情報処理連盟. Springer US. pp. 151– 182. doi :10.1007/1-4020-8159-6_6. ISBN 978-1-4020-8158-3。
- ^ Lei Li; Vaidyanathan, K.; Trivedi, KS (2002). 「Web サーバーにおけるソフトウェアの劣化を推定するアプローチ」Proceedings International Symposium on Empirical Software Engineering . pp. 91– 100. doi :10.1109/ISESE.2002.1166929. ISBN 978-0-7695-1796-4. S2CID 8170010。
- ^ 「メモリ リークの概要」。msdn.microsoft.com。2015年 11 月 4 日閲覧。
- ^ Martin Brown、Ken Milberg (2010 年 11 月 16 日)。「AIX 7 メモリ パフォーマンスの最適化 パート 3、スワップ領域設定のチューニング」IBM。
- ^ 「Windows アプリケーションでのメモリ リークの防止 (Windows)」。msdn.microsoft.com。2015年 11 月 4 日閲覧。
- ^ SR , Chaitra; Basu, Anirban (2012). 「Web サービスにおけるソフトウェアの若返り」。International Journal of Computer Applications。54 (8): 31– 35。Bibcode :2012IJCA...54h..31S。doi : 10.5120 /8589-2340。
さらに読む
- R. Matias Jr. および PJ Freitas Filho、「Web サーバーにおけるソフトウェアの老化と再生に関する実験的研究」、第 30 回国際コンピュータ ソフトウェアおよびアプリケーション会議 (COMPSAC'06) の議事録、第 01 巻、189 ~ 196 ページ、2006 年。
- M. Grottke、R. Matias Jr.、KS Trivedi、「ソフトウェアのエイジングの基礎」、ソフトウェアのエイジングと再生に関するワークショップ (WoSAR/ISSRE)、2008 年。
- R. Matias Jr、P. Barbetta、K. Trivedi、P. Freitas Filho「ソフトウェアのエージング実験に適用された加速劣化テスト」、IEEE Transactions on Reliability 59(1): 102–114、2010。
- M. Grottke、L. Li、K. Vaidyanathan、KS Trivedi、「Web サーバーにおけるソフトウェアの経年劣化の分析」、IEEE Transactions on Reliability、vol. 55、no. 3、pp. 411–420、2006 年。
- M. Grottke、K. Trivedi、「バグとの戦い:削除、再試行、複製、および活性化」、IEEE Computer 40(2): 107–109、2007 年。
- IEEE Xplore のソフトウェアのエイジングと再生に関するワークショップ (WoSAR'08、'10、'11、'12、'13、'14) の Proceedings にさらに多くの論文が掲載されています。
