Help us understand the problem. What is going on with this article?

循環的複雑度について

動機

DX Criteria 2.2ソースコードの明確さに記載されていたので調べた時のメモ書き。

概要

Wikipediaから抜粋。DX Criteriaでは下記内容をソースコードにおいて継続的に検証・測定する仕組みを導入した方が良いと解釈した。

循環的複雑度(英: Cyclomatic complexity)とは、ソフトウェア測定法の一種である。Thomas McCabe が開発したもので、プログラムの複雑度を測るのに使われる。循環的複雑度は、プログラムの制御フローをグラフとして描くことで計算される。グラフのノードはプログラムのコマンドに相当する。2つのノードを結ぶ有向エッジは、第一のコマンドを実行後、次に第二のコマンドが実行される可能性があることを示している。
if文やfor文のような分岐点のないソースコードの場合、その複雑度は 1 であり、そのコードには1つの経路しかない。コードに1つのif文が含まれていれば、コードには2つの経路があることになる。

Goを書くことが多いので測定できるパッケージがあるか調査する。

パッケージ

golang cyclomatic complexity packageのキーワードで検索して該当したパッケージを抜粋する。最新のコミット履歴は2015年と古いがスター数が多いのでfzipp/gocycloを試すことにする。

サンプル

適当なサンプルコードと結果。

package sample

func doSometing() {

}

func doSometing1(s string) {
    if s == "1" {

    }
}

func doSometing2(s string) {
    switch s {
    case "1":

    case "2":

    default:

    }
}
$ gocyclo sample.go 
4 sample doSometing2 sample.go:13:1
2 sample doSometing1 sample.go:7:1
1 sample doSometing sample.go:3:1

雑感

得た結果の良し悪しをどのように定めるのかが気になるところだったが調べたところマチマチな印象だった(知りたい)。言語の書き方というか思想も多少影響するような気がした。lintツールであるgolangci-lintではalecthomas/gocycloを利用しておりデフォルト値は30だが、10-20を推奨しているらしい。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした