SDC 2023 - リファクタリングデー

サムスン開発者カンファレンスに参加しました


概要

本資料は2023.11.14~11.15に開催されたSDC2023セッションの一つであるリファクタリングデーについて紹介します。

GPT 3行要約

  1. 2023年SDCセッションで紹介されたリファクタリングデーは、Samsung Accountチームが 技術的負債を解決するためにソースコードリファクタリングに着手した経験を共有する。

  2. 初期の試みは失敗したが、木曜日に進められるリファクタリングデーと コード品質の数値化改善により、デプロイ回数が減少し、チーム内のバランスの取れた成長を達成した。

  3. これにより個人はリファクタリングの重要性を悟り、 チームは効率的な仕事処理のために人的特性を考慮する重要性を理解した。

リファクタリングの必要性

Samsung Accountチームは技術的負債解決のために継続的に努力してきたと言います。 昨年まではインフラの技術的負債中心にのみ改善していたため、その間ソースコードの負債は増加しました。

ソースコードの負債が増えすぎて、ソース3行を修正するためにサイド、サイド、サイドが壊れるため...影響把握と修正に何と2週間がかかりました。

発表者のイム・ミンソン氏はこのような事例を機に'リファクタリング'デーを進めようとします。

リファクタリングデーって何?

リファクタリングデーは、すべての構成員が参加して一日中リファクタリング業務に没頭する日を意味します。

Samsung Accountは300,000行以上の大規模システムで、一日にPRが8件ずつ要求される状況で、個人の努力だけではリファクタリングを達成できなかったため、下された決定でした。

試行錯誤

施行最初、アカウントチームは'リファクタリングデー'を以下のように定義しました。

毎週金曜日 09:00 ~ 18:00

  1. 朝の会議を通じた目標算定
  2. リファクタリング
  3. 顔を向き合ってpeer、pair review
  4. 午後の会議を通じて進行内容共有と振り返り

しかし、最初のリファクタリングデーは失敗しました。その理由は:

  1. 金曜日の特性上、構成員が自主出勤、休暇などの理由でリファクタリングにうまく参加できませんでした。

  2. リファクタリングに対する動機付けの不足で、構成員が熱心に参加できませんでした。

サムスンアカウントチームはこのような試行錯誤を基に、リファクタリングデーを以下のように補完します。

改善

1. リファクタリング'デー'変更

既存の毎週金曜日に進めていたリファクタリングデーを'木曜日'に変更します。

2. リファクタリングレベルの数値化

ソースコードのレベルを静的に分析する'Analysishub'ツールを活用して数値化します。 (サムスン内部で使用される分析ツールのようで、類似のオープンソースツールにはsonarQube、source monitorなどがあります)

数値化する項目は以下の通りです。

namedescription
Cyclomatic Complexity循環複雑度が低いか?
Duplicate Code重複するコードが少ないか?
God Moduleまるで'神'のように全知全能の機能をするモジュールが少ないか?
Coupling Between Objectsオブジェクト間のデカップリングがうまくできているか?
Dependency Complexity依存性が少ないか?
Lines Of Code一つのソースファイルに行数が少ないか?
Module Circular Dependency循環参照(互いに依存を持つ)モジュールが少ないか?

アカウントチームはこの中でCC、LOC、DCを改善すれば、残りの指標はついてくるだろうと信じ、 リファクタリング目標をCC、LOC、DCの改善として選定しました。

3. PR Review Botを利用した数値通知

プルリクエストを要求するとReview Botがトリガーされ、該当要求でのCC、LOC、DCなどの分析指標をコメントで教えてくれます。 これは構成員がリファクタリングをゲームのように取り組み、競争心理で燃え上がらせる原動力になりました。

成果

このような業務プロセスの改善をリファクタリングデーに反映し、1月から9月まで進めた結果...

1. CC、DC、LOC数値改善

CC 0.79 → 4.78
DC 3.01 → 4.01
LOC 0.92 → 4.03

2022年対比2023年にはCC、DC、LOCなどの複数の数値が良くなりました。 このような数値の改善がどのような効果をもたらしたでしょうか?

2. デプロイ回数の急減

2021: 23回 2022: 24回 (+4%) 2023: 15回 (-38%)

デプロイは疲れる作業を伴い、準備とモニタリングに多くの心理的、人的資源を消費します。 リファクタリング過程を通じて2022年対比デプロイ回数が38%程度減少し、減少した時間分だけ開発により集中できるようになって良かったと言います。

3. 構成員のバランスの取れた成長

2022年対比Commit : Code Review比率が改善されます。 コミット中心の開発から一緒に悩み成長する開発に転換されました。

sdc-git

チームメンバー間のサービスに関するコミュニケーションが強化され、チームワークも重複コードを書くことも自然に減りました。

個人感想

リファクタリングが重要だと聞いてはいたが、今まで一人や二人、三人で小さなサービスだけ開発してきた私には直接的に響きませんでした。 しかし、SDCが聞かせてくれた事例に基づいた紹介は、リファクタリングの重要性について私を説得してくれました。

リファクタリングに関する内容ではないが印象的だった内容は、何かの仕事を進める時に人的特性を重要に考慮しなければならないことです。 集中可能な日と仕事に対する動機付けなど、仕事は人がするものなので'人'に重点を置いて仕事を効率的に進めなければなりません。

脚注

発表者'イム・ミンソン'氏
sdc-2
sdc-1