نرم افزار به عنوان آزمایش در مقابل نرم افزار به عنوان زیرساخت
این مقایسه دو فلسفه متضاد در مهندسی نرم افزار را بررسی می کند: رویکرد سریع و تکراری کد تجربی در مقابل ماهیت پایدار و حیاتی نرم افزار زیرساختی. در حالی که یکی بر سرعت و کشف تمرکز دارد، دیگری بر قابلیت اطمینان و نگهداری بلندمدت برای خدمات دیجیتال ضروری و سیستم های جهانی اولویت دارد.
برجستهها
کد آزمایشی بر اثبات وجود یک مفهوم تمرکز دارد، در حالی که کد زیرساخت ثابت می کند که می تواند دوام بیاورد.
زیرساخت نیازمند برنامه ریزی دقیق «شعاع انفجار» برای جلوگیری از خرابی زنجیره ای سیستم ها است.
هزینه تغییر عمدا در آزمایش ها پایین و در زیرساخت ها عمدا بالا است.
موفقیت در یک آزمایش یک بینش جدید است؛ موفقیت در زیرساخت ها یک عملیات خاموش و خسته کننده است.
نرم افزار به عنوان آزمایش چیست؟
کد طراحی شده برای یادگیری سریع، نمونه سازی و آزمون فرضیه ها در محیط های پرتحرک.
سرعت تحویل را بر کمال معماری بلندمدت ترجیح می دهد.
معمولا در محیط های استارتاپ برای یافتن تناسب محصول با بازار استفاده می شود.
ذهنیت «سریع شکست خوردن» را برای کاهش هدررفت منابع توسعه می پذیرد.
اغلب به عنوان یک معامله حساب شده برای ورود به بازار، به بدهی فنی تکیه دارد.
معمولا چرخه عمر کوتاه تری دارد و اغلب پس از یادگیری درس کنار گذاشته می شود.
نرم افزار به عنوان زیرساخت چیست؟
کد پایه ای ساخته شده برای دسترسی بالا، امنیت و عملکرد پایدار بلندمدت.
مهندسی شده تا در برابر حجم عظیم و بارهای همزمان کاربران مقاومت کند.
تمرکز بر سازگاری با نسخه های قبلی برای جلوگیری از شکستن وابستگی های پایین دستی است.
نیازمند مستندسازی گسترده و پروتکل های تست خودکار و دقیق است.
طراحی شده با چرخه عمر دهه ها به جای ماه ها یا سال ها.
زیرساخت خدمات ضروری مانند بانکداری، شبکه های انرژی و پلتفرم های ابری است.
جدول مقایسه
ویژگی
نرم افزار به عنوان آزمایش
نرم افزار به عنوان زیرساخت
هدف اصلی
یادگیری و کشف
پایداری و قابلیت اطمینان
تحمل شکست
بالا (تشویق به رشد)
کف (انتظار زمان خاموشی صفر)
سرعت توسعه
تکرارهای سریع
روش مند و حساب شده
بدهی فنی
پذیرفته شده و مورد انتظار
فعالانه مینیمایز و مدیریت می شود
مستندات
حداقلی یا به موقع
جامع و جامع
آزمون سخت گیری
تمرکز بر عملکرد اصلی
حالت های لبه ای و آزمون های تنش
تمرکز بر هزینه
سرمایه گذاری اولیه پایین
تمرکز بر کل هزینه مالکیت
مقیاس پذیری
اغلب به عنوان یک فکر ثانویه
از روز اول تعبیه شده بود
مقایسه دقیق
مدیریت ریسک و قابلیت اطمینان
نرم افزارهای آزمایشی باگ ها را به عنوان فرصت های یادگیری در نظر می گیرند و اغلب در محیط هایی عمل می کنند که تصادف افراد کمی را تحت تأثیر قرار می دهد. با این حال، نرم افزارهای زیرساختی زمان توقف را به عنوان رویدادی فاجعه بار در نظر می گیرند که نیازمند برنامه نویسی دفاعی و سیستم های افزونه است. تفاوت در این است که آیا کد اجازه دارد چیزها را بشکند تا سریع حرکت کند یا باید بدون شکسته باقی بماند تا جهان به حرکت درآید.
طول عمر و نگهداری
یک آزمایش اغلب پلی موقتی به سوی یک پاسخ است که پس از تحقق هدف، اغلب بازنویسی یا کنار گذاشته می شود. کد زیرساخت به عنوان یک ابزار دائمی ساخته می شود و نیازمند برنامه ریزی دقیق برای به روزرسانی هایی است که ممکن است پنج تا ده سال خدمت را در بر گیرد. توسعه دهندگان زیرساخت باید به این فکر کنند که کدشان در سال ۲۰۳۵ برای یک نگهدارنده چگونه خواهد بود، در حالی که آزمایش کنندگان روی هفته آینده تمرکز می کنند.
تأثیر بر فرهنگ مهندسی
تیم هایی که نرم افزارهای آزمایشی می سازند، بر خلاقیت، جریان های کاری متمرکز و سرعت های پرانرژی تکیه دارند. تیم های زیرساخت به انضباط، بررسی های عمیق معماری و افتخار ساختن چیزی که هرگز شکست نمی خورد ارزش می دهند. این طرز فکر های متفاوت اغلب منجر به پروفایل های استخدامی متفاوت می شود، به طوری که «هکرها» اولی را ترجیح می دهند و «مهندسان سیستم» به سمت دومی گرایش پیدا می کنند.
محرک های اقتصادی
نرم افزارهای آزمایشی معمولا با نیاز به جذب بازار یا اعتبارسنجی سریع یک حوزه تخصصی تأمین مالی می شوند. زیرساخت سرمایه گذاری در بنیاد است، جایی که هزینه یک اشتباه می تواند منجر به بدهی های مالی یا حقوقی عظیم شود. یکی بازی تهاجمی برای رشد است و دیگری تدبیری محافظتی برای ارزش موجود و تداوم عملیاتی است.
مزایا و معایب
نرم افزار به عنوان آزمایش
مزایا
+بازخورد بسیار سریع
+هزینه های اولیه پایین
+تشویق نوآوری
+انعطاف پذیری بالا
مصرف شده
−کدبیس شکننده
−بدهی فنی انباشته می کند
−مقیاس پذیری ضعیف
−برای کاربران غیرقابل اعتماد نیست
نرم افزار به عنوان زیرساخت
مزایا
+قابلیت اطمینان استثنایی
+استانداردهای امنیتی بالا
+مستندات شفاف
+ظرفیت مقیاس عظیم
مصرف شده
−چرخه های توسعه کند
−هزینه های بالای مهندسی
−مقاوم در برابر تغییر
−نگهداری پیچیده
تصورات نادرست رایج
افسانه
نرم افزارهای آزمایشی فقط کد «بد» نوشته شده توسط توسعه دهندگان تنبل هستند.
واقعیت
کد آزمایشی عمدی یک انتخاب استراتژیک برای اولویت دادن به یادگیری است. اگر هدف اعتبارسنجی باشد، «مناسب برای هدف» محسوب می شود، هرچند اگر در نهایت بازسازی یا جایگزین نشود، مشکل ساز می شود.
افسانه
نرم افزار زیرساخت هرگز تغییر نمی کند یا تکامل نمی یابد.
واقعیت
زیرساخت ها باید تکامل یابند، اما این کار را با نهایت احتیاط انجام می دهند. تغییرات با استفاده از استقرارهای آبی-سبز یا رهاسازی قناری اجرا می شوند تا اطمینان حاصل شود که پایه در طول انتقال محکم باقی می ماند.
افسانه
شما به راحتی می توانید یک آزمایش را بعدا به زیرساخت تبدیل کنید.
واقعیت
این یک دام رایج است که به سیستم های «اسپاگتی» منجر می شود. زیرساخت واقعی معمولا نیازمند بازنگری کامل معماری است زیرا فرضیات بنیادی یک آزمایش به ندرت مقیاس پذیر هستند.
افسانه
فقط استارتاپ ها نرم افزارهای آزمایشی انجام می دهند.
واقعیت
حتی شرکت های بزرگ فناوری از شاخه ها یا «آزمایشگاه های» آزمایشی برای آزمایش ویژگی ها استفاده می کنند. کلید کار این است که این آزمایش ها را جدا کنیم تا زیرساخت اصلی که کاربران به آن وابسته اند را تهدید نکنند.
سوالات متداول
چه زمانی باید دیگر اپ خود را به عنوان یک آزمایش در نظر نگیرم؟
این گذار باید زمانی اتفاق بیفتد که نرم افزار شما از حالت «داشتن خوب» به «حیاتی» برای کاربران منتقل شود. اگر یک قطعی ۱۵ دقیقه ای منجر به زیان مالی قابل توجه یا جابجایی کاربران شود، وارد حوزه زیرساخت شده اید و باید سخت گیری های تست و استقرار خود را متناسب با آن تنظیم کنید.
آیا نرم افزارهای زیرساختی از زبان های برنامه نویسی متفاوتی استفاده می کنند؟
در حالی که هر زبانی می تواند برای هر دو استفاده شود، زیرساخت ها اغلب به سمت زبان های کامپایل شده با تایپ قوی مانند Go، Rust یا C++ برای عملکرد و ایمنی تمایل دارند. نرم افزارهای آزمایشی اغلب از زبان های انعطاف پذیر و سطح بالا مانند پایتون یا روبی استفاده می کنند که امکان نمونه سازی سریع تر و تغییرات نحو آسان تر را فراهم می کنند.
آیا بدهی فنی همیشه در نرم افزارهای آزمایشی بد است؟
نه لزوما. در یک آزمایش، بدهی فنی مانند یک وام با بهره بالا است که به شما کمک می کند زودتر خانه ای بخرید. فقط زمانی بدهی «بد» می شود که هرگز آن را پس ندهید یا بخواهید آسمان خراش (زیرساختی) روی آن پایه موقت بسازید.
استراتژی های آزمون چگونه بین این دو تفاوت دارند؟
آزمایش ها بر آزمون «مسیر خوش» تمرکز دارند—بررسی اینکه آیا ویژگی اصلی برای کاربر عادی کار می کند یا خیر. تست زیرساخت ها به «موارد لبه» و «مهندسی آشوب» وسواس دارد، جایی که توسعه دهندگان عمدا بخش هایی از سیستم را خراب می کنند تا ببینند آیا بقیه می توانند از شوک جان سالم به در ببرند یا نه.
آیا یک شرکت می تواند هر دو رویکرد را به طور همزمان مدیریت کند؟
بله، و موفق ترین آن ها این کار را می کنند. آن ها اغلب از استراتژی «فناوری اطلاعات دوگانه» استفاده می کنند که در آن یک تیم سیستم های اصلی و پایدار (زیرساخت) را حفظ می کند و تیم چابک دیگر مرزهای جدیدی را کاوش می کند (آزمایش). چالش مدیریت انتقال بین این دو فرهنگ است.
بزرگ ترین ریسک ماندن بیش از حد در مرحله «آزمایش» چیست؟
بزرگ ترین خطر، «شکنندگی سیستماتیک» است. هرچه ویژگی های بیشتری به یک آزمایش پراکنده اضافه کنید، پیچیدگی به طور نمایی افزایش می یابد. در نهایت، سیستم آن قدر شکننده می شود که با یک تغییر کوچک، بخش های نامرتبط خراب می شوند و عملا همه نوآوری های آینده متوقف می گردد.
چرا مستندسازی برای زیرساخت ها بسیار حیاتی تر است؟
زیرساخت یک منبع مشترک است که پس از خالقان اصلی خود عمر می کند. بدون مستندات عمیق، افرادی که پنج سال بعد سیستم را نگهداری می کنند، دلیل انتخاب های خاص امنیتی یا عملکردی را درک نخواهند کرد که منجر به خطاهای خطرناک در به روزرسانی های آینده خواهد شد.
آیا «زیرساخت» فقط به سرورهای ابری و پایگاه های داده اشاره دارد؟
خیر، منظورش نقشی است که نرم افزار ایفا می کند. یک کتابخانه احراز هویت اصلی که هزاران اپلیکیشن از آن استفاده می کنند، «زیرساخت» است، حتی اگر فقط یک قطعه کد باشد. اگر مردم روی آن بسازند، زیرساخت است؛ اگر مردم فقط برای دیدن اینکه ایده ای کار می کند یا نه از آن استفاده کنند، این یک آزمایش است.
حکم
وقتی بازارهای ناشناخته را کاوش می کنید یا ویژگی های جدیدی را که هزینه شکست در آن ها پایین است، آزمایش می کنید، رویکرد آزمایشی را انتخاب کنید. وقتی محصول شما به یک وابستگی حیاتی برای کاربرانی تبدیل شد که به سرویس شما وابسته اند تا بدون وقفه کار کند، به ذهنیت زیرساخت روی بیاورید.