Στατική ανάλυση - από την εισαγωγή στην ολοκλήρωση

Κουρασμένοι από τον ατελείωτο έλεγχο κώδικα ή τον εντοπισμό σφαλμάτων, μερικές φορές σκέφτεστε πώς να απλοποιήσετε τη ζωή σας. Και αφού το ψάξετε λίγο ή πέφτοντας κατά λάθος, μπορείτε να δείτε τη μαγική φράση: «Στατική ανάλυση». Ας δούμε τι είναι και πώς μπορεί να αλληλεπιδράσει με το έργο σας.

Στατική ανάλυση - από την εισαγωγή στην ολοκλήρωση
Στην πραγματικότητα, αν γράφεις σε οποιαδήποτε σύγχρονη γλώσσα, τότε, χωρίς καν να το καταλάβεις, το πέρασες από έναν στατικό αναλυτή. Το γεγονός είναι ότι οποιοσδήποτε σύγχρονος μεταγλωττιστής παρέχει, αν και ένα μικροσκοπικό σύνολο προειδοποιήσεων σχετικά με πιθανά προβλήματα στον κώδικα. Για παράδειγμα, κατά τη μεταγλώττιση κώδικα C++ στο Visual Studio ενδέχεται να δείτε τα εξής:

Στατική ανάλυση - από την εισαγωγή στην ολοκλήρωση
Σε αυτή την έξοδο βλέπουμε ότι η μεταβλητή var δεν χρησιμοποιήθηκε ποτέ πουθενά στη λειτουργία. Έτσι, στην πραγματικότητα, σχεδόν πάντα χρησιμοποιούσατε έναν απλό αναλυτή στατικού κώδικα. Ωστόσο, σε αντίθεση με τους επαγγελματίες αναλυτές όπως οι Coverity, Klocwork ή PVS-Studio, οι προειδοποιήσεις που παρέχονται από τον μεταγλωττιστή ενδέχεται να υποδεικνύουν μόνο ένα μικρό εύρος προβλημάτων.

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

Γιατί χρειάζεστε στατική ανάλυση;

Με λίγα λόγια: επιτάχυνση και απλοποίηση.

Η στατική ανάλυση σάς επιτρέπει να βρείτε πολλά διαφορετικά προβλήματα στον κώδικα: από λανθασμένη χρήση γλωσσικών δομών έως τυπογραφικά λάθη. Για παράδειγμα, αντί για

auto x = obj.x;
auto y = obj.y;
auto z = obj.z;

Έγραψες τον παρακάτω κώδικα:

auto x = obj.x;
auto y = obj.y;
auto z = obj.x;

Όπως μπορείτε να δείτε, υπάρχει ένα τυπογραφικό λάθος στην τελευταία γραμμή. Για παράδειγμα, το PVS-Studio εκδίδει την ακόλουθη προειδοποίηση:

V537 Εξετάστε το ενδεχόμενο να ελέγξετε την ορθότητα της χρήσης του στοιχείου «y».

Εάν θέλετε να ρίξετε τα χέρια σας σε αυτό το σφάλμα, δοκιμάστε ένα έτοιμο παράδειγμα στον Compiler Explorer: *κραυγή*.

Και όπως καταλαβαίνετε, δεν είναι πάντα δυνατό να δίνετε προσοχή σε τέτοιες ενότητες κώδικα αμέσως, και γι' αυτό, μπορείτε να καθίσετε να κάνετε εντοπισμό σφαλμάτων για μια καλή ώρα, αναρωτιέστε γιατί όλα λειτουργούν τόσο περίεργα.

Ωστόσο, αυτό είναι σαφώς ένα λάθος. Τι θα γινόταν αν ο προγραμματιστής έγραφε μη βέλτιστο κώδικα επειδή ξέχασε κάποια λεπτότητα της γλώσσας; Ή ακόμα και το επέτρεψε στον κώδικα απροσδιόριστη συμπεριφορά? Δυστυχώς, τέτοιες περιπτώσεις είναι εντελώς συνηθισμένες και η μερίδα του λέοντος δαπανάται για τον εντοπισμό σφαλμάτων ειδικά λειτουργικό κώδικα που περιέχει τυπογραφικά λάθη, τυπικά σφάλματα ή απροσδιόριστη συμπεριφορά.

