पाठ 14 / 29

Test-चालित Loops: Tests लक्ष्य के रूप में

पहले विफल tests लिखें या अनुमोदित करें, फिर agent को उन्हें पास करवाने दें।

Agent को ऐसा लक्ष्य दें जिसे वह नक़ली न कर सके

Agents तब सबसे अच्छे चलते हैं जब "सही" के लिए स्वचालित संकेत हो। Test-driven development यह देता है: ऐसे tests लिखें (या agent से लिखवाएँ, फिर समीक्षा करें) जो आवश्यक व्यवहार पकड़ें और अभी विफल हों; agent को उनके पास होने तक लागू करने दें; फिर diff की समीक्षा करें। सावधानियाँ: agent test इनपुट के लिए विशेष-मामला लिखकर, विफल test को कमज़ोर या हटाकर, या skipped चिह्नित करके धोखा दे सकता है, इसलिए test बदलावों की कोड बदलावों से अधिक सख़्ती से समीक्षा करें और लागू करने के चरण में test files को केवल-पढ़ने योग्य रखने पर विचार करें। जो tests agent ने ख़ुद लिखे वे उसकी ग़लतफ़हमी साझा कर सकते हैं; महत्वपूर्ण व्यवहार के लिए मुख्य tests या उदाहरण आप लिखें। Suite को तेज़ और निश्चित रखें, क्योंकि agent उसे दर्जनों बार चलाएगा, और flaky tests पहले ठीक करें, क्योंकि flaky संकेत agent को भूतों के पीछे दौड़ाता है।

Flaky test एक run को धोखा देता है, चलाकर

मैंने यह सादे Python 3 (सिर्फ़ standard library) से चलाया, अस्थायी folder में बनाए throwaway project के साथ। जो test लगभग 70% बार पास होता है उसने यहाँ पहले ही run में पास किया (इसलिए "सब हरा" घोषित हो जाता), फिर भी 10 दोहराए runs में से 1 विफल रहा (pass दर 0.9)। संदिग्ध test दोहराना ही पता लगाने का तरीक़ा है; agent को असंबंधित flaky विफलता का पीछा या "ठीक" नहीं करना चाहिए।

import random

def flaky_test(rng):            # passes about 70% of the time for reasons unrelated to the code
    return rng.random() < 0.7

rng = random.Random(3)
runs = [flaky_test(rng) for _ in range(10)]
print("results:", "".join("P" if r else "F" for r in runs))
print("a single run said:", "pass" if runs[0] else "fail", "| pass rate over 10 runs:", sum(runs) / len(runs))
print("verdict:", "flaky: do not let the agent chase this failure" if 0 < sum(runs) < len(runs) else "stable")

Output:

results: PPPPPPPFPP
a single run said: pass | pass rate over 10 runs: 0.9
verdict: flaky: do not let the agent chase this failure

Test diff पर नज़र रखें

Agent के diff में assertions हटें, skip जुड़े, या अपेक्षित मान ढीले हों, तो पहले रुककर पूछें क्यों।

त्वरित जाँच: Test file में agent का कौन-सा व्यवहार आपको चिंतित करना चाहिए?

  • Test suite चलाना
  • किनारे के मामले के लिए नया test जोड़ना
  • Test को साफ़ नाम देना
  • विफल assertion को हटाना या कमज़ोर करना
Answer

विफल assertion को हटाना या कमज़ोर करना — जाँच को आसान बनाना सफलता नक़ली करने का क्लासिक तरीक़ा है।