توضیحات
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
چکیده پایان نامه
موفقیت نرم افزار به فاکتوهای مهمی مانند تحویل به موقع طبق زمان و بودجه تعیین شده و برآوردن نیازمندی های کاربران وابسته است و پیچیدگی از
عوامل چشمگیر و تاثیرگذار بر آنها می باشد. در طول دهه های اخیر تلاش¬های متعددی در جهت اندازه¬گیری و کنترل پیچیدگی نر م افزار انجام شده
پذیرفته، ولی عمده¬ی این تلاش ها در طی مراحل طراحی و کد بوده است. با این حال اندازه گیری و کنترل پیچیدگی در این مراحل بسیار دیر است.
با شناسایی عوامل بروز پیچیدگی و اندازه گیری آنها در مراحل آغازین چرخه حیات نرم افزار می-توان
از بروز مشکلاتی که منبع بسیاری از خطاها در فازهای بعدی هستند جلوگیری کرد و مانع از انتشار این عوامل به فازهای بعدی فرآیند توسعه نرم افزار شد.
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
در این رساله با تکیه بر فرآیند مهندسی نیازمندی¬ها و درک کامل از ماهیت آن به بررسی و شناسایی مباحث مهم در مهندسی نیازمندی ها پرداخته و
تاثیر هر یک بر پیچیدگی نرم افزار را مشخص می کنیم. در ادامه به ارائه مدلی از عوامل و نتایج پیچیدگی نرم افزار در فاز اول از چرخه حیات نرم افزار
می¬پردازیم. سپس با استفاده از مدل پیشنهادی و با هدف کنترل و کاهش پیچیدگی با استفاده از متریک پیشنهادی، پیچیدگی نرم افزار را در فاز اول از چرخه حیات و پس از انجام فرآیند مهندسی نیازمندی ها اندازه گیری می کنیم.
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
در این پایان¬نامه ابتکار شناسایی، کنترل و اندازه گیری عوامل پیچیدگی نرم افزار در فاز اول از چرخه حیات نرم افزار و به محض تکمیل مستندات مربوط به نیازمندی های نرم افزار می باشد. زیرا همانطور که بیان شد تاکنون بیشتر فعالیت ها در فاز طراحی و کد بوده است.
این رویکرد منجر به صرفه¬جویی در هزینه تولید نرم افزار، نیروی انسانی و از آن مهمتر منجر به کاهش هزینه های نگهداری نرم افزار خواهد شد. مورد مطالعه «سیستم مدیریت قرائت از راه دور کنتورهای هوشمند گاز» است که استفاده از متریک پیشنهادی را نشان می دهد.
۱۱۷صفحه فایل ورد (Word) فونت ۱۴ منابع دارد
پس از پرداخت آنلاین میتوانید فایل کامل این پروژه را دانلود کنید

فهرست مطالب
چکیده ۱
فصل اول:طرح مسئله و محدوده تحقیق ۲
۱-۱ مقدمه ۳
۱-۲ تعریف مسئله ۵
۱-۳ بیشینه تحقیق ۷
۱-۴ ساختار پایان¬نامه ۱۱
فصل دوم:پیچیدگی نرم¬افزار ۱۳
۲-۱ مقدمه ۱۴
۲-۲ تعریف و ماهیت پیچیدگی نرم¬افزار ۱۴
۲-۳ علل پیچیدگی نرم¬افزار ۱۷
۲-۴ دسته¬بندی پیچیدگی نرم¬افزار ۲۰
۲-۵ پیچیدگی ذاتی در مقابل پیچیدگی ضروری ۲۲
۲-۶ پیچیدگی در چرخه حیات نرم¬افزار ۲۳
۲-۷ خلاصه فصل ۲۵
فصل سوم:مهندسی نیازمندی¬ها ۲۷
۳-۱ مقدمه ۲۸
۳-۲ تاریخچه مهندسی نیازمندی¬ها ۲۸
۳-۳ تعریف نیازمندی ۲۹
۳-۴ طبقه¬بندی نیازمندیها ۳۰
۳-۵ ذینفعان ۳۴
۳-۶ مهندسی نیازمندی¬ها ۳۵
۳-۷ دلایل اهمیت مهندسی نیازمندی¬ها ۳۷
۳-۸ مراحل مهندسی نیازمندی¬ها ۴۰
۳-۸-۱ استخراج نیازمندی¬ها ۴۱
۳-۸-۲ تحلیل و مذاکرات نیازمندی¬ها ۴۴
۳-۸-۳ مستندسازی نیازمندی¬ها ۴۷
۳-۸-۴ تایید اعتبار نیازمندی¬ها ۵۲
۳-۸-۵ مدیریت نیازمندی¬ها ۵۳
۳-۹ محصول مهندسی نیازمندی¬ها ۵۴
۳-۱۰ چگونگی انجام مهندسی نیازمندی¬ها ۵۸
۳-۱۱ خلاصه فصل ۵۸
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
فصل چهارم:متریک¬های پیچیدگی نرم¬افزار ۶۰
۴-۱ مقدمه ۶۱
۴-۲ اندازه¬گیری و اهداف اندازه¬گیری ۶۱
۴-۳ کاربردهای اندازه¬گیری ۶۳
۴-۴ تعریف متریک نرم¬افزاری ۶۳
۴-۵ طبقه¬بندی متریک¬های نرم¬افزاری ۶۴
۴-۵-۱ متریک محصول ۶۴
۴-۵-۲ متریک فرآیند ۶۵
۴-۵-۳ متریک منابع ۶۶
۴-۶ متریک¬های پیچیدگی نرم¬افزار ۶۷
۴-۶-۱ خطوط متن ۶۸
۴-۶-۲ متریک فراریت نیازمندی ۶۹
۴-۶-۳ تعداد خطوط کد(LOC) 69
۴-۶-۴ متریک نقاط کارکرد ۷۰
۴-۶-۵ متریک پیچیدگی دورانی McCabe 72
۴-۶-۶ متریک Halstead 74
۴-۶-۷ متریک جریان اطلاعات ۷۶
۴-۶-۸ متریک¬های شیءگرا ۷۷
۴-۷ خلاصه فصل ۸۴
فصل پنجم:ارائه رویکرد پیشنهادی ۸۵
۵-۱ مقدمه ۸۶
۵-۲ دلایل بروز پیچیدگی نرم¬افزار ۸۷
۵-۳ تاثیر و نتایج پیچیدگی نرم¬افزار ۸۸
۵-۳-۱ کیفیت نرم¬افزار ۸۸
۵-۳-۲ نگهداری نرم¬افزار ۸۹
۵-۳-۳ بهره¬وری نرم¬افزار ۹۰
۵-۴ پیچیدگی و مهندسی نیازمندی¬ها ۹۰
۵-۵ مدل عوامل پیچیدگی نرم¬افزار ۹۳
۵-۵-۱ مستندات ۹۴
۵-۵-۲ ذینفعان ۱۰۰
۵-۵-۳ تیم پروژه ۱۰۲
۵-۶ مدل نتایج پیچیدگی نرم¬افزار ۱۰۳
۵-۷ متریک پیچیدگی مبتنی بر نیازمندی¬ها ۱۰۷
فصل ششم:پیاده¬سازی رویکرد پیشنهادی ۱۱۴
۶-۱ مقدمه ۱۱۵
فصل اول:طرح مسئله و محدوده تحقیق
۱-۱ مقدمه
با پیشرفت نرمافزارهای¬ کامپیوتری، افزایش نیاز کاربران به نرم¬افزارهای قدرتمندتر، کاربردی¬تر و با قابلیت¬های بیشتر مشهود می¬گردد. از این¬رو
نرم¬افزارها بزرگتر و پیچیدهتر شده و چنین تحولی فعالیت-های توسعه و خصوصاً نگهداری نرم¬افزار را دشوارتر و توسعه¬دهندگان را با چالش¬های
جدیدی مواجه می-کند. دشواری کار، زمان بیشتری برای انجام می¬طلبد، در این زمان منابع بیشتری بکار گرفته ی¬شود و منابع بیشتر به معنی تحمیل هزینه¬های بیشتر خواهد بود.
تاخیر در تحویل، تجاوز در هزینه¬ها و بودجه¬های تعیین¬شده، کاهش کیفیت و قابلیت اطمینان و نارضایتی کاربر، از نتایج افزایش پیچیدگی در نرم¬افزار
است. بنابراین کاهش پیچیدگی، قلب توسعه¬ی نرم-افزار است و یکی از عوامل موثر در موفقیت یا شکست پروژه محسوب می¬شود و بدلیل تاثیرات آن بر صفات مهم نرم¬افزار از جمله کیفیت، از جایگاه ویژه¬ای در مباحث مهندسی نرم¬افزار برخوردار است.
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
بنابراین در عصری که افزایش پیوستهی قابلیتهای نرمافزار انتظار میرود، واضح است که اگر بخواهیم هزینهها بدون صدمه دیدن کیفیت نرمافزار کنترل شوند باید مهارت کافی در تشخیص منابع پیچیدگی، مدیریت آن و تا حد امکان حذف پیچیدگی را داشت.
این مشکلات سازمان¬های نرم¬افزاری را بر آن داشته تا دنبال راه¬حلی برای مشکل پیچیدگی باشند. برای نیل به این مقصود محققان به دنبال رابطهای بین ویژگیهای نرمافزار و مشکلات و دشواریهای کار توسعهی نرمافزار بودهاند. حاصل این تلاشها ارائه میزانهایی برای اندازهگیری پیچیدگی نرمافزار بوده است. هر کدام از این میزانها بعد/ ابعادی از پیچیدگی نرمافزار را در نظر داشته و بیشتر بر روی کد متمرکز شدهاند.
اما منظور از «پیچیدگی» چیست؟ پیچیدگی نرمافزار یک موضوع وسیع در مهندسی نرمافزار است و از سال ۱۹۷۶ محققان زیادی تلاش کردهاند تا تعریف دقیقی برای پیچیدگی نرمافزار پیدا کنند و توافقی عمومی بر روی چگونگی تعریف آن وجود ندارد ولی بیشتر تعاریف مبتنی بر دیدگاهZuse از پیچیدگی است[۳]، «پیچیدگی نرمافزار سختی تحلیل، نگهداری، تست، طراحی و تغییر نرمافزار است».
به عبارت دیگر پیچیدگی نرم¬افزار موضوعی است که در کل فرآیند توسعه نرم¬افزار و در هر مرحله از چرخه حیات محصول وجود دارد.
و این واقعیت که
پیچیدگی نرم¬افزار در طی فازهای مختلف ایجاد می-شود، تعریف و اندازه¬گیری آن¬را سخت می¬کند. ترکیب پیچیدگی حاصل از تحلیل مسئله،
طراحی و کدنویسی در یک عدد بسیار مشکل است. به همین دلیل محققان پیچیدگی را از جنبه¬های مختلفی مورد بحث قرار می¬دهند.
پیچیدگی نرمافزار را میتوان بصورت سطوح پیچیدگی برای مولفههای مختلف یک سیستم نظیر پیچیدگی الگوریتم، پیچیدگی کد، پیچیدگی زبان
برنامهنویسی، پیچیدگی اتصال پیمانه¬ها، پیچیدگی نیازمندی¬ها یا پیچیدگی طراحی تعریف کرد. به عبارت دیگر، پیچیدگی نرمافزار میتواند به عنوان شاخصی برای مراحل مختلف تولید و نگهداری سیستم استفاده شود.
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
اما در زمان توسعه نرم¬افزار، توسعهدهندگان نرمافزار نمیتوانند چیزی را تولید کنند که به طور کامل مشخص نشده است. عدم شناسایی صحیح نیازمندی¬ها در فاز اول از چرخه حیات نرم¬افزار منجر به توسعه اشتباه و ناصحیح محصول و بروز پیچیدگی شده و این امر منجر به اتلاف منابع ارزشمندی
خواهد شد. بنابراین بین پیچیدگی و تشریح نیازمندی¬های نرم¬افزار که خروجی فاز اول از چرخه حیات نرم¬افزار محسوب می¬شود، ارتباط وجود دارد.
تشریح نیازمندیهای نرمافزار حوزه توسعه سیستم را میسازد و مدلی از نیازهای ذینفعان بوده و ویژگیهای سیستمی که باید ایجاد شود را تشکیل میدهد. مشخصات این نیازمندیها توسط مهندسان نیازمندی توسعه داده و به توسعهدهندگان نرمافزار تحویل داده میشود.
البته جهت تشریح و مشخص کردن نیازمندی¬های نرم¬افزار تکنیک استاندارد و منحصر به فردی وجود ندارد، اگرچه استانداردهایی مانند IEEE توصیههایی خاصی در این زمینه ارائه داده¬اند[۲] اما عموماً نیازمندیها به زبان طبیعی تشریح میشوند
. این رویکرد زمینه مناسب¬تری را برای ذینفعان،
خصوصاً کاربران و مشتریان جهت درک بهتر فراهم می¬آورد. در این بین هدف مهندسی نیازمندیهای نرمافزار تأمین بیشترین رضایت مشتری/کاربر با
برآوردن انتظارات آنها و تحویل نرمافزار در زمان و بودجه برآورد شده است. جهت دستیابی به رضایت مشتری و موفقیت پروژه در فرآیند مهندسی نرم¬افزار، می¬توان رابطه-ی زیر را سرلوحه کار قرار داد:
محصول آماده + کیفیت خوب + تحویل در زمانبندی و بودجهبندی تعیین شده = رضایت مشتری
موفقیت هر پروژه نرمافزاری با میزان تحقق اهداف و نیازهای ذینفعان سنجیده میشود. مهندسی نیازمندیهای نرمافزار فرآیند کشف این اهداف است. یک هدف یک مقصود سطح بالاست که سیستم تحت بررسی باید به آن دست یابد. یک نیازمندی توصیف
یک سرویس یا محدودیت سیستم است که یک کاربر برای رسیدن به هدف وضع میکند. بنابراین یک نیازمندی مشخص میکند که یک هدف در یک سیستم پیشنهادی چگونه باید حاصل شود.
مشخصات نیازمندیها علاوه بر محدودیتهای کیفیتی و سرویسهایی که سیستم باید فراهم کند باید شامل اطلاعات دامنه کاربرد و مفاهیم سازمانی که سیستم باید در آن کار کند نیز باشد. از این نظر، سه نوع از نیازمندیها شناسایی میشوند: کارکردی
، غیرکارکردی و سازمانی. مشخص کردن نوع
نیازمندیها بسیار مهم است. از آنجا که این نیازمندیها ویژگیهای متفاوتی دارند با این تمایز میتوانیم روشها و تکنیکهای مناسبی را در طول فرآیند مهندسی نیازمندیها انتخاب کنیم.
بنابراین نیازمندی¬ها شالوده فرآیند توسعه نرم¬افزار را شکل می¬دهند. شالوده سست منجر به سقوط کل ساختمان می¬شود و ضعف در مستند نیازمندی¬ها منجر به سقوط کل پروژه نرم¬افزاری می¬شود.
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
۱-۲ تعریف مسئله
پیچیدگی نرمافزار، میزان کار فکری مورد نیاز برای درک نرمافزار را مشخص میکند. پیچیدگی در فاز توسعهی نرمافزار، تلاش مورد نیاز برای تحلیل، طراحی،
کد، آزمون و اشکالزدایی برنامه، پیمانهها و زیر سیستمها را به شدّت تحت تأثیر قرار میدهد. در فاز نگهداری نرمافزار، پیچیدگی دشواری مکانیابی و تصحیح خطاهای کشف نشده پیادهسازی و همچنین میزان تلاش مورد نیاز برای تغییر پیمانههایی از برنامه که باید تصحیح شوند را مشخص میکند.
طبقهبندی غالب برای پیچیدگی، ذاتی و افزونه است [۳]. پیچیدگی ذاتی از ماهیت مسأله نشأت میگیرد و با تحقق نیازمندیهای نرمافزار گره خورده است. پیچیدگی افزونه نتیجهی کوشش ناکافی برای حل مسأله است. بکارگیری الگوی طراحی نادرست
یا انتخاب ساختار دادهای نامناسب، پیچیدگی افزونه یک راهحل را افزایش میدهد. اغلب مهندسان تشخیص نمیدهند که پیچیدگی مراحل آزمون و عملیاتی شدن در نتیجهی
تصمیمگیریهای آنها در مراحل اولیه ایجاد میشود
. بدیهی است که مهندسی نیازمندیها بزرگترین موضوع در مقابله با پیچیدگی ذاتی است.
نیازمندیها مولفههای مشخصات نیازمندیهای نرمافزار هستند که به طور مستقیم پیچیدگی مسأله/محاسبات نرمافزار را منعکس میکنند. در سال ۱۹۹۵
مطالعاتی توسط گروه Standish انجام گرفت و تحت عنوان گزارش CHAOS[6] منتشر گردید. در این مطالعات، ۸۰۰۰ پروژه نرم¬افزاری از ۳۵۲ شرکت مورد مطالعه قرار گرفتند، و دلایل شکستِ ۵۰% از این پروژه¬¬¬ها مشکلات آنها در بحث نیازمندی¬ها بود.
شناسایی و تحلیل نیازمندی¬ها حساس¬ترین فرآیند چرخه حیات نرم¬افزار است. Brooks بیان می-کند که «سخت¬ترین بخش از ساخت یک سیستم
نرم¬افزاری تصمیم¬گیری در باب تعیین ساختن چه چیز است. هیچ¬یک از دیگر بخش¬های کار سخت تر از تعیین جزئیات نیازمندی¬های تکنیکی
نمی¬باشد، که شامل تمام رابط¬ها به دیگر افراد، ماشین¬ها و دیگر سیستم¬های نرم¬افزاری است» [۲۸]. از این¬رو می¬توان مولفه¬های فاز اول از چرخه¬ی حیات نرم¬افزار را بعنوان عوامل بروز پیچیدگی در نظر گرفت.
پیچیدگی نرم¬افزار موضوعی است که در کل فرآیند توسعه نرم¬افزار و در هر مرحله از چرخه حیات محصول وجود دارد، بنابراین جهت جلوگیری از انتشار پیچیدگی در چرخه حیات نرم¬افزار بهتر آن است که از همان مراحل ابتدایی یعنی فاز تحلیل نیازمندی¬ها، در جهت کنترل و کاهش پیچیدگی گام برداریم.
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
در این حالت تصمیمات طراحی و پیاده¬سازی دقیق¬تر اتخاذ شده و منجر به کاهش پیچیدگی
طراحی، پیچیدگی کد، پیچیدگی آزمون و در نهایت کاهش پیچیدگی نرم¬افزار می¬شود. با این روند هزینه نگهداری نرم¬افزار کاهش و کیفیت نرم¬افزار بهبود می¬یابد.
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
ایده¬ی پشت تمام تعاریف پیچیدگی این است که هرچه عبارت یا مدلی حاوی اطلاعات بیشتری باشد، پیچیدهتر است. نیازمندیها منشأ پیچیدگی
نرمافزار است تعداد زیاد نیازمندیها، پیچیدگی و حجم هر نیازمندی و وابستگی بین نیازمندیها بسیاری از فعالیتهای اساسی چرخهی حیات نرمافزار را تحت تأثیر قرار میدهند. شکل۲-۱ فعالیتهای مهم متأثر از نیازمندیها و مخصوصاً وابستگی بین آنها را نشان میدهد.
تاکنون بیشتر تلاش¬های انجام گرفته جهت اندازه¬گیری، کنترل و کاهش پیچیدگی نرم¬افزار در مرحله کدنویسی و طراحی بوده است. در این
پایان¬نامه با تکیه بر فرآیند مهندسی نیازمندی¬ها، به بررسی و تحلیل فاکتورهای تاثیرگذار
در پیچیدگی نرم¬افزار-در فاز اولیه توسعه نرم¬افزار- پرداخته
می¬شود، تا در این راستا با شناسایی و اندازه¬گیری آنها، از ورود خطا به فرآیند و چرخه حیات محصول جلوگیری کرده و مهندس نرم¬افزار را قادر سازیم تا خطاها را که منشا بسیاری از هزینه¬ها در فاز نگهداری هستند، در همان فازهای نخست شناسایی کند.
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
در همین امتداد به معرفی عوامل موثر در ایجاد پیچیدگی نرم¬افزار و نتایج حاصل از پیچیدگی، در فاز اول از چرخه حیات نرم¬افزار می¬پردازیم و در ادامه
با استناد به مدل پیشنهادی به ارائه متریکی جهت اندازه¬گیری میزان پیچیدگی در فاز اول از چرخه حیات نر¬م¬افزار خواهیم پرداخت.
۱-۳ بیشینه تحقیق
تاکنون کار زیادی در مورد منشأ و ماهیت پیچیدگی نرمافزار انجام نشده است. بیشتر کارهای انجام شده در زمینهی پیچیدگی به تأثیر آن بر پروژههای
نرمافزاری پرداختهاند و کیفیت و هزینههای محصول در رأس بررسیها قرار میگیرند. توجه مدیران و مهندسان پروژههای نرمافزاری به پیچیدگی نرمافزار برای کنترل و پیشبینی کیفیت و بهرهوری محصول است [۶].
پیچیدگی نرمافزار برای اولین بار در دهه¬ی۷۰، توجه عمومی را به خود جلب کرد. سبک
برنامهنویسی پیمانهای و شیگرا هر دو برای کاهش پیچیدگی نرمافزار مطرح شدند که کم و بیش پیچیدگی نرمافزار را تعدیل کردند. با این وجود، با افزایش اندازه نرمافزار، کنترل پیچیدگی نرمافزار خارج از کنترل بوده است[۷].
این مسأله امری طبیعی است که بیشتر سیستمهای بزرگ به پیچیدگی گرایش دارند. McGregor تفاوت جالبی بین پیچیدگی
و بغرنجی مطرح میکند [۸]. پیچیدگی ممکن است در ذات دامنه مسأله باشد چنین مسألهای طبیعتاً راهحل پیچیدهای داشته و درک چنین راهحلی زمان زیادی لازم دارد زیرا از
بخشهای وابسته و متعامل زیادی تشکیل شده است؛ درحالی که ساختار منطقی آن قابل فهم است ؛ پیچیدگی ساختاری سیستم به خودی خود
مسأله نیست. اما یک راهحل بغرنج درک و تحلیل دشواری دارد واضح است که مهندسان و توسعهدهندگان باید از راهحلهای بغرنج اجتناب کرده و راهحلهای پیچیده را به درستی مدیریت کنند.
Algar مطرح میکند که گروههای اصلی پیچیدگی که توسط توسعهدهندگان تعریف میشوند
عبارتنداز: اندازه، ساختار، محیط، دامنه کاربری و پیچیدگی ارتباطات. Fenton پیچیدگی نرمافزار را از جنبههای مختلف به چهار روش متفاوت تفسیر میکند: پیچیدگی مسأله (که پیچیدگی محاسباتی نیز نامیده
میشود) که پیچیدگی مسأله زیرین را اندازهگیری میکند، پیچیدگی الگوریتمی ؛ پیچیدگی
الگوریتمی است که برای حل مسأله پیادهسازی ارائه شده و کارایی نرمافزار را اندازهگیری میکند، پیچیدگی ساختاری ؛ پیچیدگی ساختار نرمافزاری را نشان میدهد که الگوریتم را پیادهسازی میکند. پیچیدگی
وابسته به دانش ؛ میزان تلاش مورد نیاز برای درک نرمافزار را نشان میدهد[۲].
تأکید این رساله روی پیچیدگی مسأله است، این نوع پیچیدگی از طریق فاکتورها و خروجی فاز تحلیل نیازمندی¬ها و مشخصات آنها منعکس میگردد.
از اوسط سال ۱۹۷۰، مهندسی نیازمندیها بعنوان یک شاخه متمایز کاری و تحقیقی شناخته شده و تعاریفی برای آن ارائه شد. در ابتدا مهندسی نیازمندیها بصورت مرحله اول مهندسی نرمافزار تعریف شد. در طول سالها با تکامل تحقیقات
مربوط به مهندسی نیازمندیها، تعریف مهندسی نیازمندیها وسعت یافت بطوری که کل چرخهی حیات را در بر گرفت. موضوعات مهندسی نیازمندیها با اهداف کسب و کار، برنامهریزی، فرآیندها، توسعه و تکامل سیستمهای درگیر دستیابی به مقاصد سازمانی مرتبط هستند.
اگرچه در مورد علل و ماهیت پیچیدگی نرمافزار اطلاعات زیادی موجود نیست [۶]؛ امّا چندین تعریف برای پیچیدگی ارائه شده است. بیشتر این تعاریف بر
اساس این مفهوم هستند که «پیچیدگی نرمافزار میزان دشواری تحلیل، طراحی، کد، آزمون، نگهداری، تغییر و اصلاح نرمافزار است». اندازهگیری نرمافزار،
متریکها (معیارها) و میزانهای نرمافزاری از دهه شصت و به طور عمده از دهه هفتاد پایهریزی شدند حاصل این کارهای ابتدایی، نتایج بیشتری بود که در
دهههای هشتاد و نود و بعد از آن ظاهر شد. طی سالیان محققان محدوده وسیعی از متریک¬های پیچیدگی نرم¬افزاری را ارایه کرده¬اند که با موفقیت در عمل وارد شده¬اند و در زمینه مدیریت ریسک، پیش¬بینی قابلیت¬اطمینان، محدود نگهداشتن هزینه و بهبود کیفیت نرم¬افزار کاربرد مستقیم داشته
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
است.
تحقیق بر روی متریکها از دهه ۷۰ شروع شد در آن زمان روش توسعهی نرمافزار رویهگرا بود. اولین متریک نرمافزاری مطرح شده که تاکنون مورد استفاده بوده خط کد است.
در سال ۱۹۷۶ McCabe اصطلاح «دور » را به عنوان متریکی برای پیچیدگی بر اساس تعاریف گراف پیشنهاد کرد. در سال ۱۹۷۷ Halstead اصطلاح دانش نرمافزار را برای تخمین بار کاری یا زمان کار برنامهنویسان معرفی کرد. ایده پشت این اصطلاح این بو…………………….
۱-۴ ساختار پایان¬نامه
این پایان¬نامه در ۶ فصل مجزا تنظیم شده است که بشرح زیر می¬باشد:
• فصل اول، مقدمه و در رابطه با تعریف صورت مسأله، تعیین حوزه و ساختار تحقیق بود.
• فصل دوم به ادبیات موضوع تحقیق اختصاص دارد در این فصل مفاهیم پیچیدگی نرمافزار، پیچیدگی ذاتی و افزوده، علل و عوامل تأثیرگذار در پیچیدگی
نرمافزار، اجزای تعیین کنندهی پیچیدگی نرمافزار و پیچیدگی در چرخهی حیات نرمافزار به تفصیل بررسی میشود تا اطلاعات لازم برای پرداختن به جزئیات روش پیشنهادی این تحقیق فراهم شود.
• در فصل سوم به درک و شناخت نیازمندیها میپردازیم که بلوکهای پایهی اتصال دهنده تمامی فعالیتهای توسعهی نرمافزار هستند سپس به تفصیل بیان
میکنیم که فرآیند مهندسی نیازمندیها چرا، چگونه، توسط چه کسانی و در چه زمانی انجام میشود و اهمیت،محصول و تکنیک¬های این فرآیند چیست.
• در فصل چهارم به موضوع اندازه¬گیری و متریک¬های نرم¬¬افزاری و بطور خاص متریک¬های پیچیدگی نرم¬افزار پرداخته می¬شود. در این فصل ابتدا
به تعریف اندازه¬گیری، دلایل و اهداف آن اشاره می¬شود. در ادامه پس از تعریف متریک نرم¬افزاری به بررسی متریک¬های مختلف در فازهای مختلف
نرم¬افزار پرداخته خواهد شد. در انتها با بررسی دیدگاه¬های مختلف روی متریک¬های موجود، زمینه ارائه مدل ومتریک پیشنهادی در فصل بعد مهیا می¬شود.
• در فصل پنجم این پایان¬نامه، به ارائه¬ی مدل و متریک پیشنهادی جهت کنترل و کاهش پیچیدگی نرم¬افزار ارائه پرداخته می¬شود.
• در فصل ششم استفاده از متریک پیشنهادی را با بررسی «سیستم مدیریت قرائت از راه دور کنتورهای هوشمند گاز» نشان می¬دهیم و به ارائه جداول مقایسه¬ای جهت ارزیابی متریک پیشنهادی می¬پردازیم.
• در فصل هفتم
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
فصل دوم:پیچیدگی نرم¬افزار
۲-۱ مقدمه
هزینههای رو به رشد نرمافزار سازمانهای نرمافزاری را بر آن داشته تا دنبال راهحلی برای کاهش این هزینهها باشند. برای نیل به این مقصود محققان به
دنبال رابطهای بین ویژگیهای نرمافزار و مشکلات و دشواریهای کار توسعهی نرمافزار بودند. دشواری کار، زمان بیشتری برای انجام آن طلب میکند؛ در این
زمان منابع بیشتری بهکار گرفته میشوند و منابع بیشتر، هزینههای بیشتر را به سازمان تحمیل میکند. یکی از دلایل پرداختن به موضوع پیچیدگی نرمافزار و
کنترل آن برای کنترل هزینهها در چرخهی حیات نرمافزار است زیرا پیچیدگی نرمافزار از عوامل اصلی
در افزایش سریع هزینههای توسعه و نگهداری عنوان میشود.
پیچیدگی نرم¬افزار فاکتوری است که به¬راحتی قابل اندازه¬گیری یا توصیف نیست و غالباً در طول فرآیند برنامه¬ریزی پروژه نادیده گرفته می¬شود.
بنابراین محققان بدنبال روشی کمّی برای پیش¬بینی میزان دشواری فهم، تغییر و نگهداری نرم¬افزار هستند تا با اندازه¬گیری و کنترل آن، منجر به کاهش هزینه¬ها در چرخه حیات نرم¬افزار شوند.
در واقع، در چند دهه اخیر پیچیدگی نرم¬افزار دوره جدیدی در زمینه دانش کامپیوتری ایجاد کرده است.
پیچیدگی نرم¬افزار را می¬توان بعنوان گرداننده
اصلی هزینه، قابلیت اطمینان و عملکرد سیستم-های نرم¬افزاری تعریف کرد.
اغلب تلاش¬های انجام شده در زمینه¬ی اندازه¬گیری پیچیدگی، به تاثیر پیچیدگی بر پروژه¬های نرم-افزاری پرداخته¬اند که در راس آنها کیفیت و
هزینه¬های محصول قرار می¬گیرد. در واقع توجه مدیران و مهندسان پروژه¬های نرم¬افزاری به پیچیدگی نرم¬افزار برای کنترل و پیش¬بینی کیفیت و بهره¬وری محصول است.
۲-۲ تعریف و ماهیت پیچیدگی نرم¬افزار
هنگامی که در مورد پیچیدگی نرم¬افزار صحبت می¬شود اولین سوالی که باید پاسخ داده شود
این است که «پیچیدگی چیست؟». باید گفت که توافق عمومی روی چگونگی تعریف پیچیدگی وجود ندارد و باور عمومی بر این است که پیچیدگی نرم¬افزار را نمی¬توان فقط با استفاده از یک بعد تعریف کرد.
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
پیچیدگی نرمافزار یک موضوع کلی، غیراستاندارد و اصطلاحی وابسته است که ترکیب سیستم را توصیف میکند.
دلیل وابسته بودن این اصطلاح این است که مقدار مطلقی را نمیتوان به آن نسبت داد. پیچیدگی نرمافزار اصطلاح غیراستانداردی است زیرا محدودهی آن مشخص نبوده و میتواند در موارد متفاوت
با معانی متفاوت به کار رود. یک سیستم با کد حجیم که چندین پیمانه به هم مرتبط دارد میتواند بهعنوان یک سیستم پیچیده در نظر گرفته شود. از طرفی یک برنامهی کوتاه با الگوریتم سخت را نیز میتوان پیچیده نامید.
فرهنگ کامپیوتری استاندارد IEEE [13]، «پیچیدگی» را به این صورت تعریف میکند: «میزان سختی درک یا بازبینی یک سیستم یا مولفه که طراحی یا پیاده¬سازی شده است». عبارت «سختی ِدرک» اشاره دارد که پیچیدگی لزوماً
مقیاس مطلقی برای اندازه¬گیری نیست بلکه نسبی است. به این معنی که آنچه برای شخصی پیچیده به نظر میرسد میتواند برای دیگری براحتی قابل فهم باشد.
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
تعریف Zuse از پیچیدگی بدین شرح است، «پیچیدگی نرمافزار سختی تحلیل، نگهداری، تست، طراحی و تغییر نرمافزار است»[]، به عبارت دیگر پیچیدگی نرم¬افزار موضوعی است که در کل فرآیند توسعه نرم¬افزار و در هر مرحله از چرخه حیات محصول وجود دارد.
Myers [16] پیچیدگی را به اینصورت تعریف می¬کند:«پیچیدگی یک شی معیاری از تلاش ذهنی موردنیاز جهت فهم و ایجاد آن شی است».
این تعاریف پیچیدگی نرمافزار را به پیچیدگی وابسته به روانشناسی مربوط میکند. سه نوع مشخص از پیچیدگی وابسته به روانشناسی…………………………..
بلافاصله بعد از پرداخت موفق میتوانید فایل کامل این پروژه را با سرعت و امنیت دانلود کنید
اولین نفر باشید که نقد و بررسی ارسال میکنید... “ارائه راهکاری برای کاهش پیچیدگی نرم افزار”
ارائه راهکاری برای کاهش پیچیدگی نرم افزار
قیمت : تومان9,800
نقد وبررسی
نقد بررسی یافت نشد...