Incremental یا Iterative

یکی از سوالات اصلی که در هنگام سوئیچ از روش های قدیمی به اسکرام با آن مواجه می شویم Incremental بودن و یا Iterative بودن اسکرام است . به عبارت دیگر ما قرار است به کدامین روش کار کنیم؟ Incremental یا Iterative .

من این سوال را از شما دارم، کدام روش؟ مرد مومن تعریفی از هر دو مقوله ارائه بده تا بتوانیم تصمیم گیری کنیم: کل تعریف هر دو روش در شکل زیر کاملا مشهود است:

http://blog.irscrum.com/wp-content/uploads/2010/07/patton_incremental_iterative_mnalisa.jpg

همانطور که حتما متوجه شده اید هر دو روش دقیقا معکوس یک دیگر عمل می کنند. در روش Incremental هدف توسعه یک محصول است اما تکه تکه. به عبارت دیگر ما آخر کار را به صورت قطعی می دانیم (همانطور که در تصویر معلوم شده است ) پس نسبت به دانش اولیه و کامل، در حال تکمیل قسمتی از محصول به صورت 100% و کامل هستیم . اگر دقت کنید در متد Incremental در سه مرحله ما به نقاشی دست پیدا کردیم . البته در هر مرحله قسمتی (تکه ای ) از شکل به صورت کامل تمام شده است. یعنی در مرحله دوم دیگر نیاز نیست ما بر روی چشم ها دوباره کار کنیم زیرا که در مرحله قبل تمام شده است. این نوع متد نیازمند یک دید کلی و کامل از نتیجه نهایی است . یعنی بدون طراحی اولیه دقیق (Up-front) قبل از شروع به پیاده سازی چنین متدی امکان پذیر نیست.

ولی در متد دوم یا همان Iterative شاهد این هستیم که در هر تکرار کل عکس شاهد دگرگونی است . یعنی در هر تکرار یا چرخش بر روی کل عکس کار کرده ایم و در آخرین چرخش کل عکس آماده است ولی نه به صورت 100 % . این نوع متد وابسته به خروجی تکرار قبلی است . به عبارت ساده تر در اول کار ما فقط می‌خواهیم عکس یک زن را بکشیم ولی طرح نهایی در ذهنمان وجود ندارد  یعنی دانش مان کامل نیست. هر مرحله ای که به جلو می رویم یاد می گیریم و بر اساس یادگیری ها مرحله بعدی را شروع می کنیم . این همان بازخورد و بازبینی هایی هست که در اسکرام انجام می شود .

خوب شاید الان بتوانید بگویید که اسکرام برپایه کدام روش است؟ بلی، اسکرام ترکیبی از هر دوروش می‌باشد. (درست گفته بودید؟) . به نظر می رسد متوجه شده باشید که هر دوروش یک سری معایب و مزایای بزرگ دارند :

در روش Incremental ما بخشی از محصول را به صورت کامل تمام می کنیم (مزیت) ولی این تمام کردن نیازمند یک دانش کامل و فراگیر نسبت به کل محصول است که این محصول جز با طراحی های Up-front امکان پذیر نخواهد بود (عیب) { قابل ذکر است که عیب طراحی Up-front این است که در فاز شروعی پروژه زمانی زیادی برای اینگونه طراحی ها باید صرف شود} . اما در روش Iterative ما نیازی به طراحی Up-front نخواهیم داشت زیرا رفته رفته طراحی می کنیم که اصطلاحا به این نوع طراحی Just-In-time-Design اطلاق می شود . ولی در اینگونه طراحی ها می توانیم در دام کارهای 95% بیفتیم (شاید دیده باشید که پروژه در دو ماه به 95% می رسد ولی 5% پروژه 4 ماه طول می کشد که این همان دام 95% است که هیچ وقت تمام نمی شود ) .

اسکرام برای اینکه بتواند روش کاملی باشد از هر دو روش بهره جسته است. اسپرینت‌های یک پروژه همان چرخش ها هستند و انجام دادن Feature های داخل هر اسپرینت Incremental ما خواهند بود . به عبارت سادتر در انتهای یک Iteration، شاهد Increment (خروجی اسپرینت) خواهیم بود .

