住所文字列解析ライブラリ 大幅リファクタリング

概要

住所文字列解析ライブラリの大幅リファクタリング

  • 開発期間
    • 2018年2月~2018年4月
    • 2019年3月~2019年4月
    • ※他業務と並行して実施
  • システム形態:Javaライブラリ
  • 使用技術
    • 言語:Java
    • フレームワーク:JavaFX
      • ライブラリ本体ではなく、ユーティリティ開発に使用。
    • テストフレームワーク:JUnit
    • テストライブラリ:DBUnit
    • DB:h2db, PostgresSQL, Oracle
    • 資源管理:Subversion, Git(Backlogサービスを利用)
      • ※途中でSubversionからGitへ移行

リファクタリングの経緯

自分がPLをつとめていた案件で、当該ライブラリに用意されていたオプション機能を利用することになったが、

結合テスト中にこのオプション機能にバグがあることが発覚。

社内のライブラリ担当に相談の上で利用することを決めたオプション機能だったが、利用実績のないものだったことがこの時点で発覚。

ライブラリのバグ修正を行ったが次から次にバグが発生し収束せず、結局、案件のリリース延期する事態に。

この時に知った当該ライブラリに関する様々な問題点を整理して、社内のテクニカルミーティングで後日発表。

  • 発表内容の概要
    • 複雑な住所に対応するために、長年にわたってつぎはぎ改修(約15年前に新規開発)
    • 仕様書なし
    • 大幅な改修を行った開発担当者が5年前に退職
    • 開発担当者の退職後に当該ライブラリの担当チームができたが、特に引継ぎ作業があったわけではなく、中身のことは担当チームの誰も把握できていない状態
    • 以上のことから、社員の誰もバグ改修、精度改善を行えない状態に陥っている。(最後の改修が5年前)

発表を聞いた開発部チーフマネージャが問題意識を感じて、ライブラリの調査と必要に応じた対処を行うことを提案し、担当として自分がアサインされた。

やったこと

  • 既存コードを読み解いて内部仕様と作りの問題点を整理
  • 住所に関する社内有識者と調整して、あるべき外部仕様を整理
  • あるべき外部仕様に則ってテストコードを作成した上で、コードを大幅リファクタリング
  • 上記作業を通して見えてきた、複雑な住所仕様と技術的負債が蓄積されていった経緯について社内テクニカルミーティングで発表して社内共有。
  • 今後の継続的な改善を可能とする以下成果物を社内資産化
    • 可読性、拡張性の高いコード(第三者によるレビュー実施済み)
    • 仕様書
    • テストコード
  • 保守チームを作り、以下方法で引継ぐことにより、1人の社内有識者に依存する体制から脱却
    • 仕様説明会実施
    • 追加機能開発をモブプログラミング形式で実施
    • 社内からのQA対応を保守メンバ全員で担当