0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「テストが緑=完成」ではない理由、初心者が見落とす3つの観点

0
Posted at

どうも、テックバディ運営の大下です。AI駆動開発を学べるエンジニア向けスクール「テックバディ」でコードレビューをしていると、この誤解が一番多いかもしれません。

CIのチェックが全部緑になった瞬間、「よし、完成」とプルリクを出したくなる気持ちはよく分かります。特にAIにコードとテストを一緒に書いてもらえるようになった今は、テストが通ること自体のハードルが下がった分、「通った=正しい」という誤解がむしろ強まっている気がします。

でも緑のチェックマークは「書いたテストの範囲では壊れていない」を示しているだけで、「正しく作れている」の証明ではありません。今回は、初心者が見落としがちな3つの観点を整理します。

観点1:そのテストは「仕様」を検証しているか、「実装」をなぞっているだけか

AIにテストを書かせると、実装コードをそのままなぞるようなテストが生成されることがあります。

// 実装
function calculateDiscount(price, rate) {
  return price - price * rate;
}

// NG:実装の計算式をそのままコピーしただけのテスト
test('割引計算', () => {
  const price = 1000;
  const rate = 0.1;
  expect(calculateDiscount(price, rate)).toBe(price - price * rate);
});

このテストは実装にバグがあっても、そのバグごとテストの中に複製されているので絶対に落ちません。テストは「実装が何をしているか」ではなく「仕様として何が正しいか」を検証すべきです。

// OK:期待する具体的な結果値で検証する
test('1000円の商品を10%割引すると900円になる', () => {
  expect(calculateDiscount(1000, 0.1)).toBe(900);
});

観点2:正常系だけで、異常系・境界値が抜けていないか

AIにテストを書かせたときに一番よく抜けるのがここです。「動く例」は書けても、「動いてはいけない例」「境界の例」は指示しないと出てこないことが多いです。

  • 正常系:普通に動く入力(例:割引率10%)
  • 境界値:ちょうど境目の入力(例:割引率0%、100%)
  • 異常系:本来あってはいけない入力(例:割引率がマイナス、priceが未定義)
// 境界値・異常系を明示的に追加する
test('割引率が0の場合は元の価格のまま', () => {
  expect(calculateDiscount(1000, 0)).toBe(1000);
});

test('割引率が100%の場合は0円になる', () => {
  expect(calculateDiscount(1000, 1)).toBe(0);
});

test('価格がマイナスの場合はエラーを投げる', () => {
  expect(() => calculateDiscount(-1000, 0.1)).toThrow();
});

「valid(正しい入力)は書くけどinvalid(不正な入力)が抜ける」というパターンは、AI生成コードのレビューでも繰り返し指摘されるポイントです。テストが緑になったら、まず「境界値と異常系を書いたか」を自分に問い直す習慣をつけると穴が減ります。

観点3:テストが「動いている」だけで、そもそも仕様として正しいかは別問題

テストが通っていても、その仕様理解自体が間違っていれば意味がありません。たとえば「割引率は0〜1の小数で受け取る」という前提を勘違いして「0〜100のパーセント値で受け取る」実装とテストを両方作ってしまえば、テストは緑のまま仕様とズレたコードが出来上がります。

これはコードを読むだけでは気づけません。要件定義書や仕様書と突き合わせて確認するしかない領域です。AIにテストを書かせる場合も、「この仕様のもとで正しいか」をレビューする役割は人間に残ります。

まとめ

テストが緑になっているかどうかは、あくまで「書いたテストの範囲で壊れていないか」というチェックにすぎません。

  • 実装をなぞっているだけのテストになっていないか
  • 境界値・異常系が抜けていないか
  • そもそも仕様理解が正しいか

この3つは自動化された緑のチェックマークでは判定できず、人間が意識して確認する必要がある領域です。「テストが通った=完了」ではなく「テストが通った=次に何を確認すべきか考えるタイミング」と捉え直すと、レビューの精度が上がります。


AI駆動開発を実務レベルで学べるエンジニア向けスクール「テックバディ」について

「テックバディ」は、生成AIを使いこなして実務レベルの開発をやりきる力を、模擬案件を通じて身につけるエンジニア向けスクールです。「AIに書かせるだけ」で終わらせず、設計力・品質担保力・判断力まで鍛えるカリキュラムで、現場で任される仕事の幅を広げたい方をサポートしています。

■詳しくはこちら:https://www.mukuil.com/lp/tech-buddy/#contact

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?