グローバル変数が乱用されている
1. 状況
- ソースコード中でグローバル変数が乱用され、処理のどのタイミングで変更されているか把握することが困難になっている
2. 問題
ソースコードの修正難易度の上昇
- グローバル変数は更新タイミングを識別することが困難
- 複数の関数から参照/更新される場合は特に厳しく、特殊な条件下でのみ発生するような厄介なバグを発生させる可能性が跳ね上がる
保守性の低下
- グローバル変数を参照している関数とそれらの挙動を正確に把握しないと適切な修正/改修が困難であり、保守性を著しく低下させる
エンジニアのストレス増加
- プログラムの挙動を正確に把握する必要がある為、エンジニアの認知負荷が高まり、パフォーマンスを低下させる
- 修正難易度が高い為、不具合を出す可能性も高まり、精神的なプレッシャーも大きい
- 多くの場合、最初にそのようなコードを書いた人間は退職しており、他人の不始末の尻拭いをさせられるという状況になりがちで、これがエンジニアのストレスを悪化させる
3. 原因
エンジニアのスキル不足
- グローバル変数は多くの場合、状態をクラスにカプセル化するなどで回避できる
- そのような知見を持たないエンジニアによって無秩序なグローバル変数の乱用が発生する
レビュープロセスの破綻
- グローバル変数の乱用はコードレビューで発見・除去すべきものだが、そのようになっていないということはコードレビューが機能していない可能性が高い
4. 対策
作り直し
- 最善の方法はグローバル変数が乱用されているモジュールやプログラムを作り直すことである
- もはや手が付けられない状態であるなら、諦めて一から新規作成した方がよいことも間々ある
エンジニアの適切な再教育あるいは再配置
- グローバル変数を乱用してしまうエンジニアは技術が必要水準に達していないと言える
- エンジニアの再教育を施すべきであるが、技術的に頭打ちになっているなど改善が見込めない場合はエンジニア以外の職務に配置換えするなどの配慮も必要になる
レビュープロセスの再構築
- グローバル変数の乱用を見逃してしまうレビュープロセスは最早機能していない為、レビュープロセスの再検討が必要である
- チェックリストを用いて最低限の品質を保つよう工夫する必要がある
5. 注意事項
参考資料