PHPMDのソースコードをPHPMDで静的解析したら、バグが見つかった

バグの詳細、プルリクのマージに3か月かかった理由

Takashi Iwamoto
Jul 9 · 3 min read

PHPMDは、PHPで書かれたソースコードを静的解析し、問題点を検出してくれるツールです。コードレビュー自動化サービスのSiderCodacyでも使われています。

好奇心からPHPMD自身のソースコードを静的解析したところ、問題点が検出されました。「未使用のローカル変数が存在する」というものです。コードを追ってみると、バグであることがわかりました。2019年3月のことです。

さっそくバグ修正プルリクエストを送り、結果的にはマージしていただけたのですが、マージまでに3か月かかりました。そこにはPHPMD側の事情があったのです。

今回の記事では、ぼくが見つけたバグの詳細と、マージに時間がかかった理由をご紹介します。

バグの詳細

バグは、CommandLineOptionsクラスのgetListOfAvailableRenderersメソッドに含まれていました。下記の内容です。

最後のreturn文にご注目ください。唐突に $list が出てきています。これは $renderers の誤りです。

※実際にはレンダラーが複数存在するため、それらをわざと削除しない限り、最後のreturn文は通りません。ユニットテストでバグが見つからなかったのはそのためです。

PHPMDはこの誤りを Avoid unused local variables such as '$list'. と検出しました。

未使用の変数は、今回のようなあからさまなバグでなくとも、単純にムダなので、積極的に削除すべきでしょう。やはりPHPMDのような静的解析ツールでチェックするのが便利です。

プルリクのマージに3か月かかった理由

2019年3月に送ったプルリクエストのマージに3か月もかかったのは、メンテナが多忙でPHPMDの開発が停滞していたためでした。2018年11月時点で、すでに「Is the project abandoned?」というイシューが立てられています。

6月に入ってようやく次期メンテナが募集され、新チームに引き継がれました。たまっていたプルリクエストやイシューが再び処理され始め、その中にぼくのプルリクエストも含まれていたわけです。

まとめ

  • 静的解析ツール自体のソースコードを静的解析するのは楽しい
  • 未使用変数は削除しよう
  • PHPMDのメンテナが見つかってよかった
Takashi Iwamoto

Written by

An web developer at VELTRA corporation, a member of JAPAN MENSA

VELTRA Engineering

Posts from the VELTRA Engineering team. www.veltra.com

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade