آیا تا به حال در پروژه های نرم افزاری با این دوراهی مواجه شده اید که باید بین سرعت توسعه و کیفیت کد یکی را انتخاب کنید؟ بسیاری از تیم های نرم افزاری با این چالش روبرو هستند و اغلب با فشار زمانی، کیفیت کد را قربانی می کنند.
اما آیا واقعاً باید بین سرعت توسعه و کیفیت نرم افزار یکی را انتخاب کرد؟ آیا تست نویسی در برنامه نویسی واقعاً باعث کندی پیشرفت پروژه می شود؟
در این مقاله به بررسی دیدگاه های عمران باتمان قلیچ، مهندس نرم افزار با هفت سال تجربه در شرکت دیبار، درباره جایگاه تست در کیفیت محصول و تأثیر آن بر سرعت توسعه می پردازیم.
یکی از باورهای رایج در دنیای توسعه نرم افزار، وجود نوعی تضاد بین کیفیت و سرعت است. بسیاری از تیم ها با این استدلال که "وقت کافی نداریم" از پرداختن به کیفیت سر باز می زنند.
اما عمران معتقد است که دنیای امروز به این نتیجه رسیده که چنین تضادی واقعاً وجود ندارد:
"هر چقدر کیفیت را در محصول و توسعه محصول بالا ببرید، سرعتتان هم افزایش می یابد. اگر افزایش نمی یابد، احتمالاً آن چیزی که روی آن کار می کنید کیفیت نیست یا دامنه کارتان خیلی کوچک است."
تست نویسی یکی از مهمترین ابزارهای افزایش کیفیت کد است که متأسفانه در بسیاری از پروژه های ایرانی نادیده گرفته می شود. اما همانطور که خواهیم دید، این ابزار می تواند به افزایش سرعت توسعه نیز کمک کند.
البته باتمان قلیچ به یک استثنا در این قاعده اشاره می کند و آن محدودیت زمانی است. در استارتاپ ها یا پروژه هایی با عمر کوتاه تر از شش ماه، ممکن است بتوان تا حدودی کیفیت را فدا کرد، زیرا بدهی فنی حاصل از این تصمیم معمولاً در بازه های زمانی طولانی تر خود را نشان می دهد.
با این حال، حتی در چنین شرایطی، برخی اصول کیفی مانند تست نویسی اساسی می تواند همچنان ارزشمند باشد و به جای کاهش سرعت، به افزایش آن کمک کند. این موضوع به خصوص در مواردی که تغییرات مکرر در کد وجود دارد، اهمیت بیشتری پیدا می کند.
وقتی صحبت از توسعه بلندمدت محصول می شود، سرعت توسعه بدون توجه به کیفیت، حالتی نمایی و رو به کاهش پیدا می کند. باتمان قلیچ این روند را این گونه توصیف می کند:
"در ابتدا، سرعتمان بالاست. بسیاری از مفاهیم کیفیت را رعایت نمی کنیم و سریع نتیجه می گیریم. اما خرده خرده که محصول بالغ تر می شود، دردسرها و مقیاس بزرگ تر می شود، توسعه روی آن محصول سخت تر شده و هزینه ها بیشتر خودشان را نشان می دهند."
در این شرایط، دو رویکرد مدیریتی وجود دارد:
رویکرد اول ممکن است در کوتاه مدت جواب دهد، اما در بلندمدت منجر به افزایش پیچیدگی کد و وابستگی به افراد خاص می شود. رویکرد دوم اگرچه ممکن است در ابتدا زمان بر به نظر برسد، اما در نهایت به پایداری بیشتر و سرعت توسعه بالاتر منجر می شود.
بسیاری از تیم های توسعه، تست نویسی را یک امکان لوکس می دانند که فقط برای پروژه های بزرگ، سازمانی و بلندمدت معنادار است. اما باتمان قلیچ بر این باور است که تست، زیرمجموعه ای از پارامترهای کیفی است که حتی در پروژه های کوچک یک یا دو هفته ای نیز ارزشمند است.
برای درک بهتر مفهوم تست، با انواع اصلی آن آشنا شویم:
هر یک از این تست ها نقش مهمی در تضمین کیفیت نرم افزار دارند و انتخاب نوع مناسب تست بستگی به ماهیت پروژه و نیازهای آن دارد. در پروژه های کوچک، معمولاً تمرکز بر یونیت تست و تست یکپارچگی اساسی می تواند بیشترین بازدهی را داشته باشد.
برای درک بهتر ارزش تست نویسی، باتمان قلیچ تجربه شخصی خود را در نوشتن تست برای یک اسکریپت کوچک بیست خطی به اشتراک می گذارد:
"اسکریپت قرار بود یک فایل را تغییر دهد، یک پروژه را کلون کند، فایلی را با الگویی خاص پیدا کرده و محتوایی را در آن عوض کند. بدون تست، هر بار باید فایل نمونه را به حالت اولیه برمی گرداندیم، اسکریپت را اجرا می کردیم و نتیجه را می دیدیم - فرایندی که حدود ۲۰ تا ۳۰ ثانیه طول می کشید."
او توضیح می دهد که در یک دوره توسعه ۵ ساعته، این فرایند باید ۵۰ تا ۶۰ بار تکرار می شد، یعنی زمانی قابل توجه. در مقابل، با نوشتن تست (که تنها ۴-۵ دقیقه زمان برد)، تمام سناریوها با هر تغییر در کد ظرف ۲ ثانیه بررسی می شدند.
این مثال به خوبی نشان می دهد که حتی برای کدهای بسیار کوچک، سرمایه گذاری اندک در تست نویسی می تواند بازگشت سرمایه قابل توجهی در زمان توسعه داشته باشد. محاسبه ساده نشان می دهد که با صرف ۵ دقیقه برای نوشتن تست، حدود ۲۵ دقیقه (۵۰ بار × ۳۰ ثانیه) صرفه جویی در زمان حاصل شده است.
حتی در پروژه های کوچک، تست نویسی می تواند مزایای متعددی داشته باشد:
این مزایا در پروژه های بزرگ تر حتی اهمیت بیشتری پیدا می کنند، زیرا پیچیدگی و ریسک تغییرات با افزایش اندازه پروژه به شدت افزایش می یابد.
تست نویسی در برنامه نویسی نه تنها یک هزینه اضافی نیست، بلکه سرمایه گذاری هوشمندانه ای است که به افزایش سرعت توسعه کمک می کند. برخلاف تصور رایج، کیفیت و سرعت در تقابل با یکدیگر نیستند، بلکه مکمل یکدیگرند.
حتی در پروژه های کوچک، زمان صرف شده برای نوشتن تست ها با کاهش چشمگیر زمان عیب یابی و اصلاح خطاها جبران می شود.
اصفهان، خیابان حمزه اصفهانی، بن بست تخت جمشید(18) ، پلاک ۴
دفتر تهران: تهران، خیابان سهروردی شمالی، خیابان هویزه شرقی، پلاک 20، طبقه دوم، واحد 6