Subscribed unsubscribe Subscribe Subscribe

RubocopのABCサイズを緩めることについて

rubyを使って開発している方はrubocopを使って、ソースの静的解析をされていると思います。

github.com

その中でABCサイズを守れば、強制的にDRYになるようになっています。

ABCサイズとは以下のことです。

Assignment -- an explicit transfer of data into a variable
→ = *= /= %= += <<= >>= &= |= ^= >>>= ++ --  

Branch -- an explicit forward program branch out of scope
→a function call, class method call, or new operator  

Condition -- a logical/Boolean test
→ == != <= >= < > else case default try catch ? and unary conditionals.

Abc Metric

ABCサイズはrubocopのデフォルトでは15です。

DRYになっていないソースを書こうとすると、
Assignment Branch Condition Size is too high, XX.XX/15.となります。

この場合によく目にするのがABCサイズをデフォルトの15から緩めて警告を回避しようとすることです。

これはとても危険です。

本来であれば、無駄な代入、分岐の簡略化、メソッド分け等をして、15以下にします。

これによって、ソースが常にクリーンで、きちんとメソッド分けされた、DRYの原則を守ったソースになります。

リファクタリングはほとんどの場合、処理のまとまりをメソッドに分けて、
それぞれ適切なディレクトリのファイルに置けば済みます。  
もしくは不要な変数の代入、分岐の簡略化をすることがほとんどです。  

ABCサイズを守ることでそうしたリファクタリングを最小限にすることができます。

ABCサイズを緩めることは
・将来の負の遺産を生み出すこと
・将来のリファクタリング工数
・将来の保守・運用工数の増大
をもたらします。  

ABCサイズを緩めることは将来の膨大なコストを発生させます。    
必要な処理とその順番を考えて、メソッドを作成して、順番通りに呼び出すという基本を守らない場合は警告がされます。

エンジニアとしての素質の一つにソースが部品化されていて、1処理1ソースとなっていること、不要な代入がないこと、分岐が簡潔であることがあります。

ABCサイズの設定値、Assignment Branch Condition Size is too highの警告回数でエンジニアの質が分かるかもしれません。