DedSec Project

Γλωσσάρι: regressions, REST και runtimes — DedSec Project

Γλωσσάρι: regressions, REST και runtimes Regression test Ακριβής σημασία Test που κρατά αναπαραγωγή πραγματικού bug ώστε μελλοντικές αλλαγές να το εντοπίζουν. Πρέπει να αποτυγχάνει στην…

Regression test

Ακριβής σημασία

Test που κρατά αναπαραγωγή πραγματικού bug ώστε μελλοντικές αλλαγές να το εντοπίζουν. Πρέπει να αποτυγχάνει στην προβληματική έκδοση και να περνά στη σωστή.

Πείραμα αναφοράς

def strip_spaces(text): return text.strip()
assert strip_spaces(' Ada ')=='Ada'

Διερεύνηση ορίου

Αναπαράγαγε bug με αρχικά/τελικά κενά. Γράψε πρώτα failing assertion στον παλιό κώδικα και έπειτα διόρθωσέ τον.

Ανεξάρτητος έλεγχος

Για Δοκιμή παλινδρόμησης, γράψε την αναμενόμενη έξοδο πριν από εκτέλεση. Άλλαξε μία σημαντική παραδοχή και βρες αν το πρόβλημα ανήκει σε caller, implementation ή περιβάλλον.

REST

Ακριβής σημασία

Αρχιτεκτονικοί περιορισμοί σε distributed systems: client/server, stateless requests, cacheability και uniform interface. JSON μέσω HTTP δεν σημαίνει αυτόματα REST.

Πείραμα αναφοράς

GET /tasks/5 HTTP/1.1
Host: example.test

# 200 with representation, or 404 if unavailable

Διερεύνηση ορίου

Σχεδίασε GET/POST/PATCH routes για tasks και ξεχώρισε method semantics. Εντόπισε retry-safe read και write που θέλει idempotency.

Ανεξάρτητος έλεγχος

Για REST, γράψε την αναμενόμενη έξοδο πριν από εκτέλεση. Άλλαξε μία σημαντική παραδοχή και βρες αν το πρόβλημα ανήκει σε caller, implementation ή περιβάλλον.

Runtime

Πραγματική σημασία

Η φάση και το περιβάλλον όπου τρέχει ο κώδικας, μαζί με libraries και OS. Επιτυχές compile δεν εγγυάται συμβατές runtime versions.

Συγκεκριμένη αφετηρία

import sys
assert sys.version_info.major == 3
print(sys.platform)

Εφαρμογή του κανόνα

Σύγκρινε system Python με project virtual environment. Εντόπισε import error από ελλιπή runtime dependency.

Αντιπαράδειγμα

Για Περιβάλλον εκτέλεσης, γράψε πρώτα αναμενόμενο αποτέλεσμα, άλλαξε σκόπιμα μία υπόθεση του παραδείγματος και όρισε τι πρέπει να ελέγχει το boundary πριν το επαναχρησιμοποιήσεις.

Schema

Πραγματική σημασία

Προδιαγραφή πεδίων, τύπων και constraints. Έγκυρο JSON δεν σημαίνει σωστό schema: μπορεί να απαιτούνται ονόματα, απόρριψη άγνωστων keys ή compatibility κανόνες.

Συγκεκριμένη αφετηρία

def check(row):
    if set(row) != {'name','age'}: raise ValueError('keys')
    if type(row['age']) is not int or row['age']<0: raise ValueError('age')
    return row
assert check({'name':'Ada','age':3})['age']==3

Εφαρμογή του κανόνα

Δοκίμασε extra/missing keys, boolean age και negative age. Εξήγησε γιατί αυτό είναι ισχυρότερο από την αποδοχή οποιουδήποτε dict.

Serialization

Πραγματική σημασία

Μετατροπή in-memory τιμών σε μορφή αποθήκευσης/μεταφοράς. Η deserialization την αντιστρέφει, αλλά δεν κάνουν όλοι οι object types round-trip χωρίς απώλειες.

Συγκεκριμένη αφετηρία

import json
source={'items':[1,2], 'enabled':True}
encoded=json.dumps(source,ensure_ascii=False)
assert json.loads(encoded)==source

Εφαρμογή του κανόνα

Κάνε round-trip Unicode text, tuple και date-like data. Σημείωσε πού το JSON αλλάζει την αρχική Python αναπαράσταση.

Αντιπαράδειγμα

Για Σειριοποίηση, γράψε πρώτα αναμενόμενο αποτέλεσμα, άλλαξε σκόπιμα μία υπόθεση του παραδείγματος και όρισε τι πρέπει να ελέγχει το boundary πριν το επαναχρησιμοποιήσεις.