Για αυτές τις καταστάσεις εμφανίστηκε η στατική ανάλυση. Αυτός είναι ένας βοηθός για τον προγραμματιστή που θα επισημάνει διάφορα προβλήματα στον κώδικα και θα εξηγήσει στην τεκμηρίωση γιατί δεν είναι απαραίτητο να γραφτεί με αυτόν τον τρόπο, σε τι μπορεί να οδηγήσει και πώς να το διορθώσει. Ακολουθεί ένα παράδειγμα για το πώς μπορεί να μοιάζει: *κραυγή*.

Μπορείτε να βρείτε πιο ενδιαφέροντα σφάλματα που μπορεί να εντοπίσει ο αναλυτής στα άρθρα:

Τώρα που διαβάσατε αυτό το υλικό και έχετε πειστεί για τα οφέλη της στατικής ανάλυσης, ίσως θελήσετε να το δοκιμάσετε. Αλλά από πού να ξεκινήσετε; Πώς να ενσωματώσετε ένα νέο εργαλείο στο τρέχον έργο σας; Και πώς να του συστήσει την ομάδα; Θα βρείτε απαντήσεις σε αυτές τις ερωτήσεις παρακάτω.

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

0. Γνωριμία με το εργαλείο

Όλα ξεκινούν με μια δοκιμαστική έκδοση. Πράγματι, είναι δύσκολο να αποφασίσετε να εφαρμόσετε κάτι στη διαδικασία ανάπτυξης εάν δεν έχετε δει ποτέ ξανά το εργαλείο ζωντανά. Επομένως, το πρώτο πράγμα που πρέπει να κάνετε είναι να κάνετε λήψη δοκιμαστική έκδοση.

Τι θα μάθετε σε αυτό το στάδιο:

  • Ποιοι είναι οι τρόποι αλληλεπίδρασης με τον αναλυτή;
  • Είναι ο αναλυτής συμβατός με το περιβάλλον ανάπτυξής σας;
  • Ποια προβλήματα υπάρχουν αυτή τη στιγμή στα έργα σας;

Αφού εγκαταστήσετε όλα όσα χρειάζεστε, το πρώτο πράγμα που πρέπει να κάνετε είναι να εκτελέσετε μια ανάλυση ολόκληρου του έργου (Windows, Linux, macOS). Στην περίπτωση του PVS-Studio στο Visual Studio θα δείτε μια παρόμοια εικόνα (με δυνατότητα κλικ):

Στατική ανάλυση - από την εισαγωγή στην ολοκλήρωση
Το γεγονός είναι ότι οι στατικοί αναλυτές συνήθως εκδίδουν έναν τεράστιο αριθμό προειδοποιήσεων για έργα με μεγάλη βάση κώδικα. Δεν χρειάζεται να τα διορθώσετε όλα, καθώς το έργο σας λειτουργεί ήδη, πράγμα που σημαίνει ότι αυτά τα προβλήματα δεν είναι κρίσιμα. Ωστόσο, εσείς μπορείτε να δείτε τις πιο ενδιαφέρουσες προειδοποιήσεις και διορθώστε τα αν χρειαστεί. Για να το κάνετε αυτό, πρέπει να φιλτράρετε την έξοδο και να αφήσετε μόνο τα πιο αξιόπιστα μηνύματα. Στην προσθήκη PVS-Studio για το Visual Studio, αυτό γίνεται με φιλτράρισμα κατά επίπεδα και κατηγορίες σφαλμάτων. Για την πιο ακριβή απόδοση, αφήστε μόνο Ψηλά и General (επίσης με δυνατότητα κλικ):

Στατική ανάλυση - από την εισαγωγή στην ολοκλήρωση
Πράγματι, 178 προειδοποιήσεις είναι πολύ πιο εύκολο να προβληθούν από αρκετές χιλιάδες...

Σε καρτέλες Μέτριας Δυσκολίας и Χαμηλός Συχνά υπάρχουν καλές προειδοποιήσεις, αλλά αυτές οι κατηγορίες περιλαμβάνουν εκείνα τα διαγνωστικά που έχουν μικρότερη ακρίβεια (αξιοπιστία). Περισσότερες πληροφορίες σχετικά με τα επίπεδα προειδοποίησης και τις επιλογές για εργασία στα Windows μπορείτε να βρείτε εδώ: *κραυγή*.

