ソフトウェアテストってどんなお仕事ですか?
こんにちは。CATエヴァンジェリスト・石井優でございます。
私たちはソフトウェアテストという仕事を中核の業務の一つとして行っております。
このソフトウェアテストという業務、一般の方にとってはなかなか馴染みのない業務であり、どんな意義があるのか、何をやるのか?と疑問に思われることが多いです。
私自身、この業務について公私共に説明することが多いのですが、説明には少し工夫を要します。
今回このソフトウェアテストというお仕事について説明します。
皆さんの周りにはたくさんのソフトウェアが存在している
ソフトウェアというとパソコンやスマホのアプリケーションを想像する方が多いかもしれません。
しかしソフトウェアというのはさまざまなところに存在します。
例えば銀行でお金を下ろすとき、あなたがあなたであることを認証したり、金額を入力してお金を払い出したりするとき。
ソフトウェアが残りの金額や払い出す紙幣の枚数の計算を行っています。
エレベーターで移動するとき。
ソフトウェアがあなたの行きたい階の高さまでの距離やスピードを計算しています。
こうして裏ではさまざまなソフトウェアが存在して動いています。
ソフトウェアの動作は誰かによりテストされ保証されている
そんなふうにさまざまなところにあるソフトウェア。
もしこれが正しく動かなかったら…ということを考えたことはありますか?
ATMでお金を下ろしたとき、指定した金額のお金が出てこなかったら。
エレベーターのドアが開いたとき、正しい位置ではなく出られなかったら。
日常ではそんなことはありませんが、それは提供している会社がソフトウェアが正しく動作することを事前に念入りに確認をしているからです。
この確認作業がソフトウェアをテストするということです。この作業がとても重要になります。
ただ、確認するのはわかったが、なんで正しく動くことを確認するのか?という疑問はありませんか?
ソフトウェアをプロのエンジニアが作ったら確認しなくても正しく動くのでは?と。
この疑問に答えるには次の2つのことを知る必要があります。
どうやってソフトウェアを作るのか?
ソフトウェアは誰がどうやって作るのか。
ソフトウェアを作る人たちは通常、システムエンジニアとかソフトウェアエンジニアと呼ばれます。
この人たちはまず作るべきソフトウェアがどういうことをするのか?を決める必要があります。
ATMに入力した通りにお金を計算して渡す
行きたい階を押したらエレベーターのドアを閉め、移動して止める。そしてドアを開ける
そうしてソフトウェアのやることを決めたら、それをコンピューターで実現できるようにプログラムを入力して作成します。
そうするととりあえず動くソフトウェアができました。
例えばATMのソフトウェアを作成した瞬間、一見ATMからお金が出てくるので正しく作られているように思えます。ですがここには必ず不具合があります。
どうして不具合が起きるの?
ソフトウェアを作るときには、例えば以下のような背景から不具合が発生します。
背景(原因となる状況や条件)
エンジニアがソフトウェアがやることの解釈を間違えていた
エンジニアの技量が足りなかった
複雑な入力や、人間が予想外の入力をしたときの挙動を考慮していなかった
コンピューターが想定外の性能で遅かった
実際に埋め込まれた欠陥(具体的な不具合)
計算する単位を間違えていた
入力するときに命令の打ち間違いをしていた
想像していたものと違い、使えない表示の仕方をしていた
人間が作って、正しく動くかを確かめていないものというのは必ず間違っているんですね。
ソフトウェアを作るのは、パソコンで文章を書くことに似ています。
文章を書くと、誤字脱字や間違った言葉遣いが必ずありますよね。
漢字の変換ミスもよくある要因の一つです。
また、例えば「はしに関する文章を書いておいて」と依頼されて、「橋に関する文章」を書いたものの、本当は「箸に関する文章」が必要だったというような伝達ミスがあるかもしれません。
これと同じように、ソフトウェアを作る際にもミスや誤解が生じます。
たとえば、ATMで1,000円を引き出すための入力を行ったのに、数値の扱いを1桁間違えていて100円しか出てこないなど。
このように、とりあえず作ったソフトウェアというのは正しく動かない可能性が高いのです。
だから、ソフトウェアが正しく動作し、ユーザーの期待通りに動くかどうかを確認するために「テスト」が必要なのです。
テストって簡単?
テストの必要性はわかっても、「ATMで1,000円を引き出したいとき、1,000円が出てくることを確認すればいいんでしょ?テストって簡単じゃないの?」と思う方もいるかもしれません。
しかし、これがなかなか難しいのです。
ソフトウェアが遭遇する状況は非常に多岐にわたります。
例えば、ATMで金額を入力する際には次のような人がいるかもしれません。
0円を入力する人
1億円を入力する人
紙幣しか扱えないのに2円を入力する人
また、口座の状態もさまざまです。
引き出そうとする金額が口座にある状態
残高が1円足りない状態
借金がありマイナスの状態
口座が凍結されている状態
さらに、以下のような状況も考慮する必要があります。
ATMに引き出したい金額の紙幣が物理的に存在しない
急に停電になり口座にアクセスできなくなる
このように、ソフトウェアが遭遇する状況には無数の状態が存在します。
そのため、ソフトウェアに関わるさまざまな条件や状態を定義し、必要なテストを行う必要があります。
そうするとテストする組み合わせがとても膨大になり予想外のことが起きる可能性が高くなります。
では、例えば金額を入力するときにの確認のとき。金額を0円から10,000,000,000,000円まで1円ずつ足して入力するのでしょうか。
全部入力するのは時間が足りませんね。ですからソフトウェアが扱う条件に応じて必要と思われる値を洗い出してテストする項目数を限定して行う必要があります。
0、1、4、5、9、10、11、15、...9,999、10,000など。(こういった値の種類はその時のテストの条件で変わります)
どうやれば限られた時間の中で効率よく、かつ抜けがないようにテストをするのか?
こう考えるととても難しいのです。
だからテストの戦略ややり方の工夫、管理が必要になります。
ソフトウェアをテストする人たちは、こういったことをさまざま考慮してソフトウェアが正しく動くことを確認します。
そしてやっと正しくお金が引き出せるATMや安全に移動できるエレベーター、その他様々な製品が使う人のもとに届きます。
テストは責任である
私はソフトウェアのテストというのは、ソフトウェアを提供する人たちの責任であると考えています。
ソフトウェアが正しく動作しなかった時、使う人の状況はとても困ります。もしかしたら人の命に関わるかもしれません。
ですからテストをすることというのは、とても大切なことなのです。
社会においてシステムやプログラムを作るということは、プログラミングをすることや何か見えるものを作ることがフォーカスされがちです。
ですが、その中にはテストをして正しく動くことを確認するという技術や仕事があるということをぜひ知っていただければ幸いです。
ではでは!
(宣伝)
私の担当するテスト管理ツールのCATもよろしくお願いします!公式HP
✅SHIFTのテストで品質チェックしてみませんか?
✅おすすめマガジン
✅SHIFTへのお問合せはお気軽に
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/
PHOTO:UnsplashのCraft Kitties