هنر برنامه نویسی

چرا و چطور برنامه نویس خوبی باشیم ؟!

هنر برنامه نویسی

چرا و چطور برنامه نویس خوبی باشیم ؟!

۲ مطلب با موضوع «طراحی نرم افزار» ثبت شده است

مروری بر scrum

فهیم آیت | شنبه, ۳۰ ارديبهشت ۱۳۹۱، ۰۹:۵۹ ب.ظ | ۱ نظر

اسکرام چیست ؟

اسکرام (Scrum) یکی از محبوب ترین متدولوژی های افزایشی (Incremental) تولید نرم افزار چابک (agile) است.

تدوین گران  اسکرام تلاش کرده اند که متدولوژی تعریف کنند که تا حد امکان ، پروسه تولید نرم افزار را سریع و انعطاف پذیر کنند، به همین جهت نام اسکرام برگرفته از یک ورزش (نوعی راگبی) است 

اسکرام بر این تاکید دارد که بسیاری از جوانب مساله ، از قبل قابل پیش بینی نیستند و نیازمندی های زیادی ممکن است در طول تولید نرم افزار اضافه شوند یا تغییر کنند ، از این رو ، اسکرام یکی از بهترین متولوژی ها برای مسائلی است که یا جوانب مبهم زیادی دارند و یا به هر دلیلی برخی از جوانب آن قابل پیش بینی و تحلیل نیستند.

 

چرخه های اسکرام به گونه ای فاز بندی می شوند که در هر فاز بخشی از نیازمندی های شناخته شده ، تحلیل و پیاده سازی می شوند و تا پایان فاز ، این نیازمندی ها بدون تغییر باقی می مانند ، در هنگام شروع فاز بعدی ، نیازمندی ها مجددا قابل تحلیل و طراحی هستند. این فاز ها که sprint (در لغت به معنای باتمام سرعت دویدن) نامیده می شوند ، یکی از رکنی ترین مفاهیم اسکرام هستند که در ادامه توضیح داده خواهند شد.

 

بر خلاف متدولوژی های بر پایه RUP که بر مستند سازی کلیه اطلاعات تاکید ویژه ای دارند، این متدولوژی بر پایه تعاملات گروهی است و به افراد تیم ها اجازه می دهد که از مستنداتی مانند Class Diagram ، SequenceDiagram و امثالهم ، فقط در صورت نیاز استفاده کنند. به همین جهت هم از نکات مهم این است که کلیه افراد هر تیم ، در یک محل باشند و در ساعات مشترکی به کار بپردازند . از این رو مدل اسکرام برای تیم های بر پایه دور کاری اصلا مناسب نیست.

متد اسکرام تاکید ویژه ای بر جلسات مستمر و منظم دارد (مانند اکثر متدولوژی های agile) که در ادامه در این رابطه بیشتر صحبت می شود.

مفاهیم اساسی :

 

نقش های اصلی در اسکرام :

کارفرما (ProductOwner) : 

کارفرما یا صاحب محصول ، نماینده مشتری و کاربران سیستم است. کارفرما کسی (یا کسانی) هستند که نیازمندی های سیستم را تعریف می کنند ، نیازمندی ها را اولویت بندی می کنند و لیست قابلیت های سیستم را تعیین می کنند.

تیم تولید(Development Team) :

تیم تولید یک تیم 3 تا 9 نفره از افرادی با توانایی های مختلف است که تولید نرم افزار (تولید نرم افزار شامل تحلیل ، طراحی ، پیاده سازی ، تست ، بومی سازی ، مستند سازی و پشتیبانی فنی است) را بر عهده دارند.

استاد اسکرام (ScrumMaster) :

استاد اسکرام کسی است که وظیفه برطرف کردن موانع از سر راه تیم های تولید را بر عهده دارد، البته استاد اسکرام را نباید با مدیر یا رهبر تیم اشتباه گرفت. نقش وی اعمال کردن قوانین اسکرام است ، اینکه اجازه ندهد تمرکز تیم های تولید از اهدافی که در ابتدای هر sprint فاصله نگیرند.

 

UserStory ، Theme و Epic :

در این مطلب جداگانه بررسی شده اند.

لیست کارهای ناتمام (Backlog) :

لیست تمام نیازمندی های سطح بالا (یا روایات کاربرها) که بر اساس اولویت مرتب شده. این لیست ، سطح بالاترین دید از سیستم است که کلیه قابلیت های سطح بالای سیستم  در آن قابل مشاهده است.

مهم ترین ویژگی آیتم های موجود در Backlog ، اولویت آن و تخمین هزینه آن آیتم است.

 

اسپرینت (Sprint):

پیشتر توضیح داده شد که هر اسکرام از یک سری فاز به نام Sprint تشکیل شده. اسپرینت یک فاز تولید سیستم است که در یک قالب زمانی تعریف می شود ، یعنی در ابتدای هر اسپرینت مدت مورد نظر مشخص می شود که این مدت می تواند بین یک هفته تا یک ماه باشد.

در ابتدای هر اسپرینت وظایف (Tasks) مشخص می شوند و هر تیم ، بسته به وظایفی که بر عهده گرفته ، بخشی از سیستم را تکمیل می کند. در پایان مدت مقرر ، بخش های تکمیل شده به کارفرما ارائه می شود و کارهایی که ناتمام مانده به لیست کارهای ناتمام (Backlog) برگردانده می شود.

جلسات

جلسه برنامه ریزی اسپرینت (Sprint plannigng meeting) :

