Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

レガシーコードとの戦いの軌跡

411 views

Published on

京都Devかふぇ#4 〜レガシーシステム考古学〜
で発表した資料。

Published in: Software
  • Be the first to comment

  • Be the first to like this

レガシーコードとの戦いの軌跡

  1. 1. レガシーコードとの 戦いの軌跡
  2. 2. 自己紹介 • 田村克彦 • 京都府宇治市在住 • 38歳 • フリュー株式会社 プリントシール機ソフトウェアエンジニア • 前職はコンシューマゲームのプログラマ
  3. 3.
  4. 4. クラフトビール
  5. 5. 登山、マラソン
  6. 6. アジェンダ プリントシール機の開発について どういった状態だったか どういった改善をしてきたのか まとめ
  7. 7. プリントシール機の 開発について
  8. 8. 年間タイトル数 • 新機種:3タイトル • バージョンアップ:3〜4タイトル
  9. 9. 開発環境 Windows Visual Studio Coverity Github Enterprise Redmine Confluence
  10. 10. 使用技術 Windows Embedded ゲーム C# / WPF 落書き C++ 画像処理 C++
  11. 11. 落書きに ついて
  12. 12. 落書きについて C++にてフルスクラッチ 共通ライブラリがある 共通部分+タイトル固有コードで15万行前後 今のライブラリになって今年で10年目
  13. 13. どういう状態だったか
  14. 14. 一言で言えば混沌 • 共通ライブラリが成長しない • コミットログが無言 • コピペコードだらけ • 当然資料なんて無い
  15. 15. 開発スタイルの変化 • 企画から求められる機能がリッチに • 増加するコンテンツ量 • 品質もより安定を求められるように • 今までの担当者が辞めたり、上にあがったり
  16. 16. どういった改善を してきたのか
  17. 17. どういった改善をしてきたのか • 技術者の技術力向上 • レガシーコードとの戦い
  18. 18. 社内で行われた輪読会 • メンバーの発信により、技術書を音読する会が開催
  19. 19. レガシーコードとの戦い • 共通ライブラリのリファクタリング • コードレビューの導入 • テストコードの導入(時間の関係上今回は無し)
  20. 20. 共通ライブラリのリファクタリング 今までの本流とは別にブランチで1年ほど掛けてがっつりリファクタリング • 1週間に2時間、有志で自席ではなく会議室で実施 • 1つだったライブラリを複数のライブラリに分割 コアな部分にある枯れたレガシーコードは別DLLに • リファクタリング時点ではテストコードはないので振る舞いの担保は無視 • とりあえず動くのを目標に ライブラリの運用を決める 最後は勢いで本流と入れ替え • 影響が少なそうなタイミングを見計らって • バグが出たら都度対応
  21. 21. コードレビューの導入 • さぁ、やりましょう!だけではなかなか浸透しない とにかくレビューを出す文化をつけてもらうところから レビューを依頼してもらう 自分がとにかくレビューする 自分の変更はメンバーのだれかへ
  22. 22. コードレビューの浸透 SVN • 共通ライブラリを変更したら必ずコードレ ビュー • 固有タイトル部分も不安ならコードレビュー • Redmineでチケットを発行しレビュー依頼 • レビュー指摘は子チケット発行 昔 Github • ソースコードはすべてレビュー • プルリクでレビュー コメントすると自動的にRedmineにチケット が発行される(工数入力) • レビュー観点をまとめてConfluenceへ記載 今
  23. 23. コードレビュー文化が定着して 私一人の直近1年間 コードレビュー工数 427時間
  24. 24. コードレビュー文化が定着して • 新規のコードの可読性が保たれた =メンテナンス工数減 =クリエイティブな作業時間が増える • コードレビューはメンバーの育成だと思って実施 • コミットログにも指摘 • 指摘の内容をカテゴライズして集計、半年に一回メンバーに傾向を発表
  25. 25. まとめ
  26. 26. 振り返ってみて • 新規実装するのに、解読から始めるの辛い。 • いかにレガシーなコードを埋め込まないか、これに全力 • コミットログには必ず経緯を書く、経緯がなければ指摘 • 自分がハマったところは、必ずConfluenceに資料を残す • リーダブルコードは良書
  27. 27. 最後に • レガシーコードは凶器です、開発者の精神も会社の利益も削ります • 日頃からレガシーを産まない意識を
  28. 28. ご静聴ありがとうございました

×