[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: [jfriends] Javaの開発生産性について




前橋です。

酒井さん:
>ソフトウェアの開発生産性の比較を知っていたら教えて欲しいのですが、・・

生産性の比較とは *かなり* 違うような気もしますが(^^;
ファンクションポイント数に対するステップ数の比較は、

  http://www.spr.com/library/0langtbl.htm

ここにあります。

ただまあ、こういうのって、開発するソフトウェアの種類や規模に
よって全然違ってきますよね。もちろん、そんなことはお分かりの
上で目安として数字が欲しいのだとは思いますが。

たとえば hello worldだったら、JavaはCと比べてタイプする量が
倍ぐらいに増えてそうですし。

私はJavaによる開発の経験がないので、あまり語るのも何なんですけど、

C/C++に比べて、Javaだと嬉しいことは、

(A)コンパイラのエラーチェックが割と厳しい。
(B)GCがあるので、freeに気を遣わなくても良い。
(C)文字列型があるので楽ちん。
(D)実行時チェックが一杯入るので、バグった時に原因の特定が楽。

...あやや、これぐらいしか思い付きませんが(笑)
でも、これらは割と大きいです。特に(C)ですね。

逆にC/C++と比べて、Javaで悲しいことは、

(A)オブジェクトを確保するとき、どうやってもオブジェクト一個
  ごとにnewを一発かまさなければならないので、めんどくさい。
(B)配列までnewしなきゃいけないので、めんどくさい。
(C)enumがないので、intにしなければならず、コンパイル時のチェッ
  クが入らない。
(D)templateがないので、Objectにしなければならず、コンパイル
  時のチェックが入らない。
(E)メソッドから複数の値を返してもらうようなコードが書きにくい。
(F)ヘッダファイルだけ書いて他のチームに提供し、後で結合する、
  ということがやりにくくてしょうがないような気がするんですけ
  ど(どうするんでしょう? interfaceだけ先に提供?)

これぐらいでしょうかね。悲しいことの方が数は多いけど、デバッ
グ時の効率を考えたら、書くだけなら、Javaの方が楽なような気が
します。

# でも、C++でSTLなり使えば、egmentation fault の前にたいてい
# は assertでひっかけてくれるんじゃないかと思うけど。

あと、C++は、言語の習得自体にえらく時間がかかります。これは
もう Javaの10倍以上と言ってもいいと思います。

ただし...

「開発生産性」という言葉が意味するものは、コードをガリガリ書
く際の効率なんでしょうけれども、実際のソフトウェア開発では、
開発よりも保守のフェーズの方がはるかに長いものです。

保守の際にすることといえば、「とりあえずバグはない(筈の)コー
ディングを読む」作業が大半になります。

その時、Javaは、

・データ構造がメソッドの実装に埋もれてしまい、読みにくい(ま、
  これはツールを使えば抽出できるだろうけど)。
・Javaではオブジェクトについてはポインタしか扱えないので、デー
  タの実体を保持する必要があるときと、ポインタを保持する必要
  がある場合の区別が付かない(結果としてデータ構造が読み取り
  にくい)。
・templateがないので、全てObjectにしなければならず、何を示す
  型なのかわけがわからん。
・enumがないので、全てintにしなければならず、何を示す型なの
  かわけがわからん。
・typedefがないので、intみたいな謎の型が散乱し、わけがわからん。
  (ま、これはCでも、エラーチェックが入らないのでさほど効果は
  ないけど、コメントやドキュメントに比べればだいぶマシ)
・リフレクションなんぞ使った日には...(使わなきゃいいんですが)

もちろん、これは、比較する相手のC/C++のコードが、「理性を持っ
て書かれた」場合に限ります。C/C++は、悪用のしがいのある言語
なので、読みにくいコードはなんぼでも生産できます。

が、ちゃんと書いたC/C++のコーディングに比べて、Javaのコーディ
ングは「ちゃんと書いても」読みにくく(慣れの分をさっぴいても)、
故に、大規模プロジェクトにこういう言語を使うと保守ではまるぞ、
と思うのは、私だけでしょうか?

# もちろん、Javaでも、PerlやVBと比べれば、はるかに「マシ」な
# んだろうと思いますけれども。

いしがみ さん:
<ざっくり省略>
>私の経験からすると、アプリケーションにもよりますが生産性に 
>10 倍の差が付くことはないかな?と思うのですが....。

これは私もそう思います。

# たとえば私にLispをやらせると、生産性は1/10以下になるとは思
# いますが...(^^;

どんな言語を使おうが、CASEツールを使おうが、生産性がケタ単位
で上がるようなことはないですよね(GUI作成みたいな特殊用途のツー
ルは除く)。

「銀の弾丸はない」というブルックスの言葉を噛みしめる今日この
ごろです。

------------------------------------------------------------
  前橋 和弥                             maebashi@xxxxxxxxxx
  中部ソフトエンジニアリング(株)
    〒450 名古屋市中村区名駅4-10-25(名駅IMAIビル 5F)
    Tel:(052)583-4511(代) 内線 252 Fax:(052)583-4566
------------------------------------------------------------