LoginSignup
2
0

More than 3 years have passed since last update.

PHPカンファレンスレポート:PHPerのためのテストコード入門

Last updated at Posted at 2019-12-11

前提

PHPカンファレンスに参加してきたので、
セッションを聞いた感想というかレポート記事になります。
その他の記事は ここにあります。

この記事はPHPerのためのテストコード入門について記載します。

はじめに

テストコードの具体的な導入方法などではなく、
そもそもなんでテストコードって必要なんだっけと言った
そもそもの話をしていただきました。

テストの目的

そもそものテストの目的です。
・品質を可視化すること
・ソフトウェアのどの品質を高めるか、判断するための材料を提供すること
の2つ。

品質を可視化すること

品質という言葉はあいまいで見えずらい。
品質が守られているかどうかをテストを持って可視化することができます。

ただし、ソフトウェアテストだけでは品質を高められない。
品質を高めるためにはバグの修正が必要だからです。
そのため、あくまで品質の保証です。

ソフトウェアのどの品質を高めるか、判断するための材料を提供すること

バグの発見数とバグの内容から、次に品質を高めるべき箇所を判断したり、
リリース判定においてバグの発見数からをリリース可否の判断を行うなど。

テストコードの目的

品質と開発スピードを両立することです。

テストの7原則
ソフトウェアテストには7つの原則があります。
1.テストは「欠陥がある」ことしか示せない
2.全数テストは不可能
3.初期テスト
4.欠陥の偏在
5.殺虫剤のパラドックス
6.テストは条件次第
7.「バグゼロ」の落とし穴

上記のうち、
初期テストにもあるとおり、
バグは早期発見できればできるほど影響範囲が少なくなります。
リリース後であれば、関係部門への連絡・緊急リリース・恒久対応といった対応が必要となりますが、
同じミスが単体テスト時に発見できれば、コードを1行直すだけで済むかもしれません。
上記を考慮し、テスト工程を前倒すことをシフトレフトといいます。

では、シフトレフトはテストコードというだけで実現可能なのかという点で、
手動テストとテストコードを比較してみます。

手動テストとテストコード

手動 テストコード
タイミング 実装が終わったタイミングでみんなでテスト コマンド一発で終わるので、手動テストよりも早いタイミングで実行できる
正確さ ヒューマンエラーが起きる可能性 コードさえあっていれば何度実行しても同じ結果が実行できる

比べるまでもないですが、
バグの修正工数を減らしながら確実にテストを行うことができる。
よって品質と開発スピードを両立することが可能。

ただし、テストコードでは導入・メンテナンスコストが発生するので、
必ずしもテストコードが圧勝というわけではない。(手動テストでしかチェックできないテストもある)

様々なテストコードを知る

ユニットテスト

1つの関数やメソッドに対して、
I/Oを通して使用通りの挙動をしているか検証する。
※PHPUnitなどを使用

テストコードを使って、
入力値とそれに伴う出力値が期待値と比べてどうなのかをテストすることになります。

結合、統合テスト

featureテスト、APIテスト。
特定のリクエストを投げて、レスポンスされた内容が正しいかどうかを検証する。
※PHPUnitなどを使用

UIテスト

E2Eテスト。

ブラウザ上でclassやidを指定して自動操作をし、期待通りの動作をしているか検証する。
※PHPUnitやPHP-WebDriver、Seleniumなど

ユニットテストに近いほうが、
テストをしている範囲が狭く、原因の特定もしやすい。
そのため、できる限りユニットテストでカバーしていくことが合理的である。
どのテストをどれくらい書くかはテストピラミッドを参考にすべし。

おわり

テストコードを書いたことがないため、
学習コストから敬遠気味でしたが、
品質の可視化というのはまったくもってそのとおりだなと感じました。

プルリク前に本当に大丈夫だよなーとか何度も確認して、
結局どっかがミスってるとかの無駄な時間を削減できると考えて重い腰を上げる必要がありそうです。
また、まずは人が書いたコードでテストをやってみるというところから初めて、
エラーが出たらなぜ出たのかということから学んでいこうと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0