Έλεγχος κώδικα που προτείνει AI — DedSec Project
Έλεγχος παραγόμενου κώδικα — ανεξάρτητες απαιτήσεις και δοκιμές ιδιοτήτων Ένα πειστικό αλλά λανθασμένο παράδειγμα Ένας βοηθός προτείνει συνάρτηση έκπτωσης που αφαιρεί int(cents percentage /…
Έλεγχος παραγόμενου κώδικα — ανεξάρτητες απαιτήσεις και δοκιμές ιδιοτήτων
Ένα πειστικό αλλά λανθασμένο παράδειγμα
Ένας βοηθός προτείνει συνάρτηση έκπτωσης που αφαιρεί int(cents * percentage / 100). Με αυτόν τον τρόπο αποκόπτει σιωπηρά το κλασματικό μέρος της έκπτωσης. Η συνάρτηση περνά μια εύκολη δοκιμή έκπτωσης 20% στα 100 λεπτά, αλλά παραβιάζει απαίτηση στρογγυλοποίησης της έκπτωσης με ROUND_HALF_UP. Γράψε πρώτα το πραγματικό συμβόλαιο ανεξάρτητα από τον προτεινόμενο κώδικα: μη αρνητικά ακέραια λεπτά, ακέραιο ποσοστό από 0 έως 100 και σαφής δεκαδικός κανόνας.
Εκτελέσιμο εργαστήριο Python 3
Αποθήκευσε ως review_lab.py και εκτέλεσε python3 review_lab.py. Ο κώδικας αποκαλύπτει ένα συγκεκριμένο αντιπαράδειγμα της λανθασμένης λύσης και ελέγχει τη διορθωμένη συνάρτηση σε εκατοντάδες τιμές.
from decimal import Decimal, ROUND_HALF_UP
def wrong(cents, pct):
return cents - int(cents * pct / 100)
def safe(cents, pct):
if type(cents) is not int or cents < 0 or type(pct) is not int or not 0 <= pct <= 100:
raise ValueError("bad input")
discount = (Decimal(cents) * Decimal(pct) / 100).quantize(
Decimal("1"), rounding=ROUND_HALF_UP)
return cents - int(discount)
assert wrong(101, 50) == 51 and safe(101, 50) == 50
for pct in (0,25,50,100):
assert all(safe(c,pct) <= safe(c+1,pct) for c in range(300))
assert safe(999,0) == 999 and safe(999,100) == 0
for args in ((True,50),(-1,25),(10,101)):
try:
safe(*args)
except ValueError:
pass
else:
raise AssertionError("bad input accepted")
print("PASS: independent rounding contract and properties")
Τι αποδεικνύεται και τι όχι
Με αρχικό ποσό 101 λεπτά και έκπτωση 50%, η ελαττωματική υλοποίηση δίνει υπόλοιπο 51 λεπτά αντί 50. Οι δοκιμές ιδιοτήτων ελέγχουν ότι το πληρωτέο ποσό δεν μειώνεται όταν αυξάνεται η αρχική τιμή για τα δοκιμαστικά ποσοστά, καθώς και ότι η μηδενική και πλήρης έκπτωση λειτουργούν σωστά. Δεν αποδεικνύουν μαθηματικά την ορθότητα για όλους τους ακεραίους ούτε ότι ο κανόνας είναι κατάλληλος για κάθε πραγματική φορολογική ή εμπορική χρήση. Ο έλεγχος ακριβούς τύπου αποκλείει τιμές bool, παρότι η Python τις αντιμετωπίζει ως υποκλάση ακεραίων.
Πρακτική διαδικασία επιθεώρησης
- Γράψε πριν την υλοποίηση τις μονάδες, τα επιτρεπόμενα όρια, τον κανόνα στρογγυλοποίησης και τη συμπεριφορά σε ελλείπουσες τιμές.
- Αντικατάστησε προσωρινά την ακριβή πράξη με float και αποκοπή δεκαδικών. Βεβαιώσου ότι η δοκιμή των 101 λεπτών εντοπίζει την παλινδρόμηση.
- Πρόσθεσε ψευδοτυχαίες δοκιμές με σταθερό σπόρο μαζί με καθορισμένες οριακές τιμές. Σύγκρινε με ανεξάρτητη λύση αναφοράς.
- Πριν από συγχώνευση αλλαγών σε αποθετήριο, έλεγξε αρχεία εκτός αιτούμενου πεδίου, νέες εξαρτήσεις, διαρροή μυστικών και αποτυχίες χειρισμού αρχείων.
Παραδοτέα: PASS, αντιπαράδειγμα 101 λεπτών, αποτελέσματα ιδιοτήτων και σύντομη λίστα επιθεώρησης. Η επιτυχία των δοκιμών δεν πιστοποιεί ολόκληρο άγνωστο έργο.