1
/
5

サービスの質を上げるための取り組み|#社内ブログ21

HRBrainでエンジニアをしております。鈴木です。
本日は弊社で行なっているサービスの質を上げるための取り組みについてご紹介させていただきます。

リリース当初、サーバーサイドのテストのカバレッジが低く、全体でラインカバレッジが70%下回ってしまっていました。その所為もあってか新しい機能をリリースすると前に作った機能で軽微なデグレードが起きてしまったりと、品質がいいとは言えない状況でした。

その度にユニットテストを追加したりしていましたが、なかなかの品質もカバレッジも上がっていきませんでした。またテストも難解で書くのに時間がかかってしまっていました。その原因はアーキテクチャにありました。

今までのアーキテクチャはMVC意識したアーキテクチャでテストは下記ような方法で実装されていました。(ちなみにサーバーサイドはGoを使っています)

func TestXxx(t *testing.T) {
// DBにテストデータをセットする

// いくつかのテストケースでテストする

// テストデータの削除
}

このようにテストデータをあらかじめ実際にいれてからテストをする形式になっていました。Controllerでも同様のテストの形式になっていたためControllerに近づくほどより複雑なテストになっていました。

またテストデータを実際にいれて行なっているため、同時にテストを実行すると、テストデータが競合しタイミングによっては失敗するテストとなってしまっていました。

そのためGoではテストが自動で並列に実行してくれるのですが、並列数を1にし同時にテストが走らないようにして実行していました。その結果テストの実行時間が無駄に掛かってしまっていました。

go test -parallel 1 ./...

これらを解決し品質の向上のため、アーキテクチャの刷新を行いました。

クリーンアーキテクチャを導入し、関心の分離を厳しく行うようにしました。
DIすることによってControllerのテストもモックを利用することによって純粋にそのメソッドで扱っている内容のみをテストできるようになりました。
またデータベース関連のデータも全てモック化することにより競合も起きず、同時でテストを実行できるようになりました。

これらを導入することによって7割に満たなかったラインカバレッジが95%を超えるようになりました。

先日、CyberAgentさん主催の BATTLE CONFERENCE UNDER30にてこちらの詳細を話させていただいた時の資料がこちらになります。

登壇時の様子

今後エンジニアとしてどう問題解決を行なったかなどの記事も続けてアップしていきたいと思います。

またHRBrainでは、一緒に品質の高いサービスを作ってくれるエンジニアを募集しています。
下記よりお気軽にご応募ください。

株式会社HRBrain的招募
6 Likes
6 Likes

本週排名

展示其他排名