ಟೆಸ್ಟ್ ಜನರೇಷನ್ (Test Generation) ಗಾಗಿ AI: ಇದು ಎಲ್ಲಿ ಸಹಾಯ ಮಾಡುತ್ತದೆ ಮತ್ತು ಎಲ್ಲಿ ದಾರಿ ತಪ್ಪಿಸುತ್ತದೆ

AI ವೇಗವಾಗಿ ಟೆಸ್ಟ್‌ಗಳನ್ನು ಬರೆಯುತ್ತದೆ. ಆದರೆ ಇದು ನೈಜವಾಗಿ ಕಾಣುವ, ಆದರೆ ತಪ್ಪು ವಿಷಯಗಳನ್ನು ಪರಿಶೀಲಿಸುವ ಟೆಸ್ಟ್‌ಗಳನ್ನು ಕೂಡ ಬರೆಯುತ್ತದೆ. ನಿಮ್ಮ ಕೋಡ್ ಕವರೇಜ್ (coverage) ಹೆಚ್ಚುತ್ತಿರುವುದನ್ನು ನೀವು ನೋಡಬಹುದು, ಆದರೆ ನಿಮ್ಮ ಕೋಡ್ ಇನ್ನೂ ದೋಷಪೂರಿತವಾಗಿಯೇ ಇರುತ್ತದೆ.

AI ಕೆಲವು ನಿರ್ದಿಷ್ಟ ಕಾರ್ಯಗಳಿಗೆ ಅತ್ಯುತ್ತಮವಾಗಿದೆ. ಇದನ್ನು ಈ ಕೆಳಗಿನವುಗಳಿಗಾಗಿ ಬಳಸಿ:

  • ಒಂದು ಉತ್ತಮ ಉದಾಹರಣೆಯಿಂದ ವಿಸ್ತರಿಸಲು (Extrapolate). ನೀವು ಒಂದು ಪರಿಪೂರ್ಣ ಟೆಸ್ಟ್ ಬರೆದರೆ, AI ನಿಮ್ಮದೇ ಶೈಲಿಯಲ್ಲಿ ಹತ್ತು ಹೆಚ್ಚುವರಿ ಟೆಸ್ಟ್‌ಗಳನ್ನು ಬರೆಯಬಲ್ಲದು.
  • ಪುನರಾವರ್ತಿತ ಟೈಪಿಂಗ್ ಕೆಲಸಗಳನ್ನು ನಿಭಾಯಿಸಲು. setup blocks, teardown ಮತ್ತು factory helpers ಗಾಗಿ ಇದನ್ನು ಬಳಸಿ.
  • ಆರಂಭಿಕ ಸ್ಕ್ಯಾಫೋಲ್ಡಿಂಗ್ (scaffolding) ರಚಿಸಲು. ಇದು ಖಾಲಿ ಫೈಲ್‌ನಿಂದ ಶೀಘ್ರವಾಗಿ ನಿಮ್ಮನ್ನು ಎಡಿಟರ್‌ಗೆ ತಲುಪಿಸುತ್ತದೆ.

ನೀವು AI ಅನ್ನು "contract" ನಿರ್ಧರಿಸಲು ಬಿಟ್ಟಾಗ ಅಪಾಯ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ.

ನೀವು AI ಗೆ ಒಂದು ಫಂಕ್ಷನ್ ನೀಡಿ ಟೆಸ್ಟ್‌ಗಳನ್ನು ಕೇಳಿದರೆ, ಅದು ಕೋಡ್ ಅನ್ನು ಓದುತ್ತದೆ ಮತ್ತು ಕೋಡ್ ಪ್ರಸ್ತುತ ಏನು ಮಾಡುತ್ತಿದೆಯೋ ಅದನ್ನು ಮಾತ್ರ ಟೆಸ್ಟ್ ಮಾಡುತ್ತದೆ. ಕೋಡ್ ಏನು ಮಾಡಬೇಕೆಂದು (should do) ಅದು ಟೆಸ್ಟ್ ಮಾಡುವುದಿಲ್ಲ. ಇದು ಒಂದು ಮುಚ್ಚಿದ ವಲಯವನ್ನು (closed loop) ಸೃಷ್ಟಿಸುತ್ತದೆ. AI ಒಂದು ಊಹೆಯನ್ನು ಮಾಡುತ್ತದೆ, ಕೋಡ್ ಬರೆಯುತ್ತದೆ ಮತ್ತು ನಂತರ ಅದೇ ಊಹೆಗೆ ಒಪ್ಪುವಂತಹ ಟೆಸ್ಟ್‌ಗಳನ್ನು ಬರೆಯುತ್ತದೆ.

