やっぱりテストは重要!ソフトウェアテストの大事さを改めて学んだ話

2019.03.12

こんにちは。Findyで副業をしている、桑原(@k-kuwahara)です!

約一ヶ月前になってしまいますが、プログラミング言語「PHP」のフレームワーク、Laravel をテーマにしたカンファレンスが日本で開催されました。その名も Laravel JP Conferenceです。私は PHPテストワークショップというセッションのスタッフとして参加させていただきました。

今回は、このワークショップを行うに当たって考慮したことや、改めて感じたテストの大事さ、そのメリット・デメリットについてお話をしたいと思います!

※余談ですが、なぜカンファレンスのタイトルに #1 が付かないかと言いますと、『第二回を考えていないから』とのことでした(笑)

Laravel とは?

おそらく PHP を触られている方のほとんどがご存知かと思いますが、 Laravel(日本語のサイト) とは、近年 PHP 界隈で最も人気のフレームワークの一つです。以下は日本に絞ったGoogle Trendの結果となっており、青色が Laravel で、赤色が Symfony です。Symfony も根強い人気ですね。

PHPフレームワーク比較

ワークショップの内容

上記のリンク先のサイトにも記載してありますが、今回のテストワークショップの内容は、ざっくりと以下とさせていただきました。※多少文言は変更しております。

  • ソフトウェアにおけるテストの概要説明
  • テストのメリット・デメリットを再確認
  • PHP を用いた初めてのユニットテスト
  • 実践的なテストのハンズオン
  • まとめ

今回、3時間ほどワークショップの時間をいただきまして、何をやろうかとメンバーと議論しました。色んな意見が出ましたが、「やっぱりテストが大事だから、しっかりテストについて手を動かしてもらおう」「テストの導入はそれほど難しくないと感じてもらいたい」「テストを書くことを習慣化してもらいたい」という点でテストに振り切ることになりました。

当初は Laravel のカンファレンスですので、もちろん Laravel を利用したテスト(ただしこの内容は実践編)も考えておりましたが、参加される方々のペルソナを考えた時、PHP を業務で3ヶ月ほど書いたことがあり、PHP の基礎は理解しているが、テストはまだ書いたことがないという方を対象と考えましたので、Laravel でのテストについては、今回は見送りとさせていただきました。

今回のワークショップの教材が GitHub にも上がっておりますので、もしご興味ある方は、試してみてください!
URL: https://github.com/engineers-lt/laracon

テストの種類について

ここで簡単にソフトウェアにおけるテストの種類に触れてみたいと思います。今回は、ホワイトボックステスト・ブラックボックステストなどの観点による分け方ではなく、テストの目的別に分けました。

アドホックテスト
(モンキーテスト)
ユニットテスト
(単体テスト)
ファンクショナルテスト
(機能テスト)
インテグレーションテスト
E2Eテスト)
テスト対象やテストの確認手順などを事前に定めず、実施者がその場の思いつきによるテストです。 アプリケーションのテスト可能な最小の部品単位、プログラムのユニット(モジュール)について正しく動作しているか検証するテストです。 ユーザー側から要求された機能をシステムが満足しているかどうかを検証するテストのことです。 「End to End」の略で、Webサイトやアプリケーションの「開始から終了まで」が、期待通り動いているかをテストします。

アドホックテスト以外については、各言語それぞれのテストフレームワークが多数開発されております。例えば PHP については、PHPUnit というものが有名です。今回のワークショップでは、この PHPUnit を用いたユニットテストについてのものとなります。

自動テストのメリット・デメリットについて

ここが本題になりますが、今回のワークショップの準備や当日の参加者の方々の感想から、改めて感じたメリット・デメリットについてお話したいと思います。

○メリットについて

  • 仕様の確認ができる
  • 仕様漏れ、仕様バグが見つかりやすい
  • ある程度の品質が担保できる
  • リグレッションテストが簡単にできる
  • CI/CD と連携することが多いのでスキルアップに繋がりやすい
  • 機械がテストするので、何度回してもミスがない

