第7章 プログラミング・セキュリティ・AI運用(プログラミング基礎)
DS検定の二重ループ・分岐テスト・ホワイトボックステスト
DS検定(リテラシーレベル)のプログラミング分野には、計算負荷の高い処理の見つけ方と、テストの種類の違いが★1つ星で入っています。このページでは、二重ループの処理回数を数える計算と、点数を判定する関数で分岐テストに必要なテストケースの数を数える例で確かめます。どちらも、コードを書く力ではなく、コードを見て回数や場合の数を数える力が問われます。
このページは試験の学習用の整理です。数字やコードはすべて説明用の架空の例です。
この記事の目次
公式情報の確認
試験日、料金、申込条件、試験方式など変動する情報は、公式情報を最終確認してください。 当サイトの一次情報確認日: 2026-10-02。
試験の出題範囲・実施要項は変動するため、受験前に公式情報を確認してください。
結論
- 二重ループは、外側と内側をそれぞれn回実行すると、内側の処理がn×n回になる。1,000件なら100万回、10,000件なら1億回
- 件数が10倍になると、二重ループの処理回数は100倍になる。計算負荷の高い処理は、件数が増える見込みで判断する
- 分岐テストは、if文の真・偽などのコード中の分岐を、テストケースで1回ずつ実行する。2つの判定を通すには、この例で3つのテストケースが必要
- ブラックボックステストは仕様から、ホワイトボックステストは内部構造から、テストケースを作る
二重ループの処理回数を数える
二重ループは、繰り返しの中に別の繰り返しを入れた形です。たとえば、顧客のすべての組み合わせで似ている度合いを計算する処理は、次のように書けます。
for i in range(n):
for j in range(n):
similarity(i, j)外側がn回、内側もn回なので、similarityが呼ばれる回数はn×n回です。n=1,000なら1,000×1,000=1,000,000回です。
ここで、i番目とj番目の組み合わせは、順番を入れ替えても同じ結果になるとします。その場合、自分自身との組み合わせと、順番違いの重複は計算しなくて済みます。内側をi+1から始めると、回数はn×(n−1)÷2に減ります。
for i in range(n):
for j in range(i + 1, n):
similarity(i, j)| 件数n | 内側を0から(n×n) | 内側をi+1から(n×(n−1)÷2) |
|---|---|---|
| 1,000件 | 1,000,000回 | 499,500回 |
| 10,000件 | 100,000,000回 | 49,995,000回 |
1,000件から10,000件へ件数が10倍になると、どちらの形でも処理回数は約100倍になります。書き方を工夫して半分近くに減らせても、件数に対する増え方は変わりません。二重ループの怖さは、件数が増えたときに、処理回数が件数の2乗で増えることです。公式チェックリストの★1つ星は、このような計算負荷の高いロジックを見つけ、改善策を検討できることです。
分岐テストに必要なテストケースを数える
ISTQBのシラバスでは、分岐は、if文の真・偽の結果、switch文の結果、ループを抜けるか続けるかの判断などに対応するとされています。分岐テストは、これらの結果を、テストケースで実行する技法です。次の関数で、必要なテストケースの数を数えます。
def rank(score):
if score >= 80:
return "A"
elif score >= 60:
return "B"
else:
return "C"判定は2つあります。「80点以上か」と「60点以上か」です。それぞれの真と偽、合計4つの結果を1回ずつ通すテストケースを、次のように選びます。
| テストケース | 1つ目の判定 | 2つ目の判定 | 結果 |
|---|---|---|---|
| 90点 | 80点以上:真 | (調べない) | A |
| 70点 | 80点以上:偽 | 60点以上:真 | B |
| 50点 | 80点以上:偽 | 60点以上:偽 | C |
2つのテストケースだけで済ませようとして、90点と50点を選ぶと、「60点以上:真」の結果が一度も実行されません。2つ目の判定は、80点未満のときにだけ調べられ、その真の結果を通すには、60点以上80点未満の点数が必要だからです。判定が2つあっても、2つ目の判定の真を通すために、3つ目のテストケースが必要になります。なお、ISTQBのシラバスは、分岐を実行しても、特定の経路でだけ起きる不具合は見つけられない場合があると注意しています。
ホワイトボックステストとブラックボックステスト
ISTQBのシラバスの説明では、ブラックボックスの技法は、対象の仕様(期待される動作)の分析に基づき、内部構造を参照しません。そのため、実装が変わっても、必要な動作が同じならテストケースを使い続けられます。ホワイトボックスの技法は、内部構造と処理の分析に基づくため、設計や実装が決まってからでないと、テストケースを作れません。
- ブラックボックス:「80点以上はA、60点以上はB、それ以外はC」という仕様から、テストケースを選ぶ
- ホワイトボックス:上のrank関数のif文を見て、分岐の結果をすべて通すテストケースを選ぶ(分岐テスト)
ホワイトボックスには、仕様があいまいでも実装全体を見て不具合を見つけやすい強みがあります。反対に、仕様にある要件が実装されていないときの抜けは、見つけられないことがあります。仕様から作るのがブラックボックス、コードの構造から作るのがホワイトボックスです。公式チェックリストの★1つ星は、この違いを理解し、テストケースを作ってテストを実施できることです。
DS検定の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
よくある質問
DS検定で、二重ループはどこまで問われますか?
公式スキルチェックリスト(data_engineering.csv)の★1つ星は、入れ子の繰り返し処理である二重ループなど、計算負荷の高いロジックを特定し、アルゴリズムの改善策を検討できることです。外側と内側をそれぞれn回実行すれば、内側の処理回数はn×n回になる、という数え方が土台です。
ホワイトボックステストとブラックボックステストは、何が違いますか?
ISTQBのシラバスでは、ブラックボックスは対象の仕様(期待される動作)の分析に基づき、内部構造を参照しません。ホワイトボックスは対象の内部構造と処理の分析に基づくので、設計や実装が決まってからでないとテストケースを作れません。
分岐テストは、ホワイトボックスとブラックボックスのどちらですか?
ホワイトボックスです。ISTQBのシラバスでは、分岐テストを、if文の真・偽のようなコード中の分岐をテストケースで実行する技法と説明しています。ただし、分岐を1回ずつ通すだけでは、特定の経路でだけ起きる不具合を見つけられない場合があるとも書かれています。
二重ループは、必ず悪い書き方ですか?
いいえ。件数が少なければ問題にならないことが多く、問題になるのは、件数が増えたときの処理回数です。1,000件で100万回の処理が、10,000件では1億回になります。件数が増える見込みのある処理かどうかを見て、改善が必要かを判断します。
