دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۱۸
  • دی

جلسه ۰۹ : پیچیدگی طراحی نرم افزار

  • دسته‌بندی‌ها :
جلسه ۰۹ : پیچیدگی طراحی نرم افزار
    • جزئیات
    • نوع محتواآموزشی

      مقدمه

      عرض سلام خدمت همراهان گرامی وب سایت آموزشی پی وی لرن. با موضوع آموزش مهندسی نرم افزار (Software Engineering) در خدمتتون خواهیم بود. با مبحث Complexity یا پیچیدگی طراحی نرم افزار همراه خواهیم بود.

      Complexity یا پیچیدگی طراحی نرم افزار

      Complexity یا پیچیدگی طراحی نرم افزار چیست؟

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

      بدون استفاده از معیارها و اقدامات پیچیدگی ، ارزیابی پیچیدگی نرم افزار دشوار است. بگذارید سه روش پیچیدگی نرم افزار مهم را مشاهده کنیم.

      اقدامات پیچیدگی Halstead

      در سال ۱۹۷۷ ، آقای Maurice Howard Halstead معیارهایی را برای اندازه گیری پیچیدگی نرم افزار ارائه داد. معیارهای Halstead به اجرای واقعی برنامه و اقدامات آن بستگی دارد که مستقیماً توسط اپراتورها و اپرند ها از طریق کد منبع، در روش استاتیک محاسبه می شوند. این امر اجازه می دهد تا زمان تست ، واژگان ، اندازه ، مشکل ، خطا و تلاش برای کد منبع C / C ++ / Java را ارزیابی کنید.

      طبق گفته Halstead ، “یک برنامه کامپیوتری اجرای الگوریتمی است که مجموعه ای از نشانه ها یا توکن ها محسوب می شود که می تواند به عنوان اپراتور یا اپرند ها طبقه بندی شود”. معیارهای Halstead برنامه ای را به عنوان توالی اپراتورها و اپرند های مرتبط با آن ها در نظر می گیرد.

      او شاخص های مختلفی را برای بررسی پیچیدگی ماژول تعریف می کند.

      پارامترمعنا
      n1تعداد اپراتورهای منحصر به فرد
      n2تعداد اپرندهای منحصر به فرد
      N1تعداد وقوع کل اپراتورها
      N2تعداد وقوع کل اپرند ها

      وقتی فایل منبع را برای مشاهده جزئیات پیچیدگی آن در Metric Viewer انتخاب می کنیم ، نتیجه زیر در گزارش متریک مشاهده می شود:

      MetricمعناMathematical Representation
      nVocabularyn1 + n2
      NSizeN1 + N2
      VVolumeLength * Log2 Vocabulary
      DDifficulty(n1/2) * (N1/n2)
      EEffortsDifficulty * Volume
      BErrorsVolume / 3000
      TTesting timeTime = Efforts / S, where S=18 seconds.

      اقدامات پیچیدگی Cyclomatic

      هر برنامه شامل اجرای جملات به منظور انجام برخی کارها و سایر اظهارات تصمیم گیری است که تصمیم می گیرد ، چه بیانیه هایی را باید اجرا کنند. این ساختار های تصمیم گیری جریان برنامه را تغییر می دهند.

      اگر دو برنامه با یک اندازه را با هم مقایسه کنیم ، یک برنامه با اظهارات تصمیم گیری پیچیده تر خواهد بود زیرا کنترل برنامه به طور مکرر پرش می کند.

      McCabe ، در سال ۱۹۷۶ ، اندازه گیری پیچیدگی سیکلوماتیک را برای تعیین کمیت پیچیدگی یک نرم افزار خاص ارائه داد. این مدل گرافیکی محور است که مبتنی بر ساختارهای تصمیم گیری برنامه مانند: if-else, do-while, repeat-until, switch-case و جملات goto است.

      فرآیند ساخت گراف کنترل جریان:

      • شکستن برنامه به بلوک های کوچک تر ، محدود کردن به وسیله ی ساختارهای تصمیم گیری (decision-making).
      • ایجاد گره به نمایندگی از هر یک از این گره ها.
      • گره ها را به شرح زیر اتصال دهید:
      • در صورتي كه كنترل بتواند از بلوك i به بلوک j منشعب شود.

      کشیدن یک کمان

      • از گره خروج تا گره ورود

      کشیدن یک کمان

      برای محاسبه پیچیدگی Cyclomatic یک ماژول برنامه ، از فرمول زیر استفاده می کنیم.

      مثال : 

       

      Complexity یا پیچیدگی طراحی نرم افزار

      Complexity یا پیچیدگی طراحی نرم افزار

      پیچیدگی سیکلوماتیک ماژول فوق، به صورت زیر است.

      مثال : 

      طبق گفته P. Jorgensen ، پیچیدگی سیکلوماتیک یک ماژول نباید از ۱۰ تجاوز کند.

      نقطه تابع یا عملکرد

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

      نقطه عملکرد در پنج پارامتر محاسبه می شود،

      نامگذاری آن ها به عنوان External Input, External Output, Logical Internal Files, External Interface Files و External Inquiry است. برای در نظر گرفتن پیچیدگی نرم افزار ، هر پارامتر به صوذت ساده ، متوسط یا پیچیده طبقه بندی می شود.

       

      Complexity یا پیچیدگی طراحی نرم افزار

      Complexity یا پیچیدگی طراحی نرم افزار

      حال بگذارید پارامترهای نقطه تابع را مشاهده کنیم:

      ورودی خارجی (External Input)

      هر ورودی منحصر به فرد به سیستم ، از خارج ، به عنوان ورودی خارجی یا External Input در نظر گرفته می شود. منحصر به فرد بودن ورودی اندازه گیری می شود ، زیرا هیچ دو ورودی نباید دارای قالب های یکسانی باشند. این ورودی ها می توانند پارامترهای داده یا کنترل باشند.

      • ساده – اگر تعداد ورودی کم باشد و روی فایل های داخلی کم تری تأثیر بگذارد.
      • پیچیده – اگر تعداد ورودی ها زیاد باشد و روی فایل های داخلی بیش تری تأثیر بگذارد.
      • متوسط ​​- بین ساده و پیچیده.

      خروجی خارجی (External Output)

      کلیه انواع خروجی ارائه شده توسط سیستم در این دسته شمارش می شود. اگر فرمت و / یا پردازش منحصر به فرد و یونیک باشد ، خروجی یونیک است.

      • ساده – اگر تعداد خروجی کم باشد.
      • پیچیده – اگر تعداد خروجی زیاد باشد.
      • متوسط ​​- بین ساده و پیچیده.

      فایل های داخلی منطقی (Logical Internal Files)

      هر سیستم نرم افزاری برای حفظ اطلاعات عملکردی خود و عملکرد صحیح ، فایل های داخلی را حفظ می کند. این فایل ها داده های منطقی سیستم را در اختیار دارند. این داده های منطقی ممکن است شامل داده های عملکردی و داده های کنترل باشد.

      • ساده – اگر تعداد انواع رکورد کم باشد.
      • پیچیده – اگر تعداد انواع رکورد زیاد باشد.
      • متوسط ​​- بین ساده و پیچیده.

      پرونده های رابط خارجی (External Interface Files)

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

      • ساده – اگر تعداد انواع رکورد در فایل اشتراکی کم باشد.
      • پیچیده – اگر تعداد انواع رکورد در فایل اشتراکی زیاد باشد
      • متوسط ​​- بین ساده و پیچیده.

      استعلام خارجی (External Inquiry)

      Inquiry ترکیبی از ورودی و خروجی است ، در جایی که کاربر برخی از داده ها را برای استعلام در مورد ورودی ارسال می کند و سیستم با خروجی استعلام پردازش شده، به کاربر پاسخ می دهد. پیچیدگی یک پرس و جو یا کوئری بیش از External Input و External Output است. گفته می شود که اگر ورودی و خروجی آن از نظر قالب و داده یونیک باشد ، یونیک است.

      • ساده – اگر پرس و جو به پردازش کم نیاز داشته باشد و مقدار کمی از داده های خروجی را به دست آورد.
      • پیچیده – اگر پرس و جو به پردازش بالا نیاز داشته باشد و مقدار زیادی از داده های خروجی را به دست آورد.
      • متوسط ​​- بین ساده و پیچیده.

      به هر یک از این پارامترها در سیستم با توجه به کلاس و پیچیدگی آن ها وزن داده می شود. در جدول زیر میزان وزن داده شده به هر پارامتر ذکر شده است:

      پارامترسادهمتوسطپیچیده
      ورودی۳۴۶
      خروجی ها۴۵۷
      Enquiry یا موجودیت۳۴۶
      فایل ها۷۱۰۱۵
      رابط ها۵۷۱۰

      جدول فوق بازده Function Point های خام را نشان می دهد. این نقاط تابع با توجه به پیچیدگی محیط تنظیم می شوند. سیستم با استفاده از چهارده ویژگی مختلف توصیف خواهد شد:

      • ارتباطات داده
      • پردازش توزیع شده
      • اهداف عملکرد
      • بار پیکربندی عملیات
      • نرخ تراکنش ها
      • ورود داده های آنلاین
      • راندمان کاربر نهایی
      • بروزرسانی آنلاین
      • منطق پردازش پیچیده
      • قابلیت استفاده مجدد
      • سهولت نصب
      • سهولت عملیاتی
      • سایت های مختلف
      • تمایل به تسهیل تغییرات

      این فاکتورهای ویژگی ،از ۰ تا ۵ امتیاز می گیرند ، همان طور که در زیر ذکر شده است:

      • بدون تأثیر
      • تصادفی
      • در حد متوسط
      • میانگین
      • قابل توجه
      • ضروری

      کل رتبه بندی ها به عنوان N خلاصه می شوند. مقدار N از ۰ تا ۷۰ متغیر است (۱۴ نوع ویژگی های x 5 انواع رتبه بندی).

      برای محاسبه فاکتورهای تنظیم پیچیدگی (Complexity Adjustment Factors (CAF از فرمول های زیر استفاده می شود:

      مثال : 

      و سپس :

      مثال : 

      این FP می تواند در معیارهای مختلفی استفاده شود مانند:

      هزینه = $ / FP

      کیفیت = Errors / FP

      بهره وری = FP / person-month

      مبحث Complexity یا پیچیدگی طراحی نرم افزار رو در این جا به پایان می رسونیم.

      کلام پایانی

      Complexity یا پیچیدگی طراحی نرم افزار رو در این بخش از آموزش مهندسی نرم افزار دنبال نمودیم. در ادامه پیاده سازی نرم افزار رو خواهیم دید.

      QR:  جلسه ۰۹ : پیچیدگی طراحی نرم افزار
      به اشتراک بگذارید