ざっくり一言で申し上げますと、自動化によりヒューマンエラーと人的コストが削減できるという点がメリットですね。これは自分の経験からも、物凄くマッチします。

なんだかんだ人間はミスをするものです。その人間が、仕様も考える、テストケースも考える、実際にテストもする。それら全てに、ヒューマンエラーがつきまとってきます。それを削減できるのはとても大きいのではないでしょうか。

○デメリットについて

  • テストを書く工数がとられる
  • テストコードのメンテナンスコストがかかる

こちらもざっくり一言で申し上げますと、とにかく人的コストがかかるという点に尽きます。必要がないと言えばないです(マンパワーでテストはできる)し、現場によっては自動テストを信用していない方もいるので導入障壁があることもありますね。

○メリット・デメリットを通して

色々書きましたが、個人的にはメリットの方が多いのではないかなと感じております。デメリットの点をカバーして余りあるとも思います。

結局開発現場でコストがかかるのは、コミュニケーションコストを除くと、ヒューマンエラーが大部分を占めると思うからです。

そこを削減できるので、結果としてコストの削減に繋がると思います。

皆さんもソフトウェアテストに挑戦してみましょう!

繰り返しにはなりますが、やはりテストは書けるなら絶対に書いたほうが良いと改めて思いました。今の自分達の仕様について再認識、再確認ができますし、また未来の自分たちを助ける可能性が大いにあります。

また、継続的に開発する場合はCI/CDを回すこと、品質の担保のためにテストを回し続けることになると思いますが、その場合、自動テストは本当に我々を助けてくれます。

もし今の現場でまだテストを導入されていない方も、余裕があれば是非テストにチャレンジしてみてください!スキルアップにも繋がりますし、他の現場、企業でも全然通用する素晴らしいものですので、まったく損がないです。

テストを書いて、安心と楽しいプログラミングライフを!

Findy では、GitHubのリポジトリから、エンジニアのスキル偏差値を計算する機能がありますので、個々人のアウトプットを頑張られている方はぜひ一度試してみてください!

また、Findy Freelance というフリーランス・副業エンジニア向けのサービスでも、フリーランスとして、または副業としてどうキャリアを作っていくかのサポートも行っております。

何か小さな事からでもチャレンジしてみたい!という方は、まずはこちらから自身のスキル偏差値を計測して、自分の実力を見てみてください!

フリーランス・副業の案件をお探しの方:
フリーランス・副業エンジニア向けの単価保証型の案件紹介サービス Findy Freelance

中途転職を希望の方:
ハイスキルなエンジニアのプレミアム転職サービス Findy

Findyでは副業・社会人インターン採用も積極的に行なっています。興味を持っていただいた方はぜひこちらからご応募どうぞ!

Findy Engineer Labを購読してみませんか?
エンジニアの働き方やFindyの技術的な話などをお送りします!
フリーランス・副業エンジニア向け
単価保証型案件紹介サービス

エンジニアにとって魅力的な、リモートOKで週2〜3可の案件をあなたの希望単価でご紹介サポートします。

担当より:
4月中盤から高単価の案件増加中!
CTO の佐藤も「リモートかつスキルアップできそう!」と気になるくらい案件がありますので案件の詳細を是非見てくださいませ!

https://freelance.findy-code.io/
  • Category

  • About

  • Service

    フリーランス・副業向け
    単価保証型案件紹介サービス

    ハイスキルなフリーランス・副業エンジニア向けに案件紹介

    https://freelance.findy-code.io/
    ハイスキルなエンジニアの
    プレミアム転職サービス

    スキル偏差値が高いエンジニアに、人気のテック企業からオファーが届く

    https://findy-code.io/
    リアルタイムAI求人票採点サービス

    AIを使ってリアルタイムに求人票を採点

    https://findy.us/