Wantedly(ウォンテッドリー)はたらくを面白くするビジネスSNS
Wantedlyは、運命のチームや仕事に出会えたり、人脈を広げ、ビジネスの情報収集に使えるビジネスSNSです。
https://www.wantedly.com/companies/company_3056942/post_articles/4559822
こんにちは、イチアール株式会社人事担当です。
近年、プログラミングが一般的になり新しいプログラミング言語も生み出されてきています。
新しいものができた際に欠かせないのがテストや検証です。
本記事では、そんなテストの中でも最初に行われる単位テストについてご紹介していきます。
単体テストは、ユニットテストとも呼ばれているソフトウェアのテストの種類です。
プログラミングを構成している最小の単位がそれぞれ意図したとおりに機能しているかを検証するテストです。最小の単位とは、一般的に関数やメソッドとなります。
テストの内容は、想定される引数の組合せなどを入力してみて、エラーが起きないかどうか、意図した結果が出力されるかなどを確認します。
関数などの単位では、実行プログラムとして単独で実行できないことが多いため、テスト用のプログラムが必要です。
現在は、テスト用のプログラムを自動生成してテストを実行し、結果を表示するツールもあります。また、現場ではコードの記述者がテストツールを用いて単体テストを済ませるスタイルが広まっています。
ソフトウェアのテストの種類には、単体テスト以外にもいくつかの種類があります。
そのうちの一つに結合テストというものがあります。結合テストとは、実際に動作する状態に近い環境でソフトウェアの挙動を確認するテストのことです。
具体的には、データの受け渡しが問題なく行われているか、データを渡すタイミングが適切かどうかなどを判断します。
結合テストと単体テストの一番の違いは、テストをする範囲です。
単体テストは、最小の単位でのテストを行い、個別に性能や挙動を確認します。一方で、結合テストは、複数の性能や画面に対してテストを行い、性能間や画面間で問題なくデータの受け渡しができているか、挙動に問題がないかなどを確認します。
単体テストの一番の目的は、小さなプログラム単位での不具合を見つけ取り除くことです。不具合を早期発見することで、修正を最小限に抑えることができます。後の工程で行われるテストの効率を上げることにもつながります。
単体テストが不十分だと、後のテスト不具合やバグが発生した際に原因を見つけることが大変になります。また、今後同じ関数やモジュールを使う際に不具合やバグが起こる可能性もあります。
単位テストの一番のメリットは、コードの改善効果が高い点です。単位テストを行うために、作業時間はかかってしまいますが、環境を一度整えることで、不具合の修正やテストを効率よく行うことができます。
テストを行うことで、不具合の修正ができるのはもちろんのこと、よりプログラムの品質や効率が高いものに改善することもできます。環境が整っているとコードの記述直後にテストすることができるので、より詳しい内容まで修正や改善することができます。
テストの対象が小さいという点もメリットです。テストの対象が小さいと不具合やバグの原因を見つけやすいだけでなく、修正する際にも最小の工数で済ませることができます。
単体テストのデメリットは、コードの記述者の負担が大きくなりやすい点です。現場ではコードの記述者がテストツールを用いて単体テストを済ませるスタイルが広まっています。
開発するだけでも工数がかかるのですがテストも行うとなると更に工数が必要となり、その分だけ負担となります。必要な工数が確保できているのであれば問題はないのですが、確保できていない場合は、単位テストが省略されたり簡易的なものになったりして不完全なものになりやすいです。
そういったことを避けるために、あらかじめ単位テストに必要な工数を考慮してスケジュールを組みましょう。
単体テストだけでなくソフトウェアのテスト範囲は、開発しているソフトウェアによって様々です。一般的なソフトウェア製品の開発であれば、「記述したコードをすべて一度は動かしてみる」ということをオススメします。それ以上のテストは、開発するソフトウェアの品質やテストの結果に応じて決めると工数を最小にすることができます。
最初から高い品質で考えるのも大切ですが、納期が短かったり、スケジュールが詰まっているときだと作業者への負担が大きくなってしまいます。全体のスケジュールや納期から逆算して、必要最低限の内容でテストを終わらせられるようにしましょう。
テスト仕様書は、インプットとなる成果物ができた直後から作成することは可能です。ですが、一般的には、テスト工程の直前に作成されることが多くあります。
テストの直前に仕様書を作成する場合は、テスト仕様書の精度が高くなるので、プロジェクト管理や採算管理が楽になります。成果物ができた直後にテスト仕様書を作成する場合は、間違いや漏れを発見しやすいです。
どちらもメリットだけでなくデメリットもあります。可能であれば、青果物ができた直後にテスト仕様書を作成し、テスト工程の直前にチェックや修正が出来ればよりよいテストやテスト仕様書を作成することができます。
ITaとITbは、それぞれ結合テストの工程を示します。ITaは、結合テストの前半工程、ITbは、後半工程のことをさします。
前半と後半の分け方やテストの内容は、企業や現場、プロジェクトなどにより異なります。テストを実施主体の違いにより前半と後半を分けることもあります。
具体的には、プログラムの開発元が行うテストをITa、発注元や外部の開発主体が行うテストをITbとする例もあります。また、システムの規模や構造に基づいてサブシステム内の結合テストをITa、サブシステム間の結合テストをITbと分けることもあります。
単体テストには大きく分けて、「ホワイトボックステスト」と「ブラックボックステスト」の2種類があります。ホワイトボックステストは、テスト対象の内部構造に着目するテストです。
主に、分岐条件や繰り返し処理、例外処理などのあらゆる事態に対して動作確認を行います。コードを記述した時の記述ミスや分岐条件の間違いなど単純なミスがないかを検証できます。
ブラックボックステストは、プログラムが要求仕様を満たしているかを確認するテストです。主に外部仕様に着目するテストで、ユーザー側のテストとも呼ばれています。
外部仕様から想定される入力やそれに対する出力結果を確認するテストケースを作成し検証します。プログラミングの性能だけでなく、使いやすさやわかりやすいデザインなど、ユーザーが実際に見たり使ったりする範囲のテストも行います。
ソフトウェアのテストは、複数のテストが行われ最終的にすべて合格できたものがクライアントに納品されます。そのテストの中で最初に行われるのが、単体テストです。
ソフトウェアに組み込まれている関数やモジュールなどをひとつずつテストして不具合やバグがないかを確認していきます。一般的に、期間は2週間から1ヶ月ほどです。
この期間で不具合やバグがあれば修正をして、問題がなくなるまでテストを繰り返します。単体テストですべて問題がなければ、プログラム同士のデータの受け渡しなどの連携が取れているかを確認する結合テストを行います。
結合テストの期間は2週間程度です。
ソフトウェアを開発するうえでテストは欠かせません。
その中でも、最初に行われる単体テストについて紹介していきました。
イチアールは、未経験から開発エンジニアを一歩を踏み出す人をサポートする会社です。
ぜひ、未経験から一緒にエンジニアを目指しませんか。
ご興味がある方は、ぜひ気軽にお話を聞きに来てください!