آموزش توسعۀ آزمون محور (TDD) در اندروید – قسمت اول

نویسنده : سید ایوب کوکبی ۲۴ اسفند ۱۳۹۷

آموزش توسعۀ آزمون محور (TDD) در اندروید - قسمت اول

شاید باور نکنید اما بسیاری از برنامه‌نویسان از تغییر یا ریفکتور کردن کدها هراسانند. این مشکل محدود به افراد خاصی نیست بلکه ترسی همه‌گیر بوده و در بین اغلب توسعه‌دهندگان وجود دارد. TDD آمده است تا این ترس را از بین ببرد. البته این ترس دلایلی هم دارد. توسعه‌دهنده نگران است اعمال تغییر باعث از کار افتادن بخش دیگری از کد شود. در واقع با خیال راحت نمی‌تواند تغییرات جدید اعمال کند. واقعیت این است که حتی تست‌های رگرسیون هم نمی‌تواند بروز مشکلات احتمالی را به صفر برساند.

تست برنامه یکی از مهم‌ترین بخش‌های توسعۀ نرم‌افزار است. وقتی برای کدهایی خود تست می‌نویسید دیگر نگران اعمال تغییرات جدید یا رفع باگ‌ها نیستید چرا که پس از هر تغییر با اجرای تست از صحت عملکرد کدهای قبلی مطمئن می‌شوید. بدون تست، هر لحظه بیم آن می‌رود که تغییرات جدید، بخش‌های قبلی را دچار مشکل کند. باگی را از بین می‌برید ولی از آن طرف ده‌ها باگ جدید ایجاد می‌کنید. یکی از دلایل بروز چنین مشکلاتی، تست نکردن کدهاست.

در روش‌های قدیمِ توسعۀ نرم‌افزار مثل روش آبشاری، تست برنامه به عنوان یک مرحلۀ جدا در چرخۀ توسعۀ نرم‌افزار مطرح بود. به عنوان مثال ابتدا نیازمندی‌ها تحلیل می‌شد، سپس طراحی انجام می‌شد، بعد پیاده‌سازی و نهایتاً تست برنامه. در روش‌های جدید مثل اجایل تأکید روی عرضۀ سریع محصول و سنجش بازخورد مشتری است. از آنجایی که در اجایل استفاده از روش‌های قدیمی مثل روش آبشاری مقدور نیست؛ چارچوب‌هایی مثل اسکرام، کانبان و … معرفی شده‌اند.

چارچوب‌های فوق به شیوۀ جدیدی از تست نیاز دارند که این موضوع زمینه را برای معرفی توسعه آزمون محور (TDD: Test Driven Development) فراهم کرد. با TDD مطمئن هستید که درست در لحظۀ کدنویسی و چه بسا قبل از کد نویسی ابتدا برای آن کد تست بنویسید. اصولاً در TDD نوشتنِ تست بر کدنویسی ارجحیت دارد!

بخوانید  آموزش توسعۀ آزمون محور (TDD) در اندروید – قسمت چهارم

از آنجایی که بسیاری از توسعه‌دهندگان با این روش بیگانه بوده یا به صورت پراکنده چیزهایی شنیده ولی در عمل از آن استفاده نکرده‌اند، این مقاله را آماده کرده‌ایم تا با یک مثال عملی در محیط اندروید استودیو، برنامه‌نویسی آزمون‌محور را آموزش دهیم.

TDD چیست؟

TDD فرایندی برای توسعۀ نرم‌افزار است و از آن می‌توان هرجایی از iOS گرفته تا اندروید، برنامه‌نویسی وب، دسکتاپ و embeded و … استفاده کرد. در بین برنامه‌نویس‌ها این روش به (Red-Green-Refactor) رایج است.

توسعه آزمون محور TDD

در واقع برای کدی که هنوز ننوشته‌اید تست می‌نویسید که باعث قرمز شدن چراغ می‌شود. بعد با نوشتن مقداری کد، تست را پاس کرده و چراغ را سبز می‌کنید و نهایتاً کدی که نوشته‌اید را ریفکتور می‌کنید. این کار برای نوشتن هر کدی بارها و بارها تکرار می‌شود.

توسعۀ آزمون محور (TDD) راهی برای مدیریت ترس در طول برنامه‌نویسی است. ترس اعتماد به نفستان را کاهش می‌دهد. باعث می‌شود کمتر با دیگران ارتباط برقرار کنید. باعث می‌شود از بازخوردها فراری باشید. ترس باعث بدخلقی شما می‌شود.» – TDD By Example.

چرا TDD اینقدر مهم است؟

