عرض سلام خدمت همراهان گرامی وب سایت آموزشی پی وی لرن. با موضوع آموزش مهندسی نرم افزار (Software Engineering) در خدمتتون خواهیم بود. با مبحث Complexity یا پیچیدگی طراحی نرم افزار همراه خواهیم بود.
Complexity یا پیچیدگی طراحی نرم افزار چیست؟
اصطلاح پیچیدگی به معنای وضعیت وقایع یا چیزهایی است که پیوندهای به هم پیوسته و ساختارهای بسیار پیچیده ای دارند. در برنامه نویسی نرم افزار ، با تحقق طراحی نرم افزار ، تعداد عناصر و اتصال آن ها به تدریج بسیار زیاد می شود ، که درک یکباره ی آن بسیار دشوار است.
بدون استفاده از معیارها و اقدامات پیچیدگی ، ارزیابی پیچیدگی نرم افزار دشوار است. بگذارید سه روش پیچیدگی نرم افزار مهم را مشاهده کنیم.
در سال ۱۹۷۷ ، آقای Maurice Howard Halstead معیارهایی را برای اندازه گیری پیچیدگی نرم افزار ارائه داد. معیارهای Halstead به اجرای واقعی برنامه و اقدامات آن بستگی دارد که مستقیماً توسط اپراتورها و اپرند ها از طریق کد منبع، در روش استاتیک محاسبه می شوند. این امر اجازه می دهد تا زمان تست ، واژگان ، اندازه ، مشکل ، خطا و تلاش برای کد منبع C / C ++ / Java را ارزیابی کنید.
طبق گفته Halstead ، “یک برنامه کامپیوتری اجرای الگوریتمی است که مجموعه ای از نشانه ها یا توکن ها محسوب می شود که می تواند به عنوان اپراتور یا اپرند ها طبقه بندی شود”. معیارهای Halstead برنامه ای را به عنوان توالی اپراتورها و اپرند های مرتبط با آن ها در نظر می گیرد.
او شاخص های مختلفی را برای بررسی پیچیدگی ماژول تعریف می کند.
پارامتر | معنا |
---|---|
n1 | تعداد اپراتورهای منحصر به فرد |
n2 | تعداد اپرندهای منحصر به فرد |
N1 | تعداد وقوع کل اپراتورها |
N2 | تعداد وقوع کل اپرند ها |
وقتی فایل منبع را برای مشاهده جزئیات پیچیدگی آن در Metric Viewer انتخاب می کنیم ، نتیجه زیر در گزارش متریک مشاهده می شود:
Metric | معنا | Mathematical Representation |
---|---|---|
n | Vocabulary | n1 + n2 |
N | Size | N1 + N2 |
V | Volume | Length * Log2 Vocabulary |
D | Difficulty | (n1/2) * (N1/n2) |
E | Efforts | Difficulty * Volume |
B | Errors | Volume / 3000 |
T | Testing time | Time = Efforts / S, where S=18 seconds. |
هر برنامه شامل اجرای جملات به منظور انجام برخی کارها و سایر اظهارات تصمیم گیری است که تصمیم می گیرد ، چه بیانیه هایی را باید اجرا کنند. این ساختار های تصمیم گیری جریان برنامه را تغییر می دهند.
اگر دو برنامه با یک اندازه را با هم مقایسه کنیم ، یک برنامه با اظهارات تصمیم گیری پیچیده تر خواهد بود زیرا کنترل برنامه به طور مکرر پرش می کند.
McCabe ، در سال ۱۹۷۶ ، اندازه گیری پیچیدگی سیکلوماتیک را برای تعیین کمیت پیچیدگی یک نرم افزار خاص ارائه داد. این مدل گرافیکی محور است که مبتنی بر ساختارهای تصمیم گیری برنامه مانند: if-else, do-while, repeat-until, switch-case و جملات goto است.
کشیدن یک کمان
کشیدن یک کمان
برای محاسبه پیچیدگی Cyclomatic یک ماژول برنامه ، از فرمول زیر استفاده می کنیم.
1 2 3 4 5 | V(G) = e – n + 2 Where e is total number of edges n is total number of nodes |
پیچیدگی سیکلوماتیک ماژول فوق، به صورت زیر است.
1 2 3 4 | e = 10 n = 8 Cyclomatic Complexity = 10 - 8 + 2 = 4 |
طبق گفته P. Jorgensen ، پیچیدگی سیکلوماتیک یک ماژول نباید از ۱۰ تجاوز کند.
این برای میزان اندازه نرم افزار استفاده می شود. عملکرد نقطه بر عملکرد ارائه شده توسط سیستم متمرکز است. از ویژگی ها و قابلیت های سیستم، برای اندازه گیری پیچیدگی نرم افزار استفاده می شود.
نقطه عملکرد در پنج پارامتر محاسبه می شود،
نامگذاری آن ها به عنوان External Input, External Output, Logical Internal Files, External Interface Files و External Inquiry است. برای در نظر گرفتن پیچیدگی نرم افزار ، هر پارامتر به صوذت ساده ، متوسط یا پیچیده طبقه بندی می شود.
حال بگذارید پارامترهای نقطه تابع را مشاهده کنیم:
هر ورودی منحصر به فرد به سیستم ، از خارج ، به عنوان ورودی خارجی یا External Input در نظر گرفته می شود. منحصر به فرد بودن ورودی اندازه گیری می شود ، زیرا هیچ دو ورودی نباید دارای قالب های یکسانی باشند. این ورودی ها می توانند پارامترهای داده یا کنترل باشند.
کلیه انواع خروجی ارائه شده توسط سیستم در این دسته شمارش می شود. اگر فرمت و / یا پردازش منحصر به فرد و یونیک باشد ، خروجی یونیک است.
هر سیستم نرم افزاری برای حفظ اطلاعات عملکردی خود و عملکرد صحیح ، فایل های داخلی را حفظ می کند. این فایل ها داده های منطقی سیستم را در اختیار دارند. این داده های منطقی ممکن است شامل داده های عملکردی و داده های کنترل باشد.
ممکن است سیستم نرم افزاری نیاز داشته باشد که فایل های خود را با برخی از نرم افزارهای خارجی به اشتراک بگذارد یا ممکن است لازم باشد فایل را برای پردازش یا به عنوان پارامتر برای برخی از عملکردها ارسال کند. تمام این فایل ها به عنوان فایل های رابط خارجی شمرده می شوند.
Inquiry ترکیبی از ورودی و خروجی است ، در جایی که کاربر برخی از داده ها را برای استعلام در مورد ورودی ارسال می کند و سیستم با خروجی استعلام پردازش شده، به کاربر پاسخ می دهد. پیچیدگی یک پرس و جو یا کوئری بیش از External Input و External Output است. گفته می شود که اگر ورودی و خروجی آن از نظر قالب و داده یونیک باشد ، یونیک است.
به هر یک از این پارامترها در سیستم با توجه به کلاس و پیچیدگی آن ها وزن داده می شود. در جدول زیر میزان وزن داده شده به هر پارامتر ذکر شده است:
پارامتر | ساده | متوسط | پیچیده |
---|---|---|---|
ورودی | ۳ | ۴ | ۶ |
خروجی ها | ۴ | ۵ | ۷ |
Enquiry یا موجودیت | ۳ | ۴ | ۶ |
فایل ها | ۷ | ۱۰ | ۱۵ |
رابط ها | ۵ | ۷ | ۱۰ |
جدول فوق بازده Function Point های خام را نشان می دهد. این نقاط تابع با توجه به پیچیدگی محیط تنظیم می شوند. سیستم با استفاده از چهارده ویژگی مختلف توصیف خواهد شد:
این فاکتورهای ویژگی ،از ۰ تا ۵ امتیاز می گیرند ، همان طور که در زیر ذکر شده است:
کل رتبه بندی ها به عنوان N خلاصه می شوند. مقدار N از ۰ تا ۷۰ متغیر است (۱۴ نوع ویژگی های x 5 انواع رتبه بندی).
برای محاسبه فاکتورهای تنظیم پیچیدگی (Complexity Adjustment Factors (CAF از فرمول های زیر استفاده می شود:
1 | CAF = 0.65 + 0.01N |
و سپس :
1 | Delivered Function Points (FP)= CAF x Raw FP |
این FP می تواند در معیارهای مختلفی استفاده شود مانند:
هزینه = $ / FP
کیفیت = Errors / FP
بهره وری = FP / person-month
مبحث Complexity یا پیچیدگی طراحی نرم افزار رو در این جا به پایان می رسونیم.
Complexity یا پیچیدگی طراحی نرم افزار رو در این بخش از آموزش مهندسی نرم افزار دنبال نمودیم. در ادامه پیاده سازی نرم افزار رو خواهیم دید.