Μοναδιαίες, ενοποιητικές και δοκιμές παλινδρόμησης — DedSec Project
Έλεγχοι λογισμικού — συνηθισμένες, οριακές και αμετάβλητες συνθήκες Σενάριο και κριτήρια επιτυχίας Μία συνάρτηση ποσότητας δέχεται δεκαδικά ψηφία που παριστάνουν ακέραιο από 0 έως 99…
Έλεγχοι λογισμικού — συνηθισμένες, οριακές και αμετάβλητες συνθήκες
Σενάριο και κριτήρια επιτυχίας
Μία συνάρτηση ποσότητας δέχεται δεκαδικά ψηφία που παριστάνουν ακέραιο από 0 έως 99. Απουσία τιμής, αρνητικοί αριθμοί, κλάσματα, κείμενο και μεγαλύτεροι αριθμοί απορρίπτονται. Η σουίτα πρέπει να ελέγχει κανονικές τιμές, και τα δύο όρια και άκυρη είσοδο, όχι μόνο ένα επιτυχημένο παράδειγμα. Η ίδια ιδιότητα δοκιμάζεται ξεχωριστά σε όλους τους εκατό ακέραιους του μικρού πεδίου.
Εκτελέσιμο εργαστήριο — ενσωματωμένη βιβλιοθήκη Python 3
Αποθήκευσε τον κώδικα ως 10_testing.py και εκτέλεσέ τον με Python 3. Χρησιμοποιεί μόνο τεχνητά δεδομένα και εμφανίζει PASS αν περάσουν οι έλεγχοι. Ο κώδικας είναι ίδιος και στις δύο γλωσσικές εκδόσεις.
import unittest
def normalize_quantity(text):
if not isinstance(text, str) or not text.isdecimal():
raise ValueError("decimal digits required")
n = int(text)
if n > 99: raise ValueError("quantity too high")
return n
class QuantityTests(unittest.TestCase):
def test_examples(self):
for text, expected in [("0", 0), ("7", 7), ("99", 99)]:
with self.subTest(text=text):
self.assertEqual(normalize_quantity(text), expected)
def test_boundaries(self):
for text in ["-1", "", "100", "1.2", "abc", None]:
with self.subTest(text=text):
with self.assertRaises(ValueError):
normalize_quantity(text)
def test_invariant(self):
for n in range(100):
self.assertEqual(normalize_quantity(str(n)), n)
suite = unittest.defaultTestLoader.loadTestsFromTestCase(QuantityTests)
outcome = unittest.TextTestRunner(verbosity=0).run(suite)
assert outcome.wasSuccessful()
print("PASS unit tests")
Τεχνική εξήγηση
Οι δοκιμές μονάδας εξετάζουν καθαρή λογική χωρίς αρχεία ή δίκτυο. Η subTest δείχνει ποια περίπτωση απέτυχε χωρίς να εμποδίζει την εκτέλεση των υπόλοιπων. Η επανάληψη εκατό τιμών ελέγχει συγκεκριμένο, πεπερασμένο πεδίο και δεν αποδεικνύει την ορθότητα έξω από αυτό. Οι δοκιμές ολοκλήρωσης συνδυάζουν ανάγνωση, αποθήκευση και διεπαφή. Ένας έλεγχος σε πρόγραμμα περιήγησης δεν αντικαθιστά τα επιμέρους τεστ, ούτε η προσομοίωση δικτύου αποδεικνύει λειτουργία πραγματικού διακομιστή.
Περιορισμένες ασκήσεις
Πρόσθεσε σκόπιμα σφάλμα αλλάζοντας n > 99 σε n > 100 και δες ποια οριακή δοκιμή αποτυγχάνει. Δοκίμασε αριθμητικά σύμβολα άλλων αλφαβήτων και αποφάσισε αν επιτρέπονται μόνο ψηφία ASCII. Φτιάξε δοκιμή αποθήκευσης με TemporaryDirectory. Πρόσθεσε έλεγχο της πραγματικής ορατής ειδοποίησης όταν ο χρήστης υποβάλει άκυρα δεδομένα.
Διάγνωση και τεκμήρια επιτυχίας
Αν ένα τεστ περνά μόνο όταν εκτελείται μόνο του, αναζήτησε κατάσταση που διαρρέει ανάμεσα στις δοκιμές. Για αστάθεια κράτησε σπόρο τυχαιότητας, έκδοση περιβάλλοντος και το μικρότερο αναπαράξιμο παράδειγμα. Δήλωνε μόνο όσα τεστ πράγματι εκτελέστηκαν.
Πρόσθετη τεχνική ανάλυση
Η εισαγωγή αποτυχίας πρέπει να ελέγχει πλήθος προσπαθειών μαζί με έξοδο. Προσωρινό timeout δικαιολογεί επανάληψη idempotent ανάγνωσης, ενώ μόνιμη αποτυχία επικύρωσης απαιτεί άμεση διακοπή. Πέρνα ελεγχόμενη εξάρτηση και ρολόι για δοκιμή μετάβασης χωρίς πραγματικές καθυστερήσεις ή δημόσιες υπηρεσίες.