Πριν λίγο καιρό έγινε μια συζήτηση μεταξύ εμένα και ενός καλού μου φίλου στην οποία ακούστηκαν οι εξής φράσεις:
— Ο αριθμός των προγραμματιστών θα αυξάνεται συνεχώς - επειδή η ποσότητα του κώδικα αυξάνεται και όλο και περισσότεροι προγραμματιστές καλούνται συνεχώς να τον υποστηρίξουν.
— Αλλά ο κωδικός παλιώνει, ορισμένα από αυτά δεν υποστηρίζονται πλέον. Είναι ακόμη πιθανό να υπάρχει κάποιου είδους ισορροπία.
Ενθυμούμενος τους λίγες μέρες αργότερα, αναρωτήθηκα εάν η διατήρηση κώδικα, που απαιτεί όλο και περισσότερους πόρους με την πάροδο του χρόνου, θα μπορούσε τελικά να παραλύσει την ανάπτυξη νέας λειτουργικότητας ή θα απαιτούσε απεριόριστη αύξηση του αριθμού των προγραμματιστών; Η μαθηματική ανάλυση και οι διαφορικές εξισώσεις βοήθησαν να αξιολογηθεί ποιοτικά η εξάρτηση του ποσού της υποστήριξης από την ανάπτυξη και να βρεθούν απαντήσεις σε ερωτήσεις.
Ερώτηση ένα. Μπορεί να υποστηρίξει «καταναλώσει» όλους τους αναπτυξιακούς πόρους;
Σκεφτείτε μια ομάδα προγραμματιστών στην οποία ο αριθμός των συμμετεχόντων είναι σταθερός. Μερίδιο του χρόνου εργασίας τους () δαπανάται για την ανάπτυξη νέου κώδικα και το υπόλοιπο μερίδιο χρόνου πηγαίνει για υποστήριξη. Μέσα στις παραδοχές του μοντέλου, υποθέτουμε ότι ο πρώτος τύπος δραστηριότητας στοχεύει στην αύξηση του όγκου του κώδικα και ο δεύτερος στοχεύει στην αλλαγή του (διόρθωση σφαλμάτων) και δεν έχει σημαντικό αντίκτυπο στον όγκο του κώδικα.
Ας υποδηλώσουμε ολόκληρο το ποσό του κώδικα που γράφτηκε μέχρι εκείνη τη στιγμή . Υποθέτοντας ότι η ταχύτητα γραφής του κώδικα είναι ανάλογη , παίρνουμε:
Είναι φυσικό να υποθέσουμε ότι το κόστος εργασίας για τη διατήρηση του κώδικα είναι ανάλογο με τον όγκο του:
ή
Οπου
Λαμβάνουμε μια διαφορική εξίσωση που μπορεί εύκολα να ενσωματωθεί. Εάν την αρχική στιγμή το ποσό του κωδικού είναι μηδέν, τότε
Στο λειτουργία Και . Και αυτό σημαίνει σταδιακή μείωση με την πάροδο του χρόνου στην ανάπτυξη νέων λειτουργιών στο μηδέν και μεταφορά όλων των πόρων στην υποστήριξη.
Ωστόσο, εάν κατά τη διάρκεια του χρόνου ο κωδικός γίνεται παρωχημένος και παύει να υποστηρίζεται, τότε ο αριθμός του κώδικα που απαιτεί υποστήριξη κάθε φορά είναι ήδη ίσο Τότε
а είναι μια λύση σε μια διαφορική εξίσωση με καθυστερημένο όρισμα [1]:
Η λύση μιας τέτοιας εξίσωσης καθορίζεται μοναδικά με τον καθορισμό των τιμών "πριν από την αρχή του χρόνου" . Δεδομένου ότι ο κώδικας δεν είχε γραφτεί ακόμη πριν από την αρχική χρονική στιγμή, στην περίπτωσή μας στο .
Ας δούμε μερικά παραδείγματα. Θα μετρήσουμε τον χρόνο σε χρόνια και την ποσότητα του κώδικα σε χιλιάδες γραμμές. Στη συνέχεια για Οι τιμές της τάξης των δεκάδων είναι αποδεκτές, θα πάρουμε 50 και 100. Δηλαδή, σε ένα χρόνο η ομάδα ανάπτυξης θα γράψει πενήντα και εκατό χιλιάδες γραμμές κώδικα, αντίστοιχα. Για αποδεκτές τιμές μπορεί να είναι: , , . Αυτό σημαίνει ότι μια ομάδα ανάπτυξης μπορεί να υποστηρίξει την ποσότητα του κώδικα που γράφει σε ένα χρόνο, είτε είναι ένα τέταρτο, είτε μισό είτε πλήρης απασχόληση. Ως μέση διάρκεια ζωής του κώδικα, θα ορίσουμε τις ακόλουθες τιμές: 1, 2 και 4 έτη. Λύνοντας την εξίσωση αριθμητικά, λαμβάνουμε παραδείγματα συμπεριφοράς της συνάρτησης για ορισμένους συνδυασμούς παραμέτρων .
Συμπεριφορά της συνάρτησης καθώς ο κώδικας παλιώνει, έχει αλλάξει. Η συνάρτηση δεν είναι πλέον μονότονη, αλλά οι διακυμάνσεις «ηρεμούν» με την πάροδο του χρόνου και υπάρχει η τάση να σε κάποια σταθερή τιμή. Τα γραφήματα δείχνουν: τόσο περισσότερο , и , δηλαδή όσο πιο αργά γερνάει ο κώδικας, όσο πιο γρήγορα αναπτύσσεται ο νέος κώδικας και όσο χαμηλότερη είναι η ποιότητα του κώδικα, τόσο λιγότεροι πόροι θα απομένουν για την ανάπτυξη νέας λειτουργικότητας. Υπήρχε η επιθυμία να δοθεί τουλάχιστον ένα παράδειγμα στο οποίο «κουμπώθηκε» κοντά στο μηδέν. Αλλά αυτό απαιτούσε την επιλογή δεικτών ποιότητας ανάπτυξης πολύ κακής ποιότητας και κώδικα που δεν παλιώνει για μεγάλο χρονικό διάστημα. Ακόμη και στο κάτω αριστερό γράφημα, παραμένει σημαντικός αριθμός πόρων για τη νέα λειτουργικότητα. Επομένως, η σωστή απάντηση στην πρώτη ερώτηση είναι μάλλον η εξής: θεωρητικά - ναι, είναι δυνατό. πρακτικά - δύσκολα.
Ερωτήματα που δεν μπορούσαν να απαντηθούν:
- Είναι αλήθεια ότι τείνει σε κάποιο όριο στο για όλα ? Αν όχι για όλους, τότε για ποιους;
- Εάν υπάρχει όριο, πώς εξαρτάται η τιμή του ?
Ερώτηση δεύτερη. Θα μπορούσε η συντήρηση του κώδικα να προκαλέσει απεριόριστη αύξηση στον αριθμό των προγραμματιστών;
Ας υποδηλώσουμε ο αριθμός των προγραμματιστών που εμπλέκονται στην ανάπτυξη νέου κώδικα. Οπως παραπάνω, — η ποσότητα του κώδικα που έχει γραφτεί μέχρι ένα χρονικό σημείο . Επειτα
Διατηρήστε την υποστήριξη κωδικών απασχολημένη προγραμματιστές. Λαμβάνοντας υπόψη τον κωδικό γήρανσης,
Οπου
αν , Στη συνέχεια
Έτσι, η απάντηση στη δεύτερη ερώτηση είναι αρνητική: εάν ο αριθμός των προγραμματιστών νέου κώδικα είναι περιορισμένος, τότε σε συνθήκες γήρανσης κώδικα, η υποστήριξη δεν μπορεί να προκαλέσει απεριόριστη αύξηση του αριθμού των προγραμματιστών.
Συμπέρασμα
Τα μοντέλα που εξετάζονται είναι «μαλακά» μαθηματικά μοντέλα [2]. Είναι πολύ απλά. Ωστόσο, η εξάρτηση των αποτελεσμάτων της προσομοίωσης από τις τιμές των παραμέτρων αντιστοιχεί σε ό,τι αναμένεται για τα πραγματικά συστήματα, αυτό συνηγορεί υπέρ της επάρκειας των μοντέλων και της επαρκής ακρίβειας για τη λήψη εκτιμήσεων υψηλής ποιότητας.
Αναφορές
1. Elsgolts L.E., Norkin S.B. Εισαγωγή στη θεωρία των διαφορικών εξισώσεων με αποκλίνοντα όρισμα. Μόσχα. Εκδοτικός οίκος «Επιστήμη». 1971.
2. Arnold V.I. «Σκληρά» και «μαλακά» μαθηματικά μοντέλα. Μόσχα. Εκδοτικός οίκος MCNMO. 2004.
Πηγή: www.habr.com