- - PR -
メソッドの量(行数)についてなのですが
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-06-28 12:50
いつも参考にさせて頂いております。
先日、友人があるJava開発の仕事の面接に行ったところ、 「何行ぐらいのメソッド、クラスを書いたことがありますか?」 と、質問され、「うちでは1000から2000行があたりまえだから・・」 と、自慢げに言われたそうです。 その友人とは以前一緒に働いていたのですが、 1000行を超える様なメソッドは、修正や変更が難しくなるという理由で、 300〜500位までに処理を分けるようにしていました。 マーチン・ファウラー著の「リファクタリング プログラミングの体質改善テクニック」 という書籍を参考にし、管理しやすいソースコードを保てるようにしていました。 1000行でやむを得ないメソッドも確かにあるとは思うのですが、 実際の所行数が多ければ良いなんていうことはないですよね?? 皆様のご意見を伺いたいです。 | ||||||||
|
投稿日時: 2003-06-28 13:29
私の場合、一クラスが平均500行ほどだと思います。計ったことはないですが、一メソッドだと100行が最高ではないでしょうか。これ以上になると管理が面倒くさくなります・・・。
個人的な経験からして、あまりにも行数が多いのはオブジェクト指向でできていない肥大化・スパゲッティ化したコードが多いかと。 >実際の所行数が多ければ良いなんていうことはないですよね?? 行数はそのプログラムの品質とは無関係です。経験的にいうと「量の多いコードの方がバグが多い可能性が高い」と思います。 一部のソフトウェア開発では行数を生産性の指標にしている所もあります。ただ、その場合はコスト予測(予想される行数からコストを計算する)、生産性(一人が一時間で何行を書いたか)、バグの割合(バグが何行の割合で発生したか)などを計るために使われます。決して品質を計るためには使うべきではありません。 | ||||||||
|
投稿日時: 2003-06-28 15:14
ご返答ありがとうございます。
>一メソッドだと100行が最高ではないでしょうか。これ以上になると管理が面倒くさくなります・・・。 やはりそのくらいですよね。自分で5,600行くらいのメソッドを書くと、 どこか変な設計してるかな??って感じます。 バグが発生した時も発見しにくいですもんね。 >個人的な経験からして、あまりにも行数が多いのはオブジェクト指向でできていない肥大化・スパゲッティ化したコードが多いかと。 友人の話では、面接官はみな全盛期にCOBOL->C言語、位の年齢の方ばかりで、 本当にJavaがわかってるのかな?と感じたそうです。 とても参考になりました。ありがとうございました。 | ||||||||
|
投稿日時: 2003-06-28 23:32
unibon です。こんにちわ。
#以下、やや皮肉混じりですが。 教科書を読むと決まり文句のように「だらだらと長いのは良くない」と書いてありますが、 実践的なコードを書くとどうしても長くなってしまいます。 最初から短く書ければ苦労しません。 これを踏まえると、 1000行書いた経験がないと言われれば「経験が浅い」という見方ができるし、 逆に、自分の経験の豊かさを自慢するのに「1000行(も)書いた」と言うのかもしれません。 あと、行数を語るさいに、ソースファイルそのままの行数を言っているのか、 それともそうでないのか、も重要ですね。 ソースファイルが1000行あった場合、その中の半分の行がコメントであり、 さらにひとつのブレースでも1行を費やすなどすれば、 実質的な行数は300行位と言えます。 これを1000行と表現するか300行と表現するかは、相当の違いになりますね。 また、1000行あったものを、単に短ければ良いということで、 たとえば200行のメソッド5個に分割するということは、 巷では良くやられると推測します。 これは見た目だけの解決であり根本的な解決ではないので注意が必要ですが、 メソッド間で仲介する情報が異様に多いかどうかである程度見分けることができると思います。 たとえばメソッドの引数が多かったり、フィールドが多かったり、などです。 | ||||||||
|
投稿日時: 2003-06-30 11:53
COBOLの技術者は、 行数の多いプログラムが作れる=技術力が高い と勘違いしているように思えます。 実際に私は1万行を越えるソースを保守させられた経験があります。 COBOLのプログラムで1000〜2000行は可愛いもんでしょう。 私はCに関しては業務経験0なので、なんとも言えないです。 | ||||||||
|
投稿日時: 2003-06-30 12:49
私の場合、一つのメソッドに要する行数は、
1 〜 100 行程度です。 別に短く書こうと意識はしていませんが(昔は意識していたと思いますが) 「再利用可能な一つの処理の単位」ごとにメソッドを書こうと思えば 自然にそうなるのではないでしょうか? ただプログラムの末端(例えばStrutsのActionクラスのexecute()メソッド等) では多少長くなるのは仕方がないと思います。 そういうメソッドは逆に無理に分割したりすると 可読性が悪くなるので仕方がないでしょう。 | ||||||||
|
投稿日時: 2003-06-30 12:59
色々とご意見ありがとうございます。
unibonさんのご意見です >メソッド間で仲介する情報が異様に多いかどうかである程度見分けることができると思います。 たとえばメソッドの引数が多かったり、フィールドが多かったり、などです。 ふむふむ。SOHOさんの作ったプログラムを見る機会が多いのですが、引数15個のメソッドがありました(^^; 私自身では、privateなフィールドがちょっと多いような気もします。 takuさんのご意見です >COBOLの技術者は、 行数の多いプログラムが作れる=技術力が高い と勘違いしているように思えます。 実際に私は1万行を越えるソースを保守させられた経験があります。 COBOLのプログラムで1000〜2000行は可愛いもんでしょう。 やはりそうなのですか・・・。 COBOLが出来た当時は素晴らしい言語だったのでしょうが、 Javaプログラマにそれを求められても困ってしまうかもしれませんね。 他の皆様も 「最大でこの位のメソッドを書いたことがある。」 「最大でもこの位の量に抑えるようにしている。」 などの意見がありましたら参考に教えて頂けないでしょうか? | ||||||||
|
投稿日時: 2003-07-01 10:08
Wataです。こんにちは。
私の場合ですと、メソッドが50〜100行ぐらいになると、 「うげぇ〜。かっこわるー」って気分になってメソッドの分割作業をはじめます。 最近はEclipseにおんぶに抱っこ状態なので、適当な処理の一まとまりを 選択して、「メソッドの抽出」実行!って具合です。 ところが、テストに通すために勢いで作ったメソッドなんかは 「ローカル変数の割り当てを複数含んでいます。」とか、 「すべての実行可能なフローがreturnで終了するわけではありません。」とか 逆に怒られて、処理の汚さを思い知らされます...。 それでも頑張って、せめて1メソッドが1画面におさまるようにはしています。 | ||||||||