در آغاز هر اسپرینت ، جلسه ای با این نام برگزار می گردد که مهمترین هدف آن ، تعیین لیستی به نام لیست کارهای ناتمام اسپرینت (Spring backlog) است. این لیست ، همانگونه که از نامش پیداست ، لیستی از کارهایی (روایات کاربران) است که قرار است در یک اسپرینت انجام شود. همچنین در این جلسه تعیین می شود که طول این اسپرینت چقدر باشد (این مقدار باید بین یک هفته تا یک ماه باشد).  این جلسه از دو جلسه چهار ساعته تشکیل شده ، اولی جلسه ای با کارفرما است و چهار ساعت دوم که جلسه تیمی است ، جلسه ای است که خروجی آن لیست کارهای ناتمام اسپرینت است.

اسکرام روزانه (Daily Scrum):

در طول  sprint ، هر روز جلسه ای برگزار می گردد که به آن standup روزانه نیز گفته می شود. دلیل این نام نیز این است که از آنجا که قرار بر این است که این جلسه کوتاه و خلاصه برگذار شود ، معمولا به صورت ایستاده و در ابتدای روز کاری برگزار می شود. خصوصیات این جلسه از این قرار است :

  • طول جلسه محدود به 15 دقیقه است
  • ترجیحا جلسه همیشه در یک محل و سر ساعت خاصی برگزار می شود.
  • در طول هر جلسه ، هر یک از افراد تیم توضیح می دهند که روز قبل چه کردند ، امروز چه می کنند و چه مشکلاتی بر سر راهشان قرار دارد.

جلسه تمیز کردن لیست کارهای نا تمام (Backdlog Grooming) :

در این جلسات که تیم ها در مورد تخمین زمانی و هزینه کار ها صحبت می کنند و در صورت نیاز ، story های بزرگ را به story های کوچک تر می شکنند. تعداد این جلسات در طول دوره بسته به نظر اعضای تیم است ، اما هر یک از این جلسات نباید بیش از یک ساعت به طول انجامد.

 

جلسه اسکرام اسکرام ها !

این جسله تشکیل شده از نمایندگان هر تیم ( یک نفر از هر تیم)  که همان موضوعات اسکرام روزانه را با رویکرد تیمی بررسی می کنند. به این معنی که در این جلسه هر نمایند توضیح می دهد که تیمش چه کرده اند و در روز جاری انتظار دارند به کجا برسند. این جلسه هر روز بعد از اسکرام روزانه تشکیل می شود.

جلسات پایان اسپرینت : retrospective و print review

جلسه Sprint review جهت ارائه کارهای انجام شده در اسپرینت به کارفرما و کاربران است. در این جلسه چهار ساعته لیست کار های انجام شده به کارفرما ارائه می شود و بخش های قابل استفاده توسط کاربران ، به کاربران ارائه می گردد.

جلسه rerospective ، یک جلسه درون تیمی است که در آن افراد تیم ، به نقد و بررسی ایرادات و تکنیک های استفاده شده در اسپرینت اخیر می پردازند ، این جلسه نیز محدود به چهار ساعت بوده و این دو سوال اساسی باید پاسخ داده شود : چه نکات مثبتی در اسپرینت اخیر وجود داشت ، چه وجوهی از کار تیم می تواند بهبود یابد.

 

 

نتیجه گیری :

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

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

بر خلاف روش های سنتی ، در این روش اصرار خاصی بر مستند سازی اطلاعات وجود ندارد.

این روش برای outsource کردن پروژه ها و استفاده از متخصصینی که از راه دور در اجرای کار همکاری می کنند و به خصوص پروژه هایی که به صورت Community Develope پیاده سازی می شوند اصلا مناسب نبوده و کلا در فضای کاری دیگری مطرح می شوند.

این روش تاکید خاصی بر Self Organize بودن افراد و تیم ها دارد ، بگونه ای که تاکید شده ، حتی در جلسات برنامه ریزی اسپرینت ها که وظایف مشخص می شوند، هیچ وظیفه ای به کسی محول (Assign) نمی شود ، بلکه افراد با توجه به توانایی و سابقه ، خود وظایف را انتخاب می کنند.

برای مسائلی که تیم عملیاتی ، شناخت کاملی از مساله ندارند و یا بطور کلی این شناخت امکان پذیر نیست ، بازدهی روش های چابک (Agile) می تواند خیلی بهتر از روش های سنتی مانند RUP باشد. اما در مسائلی که به هر دلیل ، می توان از قبل تحلیلی کامل و جامع در مورد نیازمندی های سیستم انجام داد و طراحی سیستم بگونه ای باشد که به احتمال زیاد ، در طول پروژه تغییر کمی داشته باشد ، روش هایی نظیر RUP می توانند بازدهی بالاتری داشته باشند.

از آن رو که در متدولوژی اسکرام ، داشتن یک طراحی جامع با جزئیات کامل غیر ممکن است ( یا به دلیل هزینه زیاد غیر ممکن فرض می شود) ، تقسیم وظایف با دقت RUP انجام پذیر نیست. به عنوان مثال اینگونه نیست که از پیش یک طرح جامع و کامل از لایه کاربر سیستم موجود باشد که بتوان آنرا به تیم گرافیست سپرد و بدون نیاز به تعامل خاصی ، کار را در موعد مقرر تحویل گرفت. بنابر این بر خلاف RUP که می توان در آن بخوبی از افراد با توانایی محدود یا غیر حرفه ای به خوبی بهره برد، در اسکرام بهتر است که تیم ها از افراد باسابقه تر و ترجیحا چند بعدی ( مانند گرافیست هایی که دانش برنامه نویسی نیز دارند) بهره برد.

 

 

منابع :

http://www.scrumalliance.org/learn_about_scrum

http://www.scrum.org/

http://www.mountaingoatsoftware.com/topics/scrum

http://en.wikipedia.org/wiki/Scrum_(development)

 

  • فهیم آیت