ਹਰ ਟੈਸਟ ਪਾਸ ਹੋ ਗਿਆ। ਫਿਰ ਵੀ ਯੂਜ਼ਰ ਗੇਮ ਨਹੀਂ ਖੇਡ ਸਕਿਆ

"API 200 OK ਰਿਟਰਨ ਕਰ ਰਹੀ ਹੈ!"

ਮੈਂ ਆਪਣੀ ਪਹਿਲੀ ਇੰਜੀਨੀਅਰਿੰਗ ਨੌਕਰੀ ਵਿੱਚ ਸੀ ਅਤੇ ਮੈਂ ਇੱਕ ਵੱਡੀ ਸਮੱਸਿਆ ਦੇਖੀ। ਮੇਰੇ ਸੀਨੀਅਰਜ਼ ਨੂੰ ਡੈਸ਼ਬੋਰਡ ਬਹੁਤ ਪਸੰਦ ਸਨ। ਉਹਨਾਂ ਨੂੰ ਹਾਈ ਕੋਡ ਕਵਰੇਜ (high code coverage) ਪਸੰਦ ਸੀ। ਉਹਨਾਂ ਨੂੰ ਲੱਗਦਾ ਸੀ ਕਿ ਜੇ ਟੈਸਟ 'ਗ੍ਰੀਨ' ਹਨ, ਤਾਂ ਉਤਪਾਦ ਸਹੀ ਕੰਮ ਕਰ ਰਿਹਾ ਹੈ।

ਉਹ ਗਲਤ ਸਨ।

ਕੋਡ ਦਾ ਕੰਮ ਕਰਨਾ ਅਤੇ ਇੱਕ ਇਨਸਾਨ ਨੂੰ ਉਹ ਮਿਲਣਾ ਜਿਸਦੀ ਉਸਨੂੰ ਲੋੜ ਹੈ, ਦੋ ਵੱਖ-ਵੱਖ ਗੱਲਾਂ ਹਨ। ਇੱਕ ਬਟਨ ਸਫਲਤਾ ਦਾ ਕੋਡ (success code) ਵਾਪਸ ਕਰ ਸਕਦਾ ਹੈ, ਪਰ ਫਿਰ ਵੀ ਯੂਜ਼ਰ ਨੂੰ ਇੱਕ ਖਰਾਬ ਸਕ੍ਰੀਨ 'ਤੇ ਫਸਾ ਸਕਦਾ ਹੈ।

ਮੈਂ ਐਪ ਨੂੰ ਚਲਾਏ ਬਿਨਾਂ ਇਹਨਾਂ UX dead-ends ਨੂੰ ਲੱਭਣ ਦਾ ਇੱਕ ਤਰੀਕਾ ਬਣਾਇਆ। ਮੈਂ ਇਸਨੂੰ two-agent static walkthrough ਕਹਿੰਦਾ ਹਾਂ। ਇਹ ਲੂਪ ਵਿੱਚ ਗੱਲ ਕਰਨ ਵਾਲੇ ਦੋ AI agents ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ।

  • Agent A ਯੂਜ਼ਰ ਹੈ। ਇਸ agent ਦਾ ਇੱਕ ਖਾਸ ਟੀਚਾ ਹੁੰਦਾ ਹੈ। ਇਹ ਜ਼ਿੱਦੀ ਹੈ। ਇਹ ਇੱਕ ਗਲਤੀ ਤੋਂ ਬਾਅਦ ਹਾਰ ਨਹੀਂ ਮੰਨਦਾ। ਇਹ ਵੱਖ-ਵੱਖ ਰਸਤੇ ਅਜ਼ਮਾਉਂਦਾ ਰਹਿੰਦਾ ਹੈ।
  • Agent B ਐਪ ਹੈ। ਇਸ ਕੋਲ ਅਸਲ ਸੋਰਸ ਕੋਡ ਤੱਕ ਪੜ੍ਹਨ ਦੀ ਪਹੁੰਚ (read access) ਹੈ। ਇਹ ਹਰ ਯੂਜ਼ਰ ਐਕਸ਼ਨ ਦੇ ਕੋਡ ਪਾਥ (code path) ਨੂੰ ਟ੍ਰੇਸ ਕਰਦਾ ਹੈ। ਇਹ ਬਿਲਕੁਲ ਉਹੀ ਦੱਸਦਾ ਹੈ ਜੋ ਕੋਡ ਕਰਦਾ ਹੈ। ਇਹ ਫਾਈਲ ਅਤੇ ਲਾਈਨ ਨੰਬਰ ਦਾ ਹਵਾਲਾ ਦਿੰਦਾ ਹੈ। ਇਹ ਉਹਨਾਂ ਚੀਜ਼ਾਂ ਦੀ ਕਲਪਨਾ ਨਹੀਂ ਕਰ ਸਕਦਾ ਜੋ ਕੋਡ ਵਿੱਚ ਮੌਜੂਦ ਨਹੀਂ ਹਨ।

ਮੈਂ ਇਸਦਾ ਟੈਸਟ ਇੱਕ ਖਰਾਬ AI ਮਿਨੀ-ਗੇਮ ਜਨਰੇਟਰ 'ਤੇ ਕੀਤਾ। ਦੇਖੋ ਕੀ ਹੋਇਆ:

