@IT情報マネジメント会議室は、2009年4月15日に新システムに移行しました。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
- PR -

コードカバレッジに関して

投稿者投稿内容
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-10-20 16:18
引用:

小僧さんの書き込み (2005-10-20 13:10) より:

> ぼのぼのさん
えっと、、、どの辺りを重点的に見れば宜しいのでしょうか?
個人的には
1. da.exist の結果が true
2. da.exist の結果が false
3. da.update or da.insert ( or da.exist ? ) で Exception を発生させる

で全ての条件を網羅するのでは?と思ってしまうのですが。
何か勘違いしているのでしょうか?


あ、私が言いたかったのはそんな難しいことじゃなくて、
try〜catch機構は通常の「分岐」とはちょっと観点が違うのかな、と思っただけです。
混乱させてしまったようですみません。

勉強不足で、try〜catchがC0/C1にどう影響するのかはわからないんですが、
前にどっかで「メモリ不足でも発生しない限り絶対通らないcatchブロック」を見かけたことがあったので。
ina
ベテラン
会議室デビュー日: 2005/04/14
投稿数: 58
投稿日時: 2005-10-20 22:28
引用:

小僧さんの書き込み(2005-10-20 13:10)より;

ついでに、というと失礼ですが、品質に関してもう 1 点質問させて頂ければ幸いです。
よく、「 1 関数の行数は 30 行以下が望ましい」などの文を
( 私は ) 良く見かけるのですが、
「1 関数 30 行以上と以下だと、こんなに品質に違いがあります」のような
根拠ってあるのでしょうか?
感覚的には短い方がいいというのは理解していますが、
「僕が良いと思っているので皆さんもやりましょう」じゃー、
もちろん説得力が無く。。。




#「関数」では無く、「メソッド」のお話ですよね?

私が思う「品質が良い」プログラムとは、
1.仕様どおりに正しく動く
だけではなく、
2.記述されているコードから、そのクラスやメソッドの責務を理解するのが簡単である
3.コピーコードがほとんど無い
4.ちょっとした仕様変更に対する修正を柔軟に行うことができる
という、全ての条件を満たすプログラムです。
(他の要素もありますけど)

で、上記の要素を全て満たすプログラムを記述しようとすると、ほとんどのメソッドは30行以内に収まるようになります。

「各メソッドが30行以内だから品質が良い」訳ではなく、「品質の良いプログラミングを行うように心がけていくと、結果として各メソッドが(基本的に)30行以内になる」という訳です。

※マーチン・ファウラー著「リファクタリング」とか、リファクタリング関連の本を読みながら、適当なプログラムをリファクタリングして(させて?)みてください。
そして、リファクタリングされた結果のソースコードをみていただければ、よく理解できると思います。


[ メッセージ編集済み 編集者: ina 編集日時 2005-10-20 22:29 ]

[ メッセージ編集済み 編集者: ina 編集日時 2005-10-20 22:30 ]
ほげた
ベテラン
会議室デビュー日: 2002/05/08
投稿数: 67
お住まい・勤務地: なごやん
投稿日時: 2005-10-21 02:30
引用:

小僧さんの書き込み (2005-10-20 13:10) より:

ついでに、というと失礼ですが、品質に関してもう 1 点質問させて頂ければ幸いです。
よく、「 1 関数の行数は 30 行以下が望ましい」などの文を
( 私は ) 良く見かけるのですが、
「1 関数 30 行以上と以下だと、こんなに品質に違いがあります」のような
根拠ってあるのでしょうか?
感覚的には短い方がいいというのは理解していますが、
「僕が良いと思っているので皆さんもやりましょう」じゃー、
もちろん説得力が無く。。。


かなり昔に読んだ本なので出展が不明ですが、C言語の場合はMAX200行として外国の論文を引用していました。そのときのグラフでは、ある程度の少なさまでは品質(単に不具合の発生率で見た場合)があがりますが、極端に少ないと逆に品質が低下することを示していました。
C++言語では 50行/メソッド と聞いたことがあります。
言語や分野によって違うと思いますので、ご自分のデータをとってみてはいかがでしょうか。数値を示せばかなり説得力あると思います。という私自身は計測したことが無いのですが・・・

個人的には、行数よりも、メソッドの目的が一つであること、を重視してます。行数による品質の差は、複数の責任を持たせてしまうことの裏返しなのかと思っているのですが、計測してみたことが無いので真実のところはなんとも・・・
ほげた
ベテラン
会議室デビュー日: 2002/05/08
投稿数: 67
お住まい・勤務地: なごやん
投稿日時: 2005-10-21 03:47
もともとの質問 C0/C1 について・・・

単純に以下のコードを考えてみてください。
コード:

if ( n = 10 ) then
    XXX
end if


n=10 だけで C0 カバレッジ 100% です。
n<>10 をやらないと C1 カバレッジは 100% になりません。

また、C# ではエラーとなりますが、C/C++ では switch文で fall through させた場合も同様のことが起こります。
コード:

switch (n)
{
    case 0:
        XXX;
    case 1:
        YYY;
        break;
}


n=0 だけで C0 カバレッジ 100% ですが、n=1 をやらないと C1 カバレッジは 100% になりません。

GoTo文も同様で、どの分岐先にも排他的に独立した処理が存在する場合は C0/100% → C1/100% となりますが、条件分岐の片方に処理が無い、または他の処理に合流する場合は C0/100% と C1/100% は一致しません。
小僧
大ベテラン
会議室デビュー日: 2005/06/24
投稿数: 122
投稿日時: 2005-10-21 13:34
お世話になります。

返信、ありがとうございます。

> 宣伝中止!さん
> 昔のディスプレイだと、一画面に表示されるのは20〜30行というのが多かったから、
> そういう話が受け継がれているのかもしれません。
そうですよね。
最近なら一画面でもっと表示出来ますものね。

> ぼのぼのさん
> あ、私が言いたかったのはそんな難しいことじゃなくて、
了解しました。
言語の指定をしていなかったこちらが悪いのですが、
今回は VB or C を想定していますので
try〜catch機構 は「別の機会」に頭を悩ませたいと思います。。。
新しい観点の提供、ありがとうございます。

> inaさん
> #「関数」では無く、「メソッド」のお話ですよね?
Java などのクラスについているのは「メソッド」ですが、
( 普通の ) VB などは「関数」と呼びませんか?
( VB でクラスを作った場合は「メソッド」だと思います )
個人的には名称が違うだけで、大体同じものだと認識していますが。。。
( いや、厳密には違うように認識するのかな、と思っていますが、
「どっちでもいいんじゃない?」と思っているので ( 苦笑 ) )

> 「各メソッドが30行以内だから品質が良い」訳ではなく、
> 「品質の良いプログラミングを行うように心がけていくと、
> 結果として各メソッドが(基本的に)30行以内になる」という訳です。
なるほど、こういう考え方がスマートですね。
私が教えられたのは「1 関数 ( メソッド? ) 30 行以内」という言葉だったので、
ina さんの観点は抜けていました。
ご指摘ありがとうございます。

> ※マーチン・ファウラー著「リファクタリング」とか、〜〜〜
私はCプログラミング診断室
センス・オブ・プログラミング!を読みました。
これでも似たような事が書いてあるようです。
本の紹介、ありがとうございます。

> ほげたさん
> C++言語では 50行/メソッド と聞いたことがあります。
言語によって定義が違うのかもしれませんね。

> 個人的には、行数よりも、メソッドの目的が一つであること、を重視してます。
仰るとおりです。
が、それすら出来ていないのでどうしたもんかな、と。
ある程度の指標 ( 今回でいうと行数 ) を提示するとみんなイメージしやすいかな、と思いましたので。
頂いたご意見の方向でもう一度話してみます。

> 単純に以下のコードを考えてみてください。
なるほどです。
分かりやすい例、ありがとうございました。
未記入
会議室デビュー日: 2005/08/21
投稿数: 15
投稿日時: 2005-10-23 09:17
昔、聞いた話では
30行いないというのは、エディタの一画面におさまり。見やすいとはなしを聞いたことがあります。

本当がどうかはしりませんけどね。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-24 08:55
30 行以内うんぬんについてですが、
行というよりは画面単位で語った話ではないかと思います。

言語によって、というよりは環境 (プラットフォーム、エディタ) によって多少の差異はあるのでしょう。

  Linux流プログラム書法

# C# や VB7 で 30 行プログラミングしていたら返って混乱しますし。(^^;)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
小僧
大ベテラン
会議室デビュー日: 2005/06/24
投稿数: 122
投稿日時: 2005-10-24 10:56
こんにちは。
ご意見ありがとうございます。

やはり 30 行というのは昔の名残なのでしょうか。
ベースは「1 画面 1 関数」という感じが現実的なのでしょう、きっと。
ただ、あまり行数には拘らず 1 関数 1 つの意味、という方向で
検討したいと思います。 ( これも当然の事なんですけどね。。。 )

また、「Linux流プログラム書法」のリンク、ありがとうございます。
非常に興味深く拝見させて頂きました。

スキルアップ/キャリアアップ(JOB@IT)