Αξίζει να ελέγξετε με επιτυχία τα πιο ενδιαφέροντα σφάλματα (και να τα διορθώσετε με επιτυχία). καταργήστε τις υπόλοιπες προειδοποιήσεις. Αυτό είναι απαραίτητο για να μην χαθούν νέες προειδοποιήσεις ανάμεσα στις παλιές. Επιπλέον, ένας στατικός αναλυτής είναι βοηθός του προγραμματιστή και όχι λίστα σφαλμάτων. 🙂

1. Automatizationя

Αφού γνωριστούμε, ήρθε η ώρα να διαμορφώσετε πρόσθετα και να ενσωματώσετε στο CI. Αυτό πρέπει να γίνει πριν αρχίσουν οι προγραμματιστές να χρησιμοποιούν τον στατικό αναλυτή. Το γεγονός είναι ότι ο προγραμματιστής μπορεί να ξεχάσει να ενεργοποιήσει την ανάλυση ή να μην θέλει να το κάνει καθόλου. Για να το κάνετε αυτό, πρέπει να κάνετε κάποιο τελικό έλεγχο των πάντων, έτσι ώστε ο μη δοκιμασμένος κώδικας να μην μπορεί να εισέλθει στον κλάδο γενικής ανάπτυξης.

Τι θα μάθετε σε αυτό το στάδιο:

  • Ποιες επιλογές αυτοματισμού παρέχει το εργαλείο;
  • Είναι ο αναλυτής συμβατός με το σύστημα συναρμολόγησης σας;

Επειδή δεν υπάρχει τέλεια τεκμηρίωση, μερικές φορές πρέπει να γράψετε υποστήριξη. Αυτό είναι φυσιολογικό και είμαστε στην ευχάριστη θέση να σας βοηθήσουμε. 🙂

Τώρα ας προχωρήσουμε στις υπηρεσίες συνεχούς ενοποίησης (CI). Οποιοσδήποτε αναλυτής μπορεί να εφαρμοστεί σε αυτά χωρίς σοβαρά προβλήματα. Για να το κάνετε αυτό, πρέπει να δημιουργήσετε ένα ξεχωριστό στάδιο στον αγωγό, το οποίο συνήθως βρίσκεται μετά τις δοκιμές κατασκευής και μονάδας. Αυτό γίνεται χρησιμοποιώντας διάφορα βοηθητικά προγράμματα κονσόλας. Για παράδειγμα, το PVS-Studio παρέχει τα ακόλουθα βοηθητικά προγράμματα:

Για να ενσωματώσετε την ανάλυση στο CI, πρέπει να κάνετε τρία πράγματα:

  • Εγκαταστήστε τον αναλυτή.
  • Εκτέλεση ανάλυσης;
  • Παράδοση αποτελεσμάτων.

Για παράδειγμα, για να εγκαταστήσετε το PVS-Studio σε Linux (Debian-base), πρέπει να εκτελέσετε τις ακόλουθες εντολές:

wget -q -O - https://files.viva64.com/etc/pubkey.txt 
    | sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list 
  https://files.viva64.com/etc/viva64.list
  
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio

Σε συστήματα που εκτελούν Windows, δεν υπάρχει τρόπος να εγκαταστήσετε τον αναλυτή από τη διαχείριση πακέτων, αλλά είναι δυνατή η ανάπτυξη του αναλυτή από τη γραμμή εντολών:

PVS-Studio_setup.exe /verysilent /suppressmsgboxes 
/norestart /nocloseapplications

Μπορείτε να διαβάσετε περισσότερα σχετικά με την ανάπτυξη του PVS-Studio σε συστήματα με Windows *εδώ*.

Μετά την εγκατάσταση, πρέπει να εκτελέσετε απευθείας την ανάλυση. Ωστόσο, συνιστάται να το κάνετε αυτό μόνο αφού ολοκληρωθεί η κατάρτιση και οι δοκιμές. Αυτό συμβαίνει επειδή η στατική ανάλυση διαρκεί συνήθως δύο φορές περισσότερο από τη μεταγλώττιση.

Δεδομένου ότι η μέθοδος εκκίνησης εξαρτάται από την πλατφόρμα και τα χαρακτηριστικά του έργου, θα δείξω την επιλογή για C++ (Linux) ως παράδειγμα:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -w

