Berapa banyak programmer yang Anda butuhkan untuk mendukung kode yang ditulis sebelumnya?

Beberapa waktu yang lalu, terjadi percakapan antara saya dan teman baik saya, di mana frasa berikut berbunyi:

- Jumlah programmer akan terus bertambah - karena jumlah kode bertambah, dan semakin banyak pengembang yang terus-menerus diperlukan untuk mendukungnya.
- Tapi kodenya sudah menua, bagian dari itu meninggalkan dukungan. Kehadiran semacam keseimbangan tidak dikesampingkan.

Mengingat mereka beberapa hari kemudian, saya bertanya-tanya apakah dukungan kode, yang membutuhkan lebih banyak dan lebih banyak sumber daya dari waktu ke waktu, pada akhirnya dapat melumpuhkan pengembangan fungsionalitas baru, atau akan membutuhkan peningkatan yang tidak terbatas dalam jumlah programmer? Analisis matematis dan persamaan diferensial membantu menilai secara kualitatif ketergantungan volume dukungan pada pengembangan dan menemukan jawaban atas pertanyaan.

Pertanyaan pertama. Bisakah mendukung "memakan" semua sumber daya pengembangan?


Pertimbangkan tim pemrogram yang jumlah pesertanya konstan. Bagikan waktu kerja mereka  mu(t)( 0< mu(t)<1) dicatat oleh pengembangan kode baru, dan sebagian kecil dari waktu 1βˆ’ mu(t)pergi untuk mendukung. Di bawah asumsi model, anggap bahwa jenis kegiatan pertama ditujukan untuk meningkatkan jumlah kode, dan yang kedua - mengubahnya (mengoreksi kesalahan) dan tidak secara signifikan mempengaruhi jumlah kode.

Kami menunjukkan y(t)semua kode ditulis oleh waktu t. Mengingat kecepatan penulisan kode adalah proporsional  mu(t)kami mendapatkan:

 fracdy(t)dt=a0 mu(t);a0 in mathbbR,a0>0.


Adalah wajar untuk berasumsi bahwa tenaga kerja yang terlibat dalam mempertahankan kode sebanding dengan volumenya:

1βˆ’ mu(t)=a1y(t);a1 in mathbbR,a1>0


atau

 mu(t)=1βˆ’a1y(t)


Dari mana

 fracdy(t)dt=a0(1βˆ’a1y(t))).


Kami mendapatkan persamaan diferensial yang terintegrasi dengan mudah. Jika pada saat awal jumlah kode adalah nol, maka

y(t)= frac1a1(1βˆ’eβˆ’a0a1t).


Di t hingga+ inftyfungsi y(t) to1/a1, dan  mu(t) hingga0. Dan ini berarti pengurangan bertahap seiring waktu pengembangan fungsionalitas baru menjadi nol dan transisi semua sumber daya untuk mendukung.

Namun, jika tepat waktu h>0Karena kode menjadi usang dan tidak lagi didukung, jumlah kode yang membutuhkan dukungan pada suatu waktu tsama dengan y(t)βˆ’y(tβˆ’h).Lalu

1βˆ’ mu(t)=a1(y(t)βˆ’y(tβˆ’h)),


 mu(t)=1βˆ’a1(y(t)βˆ’y(tβˆ’h)),


tapi y(t)adalah solusi persamaan diferensial dengan argumen tertunda [1]:

 fracdy(t)dt=a0(1βˆ’a1(y(t)βˆ’y(tβˆ’h))).


Solusi untuk persamaan ini ditentukan secara unik dengan menetapkan nilai-nilai y(t)"Sebelum awal waktu", dengan t in[βˆ’h,0]. Karena tidak ada kode yang ditulis sebelum waktu awal, dalam kasus kami y(t)=0di t in[βˆ’h,0].

