آموزشبرنامه نویسی موبایلبرنامه نویسی وبطراحی و پیاده سازی

توسعه Test-Driven و چرخه مشاهده آن

مباحثه‌های جالبی بین توسعه‌دهندگان در مورد ماهیت Test-driven Development یا TDD و استفاده از آن وجود دارد. در TDD یا «توسعه آزمون‌محور» اول آزمون (تست کد) و سپس کد نوشته می شود.

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

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

بااین‌حال شاید برخی «مشاهده» را دست کم بگیرند و فقط بخشی از آزمون یا اشکال‌زدایی (debugging) بدانند. در اینکه مشاهده در حیطه اشکال‌زدایی است شکی نیست، اما وقتی با بسیاری از توسعه‌دهندگان ارشد صحبت کنید، متوجه می‌­شوید که این ایده واقعاً مبنای اصلی کل گردش‌کار توسعه است. توسعه‌دهندگان برای تصمیم‌گیری در مورد کد نیاز به مشاهده دارند. نیاز به مشاهده فقط بعد از تکمیل کد یا مواجه‌شدن با یک اشکال (باگ) نیست بلکه در هرلحظه، بخشی از روند چرخه حیاتی نرم‌­افزار است.

اصل مشاهده در چرخه تمام توسعه­‌های نرم­‌افزاری به قرار زیر است:

مشاهده —> تصمیم —> عملکرد —> مشاهده —> تصمیم —> عملکرد —> (به همین ترتیب).

«چرخه مشاهده» [۱] یا ODA اصطلاح مناسبی برای این روند است.

اما هدف از ODA در توسعه آزمون‌محور چیست؟ چند نمونه برای وضوح بیشتر آن بیان می‌کنیم. در زمان انجام TDD پیشروی چرخه به شرح زیر است:

  1. مشکل را می‌بینید (مشاهده).
  2. تصمیم به حل مشکل می‌گیرید (تصمیم).
  3. یک آزمون می‌نویسد (عملکرد).
  4. به آزمون نگاه می‌کنید و می‌بینید که آیا API به نظر خوب می‌رسد (مشاهده).
  5. اگر خوب به نظر نمی­‌رسد، تصمیم می‌گیرید که چطور آن را تصحیح کنید (تصمیم)، آزمون را تغییر می‌دهید و تکرار می‌کنید: مشاهده —> تصمیم —> عملکرد… تا جایی که API به نظر مناسب باشد، ادامه می‌دهید.
  6.  اکنون‌ که API به نظر مناسب است، آزمون را اجرا می‌کنید و می‌بینید که آیا عمل می‌­کند؟ (مشاهده).
  7. تصمیم می‌گیرید که چطور از آزمون عبور کنید (تصمیم).
  8. کمی کد می‌نویسید (عملکرد).
  9. تست را اجرا می‌کنید و می‌بینید که آیا عبور می­‌کند یا عمل نمی‌کند (مشاهده).
  10. اگر عمل نکرد، تصمیم می‌گیرید که چطور آن را تصحیح کنید (تصمیم) و کمی کد می‌نویسید (عملکرد) تا از آزمون عبور کند (مشاهده).
  11. برحسب اصول طراحی نرم­‌افزار، آگاهی از مشکل، یا داده­‌های حاصله در حین نوشتن کد قبلی تصمیم می‌گیرید چه باید انجام بدهید (تصمیم).
  12. به همین ترتیب ادامه می‌دهید.

راه مطمئن دیگر برای ادامه این روند نوشتن کد اولیه است. تفاوت آن با توالی فوق­ این است که در مرحله ۳ به‌جای «یک آزمون بنویس»، «یک کد بنویس» خواهد بود. در این صورت برای تصمیمات بیشتر کد را مشاهده می‌کنید، یا آزمون‌ها را بعد از کد می‌نویسید و مشاهده می‌کنید.

بهره­‌وری و روندهای توسعه

