- برنامه نویسی - توسعه نرم افزار
: 20210823 : 894

توسعه نرم افزار


  1. توسعه تکرار شونده و افزایشی

توسعه تکرار شونده و افزایشی

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

 

 

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

مدل افزایشی (Incremental model)
در مدل‌های مبتنی بر توسعه آبشاری ضروری است قبل از طراحی نرم‌افزار مجموعه نیازهای مشتریان مشخص شود. در چنین شرایطی برنامه‌نویسان باید از استراتژی‌های ویژه‌ای پیش از آغاز به‌کار طراحی نرم‌افزار استفاده کنند. در مدل‌های آبشاری‌محور هر زمان تغییری در نیازها رخ می‌دهد، برنامه‌نویسان مجبور هستند یک‌بار دیگر فرآیند‌های مربوط به نیازها، طراحی‌ها و پیاده‌سازی‌ها را مورد بررسی قرار دهند. در این‌گونه مدل‌ها رویکردهای جداسازی طراحی و پیاده‌سازی باید به‌خوبی مستندسازی شده باشند تا هرگونه تغییر احتمالی برای سیستم شفاف و روشن باشد. اما همان‌گونه که ممکن است حدس زده باشید، مدل آبشاری به‌شدت منقبض است و همین بسته بودن، خیلی زود عملکرد ضعیف و کاستی‌های آن را نشان داد. این ضعف‌ها به اندازه‌ای مشهود بودند که کارشناسان در خلال دهه‌های 70 و 80 میلادی به‌‌فکر افتادند تا جایگزین مناسبی برای این مدل ارائه کنند. در مدت زمان طراحی یک محصول همواره این احتمال وجود دارد که نیازهای جدیدی شناسایی شوند که باید در یک محصول قرار گیرند. اما این دیدگاه به‌طور کامل متفاوت از استراتژی‌ است که مدل آبشاری بر پایه آن کار می‌کند. برای حل این مشکل متدولوژی تکاملی و افزایشی ارائه شد که به توسعه‌دهندگان نرم‌افزار اجازه می‌داد تا الزامات و تصمیم‌گیری‌های مرتبط با طراحی را با کمی تاخیر به مرحله اجرا در آورند. شکل یک متدولوژی توسعه افزایشی را نشان می‌دهد.

شکل1

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

شکل2

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

شکل3

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

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

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

توسعه مبتنی بر تکرارشوندگی و افزایشی (Iterative and incremental development)
طراحی تکرارشونده (Iterative design)، یک متدولوژی طراحی بر مبنای یک فرآیند دوره‌ای از نمونه‌سازی، آزمایش، تحلیل و ویرایش یک محصول یا حتی یک پردازش است. در این روش بر مبنای نتایج به‌دست آمده از آزمایش‌هایی که به‌‌صورت تکرارشونده و مرتب انجام می‌شوند، یک‌سری تغییرات و اصلاحات پیاده‌سازی می‌شود. این فرآیند در نهایت هدفش بهبود کیفیت و قابلیت طراحی است. نخستین مرحله در فرآیند طراحی تکرار شونده طراحی یک نمونه اولیه است. نمونه اولیه باید توسط یک گروه متمرکز یا گروهی که به محصول وابسته نیستند و عقایدشان مغرضانه نیست مورد بررسی قرار گیرد. اطلاعاتی که از این گروه به‌‌‌دست می‌آید جمع‌بندی شده و در مرحله بعدی ساخت محصول مورد استفاده قرار گیرد. این روند تا زمانی تکرار پیدا می‌کند که نیازهای کاربر را پوشش دهد.

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

تعداد دقیق و ماهیت مدل‌های افزایشی ساخته شده و این که چه چیزی تکرار می‌شود برای هر مدل خاص بوده و بر مبنای پروژه هدف مشخص می‌شود. توسعه افزایشی و تکرارشونده یکی از ارکان مهم موجود در مدل‌های آبشاری اصلاح شده، فرآیند یکپارچه، برنامه‌نویسی مفرط و در حالت کلی در چارچوب‌های مختلف توسعه نرم‌افزاری چابک است. این مدل عملکردی شبیه به چرخه PDCA (سرنام plan-do-check-act) در بهبود فرآیند تجاری دارد. یک روش مدیریتی تکرارشونده چهار مرحله‌ای که در دنیای تجارت مورد استفاده قرار می‌گیرد. این روش به‌منظور کنترل، پیوستگی، بهبود فرآیندها و پروسه‌ها مورد استفاده قرار می‌گیرد. ایده اصلی که در بطن این روش وجود دارد، طراحی یک سیستم بر مبنای چرخه‌های تکرارشونده و در برش‌های کوچک زمانی است.

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

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