2 نکته اساسی از نوشته های بالا قابل استنباط خواهد بود که هدف من از نگارش این نوشته فقط تبیین اهمیت این مطالب بوده است و نه ارائه یک سری تعریف کلاسیک :

  1. Feature های داخل هر اسپرینت زمانی که توسط یک نفر از اعضای تیم برای پیاده سازی انتخاب می شوند باید به صورت Incremental کار بشوند. یعنی اینکه باید تمام شود یعنی ویژگی های Done شدن را پیدا کند و کنار گذاشته شود و نه اینکه چند روزی کار شود بعد Stand-By و کار بروی ویژگی دیگر و بعد سوییچ به ویژگی قبلی و چند روزی دوباره کار و بعد دوباره Stand-By . برنامه نویس باید وظایف خود را در قبال ویژگی تمام کند و بلافاصله تست های لازم بر روی ویژگی باید انجام شود و خلاصه هر کاری که لازم است که این ویژگی Done شود باید پی در پی و بدون وقفه انجام شود تا سنت حسنه Incremental به جا آورده شود .
  2. اسپرینت ها روح اسکرام هستند . ما Iterative کار می کنیم تا یاد بگیریم و نه اینکه زود به زود یک سری ویژگی به درد نخور تحویل مشتری بدهیم. ما برآیند یک اسپرینت را تحویل مشتری می دهیم و همراه مشتری اسپرینت و برآیند اسپرینت را بازبینی می کنیم تا یاد بگیریم. یاد می گیریم که چگونه یک محصول با ارزش برای مشتری ارائه بدهیم . Mike Cohn یک اصلاح با ارزش دارد :  Get Feedback , Learn and Adapt .

Incremental کار می کنیم که بتوانیم یک سری ویژگی های محصول را به صورت کامل (Done شده) در آخر اسپرینت برای بازبینی به مشتری ارائه بدهیم . Iterative کار می کنیم که بتوانیم  بازخوردهای مشتری را دریافت کنیم (Get Feedback) ودر مورد محصول بیشتر یاد بگیریم (Learn) {منظور از یادگیری این است که محصول چگونه باید  توسعه داده شود که برای مشتری هایمان با ارزش باشد }  و یادگیری هایمان را در Design اسپرینت های بعدی به کار می گیریم (Adapt) .

به امید توسعه محصولات نرم افزاری با ارزش

اسد صفری

درباره اسد صفری

اسد صفری – مربی تحول چابک سازمان و تیم های نرم افزاری. مدارک حرفه ای: CSP - CSM - PSM - PSPO - CDA - Management 3.0 برخی تجربیات: رئیس دفتر تحول چابک شرکت داده ورزی سداد(بیشتر از ده تیم نرم افزاری) - مربی چابک شرکت رامند (تیم های موبایل و گیم سازی) - مدیر تولید نرم افزار SimplyDesk برای شرکت فرانسوی PCI - مربی مشاور شرکت های:خدمات انفورماتیک، ارکید فارمد، فراداده، الفبا برخی از سوابق مشاوره کوتاه مدت و تدریس : علی بابا، فناپ، تجارت الکترونیک پارسیان، بیمه سامان، مهندسین مشاور تجارت (بانک تجارت)، بیمه ایران، پارس آنلاین، شرکت رهنما، ورانگر، انتشارات پزشکی کوثر، فولا آلیاژی یزد، پارک علم فناوری کردستان و ... . عضو انجمن های بین المللی Agile Alliance - Scrum Alliance

23 دیدگاه در “Incremental یا Iterative

  1. بسیار خوب توضیح دادید؛ مطالبی که در وبلاگتان منتشر میکنید مرا راغب کرد تا در پروژه بعدی این فریم ورک را پیاده سازی نمایم.

    1. حتما، سعی کنید استفاده کنید
      ولی دانش کم در این چارچوب می تونه برعکس جواب بده که بعدا یه نوشته ای در این باره خواهم نوشت

      در هر حال امیدوارم موفق باشید

  2. خیلی خوب توضیح دادین، واقعا استفاده کردم، ممنون 🙂
    در مورد TFS هم توضیح بدین ممنون میشم

  3. عاااااااااالی بود! تازه فهمیدم چی شده! ترم پیش مهندسی نرم افزار داشتم الان فهمیدم هیچی نفهمیده بودم!

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

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

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.