ಬಗ್‌ಗಳು ಪ್ರೊಡಕ್ಷನ್‌ಗೆ ಬಂದಾಗ, ಅವು ಬರುವ ಕಾರಣವೆಂದರೆ ಟೆಸ್ಟ್ ಸೂಟ್ (test suite) ಬಗ್‌ನ ಪರವಾಗಿತ್ತು.

ಈ ಮೂರು ಬಲೆಗಳ ಬಗ್ಗೆ ಎಚ್ಚರವಿರಲಿ:

  1. ಇಂಪ್ಲಿಮೆಂಟೇಶನ್-ಆಧಾರಿತ ಟೆಸ್ಟ್‌ಗಳು (Implementation-shaped tests) AI ಹೆಚ್ಚಾಗಿ ಬಿಸಿನೆಸ್ ರೂಲ್ಸ್‌ಗಳ ಬದಲಿಗೆ ಲಾಜಿಕ್ ಪಾತ್‌ಗಳನ್ನು (logic paths) ಟೆಸ್ಟ್ ಮಾಡುತ್ತದೆ. ನೀವು ಒಂದು ಸಣ್ಣ ಆಂತರಿಕ ವಿವರವನ್ನು ಬದಲಾಯಿಸಿದರೆ, ಫಲಿತಾಂಶ ಸರಿಯಾಗಿದ್ದರೂ ಟೆಸ್ಟ್‌ಗಳು ಫೇಲ್ ಆಗುತ್ತವೆ. ಇದು ರಿಫ್ಯಾಕ್ಟರಿಂಗ್ (refactoring) ಅನ್ನು ಒಂದು ದುಸ್ವಪ್ತವಾಗಿಸುತ್ತದೆ.

  2. ಮೇಲ್ಪದರದ ಎಡ್ಜ್ ಕೇಸ್‌ಗಳು (Shallow edge cases) AI nulls, empty strings ಮತ್ತು zeros ಅನ್ನು ಟೆಸ್ಟ್ ಮಾಡಲು ಉತ್ತಮವಾಗಿದೆ. ಇವು ಸ್ಪಷ್ಟವಾಗಿವೆ. ಆದರೆ ಇದು "domain edges" ಅನ್ನು ಪತ್ತೆಹಚ್ಚಲಾರದು. ನಿಮ್ಮ ನಿರ್ದಿಷ್ಟ ಟೈಮ್‌ಜೋನ್ ಬಗ್‌ಗಳು, ನಿಮ್ಮ ಡೇಟಾಬೇಸ್ ವಿಚಿತ್ರತೆಗಳು ಅಥವಾ ನಿಮ್ಮ ವಿಶಿಷ್ಟ ಬಿಸಿನೆಸ್ ರೂಲ್ಸ್‌ಗಳ ಬಗ್ಗೆ ಅದಕ್ಕೆ ತಿಳಿದಿರುವುದಿಲ್ಲ.

  3. ಅಸ್ಥಿರ ಮಾಕ್‌ಗಳು (Brittle mocks) AI ಎಲ್ಲವನ್ನೂ ಮಾಕ್ (mock) ಮಾಡಲು ಇಷ್ಟಪಡುತ್ತದೆ. ಇದು ಎರಡು ಸಮಸ್ಯೆಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ:

  • ಮಾಕ್ ತಪ್ಪಾಗಿದೆ. ಇದು ವಾಸ್ತವಕ್ಕೆ ಹೊಂದಿಕೆಯಾಗದ API ನ ನಕಲಿ ಆವೃತ್ತಿಯನ್ನು ಅನುಕರಿಸುತ್ತದೆ.
  • ಮಾಕ್ ಇಂಪ್ಲಿಮೆಂಟೇಶನ್ ಅನ್ನು ಸ್ಥಗಿತಗೊಳಿಸುತ್ತದೆ. ಇದು ಅಂತಿಮ ಫಲಿತಾಂಶವನ್ನು ಟೆಸ್ಟ್ ಮಾಡುವ ಬದಲು, ನಿಮ್ಮ ಕೋಡ್ ಇತರ ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಹೇಗೆ ಕರೆಯುತ್ತದೆ ಎಂಬುದನ್ನು ಮಾತ್ರ ಟೆಸ್ಟ್ ಮಾಡುತ್ತದೆ.

