クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

ソフトウェアテストとは何か

このレッスンのあとで: どの種類のテストが、どの種類の欠陥を見つけるか、説明することができる。

50分のレッスンコマンド3件毎日使う Linux コマンドのラボ:エンジニアが暗記している30のコマンド

ソフトウェアテストとは何か

ソフトウェアテストとは、プログラムが正しく動くかを、実際に動かして確かめる作業です。バグが見つかれば、利用者の手に届く前に直せます。

ネット通販で、支払いの画面がときどき止まったとします。注文は消え、客は店を離れます。公開前に見つけていれば、直す手間はずっと小さかったはずです。

このレッスンのゴール

メモ

どの種類のテストが、どの種類の欠陥を見つけるか、説明することができる。

キーワード

ことばいみれい
欠陥プログラムの中にある間違い。バグとも呼ぶ
故障欠陥のせいで、動きが期待と違ってしまうこと
テストケース入力と、期待する結果の組120円を3個で、360円
単体テスト関数1つのような、小さな部品だけを確かめるテスト
結合テスト部品どうしのつながりを確かめるテスト
システムテスト完成した全体を、利用者の目で確かめるテスト

学生が入力するセルは、このプレビューでは空白です。

欠陥は原因で、故障は結果

プログラムの中の間違いが欠陥です。その欠陥のせいで、動きが期待と違ってしまうのが故障です。

欠陥があっても、その行が動かなければ、故障は起きません。だから、見えない欠陥が残ります。

テストは、わざと動かして故障を見つけ、そこから欠陥をたどる作業です。

例: 1つの欠陥と見える故障

場面欠陥(コードの間違い)故障(利用者が見るもの)
割引の計算引くところで足している割引のはずが値段が上がる
運賃の判定12歳未満を12歳以下と書いた12歳が子ども運賃になる
ログの集計ERROR を error と書いたエラーの数がいつも0になる

学生が入力するセルは、このプレビューでは空白です。

ログの故障の記録を見る

コマンド
grep ERROR /var/log/test.log | head -n 2

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ログの ERROR 行は故障の印

/var/log/test.log は、ラボのマシンが残す動きの記録です。上のコマンドは ERROR を含む行を2行だけ出します。

出力は、日時のあとに ERROR payment service did not answer と続く2行です。支払いのサービスが答えなかった、という意味です。日時は人によって違います。

答えだけが違う故障

コマンド
python3 -c "print(0.1 + 0.2 == 0.3)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

止まってしまう故障

コマンド
python3 -c "print(10 / 0)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

「テストで故障が出なかったから、バグはない」と考える人が多くいます。実際は、その入力で欠陥の行が動かなかっただけかもしれません。テストは、欠陥があることは示せますが、ないことは示せません。

段階ごとに見つかる欠陥が違う

テストは、確かめる範囲で3つの段階に分かれます。

単体テストは、関数1つを確かめます。速くて、原因も絞れます。結合テストは、部品どうしの受け渡しを確かめます。

システムテストは、利用者と同じ操作で全体を確かめます。遅いですが、全体の流れの欠陥が見つかります。

例: 3つの段階を比べる

段階確かめる範囲見つかる欠陥の例速さ
単体関数1つ計算や条件の間違い速い
結合部品どうしのつながり渡す値の形のずれふつう
システム完成した全体注文から支払いまでの流れの崩れ遅い

学生が入力するセルは、このプレビューでは空白です。

バグは遅く見つけるほど高くつく

同じ欠陥でも、見つかる時期で直す費用は大きく変わります。

書いた直後なら、書いた本人がすぐ直せます。公開後は、調査、修正、再テスト、お詫びの連絡まで必要です。

下の表の数字は、考え方を見せるための仮のものです。

例: 見つかる時期と費用

見つかる時期直す人費用の目安
書いた直後書いた本人約1,000円
結合テストのとき担当者2人約1万円
公開前のシステムテスト担当者4人約5万円
公開後に利用者から担当者と窓口約30万円

学生が入力するセルは、このプレビューでは空白です。

5件のバグの費用を出す

コード: python
# 見つかる時期ごとの費用(円)。説明用の仮の数字です。
cost = {"書いた直後": 1000, "結合テスト": 10000, "公開後": 300000}
bugs = 5
for stage in cost:
    print(stage, bugs * cost[stage])
# bugs を 20 に変えて、もう一度実行しましょう。

このラボとソースについて: 毎日使う Linux コマンドのラボ:エンジニアが暗記している30のコマンド

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。