Turn 1: ਬਟਨ ਫੇਲ ਹੋ ਗਿਆ। ਯੂਜ਼ਰ ਨੇ "Generate" 'ਤੇ ਕਲਿੱਕ ਕੀਤਾ। ਕੋਡ ਨੇ ਨਵੇਂ endpoint ਦੀ ਬਜਾਏ ਇੱਕ ਪੁਰਾਣੇ, ਮਰੀ ਹੋਏ endpoint 'ਤੇ ਰਿਕਵੈਸਟ ਭੇਜ ਦਿੱਤੀ। ਟੈਸਟ ਪਾਸ ਹੋ ਗਏ ਕਿਉਂਕਿ ਪੁਰਾਣੀ API ਅਜੇ ਵੀ ਕੰਮ ਕਰ ਰਹੀ ਸੀ।

Turn 2: ਕਲਿੱਕ ਨਾ ਹੋਣ ਵਾਲੀ ਖਾਲੀ ਜਗ੍ਹਾ। ਯੂਜ਼ਰ ਨੇ ਨਤੀਜੇ 'ਤੇ ਕਲਿੱਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ। ਕੋਡ ਨੇ ਟੈਕਸਟ ਨੂੰ ਇੱਕ ਸਾਦੇ ਡੱਬੇ ਵਿੱਚ ਰੱਖ ਦਿੱਤਾ ਜਿਸ ਵਿੱਚ ਕੋਈ click handler ਨਹੀਂ ਸੀ। ਕੁਝ ਵੀ ਨਹੀਂ ਹੋਇਆ।

Turn 3: ਝੂਠੀ ਖੁਸ਼ੀ। ਯੂਜ਼ਰ ਨੇ ਗਲਤੀ ਨੂੰ ਸੁਧਾਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ। ਇੱਕ ਮਿਸਿੰਗ ID ਕਾਰਨ backend ਫੇਲ ਹੋ ਗਿਆ। ਸਕ੍ਰੀਨ 'ਤੇ ਹਰਾ ਸਫਲਤਾ ਸੁਨੇਹਾ (success message) ਦਿਖਾਈ ਦਿੱਤਾ, ਭਾਵੇਂ ਕਿ ਸਿਸਟਮ ਫੇਲ ਹੋ ਚੁੱਕਾ ਸੀ।

Turn 4: ਅਧੂਰੀ ਉਮੀਦ। ਯੂਜ਼ਰ ਨੇ ਕੋਡ ਨੂੰ ਮੈਨੂਅਲੀ ਕਾਪੀ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ। API ਨੇ ਟੈਕਸਟ ਨੂੰ ਅੱਧ ਵਿਚਕਾਰ ਹੀ ਕੱਟ ਦਿੱਤਾ। ਕੋਡ ਖਰਾਬ ਸੀ।

ਯੂਜ਼ਰ ਨੇ ਐਪ ਛੱਡ ਦਿੱਤੀ।

ਜ਼ਿਆਦਾਤਰ unit tests ਸਿਰਫ਼ ਇਹ ਚੈੱਕ ਕਰਦੇ ਹਨ ਕਿ ਕੀ ਕੋਈ endpoint 200 ਰਿਟਰਨ ਕਰਦਾ ਹੈ। ਉਹ ਇਹ ਚੈੱਕ ਨਹੀਂ ਕਰਦੇ ਕਿ ਕੀ ਯੂਜ਼ਰ ਅਸਲ ਵਿੱਚ ਆਪਣੇ ਟੀਚੇ ਤੱਕ ਪਹੁੰਚਦਾ ਹੈ।

ਇਸਦੀ ਵਰਤੋਂ ਕਿਵੇਂ ਕਰੀਏ:

  • ਯੂਜ਼ਰ agent ਨੂੰ ਜ਼ਿੱਦੀ ਬਣਾਓ। ਅਸਲ ਬੱਗ (bugs) ਪਹਿਲੀ ਗਲਤੀ ਦੇ ਪਿੱਛੇ ਲੁਕੇ ਹੁੰਦੇ ਹਨ।
  • ਐਪ agent ਨੂੰ ਅਸਲ ਕੋਡ ਨਾਲ ਜੋੜੋ। ਇਹ ਰੋਲ-ਪਲੇ (role-play) ਨੂੰ ਇੱਕ ਅਸਲ ਬੱਗ ਰਿਪੋਰਟ ਵਿੱਚ ਬਦਲ ਦਿੰਦਾ ਹੈ।
  • ਇਸਨੂੰ ਆਪਣੇ ਟੈਸਟਾਂ ਦੇ ਪੂਰਕ (complement) ਵਜੋਂ ਵਰਤੋ। ਇਹ ਉਹਨਾਂ ਖਾਲੀਆਂ ਥਾਵਾਂ ਨੂੰ ਲੱਭਦਾ ਹੈ ਜਿੱਥੇ ਤੁਹਾਡਾ ਲੌਜਿਕ (logic) ਹਕੀਕਤ ਨਾਲ ਟਕਰਾਉਂਦਾ ਹੈ।

ਇਹ ਵਿਧੀ static ਅਤੇ ਸਸਤੀ ਹੈ। ਇਹ ਤੁਹਾਡੇ ਇੱਕ ਵੀ test fixture ਲਿਖਣ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਚੱਲਦੀ ਹੈ। ਇਹ "ਕੋਡ ਕੰਮ ਕਰਦਾ ਹੈ" ਨੂੰ "ਯੂਜ਼ਰ ਸਫਲ ਹੁੰਦਾ ਹੈ" ਵਿੱਚ ਬਦਲ ਦਿੰਦੀ ਹੈ।

ਸਰੋਤ: https://dev.to/terum/every-test-passed-the-user-still-couldnt-play-the-game-388o

ਵਿਕਲਪਿਕ ਸਿੱਖਣ ਕਮਿਊਨਿਟੀ: https://t.me/GyaanSetuAi