𝗦𝗽𝗲𝗰 𝗗𝗲𝗯𝘁 𝗗𝗼𝗲𝘀𝗻't 𝗗𝗶𝘀𝗮𝗽𝗽𝗲𝗮𝗿 𝗪𝗵𝗲𝗻 𝗬𝗼𝘂 𝗙𝗶𝘅 𝗜𝘁. 𝗜𝘁 𝗠𝗶𝗴𝗿𝗮𝘁𝗲𝘀.
ಸಮಸ್ಯೆಯನ್ನು ಸರಿಪಡಿಸುವುದು ಯಾವಾಗಲೂ ಅದನ್ನು ಕೊಲ್ಲುವುದಿಲ್ಲ. ಕೆಲವೊಮ್ಮೆ, ನೀವು ಅದನ್ನು ಕೇವಲ ಬೇರೆಡೆಗೆ ಸ್ಥಳಾಂತರಿಸುತ್ತೀರಿ ಅಷ್ಟೆ.
ನಾನು ಇತ್ತೀಚೆಗೆ spec debt ಅನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಒಂದು ಪ್ರಾಜೆಕ್ಟ್ ಅನ್ನು ಆಡಿಟ್ ಮಾಡಿದೆ. ಇವು ಸೂಚನೆಗಳಲ್ಲಿನ ಅಂತರಗಳಾಗಿದ್ದು, ಇವು ಬಗ್ಗಳು ಅಥವಾ ಕೆಟ್ಟ AI ನಡವಳಿಕೆಗೆ ಕಾರಣವಾಗುತ್ತವೆ. ನಾನು ಏಳು ನಿರ್ದಿಷ್ಟ ಅಂಶಗಳನ್ನು ಸರಿಪಡಿಸಿದೆ. ಸರಿಪಡಿಸಿದ ನಂತರ, ಪರೀಕ್ಷೆಗಳು ಪಾಸಾದವು. ಎಲ್ಲವೂ ಸರಿಯಾಗಿ ಕಾಣಿಸುತ್ತಿದ್ದವು.
ಆದರೆ ಆ debt ಮಾಯವಾಗಲಿಲ್ಲ. ಅದು feature files ನಿಂದ step definitions ಗೆ ಸ್ಥಳಾಂತರಗೊಂಡಿತು.
ಈ ಅಂಶಗಳನ್ನು ಸರಿಪಡಿಸುವುದರಿಂದ ನಾನು ಕಲಿತ ವಿಷಯಗಳು ಇಲ್ಲಿವೆ:
- ನಿಖರತೆ ಮುಖ್ಯ. "the response is fast" ಎಂದು ಹೇಳುವ ಬದಲು, "the response returns within 12 seconds of the order submission" ಎಂದು ಹೇಳಿ. ಇದು ಸಮಯದ ಮಿತಿಯನ್ನು ನಿಗದಿಪಡಿಸುತ್ತದೆ.
- ಅಸ್ಪಷ್ಟತೆಯನ್ನು ತಪ್ಪಿಸಿ. "Retried 2 times" ಎಂಬುದು ಅಸ್ಪಷ್ಟವಾಗಿದೆ. ಇದರರ್ಥ ಒಟ್ಟು 2 ಪ್ರಯತ್ನಗಳೇ ಅಥವಾ 3 ಪ್ರಯತ್ನಗಳೇ? ಖಚಿತತೆಗಾಗಿ "no more than 2 charge requests total" ಎಂದು ಬಳಸಿ.
- ಕಾರ್ಯವಿಧಾನವನ್ನು ಹೆಸರಿಸಿ. "the inventory is released" ಎಂದು ಹೇಳುವುದು ಅಸ್ಪಷ್ಟವಾಗಿದೆ. "the inventory service receives a release request for item X" ಎಂದು ನಿರ್ದಿಷ್ಟವಾಗಿ ತಿಳಿಸಿ.
- ಸುಳ್ಳು ಭರವಸೆಗಳನ್ನು ತೆಗೆದುಹಾಕಿ. ಒಂದು ಫೀಚರ್ ಇನ್ನೂ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲದ ಕಾರಣ ಒಂದು ಸ್ಟೆಪ್ (step) ಪಾಸಾಗುತ್ತಿದ್ದರೆ, ಆ ಸ್ಟೆಪ್ ಅನ್ನು ತೆಗೆದುಹಾಕಿ. ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲದ ಫ್ಲೋ (flow) ಗಾಗಿ ಪಾಸಾಗುವ ಪರೀಕ್ಷೆಯು ಸುಳ್ಳಾಗಿದೆ.
- "correct" ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ. ನಿರ್ದಿಷ್ಟ ಮೌಲ್ಯಗಳಿಲ್ಲದೆ "correct" ಅಥವಾ "proper" ಎಂಬ ಪದಗಳನ್ನು ಎಂದಿಗೂ ಬಳಸಬೇಡಿ. "contains the right id" ಎನ್ನುವ ಬದಲು "contains order_id 123" ಎಂದು ಬಳಸಿ.
ಈ ಸಮಸ್ಯೆಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಲು ನಾನು ಒಂದು ಫ್ರೇಮ್ವರ್ಕ್ ಅನ್ನು ನಿರ್ಮಿಸಿದ್ದೇನೆ. ಪ್ರತಿ ಸನ್ನಿವೇಶಕ್ಕೂ (scenario) ಈ ಐದು ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳಿ:
- ಈ ಸನ್ನಿವೇಶದ ಮಾಲೀಕರು ಯಾರು?
- ಇದು ಯಾವ ನಿರ್ಧಾರಗಳನ್ನು ಬಾಕಿ ಉಳಿಸುತ್ತದೆ?
- ಇಲ್ಲಿ ಎಲ್ಲಾ ಪದಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆಯೇ?
- ಇದು ನಡವಳಿಕೆಯನ್ನು (behavior) ವಿವರಿಸುತ್ತದೆಯೇ ಅಥವಾ ಅನುಷ್ಠಾನವನ್ನು (implementation) ವಿವರಿಸುತ್ತದೆಯೇ?
- ಈ ವಿವರಣೆಯಲ್ಲಿ ಏನನ್ನು ಮರೆತಿದೆ?
ಅತಿದೊಡ್ಡ ಬಲೆ ಎಂದರೆ ಪಠ್ಯ (text) ಮತ್ತು ಕೋಡ್ (code) ನಡುವಿನ ಅಂತರ. ನಿಮ್ಮ spec ನಲ್ಲಿ ನೀವು ಪರಿಪೂರ್ಣವಾದ, ನಿಖರವಾದ ಸೂಚನೆಯನ್ನು ಬರೆಯಬಹುದು. ಆದರೆ ನಿಮ್ಮ ಅಡಿಗಟ್ಟಿನ ಕೋಡ್ ಆ ಪರೀಕ್ಷೆಯನ್ನು ಪಾಸು ಮಾಡಲು ಶಾರ್ಟ್ಕಟ್ ಬಳಸುತ್ತಿದ್ದರೆ, ನಿಮ್ಮಲ್ಲಿ ಇನ್ನೂ debt ಇರುತ್ತದೆ.
Spec "create an order via API" ಎಂದು ಹೇಳುತ್ತದೆ. ಆದರೆ ಕೋಡ್ ಸಮಯ ಉಳಿಸಲು ನೇರವಾಗಿ ಡೇಟಾಬೇಸ್ಗೆ (database) ಆರ್ಡರ್ ಅನ್ನು ಇಂಜೆಕ್ಟ್ ಮಾಡುತ್ತದೆ. ಪರೀಕ್ಷೆಯು ಪಾಸಾಗುತ್ತದೆ, ಆದರೆ debt ಅಗತ್ಯತೆಗಳಿಂದ (requirement) ಅನುಷ್ಠಾನಕ್ಕೆ (implementation) ಸ್ಥಳಾಂತರಗೊಂಡಿರುತ್ತದೆ.
ಮೊದಲ ಬಾರಿಯೇ ಪರಿಪೂರ್ಣವಾದ spec ಗಳನ್ನು ಬರೆಯಲು ಪ್ರಯತ್ನಿಸಬೇಡಿ. ಅವುಗಳನ್ನು ಬರೆಯಿರಿ, ಆಡಿಟ್ ಮಾಡಿ ಮತ್ತು ಸರಿಪಡಿಸಿ.
Source: https://dev.to/diyaburman/spec-debt-doesnt-disappear-when-you-fix-it-it-migrates-d25
Optional learning community: https://t.me/GyaanSetuAi