Mari kita lihat beberapa contoh. Kami akan mengukur waktu dalam tahun, dan jumlah kode dalam ribuan baris. Lalu untuk a0Nilai urutan puluhan dapat diterima, kita ambil 50 dan 100. Artinya, dalam setahun tim pengembang akan menulis masing-masing lima puluh dan seratus ribu baris kode. Untuk a1nilai yang dapat diterima mungkin: 0,25/a0, 0,5/a0, 1/a0. Ini berarti bahwa tim pengembangan dapat mempertahankan jumlah kode yang ditulisnya untuk tahun ini, dengan seperempat, setengah, atau beban kerja penuh. Sebagai waktu hidup rata-rata kode, mari kita tetapkan nilai: 1, 2, dan 4 tahun. Memecahkan persamaan secara numerik, kami mendapatkan contoh perilaku fungsi  mu(t)untuk beberapa kombinasi parameter h,a0,a1.
gambar
Fungsi Perilaku  mu(t)dalam menghadapi kode penuaan telah berubah. Fungsi ini tidak lagi monoton, tetapi fluktuasi β€œtenang” seiring waktu, ada kecenderungan ke arah itu  mu(t)ke beberapa nilai konstan. Grafik menunjukkan: semakin banyak h, a0dan a1, yaitu, semakin lambat kode semakin tua, semakin cepat pengembangan kode baru terjadi dan semakin rendah kualitas kode, semakin sedikit sumber daya yang tersisa untuk pengembangan fungsionalitas baru. Ada keinginan untuk memberi setidaknya satu contoh  mu(t)"Meringkuk" mendekati nol. Tetapi ini membutuhkan pemilihan indikator kualitas pembangunan yang sangat buruk dan kode yang lama. Bahkan di grafik kiri bawah, sejumlah besar sumber daya tetap untuk fungsi baru. Oleh karena itu, jawaban yang benar untuk pertanyaan pertama lebih cenderung seperti ini: secara teoritis - ya, itu mungkin; praktis - hampir tidak.

Pertanyaan yang tidak bisa dijawab:

  1. Benarkah itu  mu(t)cenderung batas tertentu untuk t hingga+ inftyuntuk semua a0,a1>0? Jika tidak untuk semua orang, lalu untuk apa?
  2. Jika batas ada, maka bagaimana nilainya tergantung a0,a1?

Pertanyaan kedua. Dapatkah dukungan kode menyebabkan pertumbuhan jumlah programmer yang tidak terbatas?


Kami menunjukkan q(t)jumlah programmer yang terlibat dalam pengembangan kode baru. Seperti di atas y(t)- jumlah kode yang ditulis pada saat itu t. Lalu

 fracdy(t)dt=a2q(t);a2 in mathbbR,a2>0.


Biarkan dukungan kode sibuk p(t)programmer. Penuaan kode C

p(t)=a3(y(t)βˆ’y(tβˆ’h));a3 in mathbbR,a3>0.


Dari mana

p(t)=a3 inttβˆ’ht fracdy(s)dsds=a2a3 inttβˆ’htq(s)ds


Jika q(t) leqC1lalu

p(t) leqa1a2C1h.


Dengan demikian, jawaban untuk pertanyaan kedua adalah negatif: jika jumlah pengembang kode baru terbatas, maka dalam konteks kode penuaan, dukungan tidak dapat menyebabkan peningkatan jumlah programmer yang tidak terbatas.

Kesimpulan


Model yang dipertimbangkan adalah model matematika "lunak" [2]. Mereka sangat sederhana. Namun demikian, ketergantungan hasil simulasi pada nilai parameter sesuai dengan yang diharapkan untuk sistem nyata, ini mendukung kecukupan model dan akurasi yang cukup untuk mendapatkan perkiraan kualitatif.

Referensi


1. Elsgolts L.E., Norkin S.B. Pengantar teori persamaan diferensial dengan argumen menyimpang. Moskow Rumah Penerbit "Sains". 1971.
2. Arnold V.I. Model matematika "Keras" dan "lunak". Moskow Rumah Penerbitan Center 2004

Source: https://habr.com/ru/post/id430782/


All Articles