Όταν η υπό όρους λογική σιωπά τα κρίσιμα σήματα
TL;DR: Η παράλειψη αναφορών κατάστασης σε υπό όρους κλάδους προκαλεί σιωπηλές καθυστερήσεις και συνθήκες αγώνα.
TL;DR: Η παράλειψη αναφορών κατάστασης σε υπό όρους κλάδους προκαλεί σιωπηλές καθυστερήσεις και συνθήκες αγώνα.
Προβλήματα
- Καθυστέρηση χρήστη
- Κακή εμπειρία
- Απρόβλεπτες στιγμές
- Ανεπαρκής αρχικοποίηση
- Οι κρυφές εξαρτήσεις
- Η κακή διαχείριση της πολιτικής
- Σιωπηλές αποτυχίες
- Η αντίστροφη συμβατότητα διακόπτεται
Λύσεις
- Ελέγξτε όλες τις κωδικές διαδρομές
- Χρησιμοποιήστε μηχανισμούς υποβολής εκθέσεων
- Δοκιμή περιπτώσεων Edge αυστηρά
- Προηγούμενο άρθροΠροηγούμενο ΆρθροΠολιτική ελέγχου
- Κάντε δοκιμές απόδοσης
- Μετακίνηση αναφορών εκτός συνθηκών
ΠΕΡΙΓΡΑΦΟ
Όταν προσθέτετε υπό όρους λογική (π.χ. πολιτικές ομάδας) στον κώδικα εκκίνησης, η παράλειψη κρίσιμων βημάτων, όπως οι αναφορές ετοιμότητας, προκαλεί καθυστερήσεις σε όλο το σύστημα.
Οι περιπτώσεις περιθωρίου είναι εξαιρετικές συνθήκες που εμφανίζονται εκτός των φυσιολογικών λειτουργικών παραμέτρων.
Όταν δεν χειρίζεστε σωστά αυτές τις περιπτώσεις άκρων, ο κώδικας σας μπορεί να συμπεριφέρεται απρόβλεπτα.
ΑυτόΤο blog της MicrosoftΈνα κλασικό παράδειγμα, όπου λείπει η χειραγώγηση περιπτώσεωνΤα Windows 7 είχαν πιο αργούς χρόνους σύνδεσης όταν οι χρήστες επέλεξαν ένα στερεό χρώμα φόντο αντί για μια εικόνα ταπετσαρίας.
Ο κώδικας που είναι υπεύθυνος για τη φόρτωση των ταπετσαριών επιφάνειας εργασίας είναι σχεδόν "έτοιμος" μόνο όταν φορτώνει με επιτυχία μια εικόνα ταπετσαρίας.
Αλλά όταν οι χρήστες επέλεξαν ένα στερεό χρώμα φόντο (μια περίπτωση άκρη), αυτή η διαδρομή κώδικα δεν ενεργοποίησε ποτέ την ειδοποίηση "έτοιμη".
Ως αποτέλεσμα, το σύστημα περίμενε το πλήρες χρονικό διάστημα των 30 δευτερολέπτων πριν προχωρήσει στην ακολουθία σύνδεσης.
Αυτό το ζήτημα δείχνει πώς η έλλειψη μιας φαινομενικά μικρής περίπτωσης άκρων μπορεί να επηρεάσει σημαντικά την εμπειρία του χρήστη.
Αυτό που θα έπρεπε να ήταν μια διαδικασία σύνδεσης 5 δευτερολέπτων έγινε μια απογοητευτική καθυστέρηση 30 δευτερολέπτων για τους χρήστες που επέλεξαν μια απλή επιλογή διαμόρφωσης.
Πολλαπλασιάστε αυτή την αθώα καθυστέρηση 30 δευτερολέπτων με κάθε χρήστη που είχε την έκδοση.
Ο καλός σχεδιασμός λογισμικού απαιτεί από εσάς να εξετάσετε όλες τις πιθανές διαδρομές μέσω του κώδικα σας, όχι μόνο τις κοινές.
Όταν παραλείπετε την αντιμετώπιση περιπτώσεων πλεονεκτημάτων, δημιουργείτε τεχνικό χρέος που εκδηλώνεται ως μυστηριώδη προβλήματα απόδοσης, χρονικά διαστήματα και κακές εμπειρίες χρηστών.
Ετικέτες ΚΩΔΙΚΑ
Λάθος 🙂
public static class WallpaperInitializer
{
private static bool wallpaperWasDefined = false;
public static void InitializeWallpaper()
{
if (wallpaperWasDefined)
// Assume this was defined previously
// and PLEASE DON'T use NULLs in case you hadn't
{
LoadWallpaperBitmap();
Report(WallpaperReady); // Missed if wallpaper is undefined
}
// No default report, causing delays
}
private static void LoadWallpaperBitmap()
{
}
private static void Report(string status)
{
// The Asynchronous loading keeps on
}
}
Σωστό 🙂
public static class WallpaperInitializer
{
private static bool wallpaperWasDefined = false;
public static void InitializeWallpaper()
{
if (wallpaperWasDefined)
{
LoadWallpaperBitmap();
}
Report(WallpaperReady);
// Always report, regardless of condition
}
private static void LoadWallpaperBitmap()
{
}
}
ΑΝΑΚΑΛΥΨΗ
- [x] Ημι-αυτόματη
Χρησιμοποιήστε στατικά εργαλεία ανάλυσης για να σηματοδοτήσετε συνθήκες που προστατεύουν κρίσιμες κλήσεις αναφοράς.
Οι αναθεωρήσεις κώδικα θα πρέπει να επαληθεύουν ότι όλες οι διαδρομές αρχικοποίησης σηματοδοτούν την ολοκλήρωση.
️️
- Επίδοση
Επίπεδα
- [x] Μέσος όρος
Γιατί είναι σημαντική η προετοιμασία ️
Η πραγματική συμπεριφορά του συστήματος (π.χ. ταχύτητα σύνδεσης) εξαρτάται από την ακριβή μοντελοποίηση των καταστάσεων ετοιμότητας.
Το λογισμικό θα πρέπει να διατηρεί μια αντιστοίχιση μεταξύ των καταστάσεων του πραγματικού κόσμου και των καταστάσεων του προγράμματος.
Όταν οι χρήστες επιλέγουν ένα έγχρωμο φόντο στα Windows, αυτή η επιλογή αντιπροσωπεύει μια έγκυρη κατάσταση πραγματικού κόσμου.
(Η προσωπική μου επιλογή επίσης πίσω τότε)
Το πρόγραμμα πρέπει να μοντελοποιεί σωστά αυτή την επιλογή με μια αντίστοιχη κατάσταση του προγράμματος που συμπεριφέρεται σωστά.
Όταν σπάσετε αυτή τη διέξοδο, αποτυγχάνοντας να χειριστείτε περιπτώσεις άκρων, εισάγετε αποσύνδεση μεταξύ των προσδοκιών των χρηστών και της συμπεριφοράς του συστήματος. Σε αυτό το παράδειγμα, οι χρήστες αναμένουν την επιλογή τους από ένα στερεό χρώμα φόντο για να λειτουργήσει κανονικά, αλλά αντίθετα, βίωσαν μυστηριώδεις καθυστερήσεις.
Η έλλειψη διχασμού δημιουργεί γνωστική διαφωνία: «Έκανα μια απλή επιλογή, γιατί ο υπολογιστής μου συμπεριφέρεται παράξενα;» Αυτή η αποσύνδεση βλάπτει την εμπιστοσύνη και την ικανοποίηση των χρηστών.
Κάθε σπασμένο bijection εισάγει μια ρωγμή στο μοντέλο αξιοπιστίας του συστήματος, καθιστώντας το όλο και πιο απρόβλεπτο με την πάροδο του χρόνου.
Η διακοπή αυτής της σύνδεσης προκαλεί ασυνέπειες μεταξύ των προσδοκιών των χρηστών και της εκτέλεσης του λογισμικού, οδηγώντας σε απρόβλεπτες καθυστερήσεις καιΧάρτηςπαραβιάσεις του πραγματικού κόσμου.
Η γενιά μας
Οι γεννήτριες AI μπορούν να δημιουργήσουν αυτή τη μυρωδιά τυλίγοντας αφελώς κώδικα κληρονομιάς σε υπό όρους χωρίς να επικυρώνουν όλες τις διαδρομές.
Η ανίχνευση
Προτρέψτε την AI να "εξασφαλίσει ότι οι αναφορές κατάστασης εκτελούνται σε όλα τα υποκαταστήματα" και θα σηματοδοτήσει ή να διορθώσει αυτή τη μυρωδιά μετακινώντας το Report() έξω από τις συνθήκες.
Δοκιμάστε το!
Θυμηθείτε: Οι βοηθοί AI κάνουν πολλά λάθη
Προτεινόμενη προειδοποίηση: βρείτε τις λείπουσες άλλες αναφορές
Προτεινόμενη προειδοποίηση: βρείτε τις λείπουσες άλλες αναφορές
Without Proper Instructions |
With Specific Instructions |
---|---|
Συμπέρασμα
Σημειώστε πάντα την ολοκλήρωση άνευ όρων στον κώδικα αρχικοποίησης.
Η υπό όρους λογική θα πρέπει να τροποποιεί τη συμπεριφορά, όχι να σιωπά τα κρίσιμα βήματα αναφοράς.
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxx
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xviii
Περισσότερες πληροφορίες
Αποκάλυψη
Η μυρωδιά είναι δική μουΓνώμη.
Η δοκιμή οδηγεί στην αποτυχία και η αποτυχία οδηγεί στην κατανόηση.
Η δοκιμή οδηγεί στην αποτυχία και η αποτυχία οδηγεί στην κατανόηση.
Μπερτ Ρουτάν
Αυτό το άρθρο είναι μέρος της σειράς CodeSmell.