جالب است که هر روند توسعه معتبر، این چرخه را  اصل هدایتگر اولیه خود قرار می‌دهد. حتی این اصل در روش‌های مقیاس‌بزرگ مانند چابک (Agile) که کل تیم را پوشش می‌­دهد برقرار است. در واقع شاید چابک نتیجه تلاش برای کوتاه‌کردن چرخه­‌های مشاهده-تصمیم-عملکرد تیم‌ها (در حد هفته‌) نسبت به مدل‌های ناموفق قبلی (مانند واترفال، آکا Big Design Up Front) که تکمیل یک چرخه ماه‌ها یا سال­‌ها به طول می‌انجامید بود.

بنابراین به نظر می‌رسد که چرخه­ های کوچک‌تر بهتر از چرخه­ های بزرگ‌تر باشند و بهره­‌وری بیشتر، فقط با کوتاه‌کردن چرخه­‌های ODA، حتی دوره­‌های زمانی مربوط به توسعه­‌دهنده، تیم یا سازمان، امکان‌پذیر باشد.

معمولاً می­‌توان کوتاه‌کردن چرخه­‌ها را با تمرکز بر مرحله مشاهده محقق کرد. با تمرکز بر مرحله مشاهده، معمولاً دو بخش دیگر چرخه خودشان سرعت می­‌گیرند (در غیر این صورت باید راهکارهای دیگری به‌کار گرفته شود که از حوصله این مقاله خارج است).

در مشاهده سه عامل کلیدی وجود دارد:

  • سرعت تحویل اطلاعات به توسعه‌دهندگان (مثلاً با تسریع آزمون‌ها)؛
  • کامل‌بودن اطلاعاتی که به توسعه­‌دهندگان تحویل داده می­‌شود (مثلاً با پوشش کافی آزمون)؛
  • دقت اطلاعاتی که به توسعه­‌دهندگان داده می­‌شود (مثلاً با آزمون‌های اعتماد).

با بررسی این سه معیار علل موفقیت برخی از ابزار توسعه در دهه اخیر را می‌فهمیم. یکپارچه‌سازی پیوسته، سیستم‌های نظارت بر محصول، پروفایلرها، اشکال‌زداها (دیباگرها)، پیام­‌های خطای بهتر در کامپایلرها و محیط‌های توسعه پیوسته (IDE) که کدهای نامناسب را مشخص می‌­کنند، از این قبیل هستند.

تقریباً هر کارکردی چنین روندی دارد، چراکه با این روند، مشاهده  سریع‌تر، دقیق‌تر و کامل­‌تر می­‌شود.

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

اولین ODA

 می‌توان برای کل فرایند توسعه نرم­‌افزار، یک چرخه بزرگ ODA در نظر گرفت که شامل مشاهده یک مشکل، انتخاب راهکار و تحویل آن در چارچوب یک نرم‌افزار است. در این چرخه بزرگ، چرخه­‌های کوچک بسیاری هست: تشخیص نیاز به یک ویژگی، تصمیم‌گیری در مورد نحوه کار ویژگی و سپس نوشتن ویژگی. حتی چرخه‌های کوچک‌تری هم وجود دارند (نیاز به تغییرات، تصمیم­‌گیری برای اجرا و نوشتن کد آن) و مانند آن.

سخت­‌ترین بخش در تمام این مراحل، اولین چرخه ODA است، زیرا نمی­‌توانید بدون تصمیم یا عملکرد قبلی مشاهده­‌ای انجام دهید. معمولاً در چرخه «بزرگ» چیزی برای مشاهده نیست. هنوز هیچ خروجی کد یا رایانه‌ای وجود ندارد!

در زندگی برای مشاهده از خودتان شروع می‌کنید. می‌توانید محیط اطرافتان را مشاهده کنید. افراد دیگری هستند که می‌توانید با آن­‌ها صحبت کنید.

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

حتی خود فرایند مشاهده را می­‌توان یک چرخه کوچک ODA درنظر گرفت: به دنیا نگاه می‌کنید، تصمیم می‌گیرید که باید به چه توجه کنید، توجه خود را بر آن معطوف می‌کنید، آن را مشاهده کنید، و بر اساس آن مشاهده، قصد مشاهده دیگری را می‌کنید.

شاید راه‌های بی‌شماری برای به‌کارگیری این اصل وجود دارد؛ آنچه ذکر شد چند نمونه از آن است.

[۱] Cycle of Observation

نوشته های مشابه

دیدگاهتان را بنویسید

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

دکمه بازگشت به بالا