AI ಅನ್ನು ಸರಿಯಾಗಿ ಬಳಸುವುದು ಹೇಗೆ:

"ಉದ್ದೇಶವನ್ನು" (intent) AI ಗೆ ಸಿಗದಂತೆ ಇರಿಸಿ.

  • ಮೊದಲು contract ಬರೆಯಿರಿ. ಪ್ರತಿ ಟೆಸ್ಟ್‌ಗಾಗಿ ಸರಳ ಇಂಗ್ಲಿಷ್‌ನಲ್ಲಿ ಒಂದು ವಾಕ್ಯ ಬರೆಯಿರಿ. ಉದಾಹರಣೆಗೆ: "Expired codes must return the original amount."
  • ಆ ವಾಕ್ಯಗಳನ್ನು AI ಗೆ ನೀಡಿ. ಅದು assertions ಬರೆಯಲು ಬಿಡಿ, ಆದರೆ ಅರ್ಥವನ್ನು ನೀವೇ ಒದಗಿಸಿ.
  • ಬೌಂಡರಿಗಳಲ್ಲಿ (boundaries) ಮಾಕ್ ಮಾಡಿ. ಕೇವಲ ಬಾಹ್ಯ API ಅಥವಾ ಡೇಟಾಬೇಸ್‌ಗಳನ್ನು ಮಾತ್ರ ಮಾಕ್ ಮಾಡಿ. ನಿಮ್ಮ ಸ್ವಂತ ಆಂತರಿಕ ಮಾಡ್ಯೂಲ್‌ಗಳ ನೈಜ ಆವೃತ್ತಿಗಳನ್ನು ಬಳಸಿ.
  • ಒಂದು ಡೊಮೇನ್ ಎಡ್ಜ್ ಕೇಸ್ ಅನ್ನು ಕೈಯಾರೆ ಬರೆಯಿರಿ. ನೀವು ಪ್ರತಿ ಬಾರಿ ಒಂದು ಫಂಕ್ಷನ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಿದಾಗ, ನಿಮಗೆ ಭಯ ಹುಟ್ಟಿಸುವ ಒಂದು ವಿಷಯವನ್ನು ಬರೆಯಿರಿ. ಅದನ್ನು AI ಗಾಗಿ ಪ್ರಾಂಪ್ಟ್ (prompt) ಆಗಿ ಬಳಸಿ.

AI ಒಂದು ಉತ್ಪಾದಕತೆಯ ಸಾಧನವೇ ಹೊರತು, ಆಲೋಚನೆಗೆ ಪರ್ಯಾಯವಲ್ಲ. ಟೆಸ್ಟ್‌ನ ಬಾಡಿಯನ್ನು ಬರೆಯಲು ಅದನ್ನು ಬಳಸಿ, ಆದರೆ ಟೆಸ್ಟ್ ಯಾವುದಕ್ಕಾಗಿ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸಲು ಎಂದಿಗೂ ಅದಕ್ಕೆ ಬಿಡಬೇಡಿ.

Source: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm

Optional learning community: https://t.me/GyaanSetuAi