چند وقت پیش صحبتی بین من و یکی از دوستان خوبم انجام شد که در آن جملات زیر شنیده می شد:
- تعداد برنامه نویسان دائماً افزایش می یابد - زیرا مقدار کد در حال افزایش است و برنامه نویسان بیشتری به طور مداوم از آن پشتیبانی می کنند.
— اما کد در حال قدیمی شدن است، برخی از آن دیگر پشتیبانی نمی شوند. حتی ممکن است نوعی تعادل وجود داشته باشد.
چند روز بعد با یادآوری آنها، به این فکر کردم که آیا حفظ کد، که به منابع بیشتر و بیشتر در طول زمان نیاز دارد، در نهایت می تواند توسعه عملکرد جدید را فلج کند یا نیاز به افزایش نامحدود در تعداد برنامه نویسان دارد؟ تجزیه و تحلیل ریاضی و معادلات دیفرانسیل به ارزیابی کیفی وابستگی میزان پشتیبانی به توسعه و یافتن پاسخ سوالات کمک کرد.
سوال یک. آیا میتوان از همه منابع توسعه «خوردن» حمایت کرد؟
تیمی از برنامه نویسان را در نظر بگیرید که تعداد شرکت کنندگان در آن ثابت است. سهم زمان کارشان () صرف توسعه کد جدید و زمان باقی مانده می شود برای حمایت می رود در مفروضات مدل، فرض میکنیم که نوع اول فعالیت با هدف افزایش حجم کد است و دومی با هدف تغییر آن (اصلاح خطاها) است و تأثیر قابلتوجهی بر حجم کد ندارد.
بیایید نشان دهیم کل مقدار کد نوشته شده تا آن نقطه در زمان . با فرض اینکه سرعت نوشتن کد متناسب باشد ، ما گرفتیم:
طبیعی است که فرض کنیم هزینه های نیروی کار برای حفظ کد متناسب با حجم آن است:
یا
از چه رو
ما یک معادله دیفرانسیل به دست می آوریم که به راحتی قابل ادغام است. اگر در لحظه اولیه مقدار کد صفر باشد، پس
در عملکرد و . و این به معنای کاهش تدریجی در طول زمان در توسعه عملکرد جدید به صفر و انتقال تمام منابع به پشتیبانی است.
با این حال، اگر در طول زمان کد منسوخ می شود و دیگر پشتیبانی نمی شود، سپس مقدار کدی که نیاز به پشتیبانی دارد در هر زمان در حال حاضر برابر است سپس
а یک راه حل برای یک معادله دیفرانسیل با آرگومان عقب افتاده [1] است:
راه حل چنین معادله ای به طور منحصر به فرد با تعیین مقادیر تعیین می شود "پیش از آغاز زمان" . از آنجایی که کد هنوز قبل از لحظه اولیه در زمان نوشته نشده بود، در مورد ما در .
بیایید به چند نمونه نگاه کنیم. ما زمان را بر حسب سال و مقدار کد را در هزاران خط اندازه گیری می کنیم. سپس برای مقادیر مرتبه ده ها قابل قبول است، 50 و 100 می گیریم. یعنی در یک سال تیم توسعه به ترتیب پنجاه و صد هزار خط کد می نویسد. برای مقادیر قابل قبول ممکن است: , , . این بدان معناست که یک تیم توسعه میتواند از مقدار کدی که در یک سال مینویسد پشتیبانی کند، خواه یک چهارم، نیم یا تمام وقت. به عنوان میانگین طول عمر کد، مقادیر زیر را تعیین می کنیم: 1، 2 و 4 سال. با حل عددی معادله، نمونه هایی از رفتار تابع را به دست می آوریم برای برخی از ترکیبات پارامترها .
رفتار عملکرد با پیر شدن کد، تغییر کرده است. این تابع دیگر یکنواخت نیست، اما نوسانات با گذشت زمان "آرام می شوند" و تمایل به به مقداری ثابت نمودارها نشان می دهد: بیشتر , и یعنی هر چه کد کندتر پیر می شود، کد جدید سریعتر توسعه می یابد و کیفیت کد پایین تر است، منابع کمتری برای توسعه عملکرد جدید باقی می ماند. این تمایل وجود داشت که حداقل یک مثال در آن ارائه شود نزدیک به صفر "فوت کرده". اما این امر مستلزم انتخاب شاخصهای کیفیت توسعه بسیار ضعیف و کدهایی بود که برای مدت طولانی پیر نمیشوند. حتی در نمودار پایین سمت چپ، مقدار قابل توجهی از منابع برای عملکرد جدید باقی مانده است. بنابراین، پاسخ صحیح به سؤال اول بیشتر این است: از نظر نظری - بله، ممکن است; عملا - به سختی.
سوالاتی که نمی توان پاسخ داد:
- آیا این درست است به حدی در میل دارد برای همه ? اگر نه برای همه، پس برای کدام یک؟
- اگر محدودیتی وجود داشته باشد، مقدار آن به چگونه بستگی دارد ?
سوال دو آیا نگهداری کد می تواند باعث رشد نامحدود تعداد برنامه نویسان شود؟
بیایید نشان دهیم تعداد برنامه نویسان درگیر در توسعه کد جدید. مانند بالا، - مقدار کد نوشته شده تا یک نقطه در زمان . سپس
پشتیبانی کد را مشغول نگه دارید برنامه نویسان با در نظر گرفتن کد پیری،
از چه رو
اگر ، و سپس
بنابراین، پاسخ به سوال دوم منفی است: اگر تعداد توسعه دهندگان کد جدید محدود باشد، در شرایط قدیمی شدن کد، پشتیبانی نمی تواند باعث افزایش نامحدود تعداد برنامه نویسان شود.
نتیجه
مدلهای در نظر گرفته شده، مدلهای ریاضی «نرم» هستند [2]. آنها بسیار ساده هستند. با این وجود، وابستگی نتایج شبیهسازی به مقادیر پارامتر با آنچه برای سیستمهای واقعی انتظار میرود مطابقت دارد، این به نفع کفایت مدلها و دقت کافی برای به دست آوردن تخمینهای با کیفیت بالا است.
منابع
1. Elsgolts L.E., Norkin S.B. مقدمه ای بر نظریه معادلات دیفرانسیل با استدلال انحرافی. مسکو. انتشارات "علم". 1971.
2. آرنولد وی. مدلهای ریاضی «سخت» و «نرم». مسکو. انتشارات MCNMO. 2004.
منبع: www.habr.com