パスワードを忘れた? アカウント作成
6607693 story
バグ

人為的にバグを挿入することでバグの総数を予測する「池の中の魚」モデル 58

ストーリー by hylom
その作業をテストケースをたくさん作るほうに振り分けるべき 部門より
insiderman 曰く、

ソフトウェア中に存在するバグの総数を予測するための方法として「池の中の魚」モデルというものがあるそうだ(@IT)。

この方法は、デバッグ前にデバッグ担当者に分からないように意図的にバグを挿入することでバグの総数を予測するというもの。デバッグ作業後、発見されたバグの数から全体のバグ総数を推測するという。たとえば10件の意図的なバグを挿入し、発見されたバグの数が20件、そのうち意図的に挿入されたバグが5件だったとすると、全体のバグのうち50%が発見された、と判断できるという。

ただし、よく知られているとおりバグのないソフトウェアは存在しない。そのため、この手法の有効性については疑問の声が多く、実際に使われているケースは少ないようだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • つーかさ (スコア:3, すばらしい洞察)

    by Anonymous Coward on 2012年11月22日 18時19分 (#2277372)

    >プロジェクトマネジャーは、各プログラマーに分からないよう、集めたソースコードに、無理やりバグを埋め込みます。この「人工バグ」が先の「尻尾の赤い魚」に相当します

    これできる優秀なプロジェクトマネージャという生き物に出会う確立はUFO捕獲と同じだろ

    • by wizz (19742) on 2012年11月22日 19時10分 (#2277413) 日記

      機能的なバグなら日々の回帰テストで判明する話ですし、非機能的なバグなら顕在化しにくく仕込む意味が殆どありません。
      仕様や設計上のバグなら、仕込んだPMや上流の責任になります。
      しかもバージョン管理で誰がやったのかもバレます、何故修正したのかコメントも読めます。

      #これを実践したPMって、社内からも顧客からも爪弾きにされますよ。

      ホントに誰得なのでしょうね。

      親コメント
      • by Anonymous Coward

        労多くして功少なしですね

    • by Anonymous Coward

      運用的にも現実的じゃないね。
      これが可能なら、どんなソース管理してるのよって話になるし、事前バレでも事後告白でも
      埋め込まれた担当者のモチベーションは低下する。
      バグ疑惑に対しても「埋め込みじゃねーの?」と感度が鈍くなる。

      この方法を考えた人は、馬鹿だと断じます。
      実践した人も馬鹿だが・・・だぶん、ほとんど事例はないんじゃないかと。

      • by Anonymous Coward

        管理システムにならされた鴨は、どんどんバカになっていくよね。

        下々に教えないで、上司が評価するだけだよ。

        # このセクションがまだバグが多いなとか

    • by Anonymous Coward

      あれ?
      テスト前はちゃんと動いていたのに動かなっくなってる!

      Diffを取る

      人為的バグ全つぶし

      となるのが予想できるのだが…。

  • by minet (45149) on 2012年11月22日 18時29分 (#2277380) 日記

    こんな古いものを…
    父さん、酸素欠乏症にかかって…

    と思ったら、連載講座か。
    「池の中の魚」なんて名前がついているのは知らなかった。

    ちなみに次回予定の2チーム手法ってのは、
    最初の一定期間2つのチームA,Bで同時にテストして、
    共通して発見されたバグと、Aだけ、Bだけに発見されたバグの比から、全体を見積もる手法の事。
    これならわざわざバグを仕込む必要がない。

    • ちょっと、次回のネタバレをしないで下さい(笑)。

      まあ、バグを統計的に扱って何とかしようというこの手のネタは、実用になった物から身も蓋も無い物まで幅広いですし。 特に実用にならなかった物に関しては、プログラミングで飯を食ってる人でもまず目にすることは無いので、 そんなアイデアが有ったのか! タレコまなきゃ! ってなるのもしょうがないかと。

      裏を返せば、その手の人の集まる飲み会なんかでネタにするには最適な話題だったりするんじゃないかと。
      親コメント
    • by Anonymous Coward

      基本情報試験に乗ってるレベルですからねー

  • これは一般的にエラーシーディングと呼ばれる技法だと思います。…、と以前にも/.Jで言及して [srad.jp]いました。

    「池の中の魚」モデルという名称よりもエラーシーディングの方が一般的な名称ですし、山浦氏が知らないわけがないのですが何か意図があるのでしょうか。それともエラーシーディングとは別物か。

    • by Anonymous Coward

      意図的にエラーを入れて発見率を測るのは、検証品質を推定するのに使うものだと思っていました。
      この記事の方法だと、検証対象の品質を測るのに使うとなっていますね。
      どっちにせよ、指標として使えるようなバグの作成は難しいと思いますが、作成方法は確立されているのでしょうか?

  • 無駄無駄 (スコア:2, すばらしい洞察)

    by Anonymous Coward on 2012年11月22日 18時41分 (#2277393)

    だって設計者とデバッグ担当者が同一人物なんだもの

  • かと。IC内部のマイクロプログラムとか、ライフサイクルを通してバグが顕在化しないソフトウェアは沢山在り、その内の何割かは本当にバグは無いのです。
    • 正しくは、「バグが無いことを確かめる手法がない」、ということでしょうね。いわゆる悪魔の証明というやつです。

      これを馬鹿正直にやろうとするのがカバレッジ率に基づく単体テストということになるのですが、これとて仕様のバグ等は取れません。また、効率が悪過ぎで、ひと目で問題の無いと分かるコードでも何通りものテストケースが必要になります。バグを効率的に取るというよりは、テストをやったというエビデンスを出すことが目的化しているように感じます。

      親コメント
      • それは「テストだから」じゃないですか?
        一部の形式手法ではバグがないことを保証できますよ
        # ただしバグの定義を書け!とか鬼畜な要求をされますけどね!

        親コメント
    • by Anonymous Coward

      かと。IC内部のマイクロプログラムとか、ライフサイクルを通してバグが顕在化しないソフトウェアは沢山在り、その内の何割かは本当にバグは無いのです。

      ほんとそう思う。

      バグがないソフトウェアはないって、言い訳じゃないの?

    • by Anonymous Coward

      それだけコストと時間をかけて世に出されるソフトウェアは稀なのです。

      # 簡単に差し替えできるってことは品質を落とす理由になりえるんです……

  • by Anonymous Coward on 2012年11月22日 18時22分 (#2277375)

    と何が違うの?

    • by minet (45149) on 2012年11月22日 18時36分 (#2277387) 日記

      バグ埋め込み法そのものだと思います。
      「池の中の魚」って名前を付ける事で教えやすくする。デザインパターンみたいなものですね。
      あとは、お客様に説明するとき、
      「弊社では『バグ埋め込み』によってテスト品質を確保しております」
      なんて言えないよなあ、とか。

      親コメント
    • by Anonymous Coward

      名前が違う。

  • by Anonymous Coward on 2012年11月22日 18時24分 (#2277377)

    あらゆるバグの発見の容易さと修復の容易さが一様だという前提が必要。

    極めて発見が困難なバグが一件入っているときに1000個の人口バグを挿入して1000個の人口バグをつぶせる
    開発チームがあったとしても、やはり100%のバグは残留する。

    • by Anonymous Coward

      たのむから仕事では小学校で習うことのtypoは指摘させないでくれよ。

      • 違うよ、全然違うよ。
        きっと人-ロバグ(hito-ro-ba-gu)っていう新しい何かなんだよ。
        しばらく前にいたろ?yama-rorieって女の子芸能人。あれと同じ。きっと。たぶん。

        • by Anonymous Coward

          #2277377は、主張のサンプルそのものなわけだよ。
          もっともキミのように「人口」に気づいただけだと、発見率は100%にはならないわけだがwww

  • バグの陰にバグとか、バグがテスト自体をブロックするとか。
    デバッグして修正不十分とか今まで動いていた所を壊すとか。
    そういうことを考慮しない手法は現実的ではないな。

  • by Anonymous Coward on 2012年11月22日 19時29分 (#2277424)

    じゃあそのバグに対処する方法というのも何通りもあるので、
    バグを仕込んだ、発見された、当初と違うところで修正された、という場合に
    ピンポイントでコードを見るとバグの原因と想定して入れたコードが残っていても、
    実際にはほかのところ(もっと下やもっと上)で修正されており、
    「今度はわざと入れたバグのコードを修正しちゃうことがエンバグのリスクになる」と思うのですが・・・。

    テストが行われていることを担保するためなら最終成果物のバグは平均して増えてもいい、
    という最上層部から末端まで一貫した割り切りがない限りは
    無駄なことやって問題増やしてるだけだと思います。

  • テストのパフォーマンスが数値的に評価できるということで、テスターを奮起させる効果が期待できそうです。プログラマーとテスターが別人の場合に効果が期待できそうです。テスト設計者は漏れのないテスト設計を心がけるでしょうし、テスト担当者も注意深くテストすることになるでしょう。

    ただし、人道的な問題があります。もともとはテスト工程の進捗の評価基準でしかありませんが、結果が独り歩きしだすと、テスター自身の評価として使われる危険性が出てきます。こうなると、テスターの関心は本来のバグではなく、挿入されたバグに向かうことになるでしょう。バグ挿入者がテスターに攻略される(考え方が看破される)と、挿入されたバグに特化したテストばかりやられて、本来のバグが放置という本末転倒な結果になりかねません。また、バグ挿入者も、仏心あれば、発見困難なバグの挿入をためらうということにもなるでしょう。

    評価結果の詳細はプロジェクト内の極秘データとして人事評価者には漏らさないという管理が必要になるでしょうが、そこまでの公正さを持つ(という信頼を得ている)プロジェクトリーダーがそうそういないでしょう。銀の弾丸は無いのです。

    一般論として、相互不信に基づく職場(減点法)と、相互信頼に基づく職場(加点法)、どっちで働きたいかということを考えれば明らかであり、前者の職場ではこういった本末転倒なことが起きかねないわけです。従来のソフトウェア工学は前者に基づく手法が大半であり、今回の手法もそれに分類されるでしょう。それに対するアンチテーゼとして、デマルコのピープルウェアや、XPが提案されているわけです。これらは、後者の「信頼に基づく職場環境こそが真の生産性を生み出す」と訴えているのです。

  • バグ発見数/ステップ数が指標値に合わないからだめだとかいう人もそうだけど、
    どうやって作ったか、どんな人が作ったか、どんな言語でつくったか、全然加味されませんよねこういうのって。
    --
    # yes, fly. no, fry.
  • by Anonymous Coward on 2012年11月22日 18時21分 (#2277374)

    セキュリティチェックのテストで本物の麻薬だか爆弾を入れたら、見つからずにそのまま航空機に積まれて出発してしまったそうですな。

    # 20年ぐらい前の本で読んだ。

    • by Anonymous Coward

      2000年代にもありませんでしたっけ?
      フランス(?)の空港で訓練のために客の荷物にランダムに爆弾を入れたら…ってやつ。
      信管は抜いてるらしいけど。

  • by Anonymous Coward on 2012年11月22日 18時29分 (#2277381)

    デバッグテストチームのバグの発見に関する率を求めるのには良いかもしれないけど、毎回毎回仕込んでいたら
    単にデバッグ、テスト、検収系のコスト増やしているだけじゃないの?

    • by Anonymous Coward on 2012年11月22日 18時40分 (#2277391)

      そもそも、「埋め込んだバグ」とやらがよほど精巧なものでなければ、意図的に埋めたバグなんて早々に発見されるでしょう。
      「人為バグは100%発見できてます完璧です」
      客「バグ出たぞ」となるのがオチ。

      テスターを放り込む会社があればその品質を示すことになるかも知れませんが、そんなことは「テスターのテストプロジェクト」でも作ってそこでやってくれ。
      で、「竹:費用は安いが発見率50%のチーム」「松:費は高いが発見率80%のチーム」どちらになさいますか?
      客「竹の値段で100%のやつよこせ」
      ですよね。

      親コメント
    • by Anonymous Coward

      わざわざバグの数を推測するのだから、「どれだけデバッグするか?」の最適解を探すのが目的なんだろうけど。

      バグの数と製品品質は別物だし、それを基準にされてもね・・・

  • by Anonymous Coward on 2012年11月22日 18時50分 (#2277398)

    この方法を取る余裕があるんだったら、バグはもっと少なく出来るよぉ……

    # 「これ間に合わないっす」「んじゃ、それ埋め込むバグってことにしとけ」
    # こんな使われ方をするだろうからね

  • by Anonymous Coward on 2012年11月22日 19時34分 (#2277428)

    午前問題で良く出るよね。
    「斬新なアイデア」なんて感じるとしたら、基礎知識に問題があるような気が・・・・

    • by Anonymous Coward

      あまりに前時代的で非実用的だから、まともな大学出てるとかえって目にしないんだよ。

      そういう非実用的技術っていくつかあるけどね。
      有名どころだとフローチャートとかファンクションポイント法とか。

  • by Anonymous Coward on 2012年11月22日 21時31分 (#2277510)

    どれだけのバグを仕込めば。信頼できる値が取り出せますか?
    バグ1件だけ仕込んでも意味がないわけで。

    • by Anonymous Coward

      この場合は統計的に考えて2000件もあれば…

      # ♪トリビア~

  • by Anonymous Coward on 2012年11月22日 22時42分 (#2277573)

    高校の生物で習ったよ。
    標識再捕獲法だね。

    • by Anonymous Coward on 2012年11月23日 10時38分 (#2277715)

      標識再捕獲法の場合はもともとフィールドにいた特定種の生物個体を何体かいったん捕獲し標識をつけて野に放ち、ふたたび捕獲した同種生物個体中の標識済個体数の割合から全個体数を推定するでしょう?

      バグの埋め込みはしない方法ということになるので、minet (45149) さんのコメントにある2チーム手法が標識再捕獲法に近いものではないですか。

      もっとも標識再捕獲法では捕獲の技量は等しいことが暗に想定されているから、2チームの技量の差があるとバグの全数の推定ではなくなり、2チーム手法ではバグ検出の技量の差を比較しているだけということになってしまいそうですね。

      親コメント
  • by Anonymous Coward on 2012年11月22日 23時34分 (#2277602)

    これくらいバグが出てこないとオカシイ!
    頭の変な(一流w)会社が上流にいたせいで、理論式よりも少ないせいで怒られる・・・
    結局、本末転倒なバグ埋め込みマッチポンプをせざるを得なくなりましたよ(7年程前の実話)

    • by Anonymous Coward on 2012年11月23日 14時18分 (#2277818)
      とあるSIerで3人のSEが非難された。一人は摘出バグが約束されたバグ数より多かったので、低品質な実装をした容疑で。もう一人は摘出バグが少なかったので、テストをサボった容疑で。最後の一人は摘出バグが約束されたバグ数と一致したため、摘出バグ一覧表を改ざんした容疑で。
      親コメント
  • by Anonymous Coward on 2012年11月23日 2時20分 (#2277642)

    >ただし、よく知られているとおりバグのないソフトウェアは存在しない。

    勝手に決めつけないでくれるかなバグのないソフトウェアはあるよ

    • by Anonymous Coward

      有りますね。ただし、限られた分野になりますが。制御系のマイクロプログラムとか精密機器のドライバとか。

  • by Anonymous Coward on 2012年11月23日 8時41分 (#2277686)

    「バグのないソフトウェアは存在しない」から「この手法の有効性については疑問の声が多」いという論理が分からん。元記事にもそういうことは書かれていないし。

  • by Anonymous Coward on 2012年11月23日 11時58分 (#2277753)

    バグの発生原因が全部網羅されていて、バグの種類によって入れるならいいけど、
    人間が意図的に入れるバグは大抵同じものだから見つかり易いでしょ。
    そういうものはテストで十分見つかる範囲だと思うけどね。
    大体、バグの種類が網羅されているなら初めからバグを仕込まなくてテストだけでいいし、
    有効性があるのか疑わしい。

typodupeerror

アレゲは一日にしてならず -- アレゲ見習い

読み込み中...