بحران نرم افزار و بررسی پیچیدگی نرم افزار
2
اهداف جلسه
درک مشکلات تولید نرم افزار و راه مقابله با آن
درک اهمیت مهندسی نرم افزار
درک ضرورت روی آوردن به یک متدولوژی مدون
درک ماهیت نرم افزار و تفاوت آن با بقیه محصولات مهندسی
درک پیچیدگی نرم افزار و عوامل پدید آورنده آن
آشنائی با مبحث سیستم های پیچیده و ویژگیهای آنها
3
فهرست مطالب
بحران نرم افزار
مهندسی نرم افزار و ضرورت آن
متدولوژی و اهمیت آن
تفاوت نرم افزار و سخت افزار
پیچیدگی ذاتی نرم افزار
عوامل پدیدآورنده پیچیدگی نرم افزار
ساختار و ویژگی سیستم های پیچیده
پیچیدگی سازمان یافته و سازمان نیافته
4
بحران نرم افزار
”پیشرفت شگرف سخت افزار و ضعف روش های توسعه نرم افزار و ناتوانی این روش ها در کنترل پیچیدگی نرم افزار بحران نرم افزار را بوجود آورد“
5
بحران نرم افزار (ادامه)
علایم این بحران عبارتند از:
عدم بهره گیری کامل از قدرت سخت افزار
ناتوانی روش های تولید نرم افزار در پاسخگوئی به افزایش تقاضا
هزینه های هنگفت تولید نرم افزار
عدم تحویل به موقع
عدم تامین نیازمندی های کاربر
کیفیت پایین و نامطمئن
سختی نگهداری بعلت کیفیت پایین طراحی
6
مهندسی نرم افزار و ضرورت آن
”برای مقابله با این بحران مهندسی نرم افزار مطرح شد“
ویژگیهای مهندسی نرم افزار
تجدید نظر در روش های برنامه ریزی و کنترل
استفاده از تجربیات دیگر رشته های مهندسی (مثال الگوها)
تهیه و جایگزینی استانداردهای مطمئن
7
تعریف مهندسی نرم افزار
«بکارگیری یک روش سیستماتیک، منظم و قابل اندازه گیری برای تولید و توسعه، عملیاتی کردن و نگهداری نرم افزار؛ بکارگیری اصول مهندسی در تولید نرم افزار»
8
اهداف مهندسی نرم افزار
افزایش کیفیت، قابلیت اطمینان، قابلیت نگهداری
رضایت کاربر و سهامداران
کاهش هزینه
تحویل به موقع
استفاده از مولفه های استاندارد
استفاده مجدد
9
اصول مهندسی نرم افزار
ابزارهای خودکار
سازی
(CASE Tools)
متدولوژی
تکنولوژی مهندسی نرم افزار
فرآیند تولید
10
اهمیت متدولوژی
«یکی از علل اساسی بحران نرم افزار عدم وجود روش های مناسبی برای تولید نرم افزار»
روش (Method)
فرآیندی منظم که با استفاده از مجموعه ای از نمادگذاری های خوش تعریف، مجموعه ای از مدل ها را ایجاد می کند که هر کدام بخشی از سیستم نرم افزاری در دست تولید (یا توسعه) را توصیف می نمایند
11
اهمیت متدولوژی (ادامه)
متدولوژی
مجموعه ای از روش ها که در تمام چرخه حیات سیستم نرم افزاری اعمال شده و بر یک نوع نگرش کلی درباره جهان نرم افزار متکی هستند
بنظر بسیاری از متخصصین بکارگیری یک متدولوژی مدون در توسعه نرم افزار می تواند تا اندازه قابل توجهی مشکلات بیان شده را برطرف سازد
12
ویژگیهای یک متدولوژی مطلوب
ارائه تعاریفی از مفاهیم اولیه بکار رفته در متدولوژی
ارائه مدلی برای فرآیند تولید
داشتن مدل زیربنائی (مدل معماری)
ارائه یک شیوه علامت گذاری استاندارد
معرفی تکنیک هایی برای پیاده سازی متدولوژی که توانایی کنترل پیچیدگی سیستم های کنونی را دارا باشند
13
ویژگیهای یک متدولوژی … (ادامه)
ارائه معیارهای برای ارزیابی نتایج حاصل از بکارگیری متدولوژی
وجود ابزار اتوماتیک برای کمک به تولید و اجرای مدل های مبتنی بر متدولوژی
14
تفاوت نرم افزار و سخت افزار
فرآیند تولید نرم افزار یک فرآیند مهندسی است نه یک فرآیند تولید صنعتی
1
بوسیله متخصصین
بوسیله استفاده کنندگان نهایی
تعیین مشخصات
سخت افزار
نرم افزار
15
تفاوت نرم افزار و سخت افزار (ادامه)
نرم افزار با گذشت زمان دچار فرسودگی نشده بلکه فاسد می گردد
2
منحنی نرخ خرابی سخت افزار نسبت به زمان
زمان
نرخ خرابی
16
تفاوت نرم افزار و سخت افزار (ادامه)
منحنی نرخ خرابی ایده آل نرم افزار نسبت به زمان
17
تفاوت نرم افزار و سخت افزار (ادامه)
تغییر
نرخ خرابی افزایش یافته به علت تاثیرات جانبی
منحنی واقعی
منحنی ایده آل
منحنی نرخ خرابی واقعی نرم افزار نسبت به زمان
18
تفاوت نرم افزار و سخت افزار (ادامه)
Time
Dollars
Hardware Cost
Software Cost
1960
2005
19
تفاوت نرم افزار و سخت افزار (ادامه)
بیشتر نرم افزارها به شیوه سنتی ساخته می شوند و از ترکیب مولفه های استاندارد تولید نمی گردند
3
20
پیچیدگی ذاتی نرم افزار
ویژگیهای این پیچیدگی عبارتند از:
با پیچیدگی سیستم های طبیعی و محصولات فیزیکی ساخت دست بشر متفاوت است
یک خاصیت ذاتی سیستم های نرم افزاری بزرگ
”بدلیل تفاوت ذاتی بین نرم افزار و سخت افزار پیچیدگی خاصی در ابعاد مختلف از جمله در تعریف نرم افزار، طراحی، پیاده سازی، تست و نگهداری آن وجود دارد“
بنابراین ”نمی توان این پیچیدگی را از بین برد بلکه باید آن را کنترل نمود
21
عوامل پدید آورنده پیچیدگی نرم افزار
پیچیدگی حوزه مساله
نیازمندی های گوناگون و متضاد
ارتباط بین کاربر و مهندس نرم افزار
تغییر نیازها
پیچیدگی فرآیند تولید
انعطاف پذیری نرم افزار و استاندارد نبودن آن
مشکل توصیف رفتار سیستم های گسسته
22
ویژگیهای سیستم های پیچیده
”در اغلب سیستم های پیچیده، پیچیدگی به صورت سلسله مراتب (Hierarchy) ظاهر می شود“
1
Computer
Keyboard
CPU
Monitor
RAM
ALU
Control Unit
Registers
مثال:
23
ویژگیهای سیستم های پیچیده (ادامه)
” انتخاب مولفه های اولیه سیستم، امری است نسبتاً دلخواه بوده و تا حدود زیادی بستگی به دید طراح سیستم دارد“
2
ممکن است این سطح انتخاب اول باشد!
این سطح می تواند انتخاب اول باشد
مثال:
24
ویژگیهای سیستم های پیچیده (ادامه)
” در سیستمی که از چند زیرسیستم تشکیل می گردد،
ارتباط بین اجزای درونی هر زیر سیستم
(Intra-component Linkage)
قویتر از ارتباط بین خود زیر سیستم ها
(Inter-components Linkage) است“
3
25
ویژگیهای سیستم های پیچیده (ادامه)
مثال:
26
ویژگیهای سیستم های پیچیده (ادامه)
”سیستم های سلسله مراتبی معمولاً از تعداد کمی از زیرسیستم های مشخص و متفاوت تشکیل می شوند که این زیرسیستم ها به صورت های گوناگون و ترتیب های مختلف ظاهر می شوند“
4
27
ویژگیهای سیستم های پیچیده (ادامه)
مثال:
28
ویژگیهای سیستم های پیچیده (ادامه)
«معمولاً سیستم های پیچیده که به صورت محکم و استوار عمل می کنند حاصل تکامل سیستم های ساده ای هستند که به درستی عمل می کردند»
سیستم های پیچیده که از ابتدا به صورت پیچیده طراحی می شوند، هرگز کار نخواهند کرد
5
29
ویژگیهای سیستم های پیچیده (ادامه)
مثال:
این سیستم کار نخواهد کرد
30
ویژگیهای سیستم های پیچیده (ادامه)
این سیستم نیز بخوبی کار خواهد کرد
این سیستم بخوبی کار می کند
31
شکل اصلی سیستم های پیچیده
ساختار کلاس : سلسه مراتب IS-A
ساختار شئ: سلسه مراتب PART-OF
شکل اصلی سیستم های پیچیده = خواص پنجگانه + سلسله مراتب IS-A+ سلسه مراتب PART-OF
”مجموعه ویژگیهای کلی که در همه سیستم های پیچیده، صرفنظر از اندازه پیچیدگی، به چشم می خورند“
32
شکل اصلی سیستم های پیچیده (ادامه)
پیچیدگی سازمان نیافته: وضعیت مسئله قبل از تحلیل و طراحی (اجزاء بسیار زیاد)
پیچیدگی سازمان یافته: وضعیت مسئله پس از تحلیل و طراحی
قدرت پردازش همزمان مغز انسان محدود است
پیچیدگی سیستم های نرم افزاری روز به روز در حال افزایش است
؟
راه حل
تجزیه
نحوه اعمال
بوسیله متدولوژی خوب
33
پایان