Η πρώτη εντολή θα εκτελέσει την ανάλυση και η δεύτερη φακέλουςμετατρέπει την αναφορά σε μορφή κειμένου, την εμφανίζει στην οθόνη και επιστρέφει έναν κωδικό επιστροφής διαφορετικό από το 0 εάν υπάρχουν προειδοποιήσεις. Ένας μηχανισμός όπως αυτός μπορεί να χρησιμοποιηθεί εύκολα για να μπλοκάρει μια κατασκευή όταν υπάρχουν μηνύματα σφάλματος. Ωστόσο, μπορείτε πάντα να αφαιρέσετε τη σημαία -w και μην μπλοκάρετε μια διάταξη που περιέχει προειδοποιήσεις.

Σημείωση. Η μορφή κειμένου είναι άβολη. Παρέχεται απλώς ως παράδειγμα. Δώστε προσοχή σε μια πιο ενδιαφέρουσα μορφή αναφοράς - FullHtml. Σας επιτρέπει να πλοηγηθείτε στον κώδικα.

Μπορείτε να διαβάσετε περισσότερα σχετικά με τη ρύθμιση της ανάλυσης στο CI στο άρθρο "PVS-Studio και Συνεχής Ενοποίηση" (Windows) ή "Πώς να ρυθμίσετε το PVS-Studio στο Travis CI" (Linux).

Εντάξει, έχετε διαμορφώσει τον αναλυτή στον διακομιστή κατασκευής. Τώρα, εάν κάποιος ανέβασε μη δοκιμασμένο κώδικα, το στάδιο επαλήθευσης θα αποτύχει και θα μπορείτε να εντοπίσετε το πρόβλημα, ωστόσο, αυτό δεν είναι απολύτως βολικό, καθώς είναι πιο αποτελεσματικό να ελέγξετε το έργο όχι μετά τη συγχώνευση των υποκαταστημάτων, αλλά πριν από αυτό, στο στάδιο του αιτήματος έλξης.

Γενικά, η ρύθμιση μιας ανάλυσης αιτήματος έλξης δεν διαφέρει πολύ από τη συνηθισμένη εκκίνηση μιας ανάλυσης στο CI. Εκτός από την ανάγκη λήψης λίστας αλλαγμένων αρχείων. Αυτά μπορούν συνήθως να ληφθούν ερωτώντας τις διαφορές μεταξύ των κλάδων χρησιμοποιώντας το git:

git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

Τώρα πρέπει να περάσετε αυτήν τη λίστα αρχείων στον αναλυτή ως είσοδο. Για παράδειγμα, στο PVS-Studio αυτό υλοποιείται χρησιμοποιώντας τη σημαία -S:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log 
                            -S .pvs-pr.list

Μπορείτε να μάθετε περισσότερα σχετικά με την ανάλυση των αιτημάτων έλξης *εδώ*. Ακόμα κι αν το CI σας δεν περιλαμβάνεται στη λίστα των υπηρεσιών που αναφέρονται στο άρθρο, θα βρείτε χρήσιμη τη γενική ενότητα που είναι αφιερωμένη στη θεωρία αυτού του τύπου ανάλυσης.

Ρυθμίζοντας την ανάλυση των αιτημάτων έλξης, μπορείτε να αποκλείσετε δεσμεύσεις που περιέχουν προειδοποιήσεις, δημιουργώντας έτσι ένα όριο που δεν μπορεί να περάσει ο μη δοκιμασμένος κώδικας.

Όλα αυτά είναι σίγουρα καλά, αλλά θα ήθελα να μπορώ να δω όλες τις προειδοποιήσεις σε ένα μέρος. Όχι μόνο από τον στατικό αναλυτή, αλλά και από δοκιμές μονάδων ή από τον δυναμικό αναλυτή. Υπάρχουν διάφορες υπηρεσίες και πρόσθετα για αυτό. Το PVS-Studio, για παράδειγμα, έχει πρόσθετο για ενσωμάτωση στο SonarQube.

2. Ενσωμάτωση σε μηχανές προγραμματισμού

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

