天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

スクフェス新潟で発表した際の参考資料まとめ

スクラムフェス新潟でJUnitとTest Smellsについて話をしてきたのですが、その際にインプットとして使った資料を参考文献として紹介しておきます。

Refactoring Test Code

Test Smellsの原点。xUnit Test Patternsは存在こそ知っているものの本が分厚すぎて読める気がしない...という人はこのPaperだけでも読んでおくとぜんぜん違うと思うので、この発表で初めてTest Smellsを知ったという人はまずここを読むのがおすすめです。

Test Smellsは研究が進んでSmellsの分類に幾つか種類がありますが、発表のカテゴリ分けはこの論文をベースにしています。

xUnit Test Patterns: Refactoring Test Code

Test Smellsというと多分大体の人はこの本を思い浮かべるはず?

今回は参加者層にQAの方が多めなカンファレンスだったこともあり、既知の内容として発表では内容に全然触れられていないですが、テストフレームワークのバージョン関係ないBasicなリファクタリングテクニックはこちらを参考にすると良いかと思います。

JUnitユーザーガイド

言わずと知れたユーザーガイド。アップデートの内容やJUnit5で組み込まれたという事実の確認はこちらで行いました。

Haitao Wu, Ruidi Yin, Jianhua Gao, Zijie Huang, Huajun Huang “To What Extent Can Code Quality be Improved by Eliminating Test Smells?”

Test Smellsが少ないのに越したことがないのはそうだけど、Test Smellsってそんなにコードの品質に拘ってくるの?という話がきになる人はこちらを読んでみてください。

テストコードの品質って相対的にプロダクションコードより軽視されがちだよね、という話や、コードの変更容易性とコードの欠陥率にTest Smellsの数が影響していることが示されています。

N. S. Junior, L. R. Soares, L. A. Martins, and I. Machado, “A survey on test practitioners’ awareness of test smells,”

Test Smellsが埋め込まれる背景の話はだいたいこのSurveyを参考にしました。
個人の技量不足というのは想像に容易いと思いますが、テストコードの自動生成ツールや会社で標準化された習慣もTest Smellsに寄与するというのはTest Smellsを除去しようと考えていく上で結構大切なポイントかな、と思ったので紹介しました。

他にも、Test Smellsの混入率はドメインによって変わってこないという話も興味深いです。

A. Peruma, K. Almalki, C. D. Newman, M. W. Mkaouer, A. Ouni, and F. Palomba, “On the distribution of test smells in open source Android applications: An exploratory study,”

WebアプリケーションだけではなくモバイルアプリケーションでもTest Smellsって普通に発生するものだよ、という話を紹介する際に使いました。

モバイルアプリケーションがコンテキストになっているSurveyだったので発表ではそこまで触れなかったのですが、非常に面白い論文で、モバイルアプリケーション開発をしていく際にどういうTest Smellsがどういうタイミングで混入されやすいのか?という話をしている貴重な論文です。

Soares, Elvys; Ribeiro, Márcio; Amaral, Guilherme; Gheyi, Rohit; Fernandes, Leo; Garcia, Alessandro; Fonseca, Baldoino; Santos, André “Refactoring Test Smells: A Perspective from Open-Source Developers”

Test Smellsはコードを普段から書いている人の多くが違和感を検知することができる(≒可読性が低いと感じる)という話を紹介する際に使いました。

開発者の主観ではあるものの意外と定量的にTest Smellsの認知に対してデータを取っているSurveyが少ないので、貴重な論文です。

J. De Bleser, D. Di Nucci, and C. De Roover, “Assessing diffusion and perception of test smells in Scala projects”

Test SmellsにまつわるSurveyはJavaJUnitを用いているものが大多数であり*1Scalaで調査がされている貴重なSurveyです。

Refactoring Test Smells: A Perspective from Open-Source Developersの論文では開発者がTest Smellsを認知できることが示されていましたが、なんで問題があるのかはほとんどの開発者が言語化できないというのは、Test Smellsについて改めて学ぶ一つのモチベーションになるかな?と思い発表で紹介していきました。

Scalaというコンテキストだったのであまり紹介できなかったのですが、Assertion Rouletteやlazy Testが特に発生しやすいという話などはなかなか興味深いです。

Manuel De Stefano, Fabiano Pecorelli, Dario Di Nucci, and Andrea De Lucia, “A preliminary evaluation on the relationship among architectural and test smells”

アーキテクチャとTest Smellsの関係性について書かれている論文なので、Test Smellsが埋め込まれる背景の部分で簡単に紹介しました。

今回は発表のスコープ上あまり紹介できていないのですが、テスティングフレームワークのバージョンアップをしてもアーキテクチャがひどすぎてTest Smellsが普通に埋め込まれるというのはまあまあある話らしいので、心当たりがある方はぜひ読んでみてほしいのですが、個人的にはあまり内容に共感できませんでした。(論文で言われているアーキテクチャ上の課題がなぜTest Smellsに結びつくのかの説明があまり理解できなかったため)

Dong Jae Kim, Nikolaos Tsantalis, Tse-sun (Peter) Chen, and Jinqiu Yang, “Studying Test Annotation Maintenance in the Wild”

今回の発表をしようと思ったきっかけになった論文です。

開発者はTest Smellsをやむをえないものとして捉えているものの、実はテスティングフレームワークを最新化すると解消できるものだったりするよ、という話が書かれています。

Elvys Soares, Marcio Ribeiro, Rohit Gheyi, Guilherme Amaral, and Andre Santos, "Refactoring Test Smells With JUnit 5: Why Should Developers Keep Up-to-Date?"

上記のStudying Test Annotation Maintenance in the Wildの話が拡張されているものであり、発表中に紹介したTest Smellsの解消例に関してはこちらの論文を参考にしています。

また、JUnit5って2017年のものだけどまだアップデートされていないの!?と驚く人もいるかもしれなかったので、Javaの主要OSSですら15.9%しかJUnit5へのアップデートが完了していないことの説明としても使いました。

*1:今回の発表のテーマをJUnitとしたのもそれが理由