LOCカウンターを開発する機会があったので公開します
LOCカウンター(行数計測カウンター)を開発する機会があったので、その時に開発したカウンターをgithubに載せたことを報告しておきます。
自分でも思うのですが、おそらく使いどころはかなり限られると思いますし、関数ベースでプログラミングしているので設計にちょっと失敗しているかもしれない。
後で、暇でやる気になったときクラスベースで書き換えようと思います。
でもせっかく開発したので、オープンにしたいと思ってこの記事書いてます!!
なお、LOCというのは行数と同義です。
ダウンロードはこちらから(counter.exe)
開発経緯
PROBE法という見積もり法で見積もりを行う際に、クラスのLOCを計測する必要があったため開発しました。
これまで納期などを意識することなく趣味のようなものでプログラムやアプリ開発をしてきたのですが、クラウドソーシングなどで案件を受注したいと思い、そろそろしっかりプロジェクト管理について学ぼうと考えました。
そこで、プログラムの追加&修正規模から総開発時間を見積もるPROBE法というものを勉強していました。
PROBE法では、まず新規に開発するクラスや再利用するクラスなどのLOCを用いてプログラム全体の追加&修正規模を求めます。 そしてその追加&修正規模から総開発時間を見積もることになります。
そのため、クラスや関数のLOCを計測するカウンタープログラムを開発しました。
LOCカウンタープログラムで計測できるもの
- クラスのLOC
- 関数FunctionのLOC
- 1クラスのメソッド数
以下に実行例を記載しておきます。
LOCカウンターの仕様
- OS=Windows10
- 対象ファイル拡張子は .cpp または .h(それ以外だとプログラムが終了します)
- コマンドプロンプトなどで
counter.exe yourprogram_files
で引数のファイルのLOCをカウントできます(引数はいくつでも可) - 空行、コメントのみの行、{ または }のみの行はカウントしません
- LOCをカウントしたいクラスの定義箇所の先頭に
// class begin
を、末端に// class end
を付ける(以下に具体例を示します) - LOCをカウントしたい関数の定義箇所の先頭に
// function begin
を、末端に// function begin
を付ける(以下に具体例を示します) - クラス名、関数名の後ろに半角スペースを空けたあと引数を定義する(以下に具体例を示します)
- 1クラスのメソッドを数えたい場合は、メソッドの定義箇所の先頭に
// method
を付ける(以下に具体例を示します)
具体例
#include<iostream> #include<string> using std; class HelloWorldObj // class begin { private: string str; public : HelloWorldObj() { str = "Hello World!"; } HelloWorldObj(string name) { str = "Hello World! " + name; } void add_name(string name) // method { str += name; } void print() // method { cout << str << endl; } } // class end int main (void) // function begin { HelloWorldObj hwo1 = new HelloWorldObj(); HelloWorldObj hwo2 = new HelloWorldObj("taro"); hwo1.print(); hwo2.print(); hwo2.add_name("ziro"); hwo2.print(); return 0; } // function end
上記の内容のファイルmain.cppがあるとしたら
コマンドプロンプトでcounter.exe main.cppで実行したら
ファイル名 | クラス・関数名 | メソッド数 | LOC | 合計LOC |
---|---|---|---|---|
main.cpp | ||||
main | 0 | 7 | ||
HelloWorldObj | 2 | 11 | ||
23 |
となります。(これは手で数えてますので、間違ってたらごめんなさい)
実行ファイルはGithubにあります
興味ある方はこちらから