いま求められるソフトウェア静的解析・動的解析 第2回:「根拠ある作業」のため「ソフトウェア解析」ができること:いま求められるソフトウェア静的解析・動的解析 第2回(4/4 ページ)
動的解析とは動作しているソフトウェアの動作を計測・測定することですが、大切なのは「その結果をどう利用するか」です。勘に頼った作業ではなく「根拠ある」作業のため、動的解析がどう利用できるのか解説します。
経験による「思い込み」仮説から、動的解析からの「根拠ある」仮説へ
前章で説明した「思い込み」と、適切な動的解析ツールを用いた「客観的な観察結果」を以下のように対比してみましょう。
思い込み
デッドロックが発生した時のログファイルを見ると、スレッドAのログ出力で途切れている。これはスレッドAと何らかのスレッドでデッドロックが発生しているに違いない。
動的解析結果
デッドロック発生時にデバッガでブレークをかけると、スレッドAがミューテックスBをロックしたあと、ミューテックスCをロックしていた。一方、スレッドDは、ミューテックスCをロックしたあとミューテックスBをロックしていた。
思い込み
ARM CPUは0との比較について特別な命令セットを用意している。そのため、if (a < 4)と書かずにif (a-4<0)と書くと処理速度が向上する。
動的解析結果
パフォーマンス測定ツールを使用したところ、何度も呼び出される関数内で不用意に多重ループを使用し、また、ループ関数内で条件分岐命令を使用している箇所があり、ここが一連の処理の流れでかなりの割合を占めていることが分かった。
こうした動的解析ツールでの解析結果に基づき、以下の様に仮説と対策を検討します。
・スレッドAとスレッドDがミューテックスを持ち合いデッドロックが発生しているのではないか?2つのスレッドにおける、ミューテックスBとミューテックスCのロックの順序を統一すれば、デッドロックが解消しないだろうか?
・多重ループを展開することで処理速度は向上しないか?また、ループ内での不要な条件分岐命令を書き換えることで、分岐予測*3の失敗を減らせるのではないか?
どうですか?最初に上げた仮説よりもずっと具体的になったと思いませんか?このように動的解析ツールは、デバッグや性能改善において、より確実な根拠を持った仮説を立てるために必要なたてるための客観的な情報を提供してくれます。
次回は、とくにアドホックな取り組みの横行する性能改善についてPlan → Do → Check → Actという皆さんにもなじみ深いデミングサイクル(PDCAサイクル)を使ったアプローチを説明していきたいと思います。
*3 最近のCPUでは、あらかじめ命令を先読みして複数の命令を同時実行します(パイプライン処理)。その際、分岐命令の予測を行いながら命令の先読み、実行を行いますが、分岐予測に失敗すると、失敗した部分の命令の実行結果が無駄になってしまいます(パイプラインハザード)。タイムクリティカルな関数内で不用意に分岐命令を多用すると思わぬパフォーマンスの劣化を導くことがあります。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 組み込みソフトウェア開発者に贈る「静的解析・動的解析」の必要性
組み込みソフトウェア開発における「静的解析」「動的解析」を、“なんとなく”行っていないでしょうか。開発効率の向上や品質改善に欠かせないこれらを活用するため、まずはその必要性について解説します。 - 「状態遷移表」を使うと高品質な開発が可能に!
組み込みソフトウェア開発の課題解決に「状態遷移表」を活用しよう。 - 解析ツールを「育成ツール」の視点で、JVCケンウッドの組み込み設計改革
組み込みソフトはチームでの開発が主となっているが、その際に問題となるのが、メンバー間のスキル差だ。「静的解析ツールが開発チームを活性化する」そう紹介するJVCケンウッドの阿部博己氏が語る、組み込み設計改革とは。 - 定義から学ぶ「組み込み機器開発入門」
連載「組み込み機器開発入門」では、これから組み込み機器開発に携わる技術者・エンジニアを目指す方を対象に、組み込み機器開発の入門編として知っておくべき内容を広く紹介します。 - 「組み込みソフトウェア」の重要性をPC向けとの対比で理解する
ソフトウェア開発と一口に言っても、PC向けと組み込み機器向けでは数多くの相違点があります。組み込みソフトウェアが重要な理由と合わせて組み込みソフトウェア開発の要点について解説します。