69 AI-ਲਿਖੇ ਟੈਸਟਾਂ ਨੇ ਇੱਕ Python ਮੋਡਿਊਲ ਨੂੰ ਪਾਸ ਕੀਤਾ, ਫਿਰ ਵੀ ਇੱਕ ਪ੍ਰਯੋਗ ਨੇ ਦਿਖਾਇਆ ਕਿ ਇੱਕ ਨਿਸ਼ਾਨਾ ਬਣਾ ਕੇ ਟੈਸਟ-ਜਨਰੇਸ਼ਨ (targeted test-generation) ਦੇ ਤਰੀਕੇ ਨੇ 53 ਇੰਜੈਕਟ ਕੀਤੇ ਗਏ ਫਾਲਟਾਂ (injected faults) ਵਿੱਚੋਂ 44 ਨੂੰ ਫੜ ਲਿਆ। ਹਫਤੇ ਭਰ ਚੱਲਣ ਵਾਲਾ ਇਹ ਪ੍ਰੋਟੋਟਾਈਪ ਮੌਜੂਦਾ ਲਾਰਜ-ਲੈਂਗੂਏਜ-ਮਾਡਲ (LLM) ਟੈਸਟ-ਲਿਖਣ ਵਿੱਚ ਇੱਕ ਬੁਨਿਆਦੀ ਕਮਜ਼ੋਰੀ ਨੂੰ ਸਾਬਤ ਕਰਦਾ ਹੈ: ਇੱਕ ਫੀਡਬੈਕ ਲੂਪ ਤੋਂ ਬਿਨਾਂ ਜੋ ਇਹ ਜਾਂਚੇ ਕਿ ਕੀ ਕੋਡ ਦਾ ਕੋਈ ਟੈਸਟ ਅਸਲ ਵਿੱਚ ਕਿਸੇ ਜਾਣੇ-ਪਛਾਣੇ ਨੁਕਸ (defect) 'ਤੇ ਫੇਲ੍ਹ ਹੁੰਦਾ ਹੈ ਜਾਂ ਨਹੀਂ, ਤਿਆਰ ਕੀਤੀ ਗਈ ਸੂਟ (suite) ਬੇਮਿਸਾਲ ਲੱਗ ਸਕਦੀ ਹੈ ਪਰ ਉਹਨਾਂ ਬੱਗਾਂ ਨੂੰ ਮਿਸ ਕਰ ਸਕਦੀ ਹੈ ਜਿਨ੍ਹਾਂ ਨੂੰ ਲੱਭਣਾ ਇਸਦਾ ਮਕਸਦ ਸੀ।
ਪ੍ਰਯੋਗ ਕਿਉਂ ਮਹੱਤਵਪੂਰਨ ਹੈ
ਆਟੋਮੇਟਡ ਟੈਸਟ ਜਨਰੇਸ਼ਨ ਕੋਡ ਅਤੇ ਕਵਰੇਜ ਦੇ ਵਿਚਕਾਰਲੇ ਪਾੜੇ ਨੂੰ ਘਟਾਉਣ ਦਾ ਵਾਅਦਾ ਕਰਦੀ ਹੈ, ਖਾਸ ਕਰਕੇ ਜਦੋਂ ਡਿਵੈਲਪਰ ਯੂਨਿਟ ਟੈਸਟਾਂ ਦਾ ਡਰਾਫਟ ਤਿਆਰ ਕਰਨ ਲਈ LLMs 'ਤੇ ਨਿਰਭਰ ਕਰਦੇ ਹਨ। ਜ਼ਿਆਦਾਤਰ ਜਨਤਕ ਬੈਂਚਮਾਰਕ ਲਾਈਨ ਕਵਰੇਜ (line coverage) ਨੂੰ ਮਾਪ ਕੇ ਸਫਲਤਾ ਦਾ ਮੁਲਾਂਕਣ ਕਰਦੇ ਹਨ—ਕੀ ਟੈਸਟ ਚਲਾਉਣ ਦੌਰਾਨ ਕੋਡ ਦੀ ਹਰ ਲਾਈਨ ਚੱਲਦੀ ਹੈ। ਉਹ ਮੈਟ੍ਰਿਕ ਗੁੰਮਰਾਹਕੁੰਨ ਹੋ ਸਕਦਾ ਹੈ: ਇੱਕ ਲਾਈਨ ਚੱਲ ਸਕਦੀ ਹੈ ਪਰ ਟੈਸਟ ਕਦੇ ਵੀ ਸਹੀ ਵਿਵਹਾਰ ਦੀ ਪੁਸ਼ਟੀ (assert) ਨਾ ਕਰੇ। ਮਿਊਟੇਸ਼ਨ ਟੈਸਟਿੰਗ (Mutation testing) ਸੋਸ ਕੋਡ ਨੂੰ ਜਾਣਬੁੱਝ ਕੇ ਖਰਾਬ ਕਰਕੇ (ਜਿਵੇਂ ਕਿ ਤੁਲਨਾ ਨੂੰ ਉਲਟਾਉਣਾ, ਸਟੇਟਮੈਂਟ ਨੂੰ ਡਿਲੀਟ ਕਰਨਾ, ਆਦਿ) ਅਤੇ ਇਹ ਦੇਖ ਕੇ ਉਸ ਅੰਨ੍ਹੇ ਮੋੜ ਨੂੰ ਭਰਦੀ ਹੈ ਕਿ ਕੀ ਮੌਜੂਦਾ ਟੈਸਟ ਉਸ ਬਦਲਾਅ ਨੂੰ ਪਛਾਣਦੇ ਹਨ। ਜੇਕਰ ਮਿਊਟੇਟ ਕੀਤਾ ਗਿਆ ਵਰਜ਼ਨ ਅਜੇ ਵੀ ਪਾਸ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਟੈਸਟ ਸੂਟ ਨੇ ਇੱਕ ਅਸਲ ਫਾਲਟ ਨੂੰ ਮਿਸ ਕਰ ਦਿੱਤਾ ਹੈ।
ਪ੍ਰਯੋਗ ਨੇ ਟੈਸਟਾਂ ਨੂੰ ਤਿਆਰ ਕਰਨ ਲਈ LLM ਨੂੰ ਪ੍ਰੋਂਪਟ (prompt) ਕਰਨ ਦੇ ਤਿੰਨ ਤਰੀਕਿਆਂ ਦੀ ਤੁਲਨਾ ਕੀਤੀ:
- Bulk prompting – "ਹੋਰ ਟੈਸਟ" ਦੀ ਇੱਕ ਸਿੰਗਲ ਬੇਨਤੀ ਨੇ 69 ਟੈਸਟ ਤਿਆਰ ਕੀਤੇ ਜੋ ਸਾਰੇ ਅਣ-ਸੋਧੇ ਕੋਡ 'ਤੇ ਪਾਸ ਹੋ ਗਏ ਪਰ 53 ਮਿਊਟੇਸ਼ਨਾਂ ਵਿੱਚੋਂ ਸਿਰਫ 9 ਨੂੰ ਹੀ ਫੜ ਸਕੇ।
- One-test-per-call, untargeted – ਮਾਡਲ ਨੂੰ ਫਾਲਟਾਂ ਬਾਰੇ ਕੋਈ ਮਾਰਗਦਰਸ਼ਨ ਦਿੱਤੇ ਬਿਨਾਂ ਵਾਰ-ਵਾਰ ਇੱਕ ਸਿੰਗਲ ਟੈਸਟ ਲਈ ਕਿਹਾ ਗਿਆ; ਇਸਨੇ ਸਿਰਫ 2 ਮਿਊਟੇਸ਼ਨਾਂ ਨੂੰ ਫੜਿਆ।
- Targeted prompting with a mutation-testing gate – ਮਾਡਲ ਨੇ ਹਰੇਕ ਮਿਸ ਹੋਈ ਮਿਊਟੇਸ਼ਨ ਨੂੰ ਦੇਖਿਆ ਅਤੇ ਉਸਨੂੰ ਅਜਿਹਾ ਟੈਸਟ ਲਿਖਣ ਲਈ ਕਿਹਾ ਗਿਆ ਜੋ ਮਿਊਟੇਟ ਕੀਤੇ ਗਏ ਕੋਡ 'ਤੇ ਫੇਲ੍ਹ ਹੋਵੇ ਪਰ ਸਾਫ਼ (clean) ਵਰਜ਼ਨ 'ਤੇ ਪਾਸ ਹੋ ਜਾਵੇ। ਇਸ ਤਰੀਕੇ ਨੇ 44 ਫੜਨ ਵਾਲੇ ਟੈਸਟ ਦਿੱਤੇ।
ਇਹ ਵੱਡਾ ਅੰਤਰ—44 ਬਨਾਮ 9 ਜਾਂ 2—ਦਿਖਾਉਂਦਾ ਹੈ ਕਿ ਇੱਕ ਤੰਗ, ਫਾਲਟ-ਮੁਖੀ ਫੀਡਬੈਕ ਲੂਪ AI-ਤਿਆਰ ਕੀਤੇ ਟੈਸਟਾਂ ਦੀ ਨੁਕਸ ਲੱਭਣ ਦੀ ਸ਼ਕਤੀ ਨੂੰ ਕਾਫ਼ੀ ਸੁਧਾਰ ਸਕਦਾ ਹੈ।
ਮਿਊਟੇਸ਼ਨ-ਟੈਸਟਿੰਗ ਗੇਟ (mutation-testing gate) ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ
- ਮਿਊਟੇਸ਼ਨਾਂ ਇੰਜੈਕਟ ਕਰੋ (Inject mutations) – ਹਾਰਨੈੱਸ (harness) ਅਸਲ ਸੋਸ ਵਿੱਚ ਛੋਟੇ, ਯੋਜਨਾਬੱਧ ਬਦਲਾਅ ਕਰਦਾ ਹੈ (ਜਿਵੇਂ ਕਿ ਕੰਡੀਸ਼ਨਲ ਨੂੰ ਉਲਟਾਉਣਾ, ਇੱਕ ਲਾਈਨ ਹਟਾਉਣਾ)। ਹਰੇਕ ਮਿਊਟੇਸ਼ਨ ਇੱਕ ਸੰਭਾਵੀ ਬੱਗ ਨੂੰ ਦਰਸਾਉਂਦੀ ਹੈ।
- ਮੌਜੂਦਾ ਟੈਸਟ ਸੂਟ ਚਲਾਓ – ਜੇਕਰ ਸੂਟ ਅਜੇ ਵੀ ਪਾਸ ਹੁੰਦਾ ਹੈ, ਤਾਂ ਮਿਊਟੇਸ਼ਨ ਦਾ ਪਤਾ ਨਹੀਂ ਲੱਗ ਸਕਿਆ ਹੈ।
- LLM ਨੂੰ ਪ੍ਰੋਂਪਟ ਕਰੋ – ਮਾਡਲ ਨੂੰ ਖਾਸ ਮਿਊਟੇਸ਼ਨ ਮਿਲਦੀ ਹੈ ਅਤੇ ਉਸਨੂੰ ਅਜਿਹਾ ਟੈਸਟ ਤਿਆਰ ਕਰਨ ਲਈ ਕਿਹਾ ਜਾਂਦਾ ਹੈ ਜੋ ਅਸਲ ਕੋਡ 'ਤੇ ਸਫਲ ਹੋਵੇ ਪਰ ਮਿਊਟੇਟ ਕੀਤੇ ਗਏ ਕੋਡ 'ਤੇ ਫੇਲ੍ਹ ਹੋ ਜਾਵੇ।
- ਨਵੇਂ ਟੈਸਟ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ (Validate the new test) – ਟੈਸਟ ਨੂੰ ਉਦੋਂ ਹੀ ਰੱਖੋ ਜੇਕਰ ਇਹ ਸਾਫ਼ ਕੋਡ 'ਤੇ ਪਾਸ ਹੁੰਦਾ ਹੈ ਅਤੇ ਮਿਊਟੇਟ ਕੀਤੇ ਗਏ ਵਰਜ਼ਨ 'ਤੇ ਫੇਲ੍ਹ ਹੁੰਦਾ ਹੈ।
- ਦੁਹਰਾਓ (Iterate) – ਹਰੇਕ ਅਣ-ਕਵਰ ਕੀਤੇ ਮਿਊਟੇਸ਼ਨ ਲਈ ਦੁਹਰਾਓ।
"ਗੇਟ" (gate) ਇਹ ਵੈਲੀਡੇਸ਼ਨ ਸਟੈਪ ਹੈ। ਇਹ ਕਿਸੇ ਵੀ ਅਜਿਹੇ ਟੈਸਟ ਨੂੰ ਫਿਲਟਰ ਕਰ ਦਿੰਦਾ ਹੈ ਜੋ ਨਿਸ਼ਾਨਾ ਬਣਾਏ ਗਏ ਫਾਲਟ ਪ੍ਰਤੀ ਸੰਵੇਦਨਸ਼ੀਲਤਾ ਨਹੀਂ ਦਿਖਾਉਂਦਾ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਰੱਖੇ ਗਏ ਹਰ ਟੈਸਟ ਦੀ ਫਾਲਟ-ਡਿਟੈਕਸ਼ਨ (fault-detection) ਵਿੱਚ ਸਾਬਤ ਹੋਈ ਕੀਮਤ ਹੈ।
ਅੰਕੜਿਆਂ ਤੋਂ ਸਿੱਖਿਆਵਾਂ
ਅਣ-ਪਹੁੰਚੀ ਕੋਡ (Unreached code) ਮਿਸ ਹੋਏ ਫਾਲਟਾਂ 'ਤੇ ਹਾਵੀ ਹੈ – ਪਰਿਪੱਕ ਕੋਡਬੇਸਾਂ (codebases) ਵਿੱਚ, ਕਈ ਲਾਈਨਾਂ ਕਦੇ ਵੀ ਮੌਜੂਦਾ ਟੈਸਟਾਂ ਦੁਆਰਾ ਚਲਾਈ ਨਹੀਂ ਜਾਂਦੀਆਂ। ਪ੍ਰਯੋਗ ਨੇ ਦਿਖਾਇਆ ਕਿ ਜ਼ਿਆਦਾਤਰ ਅਣ-ਪਛਾਣੀਆਂ ਮਿਊਟੇਸ਼ਨਾਂ ਅਜਿਹੇ ਅਣ-ਪਹੁੰਚਯੋਗ ਖੇਤਰਾਂ ਵਿੱਚ ਸਨ।
ਗੇਟ ਗਲਤ ਕਾਰਨ ਕਰਕੇ ਵੈਲਿਡ ਟੈਸਟਾਂ ਨੂੰ ਰੱਦ ਕਰ ਦਿੰਦਾ ਹੈ – ਹਰ ਰੱਦ ਕੀਤਾ ਗਿਆ ਟੈਸਟ
ਮੈਟ੍ਰਿਕਸ ਮਹੱਤਵਪੂਰਨ ਹਨ – ਸਿਰਫ਼ line coverage 'ਤੇ ਨਿਰਭਰ ਕਰਨਾ ਸੁਰੱਖਿਆ ਦਾ ਇੱਕ ਝੂਠਾ ਅਹਿਸਾਸ ਕਰਵਾ ਸਕਦਾ ਹੈ। Mutation testing ਵਧੇਰੇ behavior-centric ਮਾਪ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ, ਅਤੇ ਇਸਨੂੰ evaluation loop ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨ ਨਾਲ ਅਣਦੇਖੇ ਪਹਿਲੂਆਂ (blind spots) ਦਾ ਸ਼ੁਰੂਆਤੀ ਤੌਰ 'ਤੇ ਪਤਾ ਲੱਗ ਸਕਦਾ ਹੈ।
ਫੀਡਬੈਕ ਲੂਪ ਆਉਟਪੁੱਟ ਵਿੱਚ ਸੁਧਾਰ ਕਰਦੇ ਹਨ – ਗੇਟ ਤੋਂ ਮਿਲਿਆ ਭਾਰੀ ਫਾਇਦਾ ਇਸ ਗੱਲ 'ਤੇ ਜ਼ੋਰ ਦਿੰਦਾ ਹੈ ਕਿ LLMs ਨੂੰ one-shot generation ਦੀ ਬਜਾਏ iterative, corrective prompts ਤੋਂ ਫਾਇਦਾ ਹੁੰਦਾ ਹੈ।
ਟੂਲਿੰਗ ਦੀ ਪਾਰਦਰਸ਼ਤਾ ਜ਼ਰੂਰੀ ਹੈ – ਲੇਖਕ ਨੇ measurement harness ਵਿੱਚ ਹੀ 11 ਬੱਗ ਲੱਭੇ, ਜਿਸ ਨਾਲ ਸ਼ੁਰੂ ਵਿੱਚ ਰਿਪੋਰਟ ਕੀਤੀ ਗਈ success rate ਵਧ ਗਈ ਸੀ। ਨਤੀਜਿਆਂ ਦੇ ਨਾਲ harness ਨੂੰ ਪ੍ਰਕਾਸ਼ਿਤ ਕਰਨ ਨਾਲ ਭਾਈਚਾਰਾ evaluation pipeline ਦੀ ਜਾਂਚ ਕਰ ਸਕਦਾ ਹੈ ਅਤੇ ਇਸ ਵਿੱਚ ਸੁਧਾਰ ਕਰ ਸਕਦਾ ਹੈ।
ਅੱਗੇ ਕੀ ਦੇਖਣਾ ਹੈ
- Hybrid pipelines – ਵਿਸ਼ਾਲਤਾ ਲਈ bulk test generation ਅਤੇ ਡ
