メむンコンテンツぞスキップ
芋出し画像

第33回【テストコヌドのガむドラむン その8】【数字】カバレッゞ100%の幻想 ── 網矅率ずいう「数字」に魂を売るな。

    ♚ ヒマリの「完党勝利」宣蚀

    東根枩泉支郚の開発宀。窓の倖では、春の倜颚に運ばれた硫黄の銙りが、咲き始めたさくらんがの花の銙りず混ざり合い、この地ならではの独特な季節の蚪れを告げおいる。しかし、今日のヒマリにずっお、そんな情緒に浞る暇はなかった。

    プロゞェクトもいよいよ倧詰め。ヒマリはここ数週間、食事の時間も惜しんでテストコヌドの「完成床」を高めるこずに党神経を泚いできた。そしお今、圌女のモニタヌには、たばゆいばかりの、そしお残酷なたでに完璧な数字が衚瀺されおいた。

    ヒマリ 「  できた。぀いに、蟿り着いた  」

    ヒマリは怅子を蹎り飛ばさんばかりの勢いで立ち䞊がり、ラりンゞで新䜜のスむヌツを詊食しおいたサキのもずに駆け寄った。

    ヒマリ 「サキ先茩 サキ先茩 芋おください、これ ぀いにやりたした  カバレッゞ100%ですッ」

    ヒマリが突き出したノヌトPCの画面には、すべおの゜ヌスファむルが「緑色」に染たり、網矅率を瀺す数倀が誇らしげに「100.0%」ず刻たれおいた。

    ヒマリ 「党おの行、党おの分岐、党おの条件匏をテストが通過したした 䞀行の挏れもありたせん。マリさんに教わった通り、これでこのシステムにバグが入り蟌む隙間は1ミリも存圚したせん 私たちの勝ちです」

    サキ 「おヌ、100% マゞ 数字だけ芋るず、歎史に残るレベルの完璧じゃん。✚」

    サキはフォヌクを眮き、感心したように目を现めた。しかし、圌女の芖線がヒマリの誇る「100%のコヌド」の现郚に移った瞬間、その瞳にわずかな、しかし鋭い懞念が宿った。

    サキ 「  でもさ、ひた。なんかこのコヌド  党䜓的に劙に『膚らんで』ない✚」


    ♚ 数字を远うために「歪んだ」コヌドの断末魔

    サキはヒマリの隣に座り、いく぀かのファむルをランダムに開いおいった。そこに䞊んでいたのは、か぀おのヒマリが倧切にしおいた「シンプルで矎しい蚭蚈」ずは皋遠い、歪なコヌドの矀れだった。

    サキ 「ねぇ、ひた。この else 句のブロック  これ、本番の運甚では絶察にあり埗ない状況だよね✚」

    サキが指差したのは、ある䟋倖凊理の分岐だった。通垞では絶察に発生しないシステム内郚の矛盟を拟うための分岐だが、その䞭を通すためだけに、プロダクションコヌド偎に「テスト時のみ無理やり䟋倖を発生させるためのフラグ」が远加されおいた。

    ヒマリ 「あ  。そこは、カバレッゞを通すのが難しくお。どうしおも赀色が残っちゃうのが蚱せなかったんです。だから、テストコヌドから特定の倀を送った時だけ、無理やりその䟋倖ルヌトを通るようにロゞックを埮調敎したした。  でも、これで100%になったんですよ」

    ヒマリの匁明は続く。 「こっちのゲッタヌずセッタヌも、フレヌムワヌクが自動生成するものだけど、カバレッゞを䞋げる原因になるから党郚テストを曞きたした。あず、この耇雑な if 文も、リファクタリングしお消しちゃうずテストケヌスが枛っおカバレッゞ蚈算が狂いそうだったから、あえおそのたた残しお党パタヌン網矅したんです」

    100%ずいう数字を叩き出すために、ヒマリはリファクタリング蚭蚈の改善を諊め、カバレッゞを通すためだけの「䞍自然なコヌド」を曞き足し、本来テスト䞍芁な堎所にたで膚倧な劎力を泚ぎ蟌んでいた。


    ♚ 100%を目指すず「本質」が死ぬ ── 数字ぞの埋没

    サキ 「深いため息を぀いお、モニタヌを指差す  ひた。数字に魂を売っちゃダメ✚ 100%にするためにプロダクトコヌドを歪たせるなんお、本末転倒もいいずころだよ✚」

    サキの蚀葉は、枩泉の源泉のように熱く、ヒマリの胞に突き刺さった。

    サキ 「カバレッゞっおいうのはね、『どこをテストしおいないか』を可芖化するための目安であっお、それを100にするこずがゎヌルじゃないんだよ。✚」

    サキはホワむトボヌドに向かい、倧きな「100%」ずいう文字に×印を曞いた。

    サキ 「数字に執着するず、二぀の臎呜的な『死』を招くんだよ。✚」

    ① 保守コストの爆増ゎミテストの量産

    フレヌムワヌクの機胜や、単なる倀の受け枡し。そんな「テストしなくおも壊れない堎所」にたで無理やりテストを曞けば、コヌドを倉曎するたびに倧量の無意味なテストが壊れる。それは『盟』じゃなくお、開発者の足を匕っ匵る『おもり』だよ。

    ② 安心ずいう名の錯芚

    ここが䞀番怖いんだけど、『行を通った』こずず『正しく怜蚌した』こずは、党く別物なんだよ。✚ アサヌション怜蚌がザルでも、その行を通過さえすればカバレッゞは䞊がる。100%ずいう数字に安心しきっお、肝心の「境界倀でどう動くか」ずいう深い怜蚌を忘れたら、その100%はただの『匵りがお』でしかないんだよ。

    ヒマリは呆然ず立ち尜くした。自分が心血を泚いできた「緑色に染たった䞖界」が、実は蚭蚈の玔床を汚し、自分自身の銖を絞める眠だったこずに気づかされたのだ。


    ♚ 倧事なのは「網矅率」より「玍埗感」

    隒ぎを聞き぀けたマリが、静かに琥珀色のお茶を二人に差し出した。

    マリ 「ヒマリちゃん。プロの珟堎ではね、カバレッゞは80%から90%皋床あれば十分だず蚀われおいるわ。☕」

    ヒマリ 「えっ   100じゃなくおいいんですか 残りの10%を攟眮するのは、プロずしお無責任なんじゃ  。」

    マリ 「いいえ。その残りの10%  䟋えば、どうしおも再珟が困難なむンフラ局の䟋倖凊理や、フレヌムワヌク内郚の挙動。それらを無理やり網矅するために、無理な蚭蚈を匷いたり、䞍自然なフラグを立おたりするのは、それこそがプロずしお無責任な行為なの。☕」

    マリはヒマリの肩に優しく手を眮いた。

    マリ 「倧事なのは数字の倧きさじゃない。『自分たちが守るべき急所ビゞネスロゞックや境界倀が、正しく怜蚌されおいるか』ずいう玍埗感なのよ。☕」

    ナむ 「あぅ  っ。  数字を100にするこずより  。壊れたら䞀番困る堎所を、絶察に逃さないように守るほうが  ずっず『盟』ずしお匷いんだねぇ  っ。  数字は、私たちを安心させおくれるけど  本圓の安心は、自分のコヌドぞの『信頌』の䞭にあるんだね  っ。」

    ナむの柄んだ蚀葉が、ヒマリの頑なだった心を溶かしおいった。 100%ずいう完璧な数字の裏で、自分がいかに「思考」を停止させ、ただ数字を埋めるだけの䜜業に逃げおいたか。

    ヒマリ 「  わかりたした。私、100%ずいう呪瞛から卒業したす。数字に螊らされお蚭蚈を汚すのは、もうやめたす。これからは、たずえ数字が85%になっおも、その85%の䞭に『絶察に壊さない』ずいう確信を詰め蟌んでいきたす」

    ヒマリは再びデスクに向かい、カバレッゞを皌ぐためだけに远加した「䞍玔なコヌド」を䞀぀ず぀削陀し始めた。 網矅率のバヌは少しず぀䞋がっおいく。しかし、それず匕き換えに、コヌドは本来のしなやかさず矎しさを取り戻しおいった。

    東根枩泉の倜。琥珀色の湯から立ち䞊る湯気は、決しお䞀぀の圢に固たるこずはない。しかし、そのゆらぎの䞭にこそ、本物の癒やしず力がある。 ヒマリが手にしたのは、数字ずいう名の虚像ではなく、自身の蚭蚈思想に基づいた、確かな手応えのある「玍埗感」ずいう名の盟だった。


    📜 ボスの秘蔵蚭蚈の矎孊ず珟堎のリアル

    カバレッゞ100%ずいう数字。 それを達成するために、以䞋のようなプロダクトコヌドずテストコヌドを曞いたずしたしょう。

    def meaningless_process(x):  
        result = 0
        if x > 0:
            result = x * 2
        elif x < 0:
            result = x - 5
        else:
            result = 0
        
        status = "completed" 
        return result

    仮の実装ず思っおください。(本番でこういう実装はないず思いたす。)

    # 期埅倀の怜蚌アサヌションを䞀切行わず、
    # ただ「党行を通過させる」ためだけにメ゜ッドを呌び出すテスト
    def test_meaningless_coverage(self):
        meaningless_process(10)  # ifを通す
        meaningless_process(-1)  # elifを通す
        meaningless_process(0)   # elseを通す
    
    # 「゚ラヌが起きなかったこず」だけを確認するテスト
    def test_useless_assertion(self):
        result = meaningless_process(100)
        self.assertIsNotNone(result) # 䞭身が間違っおいおもパスする
    

    どうでしょうか。このテストに、果たしお「意味」はあるでしょうか。

    PHPであれPythonであれ、カバレッゞ100%を「目的」にした瞬間、テストは牙を剥きたす。アサヌション怜蚌をたずもに曞かず、単にメ゜ッドを叩いお゚ラヌが起きなかったずいう事実だけで網矅率を皌ぐ。そんな「䞭身のないテスト」が、珟堎には溢れおいたす。

    さらに恐ろしいのは、その100%ずいう数字を維持するために、本来䞍芁なコヌドを実装したり、DBや倖郚サヌビスにアクセスしなくおいい堎面で無理やりアクセスさせたりず、「無意味なコスト」が増倧しおいくこずです。

    100%ずいう数字自䜓が悪いのではありたせん。 「100%にするために無駄なコヌドを増やす」ずいう、手段ず目的の履き違えが問題なのです。

    特に、昚今のAIにテストコヌドを曞かせる際はこの傟向が顕著です。AIは埀々にしお「メ゜ッドが゚ラヌなく完遂するこず」でカバレッゞを皌ごうずしたす。その結果、人間がビゞネスロゞックを修正しお蚈算結果が倉わっおしたったずしおも、テストコヌド䞊ぱラヌが起きず、そのたたスルヌされおしたう。そしお、バグは本番運甚が始たっおから、最悪のタむミングで牙を剥くこずになりたす。

    結局、「AIに任せるずテストの品質が担保できない」ずいう結論になりがちですが、それは裏を返せば「ナヌザヌ人間が、意味のあるテストずは䜕かを理解した䞊で指瀺を出しおいるか」ずいう問いに盎結したす。

    意味のあるテストを、意味のある劎力で曞く。 そのためには、テスト察象が「䜕を怜蚌すべきか」が明確で、倖郚䟝存が適切に切り離された「良い蚭蚈」が䞍可欠です。

    数字に魂を売る前に、もう䞀床自分の蚭蚈を芋盎しおみたせんか 蚭蚈こそが、無意味な100%からあなたを救い出し、真に䟡倀のある「盟」を授けおくれるのです。

    ぀づく

    #゚ンゞニア #プログラミング #テストコヌド #ナニットテスト #カバレッゞ #網矅率 #゜フトりェア開発 #蚭蚈 #品質保蚌 #QA #リファクタリング #クリヌンコヌド #技術的負債 #゚ンゞニアの成長 #東根枩泉秘密結瀟 #玍埗感 #ビゞネスロゞック


    あなたぞのおすすめ