この記事は具体的な例に重点を置きすぎています。(2017年3月) |
ソフトウェア工学において、ソフトウェアの老化とは、一定時間継続して実行した後に、またはソフトウェアを取り巻くシステムの継続的な変更が原因で、ソフトウェアが故障し たりシステム障害を引き起こしたりする傾向のことです。ソフトウェアの老化には、古いソフトウェアが変化するニーズや技術プラットフォームに適応できないことや、ソフトウェアパッチがさらなるエラーを導入する傾向など、いくつかの原因があります。ソフトウェアは古くなるにつれて、その目的に適さなくなり、最終的には正常に機能しなくなります。ソフトウェアを再起動したり再インストールしたりすることが、短期的な解決策となる場合があります。[ 1 ]ソフトウェア老化インシデントに対処するためのプロアクティブな障害管理方法は、ソフトウェア若返りです。この方法は、通常、ソフトウェア若返りエージェント(SRA)を通じて実装される環境多様性技術として分類できます。
この現象は、デビッド・パルナスが、それに対して何をすべきかを探ったエッセイの中で初めて指摘されました。[ 2 ]
プログラムも人間と同じように老化します。老化を防ぐことはできませんが、老化の原因を理解し、老化の影響を抑える対策を講じ、老化によって生じた損害の一部を一時的に回復させ、ソフトウェアがもはや機能しなくなる日のために備えることはできます。[ 3 ]
学術的および産業的観点から、ソフトウェアの老化現象が増加しています。近年の研究は、その原因と影響の解明に焦点を当てています。[ 4 ]メモリの肥大化とリーク、データ破損、未解除のファイルロックなどは、ソフトウェアの老化の具体的な原因です。
ソフトウェアの老朽化に対する積極的な管理
ソフトウェアの老朽化
ソフトウェア障害は、ハードウェア障害よりも、計画外のシステム停止の原因となる可能性が高くなります。[ 5 ] [ 6 ]これは、データ破損、数値エラーの蓄積、無制限のリソース消費により、ソフトウェアの障害率が時間の経過とともに増加するためです。広く使用されている特殊なソフトウェアでは、エラーのない状態が続くことのないソフトウェアの複雑さにより老化が発生するため、問題を解決するための一般的なアクションは再起動です。ソフトウェアにバグがないことを完全に検証することはほぼ不可能です。WindowsやmacOSなどの知名度の高いソフトウェアでさえ、パフォーマンスを向上させバグを修正するために継続的なアップデートを受ける必要があります。ソフトウェア開発は、長期的な信頼性を確保するよりも、リリース期限を守る必要性によって推進される傾向があります。[ 7 ]老化の影響を受けないソフトウェアを設計することは困難です。一部のユーザーは他のユーザーよりもシステムを集中的に使用するため、すべてのソフトウェアが同じ速度で老化するわけではありません。[ 8 ]
若返り
ソフトウェアシステムの劣化は避けられない老化現象であるため、クラッシュや劣化を防ぐために、ソフトウェアの若返りを積極的に導入することができます。この予防的手法は、1990年代にAT&Tベル研究所でフォールトトレラントソフトウェアの研究が行われていた際に、費用対効果の高いソリューションとして認識されました。 [ 9 ]ソフトウェアの若返りは、蓄積されたエラー状態を取り除き、システムリソースを解放することで機能します。例えば、オペレーティングシステムのカーネルテーブルのフラッシュ、ガベージコレクションの使用、内部データ構造の再初期化などが挙げられますが、おそらく最もよく知られている若返り方法は、システムを再起動することです。
若返りを実現するには、単純な手法と複雑な手法があります。多くの人がよく知っている方法は、ハードウェアまたはソフトウェアの再起動です。より技術的な例としては、ウェブサーバーソフトウェアApacheの若返り手法が挙げられます。Apacheは、一定数のリクエストを処理した後、プロセスを強制終了して再作成することで、若返りを実現しています。 [ 10 ]もう1つの手法は、クラウドコンピューティング環境で稼働している仮想マシンを 再起動することです。 [ 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. Proceedings . 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). 「ソフトウェアの経年劣化の検出と推定のための方法論」. Proceedings Ninth International Symposium on Software Reliability Engineering (Cat. No.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ゴダード/IEEEソフトウェアエンジニアリングワークショップ, 2002. Proceedings . 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。Bibcode : 2013ITCmp..62.1072B。土井: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 巻、pp. 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) の議事録にさらに多くの論文が掲載されています。