DedSec Project

Γλωσσάρι: CI, τερματικό και closures — DedSec Project

Γλωσσάρι: CI, τερματικό και closures CI Πώς συμπεριφέρεται η έννοια Αυτοματοποιημένο build/tests σε αλλαγές. CI δίνει γρήγορο feedback αλλά δεν υποκαθιστά review, security ή πραγματικά…

CI

Πώς συμπεριφέρεται η έννοια

Αυτοματοποιημένο build/tests σε αλλαγές. CI δίνει γρήγορο feedback αλλά δεν υποκαθιστά review, security ή πραγματικά target-device tests.

Μικρό παράδειγμα

python -m compileall -q .
python -m unittest discover -v

Πρακτική διερεύνηση

Φτιάξε offline test project με passing και failing test και παρατήρησε τα exit codes σε CI.

Δοκιμή ορίου

Για Συνεχής ενσωμάτωση, δοκίμασε δεύτερη είσοδο που αλλάζει το αποτέλεσμα. Σημείωσε αναμενόμενη συμπεριφορά πριν το run και εξήγησε τον κανόνα που παραβιάζεται.

CLI

Πώς συμπεριφέρεται η έννοια

Πρόγραμμα που ελέγχεται από arguments/exit status αντί GUI. Σωστά CLI διαχωρίζουν stdout/stderr και επιστρέφουν nonzero σε αποτυχία.

Μικρό παράδειγμα

import argparse
p=argparse.ArgumentParser();p.add_argument('--count',type=int,default=2)
assert p.parse_args(['--count','3']).count==3

Πρακτική διερεύνηση

Δοκίμασε --help και --count wrong, σύγκρινε stdout/stderr και exit status· όρισε τι μπορεί να χρησιμοποιήσει ένα άλλο script.

Δοκιμή ορίου

Για Διεπαφή γραμμής εντολών, δοκίμασε δεύτερη είσοδο που αλλάζει το αποτέλεσμα. Σημείωσε αναμενόμενη συμπεριφορά πριν το run και εξήγησε τον κανόνα που παραβιάζεται.

Closure

Τι σημαίνει στην πράξη

Η closure είναι συνάρτηση που χρησιμοποιεί ονόματα από το λεξικό περιβάλλον στο οποίο δημιουργήθηκε, ακόμη κι όταν η εξωτερική κλήση τελειώσει. Στην Python η εσωτερική συνάρτηση διατηρεί πρόσβαση στο step. Για αλλαγή της εξωτερικής μεταβλητής απαιτείται nonlocal, όχι όμως για ανάγνωση.

Συγκεκριμένο παράδειγμα

def make_adder(step):
    def add(value): return value + step
    return add
plus3 = make_adder(3)
assert plus3(7) == 10

Άσκηση και συχνή παγίδα

Δημιούργησε δύο adders με διαφορετικό step και έλεγξε ότι δεν μοιράζονται λάθος τιμές. Σε loop εξέτασε το late binding και διόρθωσέ το με factory ή default argument.

Αναφορά: https://docs.python.org/3/tutorial/classes.html#python-scopes-and-namespaces

Commit

Τι σημαίνει στην πράξη

Το commit είναι αμετάβλητο Git object με tree snapshot, γονικούς συνδέσμους και metadata. Το SHA προκύπτει από το περιεχόμενο, ενώ το branch είναι μετακινούμενος δείκτης. Ένα τοπικό commit δεν δημοσιεύει τίποτα στο remote.

Συγκεκριμένο παράδειγμα

git status --short
git add -- notes.md
git commit -m 'Explain the new test'
git show --stat --oneline HEAD

Άσκηση και συχνή παγίδα

Δούλεψε σε δοκιμαστικό repository, άλλαξε το ίδιο αρχείο δύο φορές και σύγκρινε git diff HEAD~1 HEAD. Επιβεβαίωσε ότι untracked αρχεία δεν περιλαμβάνονται χωρίς staging και πως το git push είναι χωριστή ενέργεια.

Αναφορά: https://git-scm.com/book/en/v2/Git-Internals-Git-Objects

Compiler

Τι σημαίνει στην πράξη

Ο compiler μετατρέπει πηγαίο κώδικα σε άλλη αναπαράσταση, συχνά machine code ή bytecode. Lexing, parsing, type checking, optimization και code generation είναι διαφορετικά στάδια. Ένα compile diagnostic δεν είναι απαραίτητα runtime error.

Συγκεκριμένο παράδειγμα

#include <stdio.h>
int main(void) { puts("hello"); return 0; }

Άσκηση και συχνή παγίδα

Κάνε compile με warnings και αφαίρεσε semicolon για syntax error. Επανέφερε το αρχείο και δοκίμασε αδήλωτη συνάρτηση για να ξεχωρίσεις compiler από linker failure. Επιτυχές build δεν αποδεικνύει σωστή λογική.

Αναφορά: https://gcc.gnu.org/onlinedocs/gcc/