a pirate who believes in digital freedom :) #آزادی دیجیتال ---> بلاگ من : https://sadeqnickbakht.ir
آموزش اسکرام - Scrum
این پست در واقع هم آموشی هم معرفیه و دونستنش خیلی بدرد بخوره و این پست شامل قسمت های زیر میشه :
- درک اسکرام
- آموزش اسکرام (اسپرینت پلنینگ ، پروداکت بک لاگ و …)
- طریقه نوشتن یوزر استوری
- ابزار ها
اسکرام چیه اصن درمورد چی دارم صحبت میکنم ؟
داریم درمورد یکی از روش های توسعه نرم افزار حرف میزنیم. توی مهندسی نرم افزار ما یه دید کلی از نرم افزار داریم که بهش به اختصار میگیم DDM ! یعنی :
- Definition :
- تو این بخش مهندسای نرم افزار تاکید دارن بر اینکه چه اطلاعاتی از نرم افزار باید در بیارن و یا چه ملاک هایی برای یه نرم افزار موفق وجود داره و کلا باید از همون اول نرم افزاری که داریم طراحی میکنن رو برای خودمون یه تعریفی ازش درست میکنیم.
- Development:
- تو این قسمت تاکید بر چگونگیه انجام کار فنی هست.جزییات چجوری باید پیاده سازی بشن یا از چه فرم ورکی استفاده کنیم بهتره و همین چیزای فنی!
- Maintenance:
- تو این بخش تاکید به نگهداری نرم افزاره . یعنی همون اپدیت ها یه نرم افزار از اول کامل نیست و باید با اپدیت های مداوم اونو کاملش کنیم اینکه بشینیم از اول یه نرم افزار کاملا کاملی و پرفکت !بسازیم نیس ازین خبرا نیس منظورمه ?
حالا واسه توسعه نرم افزار یه سری روش ها ساخته شدن تا این کار توسعه رو بهش یه نظم بدن که سر موعد مقرر پروژه به اتمام برسه و برسوننش دست مشتری. قدیما این روشا نه تنها کارو سخت تر میکرد بلکه باعث نا هماهنگی تو سیستمم میشد !! قدیما منظورم همین ۱۰ سال پیشه ?
مشکلاتی که اغلب این روشا داشتن این بود که transparency یا شفاش سازی تو کارشون نبود و مثلا منه مشتری باید ۱۰ ماه صبر میکردم تا اخر یه پروژه به من بدن اونم تازه معلوم نبود! یا منه مشتری از کارشون که دارن اصن چکار میکنن هیچ ایده ای نداشتم و این حس بی اعتمادی ادم رو بیشتر میکنه. مشکل بعدی این بود که تیم فنی یه زبون مخصوص به خودشون دارن ! و مشتری هم زبون خودشو داره (مثلا مشتری میگه حاجی من یه سایت خیلی نایس میخوام قیمتو چن میدی بمون! یه همچین جوری صحبت میکنن:)))))) )
خب قاعدتا منه فنی اصلا با این زبون مشتری آشنا نیستم و اصن نمیتونم حتی نیاز هاشو احساس کنم که براش بخوام تامینشون کنم!
یا یه مشکل دیگه مثلا توی مدل waterfall یا آبشاری توی مهندسی نرم افزار وجود داشت که مثل ابشار بود دیگه اگه از یه مرحله توسعه رد میشدیم دیگه نمیتونستیم برگردیم و باگ مرحله قبل رو رفع کنیم و همینجوری باید میرفتیم تا اخر کار که شاید توی اپدیتی چیزی درسش کنیم و کلی دردسر دیگه !
یه مشکل خیلی مهم تر اینکه کار رو نمیشد با این روش های بیخود زیاد تیکه تیکه کرد و هر تیکه رو سپرد به یه نفر از تیم که این خودش باعث میشد کلی بدبختی بوجود بیاره و و و …
روش های خوبی هم اومد مثل مدل incremental یا افزایشی که میومد توسعه نرم افزار رو به بخش هایی مثل آنالیز و دیزاین و کد و تست تقسیم میکرد و توی هر استپ میگفت باید یه نمونه درست شه و بدست مشتری برسه . این روش افزایشی یا incremental بود
یه روش دیگه بعدش اومد prototype یا مدل نمونه سازی بود که خوبیه این روش فقط چرخشی بودن استپ هاش بود و همینجوری میشد هی تکرار کرد و تکرارش کرد روش هارو. که معروف بود به iterative !
حالا چرا این قصه هارو گفتم ؟ گفتم که بدونین دیگه :))) ولی خب واسه روش اسکرام نیاز بود یه مروری به گذشته روش های توسعه نرم افزار کنیم و ببینیم که توی اسکرام چقدر قضیه آسون شده .
خب حالا میریم سره اسکرام ! اسکرام چیه ؟
اسکرامم مثل همه این مدل هایی که گفتم هست. درواقع باگ های مدل های پیشین رو حل کرده و کار رو خوب میشه هندل کرد باهاش و برد جلو که نه به تیم فشار بیاد نه به …. نمیدونم ?
اسکرام در واقع یه framework هست ( نه اوون فریمورک های برنامه نویسی اینا اشتباه نکنید) یعنی یه چارچوبه که یه سری قانون مقررات داره و توی این چارچوب باید کارو پیش ببرید .
اسکرام در اصل از متدولوژی Agile اومد و اگه میخواین بدونین اجایل چیه یه سرچی کنین متوجه میشن . ولی متدولوژی یعنی چی ؟متدولوژي یعنی طرز تفکر. الان که داریم راجبش توی فاز مهندسی صحبت میکنیم یعنی یه سری مایند ست ها یعنی طرز تفکر توسعه نرم افزار .
اصطلاح اسکرام از ورزش راگبی اومده که فک کنم مثلا وقتی توپ بیرون بیوفته یا خطا رخ بده بازی دوباره با حالتی با نام اسکرام شروع میشه که اصلا دونستنشم مهم نیست ! وفقط بدونین از ژاپن اومده و دوتا ژاپنی ابداعش کردن اول , برای توسعه سریع و فلکسیبل کردن برنامه پیشبرد پروژهاشون.
همونطور که گفتم اسکرام یه چارچوبه یه فریمورک هست که معروفه به iterative incremental ! یادتونه اون بالا در مورد یه سری روش قدیمی حرف زدم که گفتم یکیشون افزایشی بود و استپ استپ میرفت جلو و یکی دیگه مدل نمونه سازی بود که تکرار میکرد ؟
دقیقا اسکرام از ماهیت خوب این دو روش داره استفاده میکنه . یعنی شما نیازی ندارید همه چیز رو بدونین تا یه پروژه رو با تیمتون بخواین شروع کنین . فقط کافیه کار ها تیکه تیکه شن هر تیکه به یه نفر داده شه و از اینکه هرچی میرین جلوتر هی اطلاعاتتون کامل میشه و نرم افزار رو توسعه میدیدن یعنی هرچه تکرار بیشتر میشه شما هم اطلاعاتتون در خصوص توسعه نرم افزار افزایش پیدا میکنه (نمیگم مثلا دیگه هیچی ندونین میتونین پروژه رو با اسکرام ببرین جلو بلکه اگه مقدمات و نیاز هارو بدونین میتونین خیلی راحت با تیمتون یه پروژه استارت بزنین و برین جلو)
مثل نقاشی : مثلا میخواین نقاشی کنین و فقط اصول نقاشی رو بلدین ولی ازینکه چجوری مثلا باید خفن بکشین و تا اخر نقاشی چکار کنین یا اصلا فقط بلدین اسکچ بزنین دیگه بقیه چیزاشو نمیدونین . اسکرام میگه تیکه تیکه نقاشی کن و با این تکرار ها میتونی تا اخر پروژه چیزایی یاد بگیری مهم اینه که تیکه تیکه و خرد خرد برین جلو و اون بوم نقاشیتون رو تکمیل کنین !
خب مشکلات روش های قدیمی رو گفتم اگه یادتون باشه توی اسکرام ما دیگه اونا رو نداریم یعنی ما توی اسکرام ویژگی های خوبی داریم که به یه نتیجه خوب هم نزدیکمون میکنه این ویژگی ها اینان :
definition of done :
یعنی بین تیم فنی و مشتری به زبان مشترک دست پیدا میکنیم ( هم مشتری میفهمه ما چی میگیم مثلا گفتیم کار تمومه بدونه منظورمون این بخش از کد یا سایتش تمومه نه اینکه الان سایت رو ایر هست و رو سرور گذاشته شده و الان میتونه کار کنه ! و اینکه ما میتونیم زبان مشتری رو بفهمیم و اینکه نیاز هاشو شناسایی کنیم ) که باید طی جلساتی به تیم فنی و مشتری این اسکرام اموزش داده بشه و بحث بشه تا به یه زبان مشترک از مفاهیم ساده برسن و اینکه با نوشتن یوز استوری ها این کار رو ساده تر کنن در ادامه توضیح میدم یوزر استوری چیه .
transparency :
یا شفاف سازی که این امکان رو میده مشتری تو اخر هر مرحله یه دمو از کار رو ببینه و اینکه واسش توضیح داده میشه که توی این ماه مثلا این لیست از کار هارو داشتین انجام میدادین
یکی دیگه هم بود که الان یادم نیست ? اصن این سه خصوصیت معرفن به three amigos !
تیم اسکرامی کیا هستن توش و نقششون چیه ؟
اعضای تیمی که با اسکرام کار میکنن شامل :
product owner :
مالک محصول یا صاحب ایده که بعضی موقع ها میتونه سرمایه گذار هم باشه ولی به طور کلی این شخص صاحب ایده هست که مستقیما هم با سرمایگذار ها در ارتباطه.
scrum master :
اسکرام مسترم که مدیر تیم اسکرامی هست . جلساتی که دراینده بهتون میگم رو برگزار میکنه تیم رو مدیریت میکنه کار هارو الویت بندی میکنه تیکه تیکه میکنه و کلی نقش مهم در پیشبرد اهداف پروژه داره که بیشتر در ادامه صحبت میکنم راجبش.
development team یا Team Member :
تیم توسعه که فقط شامل برنامه نویس ها نمیشه شامل طراح گرافیکی یا انیماتور های تیم و طراح UI/UX یا حتی حسابدار ها یا QA و … میشن معمولا تا ۹ نفر میرسن.
مفاهیم
خب واسه اسکرام باید با مباحث زیر آشنا باشیم حتما :
product backlog
Sprint
Sprint backlog
Sprint Planning
Sprint Meeting
User Story
Sprint Retrospective
بخش های اصلی اسکرام اینا میشن که حالا نحوه اجراشون بعد از توضیح هر کدوم بهتون میگم .
از اول شروع میکنیم .
پروداکت بک لاگ یا pb یا Product backlog چیه ؟
یادتونه درمورد اضای تیم اسکرام گفتم ؟ گفتم یه صاحب ایده ای وجود داره یه سرمایه گذاری وجود داره یا اصن یه مشتری هست همین اول کار یه ایده ای داره. حالا باید واسه خواسته هاش یه بک لاگی یه سندی یه لیستی تهیه کنیم .معمولا پروداکت اونر (PO) با سرمایه گذار و یا مشتری یسری جلسات رو میزاره که این خواسته ها و نیاز هارو دربیاره (بیشتر یه جلسه ایی که اون میگه من این فیچر رو میخوام اونام میگن این یکی نمیشه برو بعدی :)))) ) و تو سر هم میزنن و یه بک لاگ از نیاز های مشتری در میاد که بهش میگیم product backlog!
اسپرینت چیه ؟
اسپرینت ها همان بازه های زمانی و فاز بندی کار میشه. کار رو به بازه های زمانی باید تقسیم کنیم و فاز بندی کنیم به اصطلاح ! یادتونه اون بالا گفتم تو روش افزایشی هر استپ که میرفت جلو در اخرش به مشتری یه نمونه تحویل میدادیم ؟ اینجا هم بعد از پایان هر اسپرینت یه دمو به مشتری داده میشه تا دلش خوش باشه که پروژش خوب داره میره جلو!
معمولا اسپرینت ها باید جوری برنامه ریزی شن که از دوباره کاری جلو گیری بشه و مثلا واسه پنل نخواید ۱۰ بار از اول اونو طراحی و اجرا کنید تا به نتیجه برسید ! بلکه از همون چرخش ها (iterative ) باید سیستم ها تکمیل شه که این قسمت بر میگرده به Sprint Planning که اسکرام مستر باید تسک ها رو بر اساس اولویت (priorty) بسنجه و ظرفیت تیمش رو در نظر بگیره (velocity ) بعد بیاد اسپرینت هارو برنامه ریزی کنه و تسک های سخت و آسون رو به افراد بده .
درمورد این قضیه باید بگم اسکرام مستر تسک هارو الویت بندی میکنه خیلی جاها این قضیه با حضور تیم فنی صورت میگیره و بهش از ۱ تا ۵ یا از ۱ تا ۱۰ و اینجوری به تسک ها امتیاز میدن . ۱ آسونه و ۱۰ خیلی سخته . بعد اسکرام مستر با شناختی که از افراد تیم داره این تسک ها رو بین اونا پخش میکنه و واسشون یه تایم پایان در نظر میگیره . مثلا میدونه من در هفته میتونم کلا ۴ امتیاز کار کنم در نتیجه میاد به من در همین حد تسک میده ?
اسپرینت های کاری از یک هفته تا سه هفته میتونن طول بکشن!
اینم از Sprint planning که طی یه سری جلسات با تیم و product owner مشخص میشه و بعد توی scrum board قرار میگیره اسکرام بورد هم همه باهاش کار کردیم ناخواسته و به سه قسمت to-do ,doing ,done تقسیم میشه و وظایف بر حسب استاتوسشون میره زیره هرکدوم.
اسپرینت بک لاگ یا SB یا Sprint Backlog چیه ؟
این هم مثل همون پروداکت بک لاگ هست. با این تفاوت که اسکرام مستر یه نگاه به پروداکت بک لاگ میکنه و هر فیچری رو که مشتری به زبون خودش گفته رو به زبون تیم فنی ترجمه میکنه!
و یه لیستی از کارهایی که طی اسپرینت ها باید انجام شه رو درست میکنه که بده به تیم فنی پس باید طوری نوشته شه که افراد فنی حالیشون بشه مشتری الان چی میخواد .
چطوری اینکارو میکنن ؟
با نوشتن User Story ها !
یوزر استوری چیه ؟
یوزر استوری user story همون فیچر ها و قابلیت هایی که مشتری ازمون خواسته رو میایم در یه قالبی مینویسیم این قالب نوشتن همیشه ثابته و مانند زیر باید باشه :
As a < type of user >, I want < some goal > so that < some reason >
مثلا باید بگیم من به عنوان کاربر(یه نقشی در سیستم) میخوام توی پست اخبار اپلیکیشن قابلیت اشتراک گذاری داشته باشم(some goal) تا بتونم اونو با دوستام به اشتراک بزارم (some reason)
اینارو از اسپرینت بک لاگ باید در بیاریم و بنویسم که معمولا رو استیکی نوت و هرکدوم رو روی کاغذی جدا مینویسیم . و همینجوری در مورد همه نقش ها با قابلیت ها در مورد سیستم مینویسم و بعد و پیاده سازیشون میکنیم.
Sprint Meeting یا میتینگ های اسپرینیت چیه ؟
یه سری جلسات سرپایی روزانه هست که اعضای تیم اسکرام دور میز جمع میشن و درمورد اینکه دیروز چه کار کردن و چه مشکلاتی دارن (ازنظر فنی) و باید چکار کنن امروز باهم حرف میزنن و از وظایف مشکلات اسکرام مستر رو و بقیه افراد تیم رو اگاه میکنن و معمولا ۱۵ دقیقه هم بیشتر طول نمیکشه !
Sprint Retrospective یا بازنگری اسپرینت چیه ؟
یه جلساتی برگزار میشه واسه تصمیم گیری و تحلیل روند اسپرینت های کاری که نقاط ضعف چیان و یا ابزار های مورد نیاز چیا باید باشن و اینجور چیزا . این جلسات بعد از پایان هر اسپرینت کاری برگزار میشه که بعدش دوباره اسپرینت جدید استارت میخوره .
تمام مطالبی که باید درمورد اسکرام یاد میگرفتید یاد گرفتید !
خیلی جاها دیدم که میگن اسکرام ماله استارت آپ هایه کوچیکه و Agile ماله استارت آپ های بزرگه!
این حرف اشتباهه و باید بگم الان توی خیلی شرکتای بزرگ مثل گوگل و مایکروسافت و … برای پیشبرد اهدافشون از اسکرام استفاده میکنن ?
ولی خب واسه اینکه سازمان یافته تر با اسکرام کار کنیم یه سری ابزار نیازه اونا چیان ؟
بهترین ابزاری که تا حالا واسه اسکرام دیدم :
Azure DevOps Microsoft :
که کاملا بر اساس اسکرام کار میکنه و قابلیت های خیلی خوبی هم بهتون میده .
دیگه چیاس ؟ مثلا میتونم به Trello یا Monday.com و Asana اشاره کنم ولی Trello بیشتر بدرد سیستم کاری بر حسب Agile (استایل kanban)میخوره و بقیه موارد هم برای بیشتر از یکنفر پولی هستن پس بهترینش همون Azure DevOps Microsoft هست.
خلاصه ای از چیزایی که گفته شد :
امیداورام این مطلب مفید بوده باشه و حتما با دوستاتون به اشتراک بزارینش !
مطلبی دیگر از این انتشارات
از تغییر نترس!
مطلبی دیگر از این انتشارات
واقعیت مجازی (VR) در آموزش
مطلبی دیگر از این انتشارات
دیوار و مهندسی معکوس!