2006年9月14日木曜日

15万行のプログラミング

ものは試しに、今自分が作っているシステムのコード行数をカウントしてみました。

C++で7万行超えている…。

えーと、1日に1000行もプログラミングするのなんて、無理ですよね。既存のコードの修正もあるので、のらりくらりと1日200行くらい追加されると見積もって、350日分。ちょうど1年分。 うーん。たいしたこと有るような、たいしたこと無いような。

一番古いファイルは何かと見てみると、2003年4月28日。CVSから、Subversionを使ってソースコードを管理するように変えたのがこのあたりなのかも。

違うプロジェクトで作ったJavaのコード行数を見てみると、8万行ありました。計15万行。これで2年分ですね。

書いたコードを廃棄することなんてよくやるから、単純にコードを書いた量だけだったらもっとあるんでしょう。

ちなみに、BerkeleyDBのソースコードはおよそ19万行、xerces-cは30万行でした。sqliteは7万行ですね。PostgreSQLは70万行だとか。 まぁ、CのコードはC++と比べて大きくなりがち。

これだけ書いていて、自分の作ったシステムがまだつぎはぎだらけなのは、研究結果が優先になってしまうことで、機能優先ではないというところかな。 機能優先にするなら起業しないと金銭的にやっていけない。

年間10万行書くには、1日当たり、400行ですね(休日等を除いて1年を250日として計算)。調子がいいとできるんだろうけど。3時間経ってもバグ取りで10行しか進まないということがありますから…。企業のプログラマだと、これくらい書くと聞いたことがあります。仕様を先に決めてしまうから書きやすいのかもしれないけれど。

あと、経験とともにコード数って短くなるのです。コードを短くするための自作ライブラリも増えるし、人の作ったライブラリの使い方を習得して、ますますコードが簡潔になったり。だから、コードの行数って技術力を表すものではないんだけれど、コード量と実際の書き方をちらっと見ると、プログラミングの経験値は推し量ることができます。

まぁ、これだけ書いたんだから、自分のシステムもそろそろ世の中にちゃんと送り出してあげないと。

4 件のコメント:

yi さんのコメント...

C++で7万ってコメントを含めないでですか?

Leo さんのコメント...

> yiさん
もちろん、コメントも含めてですよ。wcでカウントしただけなので。でも、その違いって重要かな? コメントもコード以上に重要だと思うので、区別しようなんて思わなかったのだけれど。 assertとか、debug用のlogメッセージとかもコード中に組み込まれるわけだし、こういう部分ってrelease版では実際に動かないコードなんだよね。厳密にしようとすると、コメントだけではないです。ややこしいです。

あ、ちなみにテストコードは勘定に入れてません。これも含めたらもっと多くなるかも(^-^;;

yi さんのコメント...

# LOC(Line Of Code) = NCLOC(Non Comment Line Of Code) + CLOC(Comment Line Of Code)

CLOCもそれはそれで大事かと思いますが,定量的に見るときはNCLOCで見ると思います。
stcとかフリーでもよいラインカウンタはあります。
http://www.vector.co.jp/vpack/filearea/win/prog/tool/

CLOCはIDEが入れたものや,ライセンスヘッダやgetter/setterでgets ほにゃららとか不要な情報もあるかもしれないなど個体差が出る項目なので,LOCだけだと得られる情報も不明瞭だと思います。

assertやデバッグコードについては,コンパイルして副作用(性能やバグ)が残るかもしれない情報という意味でカウントに含めていいと思います。

テストコードについては品質は,C0, C1レベルなどソースコードカバレッジである程度は定量で測れます。
cloverだと↓例えばこんな感じ。
http://developer.spikesource.com/spikewatch.logs/fedora-3-i386/2083/hibernate/reports/clover/org/hibernate/test/hql/HqlParserTest.html

Visual Studioはよく知らないのでレオさんの方がご存知かもしれないですが,Teamというのでカバレージ測れるようです。C#だけでなくC++にも*恐らく*対応してるんではないかと。
http://www.microsoft.com/japan/msdn/vstudio/teamsystem/whitepapers/test/

Leo さんのコメント...

> yiさん

あ、僕のブログの結論としては、LOCは多くなったけど、あまり意味がないよなぁ、という意図で書いているものなのでw 気まぐれでラインカウントしてみただけです。

テストコードの品質はcoverageで計るというのは初耳。一つの指標にはなりそうですね。プラスアルファで、入力に応じたコード上の経路の変化(コントロールパスの組み合わせ)をどうするか、というのが悩みどころ。願わくば、実行時にこれはいけない、と思った部分の環境を取得して、それをそのままテストケースに追加なんてことができると、テスト作成も容易になるんでしょうけど。

VisualStudioは記事だけ見ると魅力的なんですけど、C++のリファクタリングはサポートしていないようなので、これらの機能って殆ど使えないだろうと思っています。というかVS2003の頃に書きためたマクロ(クラスとか関数定義の自動生成とか、ソースファイルをショートカットで行き来する機能とか)を移植するのが手間なので、VS2005はまだ使いたくても使えないという状況。

License

Creative Commons LicenseLeo's Chronicle by Taro L. Saito is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.1 Japan License.