دلایل مختلفی برای استفاده از TDD وجود دارد:

  • کدنویسی سریع‌تر: وقتی تست می‌نویسید، راحت‌تر منطق کدها را درک خواهید کرد. شما از اول می‌دانید هدفتان چیست و قرار است به کجا برسید. درک بهترِ کد باعث افزایش سرعت کدنویسی می‌شود. کدنویسی به روش TDD این اجازه را می‌دهد تا از هدفتان دور نشوید و دقیقاً روی هدفی که دارید تمرکز کنید؛
  • تولید خودکار مستندات: با خواندن تست متوجه کارکرد هر بخشی از کد خواهید شد بدون اینکه نیاز به مطالعۀ مستندات باشد. ضمن اینکه مستندات سنتی باید هماهنگ با کد بروزرسانی شوند کما اینکه در عمل چنین اتفاقی نمی‌افتد. ولی تست‌ها همیشه به‌روز بوده و آخرین نسخۀ کد را توضیح می‌دهند؛
  • نگه‌داری بهتر کدها: کدنویسی به روش TDD باعث می‌شود تا به ساختار کدها توجه بیشتری داشته باشید. در واقع شما برای تست‌پذیری بهتر کد ناچار هستید کدهایی تمییز و ساختارمند بنویسید. مثلاً کلاس‌ها را طوری می‌نویسید که یکدیگر وابستگی نباشند تا راحت‌تر برایشان تست بنویسید. TDD شما را مجبور می‌کند دائم کدهایتان را ریفکتور کنید و این عادت خوب به مرور زمان در وجود شما نهادینه خواهد شد؛
  • اعتماد به نفس بیشتر و افزایش ضریب اطمینان کد: تست برنامه به شما کمک می‌کند تا عملکرد مورد نظرتان را از کدها انتظار داشته باشید. این موضوع باعث افزایش ضریب اطمینان کدها و افزایش اعتماد به نفستان خواهد شد. شما می‌دانید فلان کد کامل است و دقیقاً همان کاری که برای آن انتظار دارید را انجام می‌دهد. بعلاوه، خیالتان راحت است که اعمال هر تغییری در کد، عملکرد قبلی آن را مختل نمی‌کند چرا که مطمئنید مادامی که چراغ تست سبز باشد، کدهای قبلی عملکرد سابق خود را خواهند داشت؛
  • افزایش پوشش تست: کاملاً واضح است که در TDD پوشش تست ۱۰۰% است. در آزمون واحد (Unit Test) ممکن است برای تعدادی از توابع و کلاس‌ها فراموش کنید تست بنویسید ولی وقتی در TDD قبل از کدنویسی، تستش را می‌نویسید دیگر کدی وجود ندارد که برایش تست ننوشته باشیم.
بخوانید  قسمت دوم :اکتیویتی ها

مراحل اجرای TDD

در TDD توصیه می‌شود متدها و توابع آنقدر کوچک باشند که فقط و فقط یک کار انجام دهند تا بتوانید آن یک کار را به آسانی تست کنید. به عنوان مثال تابعی که قرار است دو عدد را با هم جمع کند فقط کارش همین باشد؛ دو عدد بگیرد، جمع کند و تحویل؛ همین. توابع، متدها و کلاس‌ها هرچقدر بزرگ‌تر شوند، نوشتن تست و پوشش کامل مسیرهای تست سخت‌تر می‌شود.

فرایند TDD در ۵ مرحله اجرا می‌شود:

  1. یک تست بنویسید: هر وقت خواستید کدی را تعمیر، ریفکتور یا چیز جدید به آن اضافه کنید. قبل از نوشتن کد (شیوۀ رایج)، یک تست و مقداری کد در حد اینکه برنامه کامپایل شود برای آن بنویسید. این تست، انتظار شما از اجرای آن تغییرات را بیان می‌کند؛
  2. تست را اجرا کنید، باید چراغ قرمز شود: اگر مرحلۀ یک را به درستی انجام داده باشید، بعد از اجرای تست چراغ قرمز خواهد شد چون هنوز کدی برای پاس کردن آن ننوشته‌اید؛
  3. مقداری کد برای پاس کردن تست بنویسید: افزودن قابلیت جدید، رفع مشکل و ریفکتور در این مرحله انجام می‌شود. دقت کنید فقط در حدی کد بنویسید که تست را پاس کند، نه بیشتر نه کمتر؛
  4. تست را دوباره اجرا کنید، باید چراغ سبز شود: اکنون با اجرای تست، چراغ سبز می‌شود چون تست را با موفقیت پاس کرده‌ایم. اگر چراغ همچنان قرمز بود، مشکلی وجود دارد؛ به مرحلۀ ۳ بروید و تا پاس نشدن تست، کار دیگری انجام ندهید؛
  5. ریفکتور کنید: خب حالا که با موفقیت تست را پشت سر گذاشته‌اید می‌توانید سراغ ریفکتور و تمییزکاری کدها بروید. نگران خراب شدن کدها هم نیستید، چون هر وقت اراده کنید می‌توانید تست‌ها را اجرا کنید و از صحت برنامه اطمینان حاصل کنید.
بخوانید  مهم‌ترین سوالات مصاحبه استخدامی از توسعه‌دهندگان اندروید

در قسمت بعدی شما را با هرم تست و انواع تست‌های اندروید آشنا می‌کنیم. همچنین خواهیم گفت ساختار پروژه را چگونه تنظیم کنید تا برای تست آماده شود.

سید ایوب کوکبی

نویسنده و مترجم...

0 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *