基本情報技術者試験 平成31年度 春期 午前 問48
静的テスト、動的テスト、テストツールに関しての問題。
---------------------------
平成31年度 春期 午前 問48
ソフトウェアのテストツールの説明のうち、静的テストを支援する静的解析ツールのものはどれか。
ア
指定された条件のテストデータや、プログラムの入力ファイルを自動的に生成する。
イ
テストの実行結果を基に、命令の網羅率や分岐の網羅率を自動的に計測し、分析する。
ウ
プログラム中に文法上の誤りや論理的な誤りなどがあるかどうかを、ソースコードを分析して調べる。
エ
モジュールの呼出し回数や実行時間、実行文の実行回数などの、プログラム実行時の動作特性に関するデータを計測する。
--------------------------
解説
静的テストと動的テスト。
- 静的テスト:プログラムを動かさずに、コードを眺めておこなうテスト
- 動的テスト:プログラムを動かしながら、動作状況を眺めておこなうテスト
テストの際に、プログラムを実際に動かしているのか、動かしていないのかで見分ける。
問題は静的テストを支援するツールはどれか?というものなので、やろうとしているテストの中でプログラムを動かしていないものが正解になる。
選択肢ア「指定された条件のテストデータや、プログラムの入力ファイルを自動的に生成する」はテストデータや入力ファイルを自動で作るツール。
テストデータや入力ファイルはプログラムを動かすために用意するもの。
プログラムを動かすためのデータを作る支援をするツールなので、これは動的テストを支援するツールになる。
テストデータや入力ファイルを人手で用意することは思った以上に大変だし、そこにミスが紛れ込む可能性もでてくる。
入力データの誤りなのか、プログラムのバグなのか、メンバが混乱してしまうのでツールを有効活用しよう。
選択肢イ「テストの実行結果を基に、命令の網羅率や分岐の網羅率を自動的に計測し、分析する」は "テストの実行結果を基に" とはっきりプログラムを動かしてしまっているので、動的テストをしている。
命令の網羅率や分岐の網羅率をみているので、ホワイトボックステストの支援に使うようなツールのこと。
ブラックボックステスト、ホワイトボックステストは実際にプログラムを動かしているので、動的テストになる。
選択肢ウ「プログラム中に文法上の誤りや論理的な誤りなどがあるかどうかを、ソースコードを分析して調べる」は "ソースコードを分析して" とありプログラムを動かしていない。
コードの文法上の誤りや論理的な誤りはプログラムを動かさずにチェックできる。
プログラムを動かさない、静的テストを支援するツールの話をしているので選択肢ウがこの問題の正解。
文法上の誤りがなくともコードの書き方のルールをチェックすることもある。
改行の位置とか、インデントに使う空白の数とか、ローカル変数は大文字か、など。
これらはプログラムの動作には問題なく、言語の文法上も誤りにはならないが、記載ルールが統一されているとコードを読みやすく、理解しやすくなるので保守性が高くなる。
自由にしておくと非常に個性的なコードの書き方をする人もいるので、大事なこと。
選択肢エ「モジュールの呼出し回数や実行時間、実行文の実行回数などの、プログラム実行時の動作特性に関するデータを計測する」は "実行時間"、"実行回数"、"実行時の動作特性" などプログラムを実行していそうな言葉だらけなので動的テストをしていることがわかる。
ここで説明されているツールは性能を改善したいときに役に立つ。
コードの中で特に時間がかかっている部分、時間はかかってなくても何度も呼び出されて累積で時間がかかっている部分、等を見つけることができる。
性能を改善したい場合はまずコードのどこを集中的に直せばよいか、を見つけることが重要になる。
実行時間全体の 8 割がコードのこの部分とわかれば、そこの時間を半分にできれば 8 割 × 5割(半分)で全体の 4 割の実行時間を削減できる。
反対に実行時間がコード全体で均等にかかっている場合はすごい面倒なことになってしまう。ある部分の実行時間を半分にしても、全体でみたら微々たる削減にしかならない。
前後の問題はこちら。