توسعهی چابک یا Agile یک رویکرد تحویل نرمافزار مبتنی بر تکرار و با زمان محدود است. در این رویکرد، بهجای تلاش برای تحویل همهی نرمافزار بهصورت یکجا، پروژه از شروع آن بهصورت تدریجی ساخته میشود.
چرا چابک؟
تکنولوژی در عصر ما سریعتر از همیشه در حال پیشرفت است. همین مسئله شرکتهای نرمافزاری را وادار به کار در محیطهایی کرده است که بهسرعت تغییر میکنند. یعنی این شرکتها در محیطهای همیشه در حال تغییر کار میکنند. بنابراین جمعآوری مجموعهی همهی نیازمندیهای پروژههای نرمافزاری بهصورت کامل و جامع غیرممکن است. بدون این مجموعه نیازمندیها، کار کردن برای اکثر مدلهای مرسوم تولید نرمافزار، عملاً سخت میشود. مدلهای مرسوم تولید نرمافزار مانند مدل آبشاری، کاملاً به مشخص کردن نیازمندیها، طراحی و تست سیستم نیازمند هستند. این مدلها برای توسعهی سریع نرمافزار مناسب نیستند. درنتیجه، یک مدل مرسوم توسعهی نرمافزار، در شرایطی که گفتیم؛ در ارائهی محصول موردنیاز شکست میخورد.
اینجا، جایی است که مدل توسعهی چابک نرمافزار به کمک میآید. این مدل، بهطور خاص برای رفع نیازهای محیطهای تغییر کننده با سرعت زیاد طراحیشده است. به این صورت که توسعهی افزایشی را ملاک قرار میدهد و با این هدف شروع به توسعهی محصول نهایی واقعی میکند.
حالا میخواهیم چیزهایی که پایههای مدل چابک روی آنها بناشده را بررسی کنیم.
اصول و قوانین:
- بالاترین اولویت رضایت مشتری است. این رضایتمندی از طریق تحویل زود و پیوستهی نرمافزار باکیفیت تأمین میشود.
- این مدل توسعهی نرمافزار از تغییر نیازمندیها استقبال میکند. حتی اگر تغییرات در اواخر توسعهی نرمافزار اتفاق بیفتد.
- نرمافزار بهصورت پشت سرهم تحویل داده میشود. در بازههای زمانی یکی دو هفته تا یکی دو ماه، و ترجیحاً در کوتاهترین بازههای زمانی ممکن این کار صورت میگیرد.
- پروژهها در مدل توسعهی چابک نرمافزار باید توسط افراد باانگیزه انجام شود. باید محیط مناسب را برای آنها فراهم کرده و از آنها حمایت کنید. نیازهایشان را برطرف کرده و به آنها اعتماد کنید. به این صورت کارها طبق این مدل پیادهسازی خواهند شد.
- اولین مبنای اندازهگیری و سنجش میزان پیشرفت کار، نرمافزاری است که بهدرستی کار کند.
- سادهسازی؛ هنری که باعث به حداکثر رساندن میزان کار انجامشده میشود؛ یک نیاز ضروری است.
- مؤثرترین و کارآمدترین روشِ انتقال اطلاعات به تیم توسعه، گفتگوی چهره به چهره یا Face-to-Face است.
توسعه در مدل چابک:
میخواهیم بر چگونگی روند توسعه در فلسفهی مدل توسعهی چابک نرمافزار، یک نگاه مختصر داشته باشیم.
- در توسعهی چابک، طراحی و پیادهسازی، فعالیتهای اصلیِ فرآیند توسعهی نرمافزار در نظر گرفته میشوند.
- همچنین فاز طراحی و پیادهسازی، فعالیتهایی مثل استخراج نیازمندیها و مرحلهی تست را باهم ترکیب میکند.
- در رویکرد توسعهی چابک، فعالیتها دائماً تکرار میشوند. بنابراین، نیازمندیها و طراحی بهجای اینکه جداگانه انجام شوند؛ باهم توسعه مییابند.
- تخصیص نیازمندیها و برنامهریزی طراحی و توسعه اجرایی، بهصورت افزایشی انجام میشود. برخلاف مدلهای مرسوم، مدل توسعهی چابک نرمافزار از انعطافپذیری بالایی برخوردار است. زیرا، در مدلهای مرسوم، ابتدا باید نیازمندیهایی که باید انجام شوند؛ جمعآوری و مشخص شوند. بعد از مشخص شدن نیازمندیها، فاز طراحی و توسعه میتوانند شروع شوند. اما در مدل چابک اینطور نیست.
- یک فرآیند چابک بهجای مستندات و توضیحات کدهای برنامه؛ بیشتر روی توسعهی کدهای برنامه تمرکز دارد.
مثال
برای فهم بهتر در مورد اینکه مدل توسعهی چابک نرمافزار چطور کار میکند؛ یک مثال میزنیم.
یک شرکت نرمافزاری بانام ABC میخواهد یک مرورگر وب برای آخرین نسخهی سیستمعامل خودش بسازد. مهلت انجام این پروژه 10 ماه است. مدیران شرکت برای این پروژه، دو تیم بانامهای تیم A و تیم B را اختصاص دادهاند. برای ایجاد انگیزه در اعضای تیمها، مدیریت شرکت برای تیمی که زودتر از تیم دیگر پروژه را انجام دهد پاداش در نظر گرفته است. این پاداش شامل افزایش حقوق و یک هفته مرخصی شامل برنامهی مسافرت با تأمین هزینههای آن است. با رؤیای یک سفر بسیار لذتبخش، دو تیم برای ساختن مرورگر وب شروع به کارکردند. تیم A تصمیم گرفت تا کاملاً بر اساس اصول و قوانین عمل کنند. بنابراین مدل توسعهی آبشاری را برای انجام پروژه انتخاب کردند. تیم B بعد از یک گفتگوی طولانی تصمیم گرفت تا ریسک کنند و مدل توسعهی چابک نرمافزار را انتخاب کردند.
برنامهی توسعهی تیم A بهصورت زیر بود:
- جمعآوری و تحلیل نیازمندیها – 1 ماه و نیم
- طراحی سیستم – 2 ماه
- فاز کد نویسی و توسعه – 4 ماه
- یکپارچهسازی سیستم و تست – 2 ماه
- تست پذیرش کاربران – 5 هفته
برنامهی توسعهی تیم B بهصورت زیر بود:
- از آنجایی که مدل چابک را انتخاب کرده بودند؛ پروژه به چند مرحلهی تکرار شکسته شد.
- این مراحل تکرار، همه به یک مقدار زمان نیاز دارند.
- در پایان هر مرحلهی تکرار، یک محصول باید تحویل داده شود. این محصول باید بهدرستی کار کند و نسبت به محصول قبلی امکانات جدیدتری به آن اضافهشده باشد.
- بهجای اینکه به مدت 1 ماه و نیم، به جمعآوری نیازمندیها بپردازند؛ تصمیم دیگری گرفتند. آنها تصمیم گرفتند تا ویژگیهای اصلی موردنیاز محصول را که میتوانند برای مرحلهی اول تکرارها توسعه دهند را انتخاب کرده و کار را آغاز کنند.
- هر ویژگی دیگری که در مرحلهی اول تکرارها قابل تحویل نبود را در مراحل تکرار بعدی بر اساس اولویت آنها انجام خواهند داد.
- در پایان اولین مرحلهی تکرار، تیم یک نرمافزار را که بهدرستی کار میکند تحویل میدهد. نرمافزار در این مرحله فقط دارای امکانات پایهای و اساسی است.
شروع به کار تیمها
هر دو تیم تمام تلاش خودشان را میکنند تا محصول را به مرحلهی کامل شدن برسانند. اما ناگهان، به دلیل تغییرات سریع محیطهای کاری که در ابتدای مقاله توضیح دادیم؛ اتفاق پیشبینینشدهای رخ داد. مدیران شرکت بهصورت کامل، مجموعهای از ویژگیهای جدیدی برای پیادهسازی ارائه کردند. همچنین آنها خواستند تا جایی که ممکن است سریعتر این کار انجام شود و یک مدل قابلاجرا از پروژه را ظرف مدت 2 روز آماده کنند.
برخورد تیم A با این مشکل
تیم A در این زمان هنوز در مرحلهی طراحی بودند و هنوز کد نویسی پروژه را شروع نکرده بودند. بنابراین هیچ مدل قابلاجرایی از برنامه برای نمایش به مدیران نداشتند. همچنین اضافه کردن ویژگیهای جدید به پروژه، عملاً برای آنها غیرممکن است. زیرا در مدل آبشاری هیچ جایی برای برگشت به فازهای قبلی وجود ندارد. یعنی تیم A باید مراحل را دوباره از اول شروع کنند. این کار باعث میشود که آنها هزینهی سنگین و اضافهکاری بسیاری را متحمل شوند.
برخورد تیم B با این مشکل
تیم B به لطف انتخاب مدل توسعهی چابک نرمافزار، در جنبههای زیادی از تیم A جلوتر بود. همچنین آنها از اولین مرحله، یک برنامهی قابلاجرا ساخته بودند که فقط یک سری از ویژگیهای پایهای را دارا بود. درنتیجه اضافه کردن لیست جدید نیازمندیهای موردنظر مدیران شرکت، برای آنها بهراحتی قابل انجام بود. تنها کاری که آنها باید انجام میدادند این بود که این نیازمندیهای جدید را برای توسعه، در مرحلهی افزایشی بعدی زمانبندی کنند.
این مثال بهخوبی نحوهی انجام پروژه و برخورد با تغییرات را در مدل توسعهی چابک نرمافزار نشان میدهد.
مزایای مدل توسعهی چابک نرمافزار:
- پیادهسازی نرمافزار سریعتر انجام میشود. بنابراین، همین امر به جلب اعتماد مشتری کمک میکند.
- میتوان خیلی بهتر با تغییرات نیازمندیها سازگار شد و سریعتر به آنها پاسخ داد.
- به دریافت بازخورد سریع کمک میکند. همین بازخورد را میتوان برای بهبود نرمافزار در مراحل افزایشی بعدی به کار گرفت.
- افراد مهمتر از فرآیند هستند. افراد و تعاملات از فرآیندها و ابزار اولویت بالاتری دارند.
- توجه مداوم بر برتریهای فنی و طراحی خوب در این مدل وجود دارد.
معایب مدل توسعهی چابک نرمافزار:
- در پروژههای نرمافزاری بزرگ، ارزیابی میزان تلاش موردنیاز برای انجام پروژه در مراحل اولیهی چرخهی حیات توسعهی نرمافزار مشکل است.
- در مدل توسعهی چابک نرمافزار، بیشتر تمرکز روی کد نرمافزار است و مستندسازی و توضیح نویسی روی کدها کمتر انجام میشود.
- مدل توسعهی چابک بهشدت به ورودیهای مشتری وابسته است. اگر مشتری در چشماندازی که از نتیجهی نهایی ارائه میدهد؛ ابهام دار صحبت کند؛ احتمال خارج شدن پروژه از مسیر درست بسیار زیاد میشود.
- برقراری ارتباط چهره به چهره در سازمانهایی در مقیاسهای بزرگ سختتر است.
- فقط برنامه نویسان ارشد (Senior Programmers) توانایی تصمیمگیری در مرحلهی توسعه را دارند. ازاینرو برای برنامه نویسان جدید، سازگاری با این محیط بسیار سخت است.
مدل توسعهی چابک نرمافزار یک چارچوب است که چگونگی انجام توسعهی نرمافزار را تعریف میکند. مدل چابک فقط یک روش نیست. این مدل مجموعهی مختلفی از روشها را ارائه میکند و توصیه میکند که دستورات باارزشِ ارائهشده در برنامه را دنبال کنید. روش چابک توانایی حل تمام مشکلات در موجود در صنعت تولید نرمافزار را ندارد (درواقع هیچ مدل توسعهی نرمافزاری این توانایی را ندارد). اما این مدل مطمئناً به ایجاد فرهنگ کاری و بنا کردن یک محیط کاری کمک میکند. فرهنگ کاری و محیطی که به دنبال پیدا کردن راهحل برای مشکلات احتمالی است.