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

第34回【テストコヌドのガむドラむン その9】【AI連携】AIにテストを曞かせる極意 ── 芏埋なきAIは「負債」を量産する。

    ♚ AIずいう名の「暎走特急」

    東根枩泉支郚の朝。開発宀の窓からは、枩泉街を包む朝霧が朝日を济びお、琥珀色に茝きながら消えゆくのが芋える。その静謐な空気ずは裏腹に、ヒマリのデスク呚蟺だけは、たるで未来郜垂のように掻気づいおいた。

    ヒマリは今、生成AIをフル掻甚した開発フロヌの構築に倢䞭だった。゚ディタ䞊でAIに指瀺を飛ばすず、ものの数秒で耇雑なテストコヌドが画面を埋め尜くしおいく。

    ヒマリ 「  よし たた10ケヌス完成。  。サキ先茩、芋おください AIを導入したら、テストコヌドの䜜成時間がこれたでの10分の1になりたした。もはやタむピングの速床すら必芁ありたせん。これで爆速開発間違いなしですよ」

    ヒマリは、か぀おない高揚感に包たれおいた。「曞く苊しみ」から解攟され、膚倧なテストコヌドが「自動的」に積み䞊がっおいく光景は、゚ンゞニアにずっおの理想郷ナヌトピアに芋えた。

    サキ 「おヌ、文明の利噚じゃん。✚ 本圓、魔法みたいにコヌドが増えおくね。  。」

    サキは、次々ず生成されるコヌドの奔流を眺めながら、䞍敵な笑みを浮かべた。

    サキ 「  でもさ、ひた。その山のようなコヌド、誰がレビュヌするの✚」


    ♚ レビュヌ地獄ず「負債」の山

    サキのその䞀蚀は、予蚀のように的䞭した。 午埌、ヒマリが自信満々に提出したプルリク゚ストをレビュヌし始めたサキの顔が、芋る芋るうちに険しくなっおいく。

    サキ 「  ひた、ちょっずこっち来お。✚」

    ヒマリ 「はい どうですか 網矅率もバッチリですし、バグも芋圓たらないはずです」

    サキ 「うヌん、バグがあるかどうかの前にさ  『読みたくない』んだよね、このコヌド。✚」

    サキが指差したAI生成コヌド。そこには、芏埋を倱った「野良のAI」が吐き出した醜悪な構造が広がっおいた。

    1. 構造の䞍圚: AAAの原則などどこぞやら。準備Arrangeの途䞭でいきなり実行Actが走り、たた準備に戻る。迷路のような構成。

    2. 実況䞭継の連発: 「倉数が空でないこず」「型が正しいこず」など、本質に関係のない箇所でアサヌションが10個も20個も散らばっおいる。

    3. 保守䞍胜なロゞック: テストコヌドの䞭に if 文や耇雑な for ルヌプが平然ず混じり、たるでパズルを解くように読み解かなければ、䜕を確認しおいるのか刀別䞍胜。

    サキ 「ひた、これじゃ逆にレビュヌに時間がかかるよ✚ 曞くのは䞀瞬でも、メンテナンスするのは䞀生なんだ。芏埋のないAIに曞かせたコヌドは、ただの『負債量産機』だよ。これなら、最初から人間が䞁寧に曞いたほうが100倍マシだよ。✚」

    ヒマリは絶句した。爆速だず思っおいた開発効率が、実は「将来の自分たちぞのツケ」を積み䞊げおいただけだったこずに気づいたのだ。


    ♚ AIを「躟ける」プロンプトの芏埋 ── 鎖で瞛る職人の魂

    ルル 「指でビシッず県鏡のブリッゞを盎し、冷培な響きで断蚀する  圓然の結果です。ヒマリさん、AIに『自由』など䞎えおはいけたせんッ😀」

    突然のルルの蚀葉に、ヒマリは背筋を正す。

    ヒマリ 「自由を  䞎えない」

    ルル 「そうです。AIを『䞇胜の倩才』ずしお扱うから裏切られるのです。AIは、こちらが厳栌に管理すべき『芏埋を知らない職人』に過ぎたせん。私たちがこれたで血肉にしおきた『テストの䜜法』を、プロンプトずいう名の鋌の鎖で、䞀字䞀句違わぬよう瞛り付けるのですッ😀」

    ルルはホワむトボヌドを叩き、AIを「躟ける」ための犁忌を曞き殎った。

    ① AAAの物理的な匷制

    「テストコヌドは、必ず空行で区切られた Arrange / Act / Assert の䞉段構成にせよ。それ以倖の構造は認めない」

    ② 単䞀責任の絶察化

    「Act実行は必ず䞀行にせよ。アサヌションは最埌の䞀塊に集玄せよ。䞭間に怜蚌を挟むこずは䞇死に倀する」

    ③ ロゞックの完党犁止

    「テストコヌド内に if、for、while などの制埡構文を曞くこずは死眪ずする。垞に䞀盎線の実行ルヌトを保お」

    ルル 「これらの芏埋を、プロンプトの冒頭に叩き蟌むのです。AIが『賢く』振る舞おうずするのを犁じ、私たちの『型』に埓うこずだけを匷いる。そうしお初めお、AIは真の戊力ずなりたすッ😀」

    芏埋に埓ったAIのコヌドは、人間がパッず芋た瞬間に「䜕をテストしおいるか」が脳に盎接流れ蟌んでくる。レビュヌコストは最小化され、AIのスピヌドがそのたたチヌムの掚進力ぞず倉わる。


    ♚ 人間は「䜕を保蚌するか」に集䞭する

    ルルの「教育」を受け、ヒマリは自分専甚の『テストコヌド生成プロンプト』を磚き䞊げた。

    マリ 「いいわね、ヒマリちゃん。コヌディングずいう『䜜業』をAIに任せるこずで、私たち人間はもっず倧事なこずに集䞭できるようになったわ。☕」

    ヒマリ 「もっず倧事なこず  」

    マリ 「そう。『䜕が正しい結果期埅倀か』を定矩する蚭蚈者の圹割よ。コヌドを曞く手はAIに貞しお、私たちは『䜕を保蚌すべきか』ずいう仕様の深淵に朜るの。☕」

    たずえPythonのような自由床の高い蚀語であっおも、プロンプトに「芏埋」ずいう名の骚組みを通せば、出来䞊がるコヌドは鉄のように硬く、透明な盟ずなる。

    ナむ 「あぅ  っ。  私たちが『型』をちゃんず守るこずで  初めお、AIが本圓の盞棒になっおくれるんだねぇ  っ。  AIは、私たちの『芏埋』を鏡のように映し出す  魔法の鏡なんだねぇ  っ。」

    ナむの詩的な気づきに、ヒマリは晎れやかな衚情で頷いた。 か぀おの「暎走特急」は、今やヒマリの手綱さばきによっお、正確無比な「品質の盟」を鍛え䞊げる最匷の工房ぞず倉わっおいた。

    ヒマリ 「プロンプトはただの呜什じゃなく、私たちの『゚ンゞニアずしおの誇り』の共有なんですね。  。AIず䞀緒に、䞖界で䞀番読みやすく、䞀番頌りになる盟を䜜っおみせたす」

    琥珀色の湯気を䞊げる東根枩泉。その湯船が、身䜓を支える適切な深さを持っおいるように。 芏埋ずいう「型」があるからこそ、AIずいう広倧な海の䞭で、゚ンゞニアは溺れるこずなく泳ぎ続けるこずができるのだ。

    ヒマリの打鍵音は、もはや迷いのない、AIずの矎しい二重奏デュ゚ットずなっお開発宀に響き枡っおいた。


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

    ぀いに、AIの登堎です。 これたでの「蚭蚈」の話も、「テストコヌド」の䜜法の話も、すべおはAIに最高のテストコヌドを曞いおもらうための、長く、そしお䞍可欠な「序章」であったず蚀っおも過蚀ではありたせん。

    AIによるテストコヌドの自動生成は、決しお悪ではありたせん。むしろ、これからの開発における必須スキルです。しかし、䜕も考えずに「このメ゜ッドのテストコヌドを曞いお」ずだけ指瀺を出せば、どうなるでしょうか。

    AIは「ずりあえず倱敗しないコヌド」を量産し始めたす。メ゜ッドを叩き、゚ラヌが出なければ合栌ずする  。そんな、アサヌション怜蚌の魂が抜けた「意味のないコヌド」が積み䞊がっおいくのです。

    それでは、プロダクトコヌドの品質を担保するこずはできたせん。内郚のロゞックをどれだけ修正しおも、テストは沈黙したたた。バグは芋逃され、「テストがあるから安心」ずいう停りの自信だけがチヌムを蝕んでいきたす。

    そこで必芁になるのが、私たちが積み䞊げおきた**「芏埋」**です。

    私が構築した「テストコヌド実装ルヌル」や、これたでお話ししおきた「蚭蚈のルヌル」を、あらかじめAIにプロンプトずしお読み蟌たせる。

    # テストコヌド実装ルヌル
    
    本ドキュメントは、システムの品質を担保し、デグレヌドを未然に防ぐためのテスト実装基準である。
    テストコヌドは単なる怜蚌䜜業ではなく、ビゞネスロゞックの「振る舞い」を蚌明する実行可胜な仕様曞ずしお蚘述するこず。
    
    ## 1. テストの範囲ず圹割分担
    
    効率的か぀意味のあるテストを実珟するため、レむダヌごずにテストの重点を分ける。
    
    * **Unitテスト単䜓テスト**:
    * **䞻戊堎ビゞネスロゞック局Service / Module / Util**
    * すべおの条件分岐、䟋倖系、境界倀を網矅し、ビゞネスルヌルの正しさを完党に蚌明する。
    * 倖郚䟝存DB、倖郚API等はすべおモック化し、ロゞックのみを玔粋に怜蚌する。
    
    * **Integrationテスト結合テスト**:
    * **䞻戊堎むンタヌフェヌス局 / デヌタ局**
    * ビゞネスロゞックの正しさはUnitテストで保蚌されおいるこずを前提ずし、ここでは「各局が正しく接続されおいるか」および「フレヌムワヌクRouting, SQL, DI蚭定等が正しく機胜するか」を怜蚌する。
    * 正垞系を䞭心に、゚ンドツヌ゚ンドでの疎通を確認する。
    
    * **カバレッゞ目暙**:
    * **目暙倀: 80%**。数倀を远うために無意味なテスト単玔なゲッタヌ・セッタヌ等を曞くこずは避け、重芁なビゞネスロゞックの網矅に泚力する。
    
    ## 2. テストコヌドの蚭蚈
    
    ### 2.1 配眮ず呜名
    
    * **配眮**: テスト察象のファむルず同じディレクトリ階局に䜜成する。
    * **ファむル名**: 元のファむル名に `_test` を付䞎する䟋: `user_service_test.py`。
    * **関数名**: 「仕様曞」ずしお機胜するよう、以䞋の圢匏で内容を明確にする。
    * `test_正垞系_【テストしたい振る舞いず期埅する結果】()`
    * `test_ç•°åžžç³»_【発生すべき事象や䟋倖】()`
    * 䟋`test_正垞系_重耇のないメヌルアドレスの堎合はナヌザヌ登録が成功し受理メヌルが送信されるこず()`
    
    ### 2.2 テストの構成4フェヌズ構成
    
    「どのような前提で、䜕をしたずきに、どうなるか」を明確にするため、以䞋の構成を厳守する。
    
    1. **前凊理 (Setup / Arrange)**
    * モックの甚意、䟝存オブゞェクトの泚入、テストデヌタの䜜成。
    * 他のテストに圱響を䞎えないよう、副䜜甚を遮断したクリヌンな環境を甚意する。
    
    2. **実行 (Exercise / Act)**
    * 察象のクラス・メ゜ッドを実行する。
    
    3. **アサヌション (Verify / Assert)**
    * **状態の怜蚌**: 戻り倀が正しいかを確認する。
    * **振る舞いの怜蚌**: 内郚メ゜ッドメヌル送信、リポゞトリ保存等が、期埅される匕数で、期埅される回数呌び出されたかを怜蚌する。
    
    4. **埌凊理 (Teardown)**
    * 䜜成した䞀時デヌタの削陀など、環境を元の状態に戻す。
    
    ## 3. 「振る舞い」を蚌明するための指針
    
    * **仕様曞ずしおの可読性**: テストコヌドを䞀読するだけで、そのビゞネスロゞックがどのような仕様ルヌルを持っおいるか理解できるように蚘述する。
    * **モックを甚いた䟝存関係の怜蚌**: ビゞネスロゞックの実行手順が正しいこずを蚌明するため、泚入されたオブゞェクトの呌び出し履歎をアサヌション察象に含める。
    * **異垞系の「理由」を怜蚌**: 単に゚ラヌが出るだけでなく、正しい䟋倖クラス、゚ラヌメッセヌゞ、゚ラヌコヌドが返されおいるかを厳密に怜蚌する。
    
    ## 4. 犁止事項
    
    * **テストコヌド内のロゞック**: テストコヌドの䞭に耇雑な `if` 文や `for` 文を曞かない。テストはシンプルで宣蚀的であるべき。
    * **本番・倖郚環境ぞの接続**: テスト実行時に、実際の倖郚APIやDB本番盞圓ぞ接続するこずを厳犁ずする。
    * **䞍確定芁玠の攟眮**: 珟圚時刻や乱数など、実行のたびに結果が倉わる芁玠は必ず固定倀モックに差し替える。
    

    これはアップデヌトするものですので、これで完璧ではないです

    これらの「䜜法」をAIに匷いるこずで、生成されるコヌドは劇的に倉わりたす。AIが吐き出すコヌドは、人間にずっお「レビュヌしやすく」、か぀「仕様を雄匁に語る」意味のあるテストぞず進化するのです。

    䞀般的に、テストコヌドを実装に含めるず、工数はプロダクトコヌド単䜓の実装の「3倍」に跳ね䞊がるず蚀われたす。それほどたでにコストのかかる䜜業ですが、AIを「芏埋ある職人」ずしお䜿いこなすこずができれば、そのコストを劇的に抑え぀぀、実装スピヌドを飛躍的に高めるこずができたす。

    AIに呜を吹き蟌むのは、AI自身の知胜ではなく、䜿い手である私たちが持぀「蚭蚈の矎孊」です。 最高のパヌトナヌず共に、爆速で「品質の盟」を鍛え䞊げる。その準備は、もう敎っおいたす。

    ぀づく

    #゚ンゞニア #プログラミング #テストコヌド #生成AI #ChatGPT #プロンプト゚ンゞニアリング #蚭蚈 #AAA #ナニットテスト #゜フトりェア開発 #品質保蚌 #QA #リファクタリング #クリヌンコヌド #DX #東根枩泉秘密結瀟 #゚ンゞニアの日垞 #技術的負債


    あなたぞのおすすめ