komoto / エンジニアブログ

プログラミングについてアウトプットします。

LOCカウンターを開発する機会があったので公開します

LOCカウンター(行数計測カウンター)を開発する機会があったので、その時に開発したカウンターをgithubに載せたことを報告しておきます。

自分でも思うのですが、おそらく使いどころはかなり限られると思いますし、関数ベースでプログラミングしているので設計にちょっと失敗しているかもしれない。

後で、暇でやる気になったときクラスベースで書き換えようと思います。

でもせっかく開発したので、オープンにしたいと思ってこの記事書いてます!!

なお、LOCというのは行数と同義です。

ダウンロードはこちらから(counter.exe)

開発経緯

PROBE法という見積もり法で見積もりを行う際に、クラスのLOCを計測する必要があったため開発しました。

これまで納期などを意識することなく趣味のようなものでプログラムやアプリ開発をしてきたのですが、クラウドソーシングなどで案件を受注したいと思い、そろそろしっかりプロジェクト管理について学ぼうと考えました。

そこで、プログラムの追加&修正規模から総開発時間を見積もるPROBE法というものを勉強していました。

PROBE法では、まず新規に開発するクラスや再利用するクラスなどのLOCを用いてプログラム全体の追加&修正規模を求めます。 そしてその追加&修正規模から総開発時間を見積もることになります。

そのため、クラスや関数のLOCを計測するカウンタープログラムを開発しました。

LOCカウンタープログラムで計測できるもの

  • クラスのLOC
  • 関数FunctionのLOC
  • 1クラスのメソッド数

以下に実行例を記載しておきます。

f:id:tkmt-hrkz:20200610221936p:plain

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にあります

興味ある方はこちらから