Ως η απλούστερη επιλογή, οι προγραμματιστές μπορούν να εγκαταστήσουν οι ίδιοι τον απαραίτητο αναλυτή. Ωστόσο, αυτό θα πάρει πολύ χρόνο και θα τους αποσπάσει την προσοχή από την ανάπτυξη, ώστε να μπορείτε να αυτοματοποιήσετε αυτή τη διαδικασία χρησιμοποιώντας ένα πρόγραμμα εγκατάστασης και τις απαραίτητες σημαίες. Για το PVS-Studio υπάρχουν διάφορα σημαίες για αυτοματοποιημένη εγκατάσταση. Ωστόσο, υπάρχουν πάντα διαχειριστές πακέτων, για παράδειγμα, Chocolatey (Windows), Homebrew (macOS) ή δεκάδες επιλογές για Linux.

Στη συνέχεια θα χρειαστεί να εγκαταστήσετε τα απαραίτητα πρόσθετα, για παράδειγμα για Visual Studio, ΙΔΈΑ, Καβαλάρης και ούτω καθεξής

3. Καθημερινή χρήση

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

Εάν ο αναλυτής εντοπίσει προβλήματα στον πρόσφατα αλλαγμένο κωδικό, θα το αναφέρει ανεξάρτητα. Για παράδειγμα, το PVS-Studio θα σας ενημερώσει σχετικά με αυτό χρησιμοποιώντας μια ειδοποίηση:

Στατική ανάλυση - από την εισαγωγή στην ολοκλήρωση
Φυσικά, δεν αρκεί να πούμε στους προγραμματιστές να χρησιμοποιήσουν το εργαλείο. Πρέπει με κάποιο τρόπο να τους πούμε τι είναι και πώς είναι. Εδώ, για παράδειγμα, υπάρχουν άρθρα σχετικά με μια γρήγορη εκκίνηση για το PVS-Studio, αλλά μπορείτε να βρείτε παρόμοια μαθήματα για οποιοδήποτε εργαλείο προτιμάτε:

Τέτοια άρθρα παρέχουν όλες τις απαραίτητες πληροφορίες για καθημερινή χρήση και δεν απαιτούν πολύ χρόνο. 🙂

Ακόμη και στο στάδιο της γνωριμίας με το εργαλείο, αποσιωπήσαμε πολλές προειδοποιήσεις κατά τη διάρκεια μιας από τις πρώτες εκκινήσεις. Δυστυχώς, οι στατικοί αναλυτές δεν είναι τέλειοι, οπότε κατά καιρούς δίνουν ψευδώς θετικά. Συνήθως είναι εύκολο να τα καταστείλετε· για παράδειγμα, στην προσθήκη PVS-Studio για το Visual Studio, χρειάζεται απλώς να κάνετε κλικ σε ένα κουμπί:

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

Μετά τις ενοποιήσεις

Έτσι έχουμε περάσει από όλα τα στάδια της ενσωμάτωσης της στατικής ανάλυσης στη διαδικασία ανάπτυξης. Παρά τη σημασία της εγκατάστασης τέτοιων εργαλείων στο CI, το πιο σημαντικό μέρος για την εκτέλεση τους είναι ο υπολογιστής του προγραμματιστή. Εξάλλου, ένας στατικός αναλυτής δεν είναι ένας κριτής που λέει κάπου μακριά από εσάς ότι ο κώδικας δεν είναι καλός. Αντίθετα, είναι ένας βοηθός που σου λέει αν είσαι κουρασμένος και σου υπενθυμίζει αν έχεις ξεχάσει κάτι.

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

Και αν εσείς ή οι συνάδελφοί σας δεν είστε ακόμα σίγουροι αν αξίζει να εφαρμόσετε τον αναλυτή, τότε σας προτείνω τώρα να ξεκινήσετε να διαβάζετε το άρθρο "Λόγοι για την εισαγωγή του αναλυτή στατικού κώδικα PVS-Studio στη διαδικασία ανάπτυξηςΑντιμετωπίζει τυπικές ανησυχίες των προγραμματιστών ότι η στατική ανάλυση θα τους πάρει το χρόνο και ούτω καθεξής.

Στατική ανάλυση - από την εισαγωγή στην ολοκλήρωση

Εάν θέλετε να μοιραστείτε αυτό το άρθρο με ένα αγγλόφωνο κοινό, χρησιμοποιήστε τον σύνδεσμο μετάφρασης: Maxim Zvyagintsev. Στατική ανάλυση: Από το ξεκίνημα στην ενσωμάτωση.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο