新卒2人がテストのカバレッジを0%→80%にした話
POSチームの北邑です!
前回の投稿で1年を振り返ってみたんですが、深掘りできそうなところありそうだなと思い今回は、配属後最初に取り組んだ課題について話してみようと思います。前回がポエムすぎたので今回は申し訳程度には技術要素を入れました。
課題説明
最初に取り組んだ課題は「ハンズカフェポイントアプリ」の改修で、ざっくりと分けると
- 増税・軽減税率の対応
- テストコードの追加
の2つになります。
課題と同時に
- チームで課題管理に使っているBacklog
- ソースコード管理に使っているGithub
のチームでの使い方に慣れる目的があったのかなと思っています。
ハンズカフェポイントアプリ
課題の前に簡単にアプリの紹介をしておきます。
ハンズカフェポイントアプリ(以後カフェアプリ)とはハンズカフェで従業員の方が使うアプリとなっています。
アプリとしてはシンプルで画面数も少なく、ログイン・会員情報入力・金額入力・付与完了といった流れのアプリです。(↓こんな感じ)
増税・軽減税率の対応
テストの話をタイトルにしたんですが、増税・軽減税率対応についても触れておこうと思います。
去年の10月から税率が上がり、さらに条件次第では税率が2つになるという制度になりました。
これに対応するという課題だったんですが、税率が二つになることはあまり考慮されていなかったようで、少し苦戦しました。(過去に行って税率2つになるからねと言っても信じてもらえなさそう?)
金額を入力(税込) → 税剥がし → ポイントAPIへという流れだったので入力欄を増やす必要があり、入力欄を増やすと画面上のキーボードと被ってしまってたのでキーボードの位置を修正する処理を入れました。
/// キーボードを開いた時の動作
///
/// - Parameter textField:
func textFieldDidBeginEditing(_ textField: UITextField) {
// 該当cellの高さを取得
let cell = self.tableView.cellForRow(at: IndexPath(row: 2, section: 1)) as! PlusPointTableViewCell
let height = cell.bounds.height
// 該当cellの高さ分画面をスクロール
self.tableView.contentOffset = CGPoint(x: 0, y: height)
}
/// キーボードを閉じようとした時の動作
///
/// - Parameter textField: 付与対象額
/// - Returns: 編集終了の可否
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
// tableViewの位置(scroll)を戻す
self.tableView.contentOffset = CGPoint(x: 0, y: 0)
(調べてできてちょっと嬉しかった記憶がある)
画面以外でも税率が2つになることでAPIを2回叩く必要があったりと、変数や処理が全体的に2つになりました?
テストコードの追加
タイトルにもしている本題ですが、アプリ作成当時のメンバーはいなかったため、詳しい意図はわかりませんがテストコードはない状態でした。
それをチームにジョインした新卒(当時)2人がカバレッジ80%くらいまで作成したという話です。
テストに使用するライブラリはHandsPOSで使っているQuick/Nimbleを使用しました。2名ともこのライブラリ使ってテストを書いたことはありませんでした。
Quick/Nimble
QuickはSwiftの(Objective-Cも)テストフレームワークで、デフォルトのテストと比べて書きやすい・見やすいようです(デフォルトのテストを書いたことがなく調べました…)
NimbleはQuickのmatcherとして使われるものみたいです。
あまりわかってなかったので教えてもらいました。どちらもGithubのREADMEも充実しているのでありがたいです。
進め方
テスト追加の課題はグループごとに分けて、2人で分担して作業しました。
(書きやすいところを主にやらせてくれた?♂️)
Backlogは親課題・子課題を使って管理
レビューもHandsPOSと同じく2レビュワー制(って言うのかわからないけど)で行い、1人は担当していない片方、もう一人はメンターの方にレビューしていただいてマージするという流れでした。
そんな感じで進めていきXcodeのカバレッジは以下の画像の通り84.5%まであげることができました!!タイトル回収!!
まとめ
この課題でテストの書き方、課題の進め方、レビュー方法が覚えられたかなと思います。
記事を作成するにあたってプルリクを見たり、Backlogの課題をみたりして1年とは思えないほど昔に感じました。これからも最初に取り組んだ課題を時々思い出しながらやっていきたいなと思います。おわり!!