در این فهرست ویژگی‌های جدیدی که باید پیاده‌سازی شوند، همراه با بخش‌هایی از راه‌حل که نیازمند بازبینی هستند قرار می‌گیرد. فهرست کنترل پروژه برآیند فاز تجزیه و تحلیل است که به‌طور مداوم مورد بازبینی و تجدید نظر قرار می‌گیرد.
در فرآیند تکرارشونده، تکرار به‌‌معنای بازطراحی و پیاده‌سازی ساده، سرراست و پشتیبانی از طراحی مجددی است که یک وظیفه را به فهرست کنترل پروژه اضافه می‌کند. در این مدل سطح جزییات به‌صورت ایستا و ثابت نیستند. به‌طور مثال، در یک پروژه تکرارشونده ساده کدها ممکن است منبع اصلی مستندات سیستم باشند، در حالی که در یک پروژه تکرارشونده دیگر، ممکن است به مستندات طراحی نرم‌افزار (Software Design Document) نیاز باشد. (SDD توصیفی از یک محصول نرم‌افزاری است. این توصیف نرم‌افزاری به طور معمول از سوی یک برنامه‌نویس آماده شده و معماری پروژه نرم‌افزاری را تشریح می‌کند. این توصیف به تیم توسعه‌دهنده نرم‌افزار کمک می‌کند درک درستی از پروژه داشته باشند.) فهرست کنترل پروژه با استفاده از نتایجی که از تحلیل‌ها به‌دست می‌آید ویرایش می‌شود. این مدل شامل چهار فاز زیر است:
فاز Inception: شناسایی محدوده پروژه، الزامات و ریسک‌هایی که در سطح بالاتر وجود دارد را مورد بررسی قرار می‌دهد. جزییاتی که در این فاز قرار دارند به‌شکلی خواهند بود که بتوان کار را بر مبنای آن‌ها آغاز کرد.
فاز Elaboration: به‌بیان یک معماری کاربردی می‌پردازد که سعی می‌کند ریسک‌هایی که در فاز آغازین شناسایی شده‌اند را کاهش ‌دهد.
فاز Construction : ساخت افزایشی بر اساس فازهایی که پیش‌تر به آن اشاره کردیم فرآیند طراحی محصول را کامل می‌کند.
فاز Transition : در این فاز سیستم وارد محیط عملیاتی می‌شود.
از جمله مزایای این مدل به موارد زیر می‌توان اشاره کرد:
• همواره یک نسخه در حال اجرا از برنامه کاربردی وجود دارد.
• اگر زمان کافی وجود نداشته باشد، این امکان وجود دارد تا آخرین نسخه‌ای که ساخته شده است به مشتری تحویل داده شود. البته ممکن است همه قابلیت‌ها در این نسخه وجود نداشته باشد اما به هر حال قادر است بعضی از وظایف را انجام دهد.
• این شانس را دارید تا منبع آخرین خطاهای به‌وجود آمده را به‌راحتی شناسایی کنید. به‌سبب آن‌که اطلاع دارید به‌تازگی چه کدهایی را در فرآیند تکرار اضافه کرده‌اید که همین موضوع سرعت اشکال‌زدایی را به‌طرز محسوسی افزایش می‌دهد.
• همواره این شانس را دارید تا بازخوردهای مثبتی را در مدت زمانی که برنامه در حال اجرا بوده است به‌دست آورید.
• به‌دلیل این‌که ویرایش‌هایی در اوایل توسعه انجام شده است، زمان کمتری برای فرآیند توسعه سپری خواهد شد.
یکی از بزرگ‌ترین معایبی که در ارتباط با مدل‌های تکرارشونده وجود دارد این است که ممکن است شما را وسوسه کنند تا کدنویسی را به‌سرعت آغاز کنید. اما همواره باید به این نکته توجه داشته باشید که پیش از آن‌که کار خود را آغاز کنید باید یک ایده خوب از برنامه‌ای که در نهایت ساخته خواهد شد، در اختیار داشته باشید. باید دقیقاً بدانید به‌دنبال چه چیزی هستید.

 

 

 


           

2000-2016 CMS Fadak. ||| Version : 4.2-b2 ||| This page was produced in : 0.001 Seconds