فعالیتهای چارچوبی فرآیند تولید نرمافزار
به طور کلی فعالیتهای مرتبط با فرآیند تولید نرمافزار صرفنظر از اندازه، پیچیدگی پروژه و زمینهی کاربردی آن و مستقل از متدولوژی ساختیافته و شیءگرا به پنج فعالیت ارتباط، برنامهریزی، مدلسازی (تحلیل و طراحی)، ساخت (پیادهسازی و تست) و استقرار تقسیم میشود، به بیان دیگر فعالیتها در هر دو دستهی متدولوژی ساختیافته و شیءگرا همینها خواهند بود، اما کارهایی که در هر فعالیت در متدولوژی ساختیافته و شیءگرا انجام میشود شباهتها و تفاوتهایی خواهد داشت.
در ادامه فعالیتهای چارچوبی فرآیند تولید نرمافزار براساس متدولوژی ساختیافته بیان خواهد شد:
۱- ارتباطات (مهندسی نیازمندیهای مشتری یا مهندسی خواستههای مشتری)
فعالیت ارتباطات یا مهندسی نیازمندیهای مشتری نظامی است یکپارچه، شامل فرآیندها، روشها و ابزارها که منجر به تهیه لیست نیازمندیهای مشتری میگردد.
فرآیند تهیه لیست نیازمندیهای مشتری
هر پروژهی نرمافزاری، چه بزرگ و چه کوچک مراحلی را طی مینماید که در طی آن لیست نیازمندیهای مشتری تهیه میگردد. الگو و قالبی که چگونگی طی مراحل مختلف تهیه لیست نیازمندیهای مشتری را تعریف مینماید، اصطلاحاً فرآیند تهیه لیست نیازمندیهای مشتری نامیده میشود.
روشهای تهیه لیست نیازمندیهای مشتری
روشهای تشخیص برای تهیه لیست نیازمندیهای مشتری را «روشهای تهیه لیست نیازمندیهای مشتری» میگوییم، یکی از روشهای پرکاربرد روشی موسوم به «روش QFD» میباشد.
توجه: QFD سرواژه عبارت Quality Function Deployment و به معنی استقرار عملکرد کیفیت میباشد.
توجه: روش QFD جلوتر شرح داده خواهد شد.
ابزارهای تهیه لیست نیازمندیهای مشتری
ابزارهای تشخیص برای تهیه لیست نیازمندیهای مشتری را «ابزارهای تهیه لیست نیازمندیهای مشتری» میگوییم و به پنج شکل «گفتگو»، «مشاهده»، «پرسشنامه»، «مکانیزم نمونهسازی دورانداختنی» و «مکانیزم نمونهسازی تکاملی» میباشد.
توجه: مکانیزم نمونهسازی دورانداختنی و تکاملی جلوتر شرح داده میشود.
توجه: فعالیت ارتباطات از طریق ارتباط با مشتری توسط ارتباطگر و ابزارها و روشهای مطرح شده انجام میگردد.
مراحل فرآیند تهیه لیست نیازمندیهای مشتری
به طور کلی مراحل مرتبط با فرآیند تهیه لیست نیازمندیهای مشتری صرفنظر از اندازه، پیچیدگی پروژه و زمینهی کاربردی آن و مستقل از متدولوژی ساختیافته و شیءگرا به هفت مرحله شناخت اولیه نیازمندیها، شناخت بیشتر نیازمندیها، تشریح نیازمندیهای شناختهشده، مذاکره، تعیین مشخصات، اعتبارسنجی نیازمندیها و مدیریت نیازمندیها تقسیم میشود، به بیان دیگر مراحل در هر دو دستهی متدولوژی ساختیافته و شیءگرا همینها خواهند بود، اما کارهایی که در هر فعالیت در متدولوژی ساختیافته و شیءگرا انجام میشود شباهتها و تفاوتهایی خواهد داشت.
در ادامه مراحل فرآیند تهیه لیست نیازمندیهای مشتری بیان خواهد شد:
۱- درک (شناخت اولیه نیازمندیها)
در مرحله شناخت اولیه نیازمندیها، شناختی پایهای از نیازمندیهای مشتری انجام میگردد، که این شناخت اولیه مستلزم ارتباط و گپ و گفت اولیه سازنده و مشتری است.
۲- استخراج (شناخت بیشتر نیازمندیها)
در مرحله شناخت بیشتر نیازمندیها، شناختی بیشتر از نیازمندیهای مشتری انجام میگردد، که این شناخت بیشتر مستلزم ارتباط و گپ و گفت بیشتر سازنده و مشتری است.
توجه: توسط استفاده از روش QFD میتوان به شناخت خواستههایی از مشتری بپردازیم که برای مشتری ارزشمندتر است. QFD سه نوع خواسته را مشخص میکند:
خواستههای عادی: به خواستههایی که مشتری بیان میکند و انتظار هم دارد که سازنده این خواستهها را برآورده سازد، خواستههای عادی گفته میشود که در صورت برآوردهسازی این خواستهها توسط سازنده، مشتری راضی خواهد بود.
خواستههای مورد انتظار: به خواستههایی که مشتری بیان نمیکند ولی به صورت پیش فرض انتظار هم دارد که سازنده این خواستهها را برآورده سازد، خواستههای مورد انتظار گفته میشود که در صورت عدم برآوردهسازی این خواستهها توسط سازنده، مشتری ناراضی خواهد بود. مانند زمان پاسخ کوتاه در تعامل با نرمافزار توسط مشتری، یا سهولت در نصب نرمافزار.
خواستههای هیجانانگیز: به خواستههایی که مشتری بیان نمیکند و انتظار هم ندارد که سازنده این خواستهها را برآورده سازد، خواستههای هیجانانگیز گفته میشود که در صورت برآوردهسازی این خواستهها توسط سازنده، مشتری بسیار بسیار هیجانزده و راضی خواهد بود. مانند قابلیت چیدمان و آرایش صفحات برنامه به صورت دلخواه.
توجه: برآوردهسازی «خواستههای عادی» و «خواستههای مورد انتظار» از سوی سازنده اجباری و معیار سنجش مشتری است و برآوردهسازی «خواستههای هیجانانگیز» از سوی سازنده، اختیاری و معیار سنجش مشتری نیست ولی اگر از سوی سازنده این دسته از خواستهها برآورده گردد، مشتری هیجان زده خواهد شد. راز موفقیت «استیو جابز (Steve Jobs)» رهبر فقید کمپانی اپل برآوردهسازی «خواستههای هیجانانگیز» علاوه بر برآوردهسازی «خواستههای عادی» و «خواستههای مورد انتظار» بود. موفقیت یعنی توجه کردن به جزئیات. «استیو جابز»
۳- تشریح نیازمندیهای شناخته شده
در مرحله تشریح نیازمندیهای شناختهشده، نیازمندیهایی که در دو مرحله شناخت اولیه نیازمندیها و شناخت بیشتر نیازمندیها کشف شدهاند، با بیان ذکر جزئیات بیشتر، تشریح میشوند.
۴- مذاکره
در مرحله مذاکره، پس از آنکه نیازمندیهای شناختهشده، تشریح شدند، نوبت به مذاکره مجدد مابین سازنده و مشتری میرسد، تا توافقات لازم را بر سر نهاییشدن نیازمندیهای شناختهشده انجام دهند.
۵- تعیین مشخصات
پس از توافقات لازم بر سر نهاییشدن نیازمندیهای شناختهشده در مرحله مذاکره، در ادامه و در مرحله تعیین مشخصات، مشخصات سیستمی که باید ایجاد گردد، تحت عنوان لیست نیازمندیهای مشتری نوشته میشود. همچنین این لیست میتواند به صورت گرافیکی توسط نمودار مورد کاربرد یا use case diagram مدلسازی شود.
توجه: نمودار مورد کاربرد یا use case diagram مربوط به مفاهیم شیءگرایی است.
۶- اعتبارسنجی نیازمندیها
در اعتبارسنجی نیازمندیها، آنچه در مرحله تعیین مشخصات حاصل گردید، جهت کنترل نهایی، توسط سازنده و مشتری مورد بررسی نهایی قرار میگیرد و در صورت وجود اشکالات مربوط به ناسازگاری در نظرات سازنده و مشتری، سازگاری لازم صورت میگیرد.
۷- مدیریت نیازمندیها
نیازمندیهای مشتری، در طول چرخه حیات نرمافزار مدام تغییر میکند، شاید تنها چیزی که در دنیا ثابت است، تغییر باشد. بنابراین در مرحله مدیریت نیازمندیها، تغییراتی که در چرخه حیات نرمافزار حاصل میگردد تحت کنترل و مدیریت قرار میگیرد.
انواع نیازمندیها
۱- وظیفهمندی (Functional) (کارکردی، عملکردی)
نیازمندیهای وظیفهمندی، کمّی و قابل اندازهگیری هستند و در قالب قابلیتها، کارکردها، ویژگیها و سرویسهای سیستم در حال توسعه یا تولید محقق میگردند. به عبارت دیگر، نیازمندیهای کارکردی به بیان سرویسهایی که سیستم باید فراهم نماید، میپردازد. چگونگی واکنش سیستم در برابر ورودیهای خاص و چگونگی رفتار سیستم در شرایط خاص نیز توسط این نیازمندیها تعریف میشود.
مانند نیازمندیهای مربوط به محاسبهی فاکتوریل یک عدد و یا اجرای تابع فیبوناچی در یک نرمافزار و یا نیازمندیهای مربوط به یک نرمافزار حقوق و دستمزد.
توجه: نیازمندیهای وظیفهمندی، موسوم به نیازها یا «خواستههای عادی» است.
۲- غیروظیفهمندی (Non Functional) (غیرکارکردی، غیر عملکردی)
نیازمندیهای غیروظیفهمندی، نیازمندیهای کیفی و نه الزاماً قابل اندازهگیری هستند که به بیان کیفیت مورد انتظار از نیازمندیهای وظیفهمندی و همچنین محدودیتهایی نظیر محدودیتهای زمانی، مالی و استانداردها میپردازند. برخی از انواع نیازمندیهای غیروظیفهمندی عبارتند از:
قابلیت استفاده، سهولت یادگیری، قابلیت اعتماد، کارایی، زمان پاسخ، قابلیت پشتیبانی، قابلیت نگهداری، قابلیت حمل، بهرهوری، محدودیتهای طراحی، پیادهسازی و فیزیکی و همچنین نیازمندیهای واسط کاربردی.
مانند محاسبه تابع فاکتوریل توسط الگوریتم حلقه با مرتبه اجرایی خطی و یا توسط الگوریتم بازگشتی با مرتبه اجرایی خطی و مصرف زیاد حافظه به دلیل استفاده از استک در پی هر فراخوانی.
و یا مانند محاسبه تابع فیبوناچی توسط الگوریتم حلقه با مرتبه اجرایی خطی و یا توسط الگوریتم بازگشتی با مرتبه اجرایی نمایی زیاد و چاق و به تبع، کند و هم مصرف زیاد حافظه به دلیل استفاده از استک، در پی هر فراخوانی.
توجه: محصول نرمافزاری باید برآورده کننده نیازمندیهای هم وظیفهمندی و هم غیروظیفهمندی مشتری باشد. محصول نرمافزاری که نیازمندیهای وظیفهمندی را برآورده میکند، ولی برآورنده نیازمندیهای غیروظیفهمندی نباشد، معمولاً با نارضایتی مشتریان همراه میشود.
توجه : انتخاب نوع الگوریتم براساس شرایط، حائز اهمیت میباشد.
توجه: نیازمندیهای غیروظیفهمندی، موسوم به نیازمندیها یا «خواستههای مورد انتظار» است.
۲- برنامهریزی
برنامهریزی یعنی هنر حرکت از مبدأ موجود به مقصد مطلوب برای رسیدن به نتیجهای مطلوب براساس خواستههای مورد نیاز در یک زمان مشخص.
«هر تلاشی منجر به نتیجهای مطلوب نمیگردد، بلکه این تلاشی مطلوب است که منجر به نتیجهای مطلوب میگردد.»
لازمهی تلاش مطلوب، برنامهریزی است. برنامهریزی میتواند اجرای هر کار پیچیدهای را سادهتر سازد. هر کار مهندسی مستلزم برنامهریزی میباشد. مهندسی نرمافزار نیز مانند هر فعالیت مهندسی دیگری، نیازمند برنامهریزی است. فعالیت برنامهریزی، برنامهای را برای فعالیتهای مختلف بخشهای مختلف فرآیند تولید نرمافزار پایهریزی میکند. این فعالیت، وظیفههای فنی که باید هدایت شوند، ریسکهایی که محتمل میشوند (مانند عدم شناسایی برخی نیازمندیها، از دست دادن دادهها و مدیران)، منابع مورد نیاز، واحدهای کاری که باید ایجاد شوند و برنامه زمانبندی برای کارها را تشریح میکند. مدیریت، برنامهریزی را به مرحلهی اجرا میبرد.
۳- مدلسازی (تحلیل و طراحی)
یک مدل، ساده شده یک واقعیت است. ایجاد یک مدل برای سیستمهای نرمافزاری قبل از ساخت یا بازساخت آن، به اندازهی داشتن نقشه برای ساختن یک ساختمان ضروری و حیاتی است. بسیاری از شاخههای مهندسی، توصیف چگونگی محصولاتی که باید ساخته شوند را ترسیم میکنند و همچنین دقت زیادی میکنند که محصولاتشان طبق این مدلها و توصیفها ساخته شوند. مدلهای خوب و دقیق در برقراری یک ارتباط کامل بین افراد پروژه، نقش زیادی میتوانند داشته باشند. علت اصلی مدل کردن سیستمهای پیچیده این است که نمیتوان به یکباره کل سیستم را تجسم کرد و ممکن است سیستم دارای ابهامات بسیاری باشد. لذا برای رفع این ابهامات و نیز برای فهم کامل سیستم و یافتن و نمایش ارتباط بین قسمتهای مختلف آن، از مدلسازی استفاده میشود. فعالیت مدلسازی خود شامل دو مرحلهی مدل تحلیل و مدل طراحی میباشد. مدل تحلیل پس از فعالیت ارتباطات (جمعآوری نیازمندیها) و قبل از مدل طراحی انجام میشود، در واقع خروجی مدل تحلیل، ورودی مدل طراحی میباشد. شکل زیر گویای این مطلب میباشد:
مدل تحلیل
پس از جمعآوری لیست نیازمندیهای مشتری در فعالیت ارتباطات نوبت به مدل تحلیل (مدلسازی لیست نیازمندیهای مشتری) میرسد. مدلسازی که فعالیتی فنی به شمار میرود نیازمندیها را باید به گونهای مدل نماید که برای سازنده و مشتری قابل فهم باشد.
در مدل تحلیل به روش ساختیافته دو وجه مدل تحلیل داده و مدل تحلیل عملکرد وجود دارد. مدل تحلیل داده شامل تحلیل موجودیتها و تحلیل پرس و جوها میباشد. تحلیل موجودیتها توسط ابزار مدل ER و تحلیل پرس و جوها توسط ابزار حساب رابطهای مدل میشوند. مدل تحلیل عملکرد توسط ابزار DFD مدل میشود.
مدل طراحی
پس از مدل تحلیل، نوبت به مدل طراحی میرسد، مدل طراحی به روش ساختیافته شامل چهار بخش طراحیداده، طراحیمعماری، طراحیمؤلفه و طراحیواسط میباشد. طراحی داده بر دو بخش طراحی جدول و طراحی پرس و جو میباشد. طراحی جدول از بخش طراحی داده، تحلیل موجودیت (ERD) از مدل تحلیل را به عنوان ورودی دریافت کرده و توسط مدل رابطهای، طراحی جدول را انجام میدهد. طراحی پرس و جو از بخش طراحی داده، تحلیل پرس و جو از مدل تحلیل را به عنوان ورودی دریافت کرده و توسط جبر رابطهای، طراحی پرس و جو را انجام میدهد.
طراحی معماری، تحلیل عملکرد (DFD) از مدل تحلیل را به عنوان ورودی دریافت کرده و توسط یکی از سبکهای معماری (مانند فراخوانی و بازگشت)، طراحی معماری را انجام میدهد.
طراحی معماری یا معماری نرمافزار، ساختار کلی نرمافزار و شیوههای یکپارچگی یک سیستم را بیان میکند. به عبارت دیگر، ساختار سلسله مراتبی مولفههای برنامه (توابع یا پیمانهها)، شیوه تعامل مولفهها با یکدیگر و ساختمان دادههای مورد نیاز مولفهها را نشان میدهد. معماری نرمافزار یک مدل قابل درک از چگونگی سازماندهی سیستم است. در واقع نشانگر ساختمان دادهها و مؤلفههای برنامهای است که برای ساختن یک سیستم کامپیوتری لازم است. به طور دقیقتر معماری نرمافزار شامل دو سطح از طراحی میباشد یعنی طراحی داده و طراحی معماری. در واقع این ساختار مانند یک نقشه ساختمان، مبنای ساخت نرمافزار قرار میگیرد.
توجه: در طراحی معماری، اسکلت، ساختار و چیدمان کلی مولفههای (توابع) برنامه به این معنی که چه مولفهای (تابعی) چه مولفهای (تابعی) دیگر را صدا میزند، بدون ذکر جزئیات داخلی مولفهها (توابع) مشخص میگردد (ساختار درختی برنامه بدون ذکر جزئیات مولفهها (توابع)). مانند اسکلت یک ساختمان که گویای جایگاه مؤلفههای ساختمان است اما هنوز آجرچینی نشده است. (اسکلت یک ساختمان بدون آجرچینی).
توجه: به طراحی معماری، طراحی کلی نیز گفته میشود.
طراحی مؤلفه، طراحی معماری از همان فعالیت مدل طراحی را به عنوان ورودی دریافت کرده و طراحی مؤلفه را توسط ابزارهایی همچون شبه کد یا فلوچارت ایجاد میکند.
طراحی مولفه، فعالیت تبدیل طراحی معماری به نرمافزار است. در این مرحله، سطح انتزاع طراحی معماری به سطح انتزاع نرمافزار کاربردی نزدیک میگردد. طراحی در سطح مؤلفهها، نرمافزار را در سطحی از انتزاع تصویر میکند که به کد نزدیک است. طراحی مولفه، به عنوان نقشه راهی دقیق، و نزدیک به زبان پیادهسازی، در فعالیت پیادهسازی نرمافزار، منجر به صرفه جویی در زمان و هزینههای تولید میگردد. در طراحی مولفه، مهندس نرمافزار باید ساختمان دادهها، واسطها و الگوریتمها را با جزییات کافی به نمایش در آورد تا راهنمای تولید کد منبع زبان برنامهنویسی باشد.
توجه: در طراحی مؤلفه، اسکلت، ساختار و چیدمان کلی مولفههای (توابع) برنامه به این معنی که چه مولفهای (تابعی) چه مولفهای (تابعی) دیگر را صدا میزند، با ذکر جزئیات داخلی مولفهها (توابع) مشخص میگردد (ساختار درختی برنامه با ذکر جزئیات مولفهها (توابع)). مانند اسکلت یک ساختمان که گویای جایگاه مؤلفههای ساختمان است و آجرچینی هم شده است. (اسکلت یک ساختمان به همراه آجرچینی).
توجه: به طراحی مولفه، طراحی جزئی، طراحی تفصیلی و طراحی رویهای نیز گفته میشود.
طراحی واسط یا همان واسط کاربر، براساس ورودیها و خروجیهای مورد نیاز کاربران نهایی به شکل نقشی بر روی کاغذ یا طرحی بر روی کامپیوتر ایجاد میگردد. مانند نحوه چیدمان منوها و فرمها.
۴- ساخت (پیادهسازی و تست)
پس از مدل طراحی نوبت به پیادهسازی و تست میرسد. پیادهسازی جداول از بخش پیادهسازی داده، طراحی جدول از مدل طراحی را به عنوان ورودی دریافت کرده و توسط دستورات DDL در SQL، پیادهسازی جداول را انجام میدهد.
پیادهسازی پرس و جو از بخش پیادهسازی داده، طراحی پرس و جو از مدل طراحی را به عنوان ورودی دریافت کرده و توسط دستورات DML در SQL پیادهسازی پرس و جو را انجام میدهد. پیادهسازی عملکرد، طراحی مؤلفه از مدل طراحی را به عنوان ورودی دریافت کرده و توسط یک زبان برنامهنویسی (ساختیافته یا شیءگرا) پیادهسازی عملکرد را انجام میدهد.
توجه: دقتکنید که میتوان مدل تحلیل و طراحی را به روش و ابزارهای ساختیافته انجام داد ولی فعالیت پیادهسازی را توسط یک زبان برنامهنویسی شیءگرا انجام داد و از امکانات شیءگرایی زبان استفاده نکرد، اما عکس این مطلب امکانپذیر نیست، یعنی نمیتوان مدل تحلیل و طراحی را به روش شیءگرا انجام داد ولی فعالیت پیادهسازی را توسط یک زبان ساختیافته انجام داد زیرا زبان ساختیافته امکانات شیءگرایی (همچون کلاس، وراثت و چندریختی) را پشتیبانی نمیکند.
پس از پیادهسازی نوبت به تست میرسد، در این مرحله کلیهی موارد پیادهسازی شده از نظر خطاهای نحوی و خطاهای معنایی براساس لیست نیازمندیهای مشتری (چک لیست) که در فعالیت ارتباطات تهیه شده بود مورد وارسی قرار میگیرد تا مشخص شود نرمافزار براساس ورودیهای مورد نظر مشتری، خروجیهای مورد انتظار مشتری را برآورده میسازد یا خیر.
۵- استقرار
پس از فعالیت تست نوبت به فعالیت استقرار میرسد. در این مرحله، نرمافزار به مشتری تحویل داده میشود و مشتری با بررسی محصول دریافتی، بازخوردهای به دست آمده براساس همین ارزیابیها را به تیم نرمافزاری ارائه میدهد. این بازخوردها میتوانند مبنایی برای ارتقاء و یا تصحیح نسخهی بعدی نرمافزار باشد.
این پنج فعالیت چارچوبی را میتوان طی تولید برنامههای کوچک و ساده، در ایجاد برنامههای تحت وب و برای مهندسی سیستمهای کامپیوتری پیچیده و عظیم به کار برد. جزئیات مدلهای فرآیند تولید نرمافزار در هر مورد کاملاً متفاوت خواهد بود، ولی فعالیتهای چارچوبی همینها خواهد بود.
برای بسیاری از پروژههای نرمافزاری، فعالیتهای چارچوبی به موازات پیشرفت پروژه به صورت تکراری به کار برده میشوند. یعنی فعالیتهای ارتباطات، برنامهریزی، مدلسازی، ساخت و استقرار به طور مکرر در چند دور تکرار پروژه به کار برده میشوند. در هر دور تکرار پروژه، یک نسخه (افزایش) (Increment) از نرمافزار ایجاد میشود که زیرمجموعهای از قابلیتهای عملیاتی و ویژگیهای نرمافزار کامل را در اختیار مشتری قرار میدهد. با تولید هر افزایش، نرمافزار کامل و کاملتر میشود.
ارسطو خلیلیفر
مولف کتاب مهندسی نرم افزار راهیان ارشد
دیدگاه خود را ثبت کنید
آیا می خواهید به بحث بپیوندید؟در صورت تمایل از راهنمایی رایگان ما استفاده کنید!!