فصل دوم پایان نامه پیش بینی خطای نرم افزار با داده کاوی (docx) 1 صفحه
دسته بندی : تحقیق
نوع فایل : Word (.docx) ( قابل ویرایش و آماده پرینت )
تعداد صفحات: 1 صفحه
قسمتی از متن Word (.docx) :
دانشکده آموزشهای الکترونیکی.
پایاننامه کارشناسی ارشد در رشته مهندسی فناوری اطلاعات (تجارت الکترونیک)
استفاده از داده کاوی در پیشبینی خطای نرمافزار بر اساس متریکهای کد و وابستگی
به کوشش:
جواد کامیابی
استاد راهنما:
دکتر اشکان سامی
دی 1390
به نام خدا
اظهار نامه
اینجانب جواد کامیابی دانشجوی رشته مهندسی فناوری اطلاعات گرایش تجارت الکترونیک دانشکده آموزشهای الکترونیکی اظهار مینمایم که این پایاننامه حاصل پژوهش خودم بوده و در جاهایی که از منابع دیگران استفاده کردهام، نشانی و مشخصات کامل آن را نوشتهام. همچنین اظهار میکنم که تحقیق و موضوع پایاننامهام تکراری نیست و تعهد مینمایم که بدون مجوز دانشگاه دستاوردهای آن را منتشر ننموده و یا در اختیار غیر قرار ندهم. کلیه حقوق این اثر مطابق با آییننامه مالکیت فکری و معنوی متعلق به دانشگاه شیراز است.
نام و نامخانوادگی
تاریخ و امضا
تقدیم به روح پاک شهدای هشت سال دفاع مقدس، آنان که جز به موجب فداکاریشان نیست که اکنون در آرامش نشستهایم و میاندیشیم و مینویسیم و آزادانه نقد و گاهی هم تخریب میکنیم ریزترینهای دین و میهنمان را حال آن که ممکن بود روزی برسد که برای فکر کردن و نوشتن هم باید از غربیها و شرقیها کسب اجازت کنیم.
حال که با لطف و عنایت خداوند متعال رساله حاضر به پایان رسیده است بر خود لازم میدانم که از استاد ارجمند آقای دکتر اشکان سامی به خاطر زحمات فراوان ایشان در راه به ثمر رساندن این تحقیق تشکر و قدردانی نمایم.
همچنین از آقایان دکتر امید بوشهریان و دکتر شهریار لطفی به خاطر راهنماییهای ارزشمندشان در تدوین این پایان نامه تشکر میکنم.
در نهایت از تمامی افرادی که من را در راه تحصیل علم یاری نمودند، به خصوص پدر و مادر عزیزم به خاطر زحمات فراوانشان در تمامی عرصههای زندگیم تشکر و قدردانی مینمایم؛ و برای همه این عزیزان از خداوند متعال درخواست توفیق دارم.
و من الله توفیق
جواد کامیابی
20 آذر 1390
چکیده:
تشخیص خطای نرم افزار با استفاده از درخت وابستگی بر اساس گراف وابستگی نرم افزار
به کوشش
جواد کامیابی
تضمین کیفیت نرمافزار همیشه دارای محدودیتهای زمان و هزینه بوده است. به منظور رسیدن به کیفیت بالا و کاهش محدودیتها، مدیران همواره سعی کردهاند تا بخشهای مستعد خطا را در نرمافزار پیشبینی نمایند و منابع مذکور را به صورت موثری به این بخشها اختصاص دهند. پیش از این، محققین روشهای خودکاری را برای کمک به مدیران در این امر مهم معرفی و از آنها استفاده کردهاند. روشهای خودکار مذکور با استفاده از اندازه گیری معیارهای مختلف نرمافزار و یافتن ارتباط میان این معیارها و خطاهای نرمافزاری، همواره سعی در افزایش سرعت و دقت در پیشبینی خطا داشتهاند. به نوعی میتوان این معیارها را در چهار دسته که عبارتند از معیارهای پیچیدگی، دادههای تاریخی، معیارهای طراحی و معیارهای وابستگی، قرار داد. اگرچه معیارهای استفاده شده، تا حدودی موثر هستند اما هنوز هیچکدام موفق به پیشبینی تمامی خطاهای موجود نشدهاند. در این رساله، ما با توسعه دادن مفهوم وابستگی در نرمافزار، به معرفی مفهوم جدیدی به نام درخت وابستگی میپردازیم. این مفهوم به ما کمک میکند تا با در نظر گرفتن تمامی وابستگیهای مستقیم و غیر مستقیم در بین اجزای نرمافزار، معیارهای جدیدی را استخراج نماییم که این معیارها میتوانند عملاً نتایج مطلوبتری را نسبت به معیارهای پیشین، در پیشبینی خطا ارائه دهند.
TOC \o "1-3" \h \z \u
فهرست مطالبعنوان صفحه TOC \o "1-3" \h \z \u 1-مقدمه: PAGEREF _Toc311824329 \h 132- پیشینه پژوهشی: PAGEREF _Toc311824330 \h 162-1-معیارهای نرمافزار PAGEREF _Toc311824331 \h 162-2-معیارهای وابستگی: PAGEREF _Toc311824332 \h 172-3-معیارهای تاریخی: PAGEREF _Toc311824333 \h 182-4-بررسی فعالیتهای گذشته PAGEREF _Toc311824334 \h 192-4-1- بررسی فعالیتها در زمینه معیارهای کد : PAGEREF _Toc311824335 \h 192-4-2- بررسی فعالیتها در زمینه معیارهای تاریخی: PAGEREF _Toc311824336 \h 222-4-3- بررسی فعالیتها در زمینه معیارهای وابستگی: PAGEREF _Toc311824337 \h 253-درخت وابستگی: PAGEREF _Toc311824338 \h 304-فرضیات: PAGEREF _Toc311824339 \h 405-جمع آوری داده: PAGEREF _Toc311824340 \h 415-تحلیل و مقایسه: PAGEREF _Toc311824341 \h 556-نتیجه گیری: PAGEREF _Toc311824342 \h 917-مراجع: PAGEREF _Toc311824343 \h 92
فهرست تصاویر
عنوان صفحه
TOC \h \z \c "شکل "
شکل 1: نمونهای از وابستگیهای میان کلاسها PAGEREF _Toc311824571 \h 29
شکل 2: نمونهای از وابستگیهای پیچیده در میان کلاسها PAGEREF _Toc311824572 \h 30
شکل 3: تصویری از نمای کلی برنامه Class Dependency Analyzer PAGEREF _Toc311824573 \h 37
شکل 4: نمونهای از کلاس دیاگرام نمایش داده شده در برنامه Class Dependency Analyzer PAGEREF _Toc311824574 \h 37
شکل 5: نمایش تمامی کلاسهای وابسته به یک کلاس خاص در برنامه Class Dependency Analyzer PAGEREF _Toc311824575 \h 38
شکل 6: نمونهای از یک گراف جهت دار PAGEREF _Toc311824576 \h 39
شکل 7: ماتریس وابستگی مربوط به گراف جهت دار در شکل شماره 6 PAGEREF _Toc311824577 \h 39
شکل 8: درخت وابستگی تشکیل شده از روی ماتریس وابستگی شکل 7 PAGEREF _Toc311824578 \h 42
شکل 9: متغیر تصادفی، انحراف معیار σ حول محور μ PAGEREF _Toc311824579 \h 53
فهرست نمودارها
عنوان صفحه
TOC \h \z \c "نمودار " نمودار 1: ارتباط بین جفتگری و انسجام PAGEREF _Toc311824749 \h 28
نمودار 2: بررسی رفتار معیار دقت در هنگام افزایش وابستگی درجه 1 PAGEREF _Toc311824750 \h 46
نمودار 3: بررسی رفتار معیار دقت در هنگام افزایش وابستگی درجه 2 PAGEREF _Toc311824751 \h 46
نمودار 4: بررسی رفتار معیار دقت در هنگام افزایش وابستگی درجه 3 PAGEREF _Toc311824752 \h 47
نمودار 5: مقایسه نتیجه «دقت» در دسته بندی سه نسخه اکلیپس PAGEREF _Toc311824753 \h 54
نمودار 6: مقایسه نتیجه «فراخوانی» در دسته بندی سه نسخه اکلیپس PAGEREF _Toc311824754 \h 55
نمودار 7: مقایسه نتیجه «صحت» در دسته بندی سه نسخه اکلیپس PAGEREF _Toc311824755 \h 56
نمودار 8: مقایسه نتیجه «معیار F» در دسته بندی سه نسخه اکلیپس PAGEREF _Toc311824756 \h 56
نمودار 9: مقایسه نتیجه «منحنی مشخصه عملکرد» در دسته بندی سه نسخه اکلیپس PAGEREF _Toc311824757 \h 57
نمودار 10: مقایسه نتیجه «کاپا» در دسته بندی سه نسخه اکلیپس PAGEREF _Toc311824758 \h 57
نمودار 11: مقایسه نتیجه «انحراف معیار» در دسته بندی سه نسخه اکلیپس PAGEREF _Toc311824759 \h 58
نمودار 12: مقایسه نتیجه «دقت» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی PAGEREF _Toc311824760 \h 59
نمودار 13: مقایسه نتیجه «فراخوانی» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی PAGEREF _Toc311824761 \h 60
نمودار 14: مقایسه نتیجه «صحت» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی PAGEREF _Toc311824762 \h 60
نمودار 15: مقایسه نتیجه «معیار F» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی PAGEREF _Toc311824763 \h 61
نمودار 16: مقایسه نتیجه «منحنی مشخصه عملکرد» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی PAGEREF _Toc311824764 \h 61
نمودار 17: مقایسه نتیجه «کاپا» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی PAGEREF _Toc311824765 \h 62
نمودار 18: مقایسه نتیجه «انحراف معیار» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی PAGEREF _Toc311824766 \h 62
نمودار 19: قیاس نتیجه «دقت» در دستهبندی بر روی کل دادهها PAGEREF _Toc311824767 \h 64
نمودار 20: قیاس نتیجه «فراخوانی» در دستهبندی بر روی کل دادهها PAGEREF _Toc311824768 \h 65
نمودار 21: قیاس نتیجه «صحت» در دستهبندی بر روی کل دادهها PAGEREF _Toc311824769 \h 66
نمودار 22: قیاس نتیجه «معیار F» در دستهبندی بر روی کل دادهها PAGEREF _Toc311824770 \h 66
نمودار 23: قیاس نتیجه «منحنی مشخصه عملکرد» در دستهبندی بر روی کل دادهها PAGEREF _Toc311824771 \h 67
نمودار 24: قیاس نتیجه «کاپا» در دستهبندی بر روی کل دادهها PAGEREF _Toc311824772 \h 67
نمودار 25: قیاس نتیجه «انحراف معیار» در دستهبندی بر روی کل دادهها PAGEREF _Toc311824773 \h 68
1-مقدمه:
یکی چالش بر انگیزترین موضوعات مطرح در تضمین کیفیت، در شرکتهای سازنده نرم افزار، موضوع رفع خطاهای نرم افزار است. خطاهای نرم افزاری میتوانند در زمان پیش و یا پس از انتشار نرم افزار تشخیص داده شوند. اما منابعی که میتوان برای تشخیص و تصحیح خطاها در نظر گرفت محدود است (Kamyabi et al.).
خطاها را میتوان به دو دسته کلی تقسیم کرد. خطاهای نحوی و خطاهای مفهومی. با توجه بهاین که ابزارهای خودکار بسیار قدرتمندی برای تشخیص خطاهای نحوی وجود دارند، احتمالاین که خطایی ازاین دست تا زمان انتشار تشخیص داده نشود، بسیار کم است. خطاهای مفهومی به آن دسته از خطاها اشاره دارد که در اثر مشکلاتی جدای از اشتباهات نحوی و خطاهای انسانی ملموس اتفاق میافتند و معمولاً در اثر عدم هماهنگی در بخشهای مختلف کد و گاهی به صورت بسیار ناملموس به وجود میآیند که در اینجا به سادگی نمیتوان با بررسی کد، اینگونه خطاها را تشخیص داد. بنا بر این در مورد خطاهای مفهومی داستان فرق میکند چرا که عوامل بسیار زیادی میتوانند در بروزاینگونه از خطاها دخیل باشند. CITATION Zim081 \l 1033 (Zimmermann & Nagappan, 2008) بنا براین همواره سعی شده است که با اندازه گیری معیارهای مختلف و استفاده از آنها در روشهای پیشبینی خودکار خطا، سرعت و دقت را در امر تست نرم افزار افزایش دهند. طی تحقیقاتی که تا کنون صورت گرفته، متداولترین معیارهای استفاده شده در پیشبینی اتوماتیک خطا، معیارهای پیچیدگی است. CITATION Zim081 \l 1033 (Zimmermann & Nagappan, 2008) اما جدیدترین روشی که مطرح شده است، مسأله مربوط به وابستگیهای بین کلاسها و همچنین بین ماژولها میباشد. انواع وابستگیها میتوانند بین دو کلاس و یا دو ماژول مطرح شوند که تحقیقات نشان داده است که این وابستگیها ارتباط بسیار زیادی با وجود خطاهای مفهومی دارند.
برای اجرای روشمند و علمی روند یافتن روابط و الگوهای مناسب برای پیش بینی خطا بر اساس معیارهای قابل اندازه گیری، از مفهومی به نام دادهکاوی استفاده خواهیم کرد که در تشریح و بیان مسأله به آن خواهیم پرداخت.
دراین پایان نامه، سعی میکنیم که به بررسی چنین وابستگیهایی بپردازیم و بر اساس روابط موجود بین وابستگی و وجود خطا در نرم افزار، وجود خطا در کد را پیش بینی نماییم.
در ادامه این رساله در بخش دوم به بررسی تحقیقات قبلی انجام شده در این زمینه میپردازیم، در بخش سوم به بیان انگیزش و نحوه به وجود آمدن ایده کار شده در این رساله میپردازیم، در بخش چهارم فرضیات مورد بررسی را مطرح میکنیم، در بخش پنجم دادهها و ابزارهای جمع آوری شده برای انجام عملی آزمایشات را معرفی میکنیم، در بخش ششم به بیان شیوه و نوع آزمایشات و بیان نتایج آنالیزها و نتایج میپردازیم و در بخش هفتم و پایانی این رساله سعی در نتیجهگیری از آزمایشات انجام شده خواهیم داشت.
2- پیشینه پژوهشی:
تلاشهای گذشته با هدف پیشبینی خطا را در سه گروه مورد بررسی قرار میدهیم: معیارهای نرمافزار، معیارهای وابستگی و معیارهای تاریخی. ابتدا به بیان توضیحی در مورد شیوه کار کردن این معیارها میپردازیم.
2-1 معیارهای نرمافزار:
معیارهای نرمافزار برای اندازهگیری درجه پیشرفته بودن یک محصول و یا یک فرآیند نرمافزاری به کار میروند. معیارهای نرمافزاری به چندین گروه تقسیم میشوند: معیارهای محصول، معیارهای فرآیند، معیارهای پروژه و معیارهای منبع. معیارهای نرمافزاری که در پیشبینی خطا به کار میروند معیارهای محصول میباشند که از مشخصات کد سیستم نرمافزاری استخراج میشوند. این معیارها به سه گروه تقسیم میشوند: معیارهای اندازه، معیارهای پیچیدگی و معیارهای کیفیت. CITATION Mil88 \l 1033 (Mills, 1988) معیارهای اندازه بر اساس تعداد خطوط کد برنامه محاسبه میشوند مانند تعداد کل خطوط برنامه، تعداد خطوط توضیحات و ... معیارهای میزان نگهداشتپذیری و قابلیت تست برنامه وابسته است از جمله معروفترین معیارهای پیچیدگی معیارهای پیچیدگی مک کیب و معیارهای هالستد میباشند. معیارهای مککیب پیچیدگی کد را بر اساس تعداد مسیرهای کنترلی محاسبه مینماید. CITATION McC \l 1033 (McCabe, 1976) هالستد معیارهای خود را بر اساس ارتباطات ریاضی بین اجزای کد، پیچیدگی کد و نوع زبان برنامه نویسی مطرح کرد. CITATION Hal \l 1033 (Halstead M. H., 1975) معیارهای اتصال و پیوستگی از معروفترین معیارهای کیفیت میباشند که بالا و یا پایین بودن اندازه این دو معیار نشان دهنده کیفیت محصول و یا فرآیند نرمافزاری است. CITATION Pre \l 1033 (Pressman, 1982) معیارهای کیفیت معیارهایی میباشند که درجه آنها میتواند تولیدکنندگان نرمافزار را در مورد توانایی دست کار کردن سیستمشان مطمئن سازد.
معیارهای وابستگی:
معیارهای وابستگی معیارهایی هستند که بر اساس ارتباط اجزای کد نرمافزار محاسبه میشوند. این ارتباط میتواند بین سطوح مختلف کد مطرح شود مانند سطح فایل، کلاس، تابع ... نوع ارتباط و یا به عبارت دیگر وابستگی موجود بین اجزای کد نیز میتواند متفاوت باشد مانند وابستگی داده که بر اساس تعریف و استفاده از داده میباشد و یا وابستگی صدا زدن که بر اساس تعریف و صدا زدن مؤلفهها میباشد. (Zimmermann, 2008 & Nagappan )
معیارهای تاریخی:
این دسته از معیارهای بر اساس تغییراتی که در بین چندین انتشار مختلف از یک سیستم نرمافزاری رخ میدهد تعریف میشوند. این تغییرات میتوانند اضافه شدن، حذف شدن، تغییر یافتن مؤلفههای جز مربوطه در بین چندین انتشار باشند. محدودیتی که در به کار بردن این معیارها وجود دارد این است که محاسبه این معیارهای تنها برای محصولات نرمافزاری مقدور میباشد که دارای چندین انتشار باشند و همچنین اطلاعات کامل در مورد انتشارات قبلی موجود باشد.
بررسی فعالیتهای گذشته:
در ادامه به بررسی تلاشهای گذشته در زمینه پیشبینی خطا میپردازیم.
2-3-1- بررسی فعالیتها در زمینه معیارهای کد :
در اولین مطالعات در زمینه پیشبینی خطا، آکیاما در سال 1971 بر روی یک سیستم که در فوجیتسو ژاپن توسعه یافته بود کار کرد و نشان داد معیارهای پیچیدگی نرمافزار و معیارهای اندازه نرمافزار در پیشبینی خطا موفق عمل مینمایند. CITATION Aki71 \l 1033 (Akiyama, 1971) فردینند در سال 1974 ارتباط تعداد خطا با تعداد اجزای کد را بررسی نمود و به این نتیجه رسید که تعداد اجزای کد با تعداد خطا در ارتباط است. CITATION Placeholder1 \l 1033 (Ferdinand A. , 1974) در سال 1975 هالستد معیارهای نرمافزاری را ارائه داد که بر اساس پیچیدگی زبان برنامهنویسی عمل مینمودند. هالستد از این معیارها برای پیشبینی خطا استفاده کرد و نشان داد معیارهای پیچیدگی هالستد در پیشبینی خطا موفق عمل مینمایند. این معیارها با نام معیارهای هالستد شناخته میشوند. CITATION Hal \l 1033 (Halstead M. H., 1975) چیدمبر و کمرر در سال 1994 بر روی سیستمهای شی گرا کار کردند و شش معیار طراحی برای این نوع سیستم معرفی کردند. این معیارها با نام معیارهای طراحی چیدمبر و کمرر شناخته میشوند. CITATION Chi \l 1065 (Chidamber & Kemerer, 1994) باسیلی در سال 1996 از معیارهای چیدمبر و کمرر به منظور پیشبینی خطا استفاده نمود و نشان داد معیارهای چیدمبر و کمرر عملکرد موفقی در پیشبینی خطا دارند. (Basili et al., 1996) در سال 1996 اوهلسون و آلبرگ معیارهای پیچیدگی را به منظور پیشبینی ماژولهای از کد به کار بردند که در طول اجرا دچار خطا میشدند. مدل پیش گویی کننده آنها 20 درصد از ماژولهایی از کد را شناسایی میکرد که شامل 47 درصد از کل خطاها بودند. CITATION Ohl \l 1033 (Ohlsson & Alberg, 1996) زائو در سال 1998 به بررسی معیارهای طراحی نرمافزار پرداخت و عملکرد آنها در پیشبینی خطا را محاسبه نمود. زائو نشان داد که معیارهای طراحی به خوبی در پیشبینی خطا عمل مینمایند. (Zhao M. et al., 1998) در سال 2006، ناپاگان معیارهایی برای پیشبینی خطاهای پس از زمان انتشار شناسایی را کرد و گزارش مبنی بر اینکه چگونه به طور سیستماتیک پیشبینی کنندههای خطاهای پس از زمان انتشار بر اساس تاریخچه ساخته شوند، را ارائه داد. (Nagappan et a., 2006) شروتر، زیمرمن و زلر در سال 2006 با استفاده از مهندسی معکوس نشان دادند معیارهای طراحی در پیشبینی خطاهای پس از اجرا موفق عمل مینمایند (Schröter et al., 2006) منزیس در سال 2007 با کار بر روی چند پروژه و با استفاده از معیارهای نرمافزار مدل پیشبینی خطایی طراحی نمود که توانست 71 درصد از کل خطاهای برنامه را با نرخ خطای 25 درصد شناسایی نماید (Menzies et al., 2007) در سال 2008 جیانگ کارکرد معیارهای سطح کد و معیارهای سطح طراحی را بر روی 13 محصول نرمافزاری با یک دیگر مقایسه نمود. نتایج حاکی از عملکرد بهتر معیارهای سطح طراحی نسبت به معیارهای سطح کد و ترکیب دو گروه معیار در پیشبینی خطا بود. (Jiang et al, 2008) در سال 2010 منزیس و گروهی دیگر با تلاشهای گذشته نشان دادند که معیارهای کد معیارهای موفقی در پیشبینی کد هستند و این معیارها را به عنوان معیارهای با استفاده راحت و مفید معرفی نمودند. (Menzies et al., 2010) در مطالعهای که بر روی چندین پروژه عظیم نرمافزاری در ترکیه انجام (Menzies et al., 2010)، مدل پیشبینی کننده که بر اساس معیارهای کد عمل مینمود را از طریق طبقه بندی نایو بیز اصلاح نموده و به بهبود 8 درصدی نسبت به گذشته دست یافتند. در یکی از تحقیقاتی که در سال 2010 بر روی پروژههای متن باز صورت گرفت توانایی معیارهای اندازهگیری متن با طبقه بندی نایو بیز و معیارهای پیچیدگی با آنالیز رگرسیون در پیشبینی خطاهای نرمافزار مورد مقایسه قرار گرفتند. این پژوهش نشان داد معیار اندازه گیری متن از فراخوانی بالاتر و معیار پیچیدگی از دقت بالاتری برخوردار هستند. CITATION Hid \l 1033 (Hideaki & Osamu, 2010) معیارهای طراحی معیارهای موفقی در پیشبینی خطا هستند اما در بسیاری از پروژههای نرمافزاری معیارهای سطح کد موجود نیستند از اینرو سامی و فخراحمد در سال 2010 معیارهای طراحی را بر اساس معیارهای کد تخمین زدند که این معیارها با معیارهای واقعی سطح طراحی تفاوت اندکی دارند. (Sami & Fakhrahmad, 2010)
2-3-2- بررسی فعالیتها در زمینه معیارهای تاریخی:
خوش گفتار در سال 1996 بر روی دو سیستم بزرگ ارتباطی کار کرد و در مدل پیش بینی خود ماژولهایی را به عنوان ماژول معیوب پیشبینی نمود که تعداد خطوط کد آن در انتشارهای مختلف تغییر میکند. (McMullan et al., 1996) هودپل (Hudepohl et al., 1996) توانست با استفاده از ترکیب معیارهای پیچیدگی و دادههای تاریخی پیشبینی نماید آیا یک ماژول دارای خطا میباشد یا خیر. در این تحقیق همانگونه که از اطلاعات با استفاده مجدد، استفاده شد معیارهای طراحی نرمافزار نیز در پیشبینی خطا مورد استفاده قرار گرفت با این فرض که ماژولهای جدید و یا تغییر یافته چگالی خطای بالاتری دارند. گریوز با استفاده از یک سیستم بسیار بزرگ و با طول عمر طولانی، نشان داد که معیارها بر اساس اطلاعات تاریخی بهتر از معیارهای پیچیدگی کد عمل مینمایند. (Graves T. L et al., 2000) در سال 2004 اوستراند در ادامه مطالعات خود از اطلاعات وضعیتی فایلهای برنامه که در طول انتشارهای مختلف تغییر میکند مانند تعداد خطوط اضافه شده، حذف شده و تغییر یافته در فایلها برای پیشبینی تعداد خطاهای برنامه استفاده نمود. (Ostrand et al., 2004) این مدل پیشگویی کننده برای یافتن خطا چه در مرحله توسعه و چه در مراحل پایانی پروژه از دقت بالایی برخوردار بود. اوستراند در سال 2005 مطالعات خود را بر اساس اطلاعات تاریخی بر روی 2 سیستم نرمافزاری بزرگ تا 17 انتشار برای پیشبینی فایلهایی با بالاترین چگالی خطا انجام داد. (Ostrand et al., 2005) مدل پیشبینی کننده خطاها 20 درصد از کل فایلهای 2 سیستم نرمافزاری را به عنوان فایلهای حاوی خطا پیشبینی کرد و موفق به شناسایی 71 درصد و 92 درصد از کل خطاها شد. زیمرمن در سال 2005 یکی از بزرگترین تحقیقات را بر روی اطلاعات تاریخی سیستمهای نرمافزاری انجام داد. (Zimmermann et al., 2005). او بر روی اطلاعات تاریخی 8 سیستم بزرگ کار کرد تا بتواند محلی که تغییرات بعدی در انتشار بعدی رخ میدهد را پیشبینی کند. در این تحقیق او توانست محل تغییرات در آینده را با احتمال 70% به درستی تشخیص دهد. در سال 2005 نگاپان و بال با کار بر روی ویندوز سرور 2003، از تغییرات کد برای پیشبینی زود هنگام چگالی خطا در سیستمهای نرمافزاری استفاده نمودند. (Ball & naggapan, 2005) آنها نشان دادند که معیارهای مطلق تغییرات کد در پیشبینی چگالی خطا ضعیف عمل میکند در صورتی که معیارهای نسبی تغییرات کد که توسط آنها مطرح شد توانست با دقت 89% بالاترین چگالی خطا را شناسایی نماید. آنها نشان دادند افزایش معیار نسبی تغییرات با افزایش چگالی خطا توأم است و همچنین معیار نسبی تغییرات علاوه بر چگالی در شناسایی اجزای معیوب نیز موفق است. آنها همچنین بیان کردند که تغییرات در کد و وابستگی به کدهای تغییر داده شده میتواند باعث بروز خطاهای پس از زمان انتشار شود. این پیشبینی به کمک معیارهای پیچیدگی نظیر سایز اجزای کد و اندازه موقتی کد تغییر یافته صورت گرفت. در سال 2006 تحقیقی بر روی ویندوز ایکس پی- سرویس پک 1 و ویندوز سرور 2003 صورت گرفت. در این تحقیق نشان داده شد که معیارهایی که بر اساس اطلاعات تاریخی در سطح پروژه و محصول عمل مینمایند معیارهای مناسبی برای پیشبینی خطاهای پس از زمان اجرا هستند و همچنین کارایی این متریکها در سطح پروژههای بسیار بزرگ نیز نشان داده شد. (Nagappan et al., 2006).
2-3-3- بررسی فعالیتها در زمینه معیارهای وابستگی:
در سال 1981 هنری و کافورا معیارهایی تحت عنوان معیار ورودی و معیار خروجی مطرح کردند. معیارهای ورودی تعداد ماژولهایی است که یک ماژول خاص را صدا میزنند و معیار خروجی تعداد ماژولهایی است که توسط یک ماژول خاص صدا زده میشوند. هنری و کافورا از این دو معیار برای محاسبه پیچیدگی کد استفاده نمودند و نشان دادند اجزایی از کد که دارای معیار ورودی و معیار خروجی بزرگی باشند دارای طراحی ضعیفی هستند. CITATION SMH \l 1033 (Kafura & Henry, 1981) در سال 1989 سلبی و پورتر با استفاده از یک الگوریتم بازگشتی درختهای دستهبندی استخراج کردند که گرههای آنها تابعهای چند ارزشی بر اساس معیارهای کد هستند. هدف از تشکیل این درختها شناسایی اجزای معیوب کد بود. سلبی و پورتر بر روی 16 پروژهی ناسا کار کردند و موفق به شناسایی 79.3% از کل اجزای معیوب شدند. (Porter & Selby, 1989) پدولسکی و کلارک در سال 1990 یک مدل رسمی بر اساس وابستگیهای برنامه ارائه کردند. این وابستگیها بر اساس ارتباط دو قسمت متن کد برنامه استخراج میشود. CITATION APo \l 1033 (Clarke & Pogdurski, 1990) در سال 1998 بینکلی و اسکاچ بر روی خطاهای زمان اجرا کار کردند و همچنین معیارهای وابستگی متصل را مطرح کردند. .آنها کار خود را بر روی 4 پروژه به زبانهای جاوا، کوبول، سی و سی پلاس پلاس بررسی نمودند. تحقیقات آنها حاکی بر موفقیت آمیز بودن این معیارها در کیفیت طراحی نرمافزار بود. آنها نشان دادند معیار وابستگی متصل در مقایسه با معیارهای متقابل عملکرد بسیار بهتری در پیشبینی خطاهای زمان اجرا دارند. CITATION Placeholder6 \l 1033 (Binkley & Schach, 1998) بیون و وایتهد در سال 2003 گراف وابستگی و دادههای تاریخی را برای شناسایی ناپایداریهای برنامه ترکیب نمودند. CITATION Ide \l 1033 (Bevan & Whitehead, 2003) پینگر در بر اساس اطلاعاتی که از سیر تکاملی و اطلاعات تاریخی پروژههای نرمافزاری بدست آورد پیوستگیهای تصادفی بین اجزای کد مشاهده کرد که ممکن بود در آینده منجر به بروز خطا شوند. (Pinzger et al., 2005) شروتر در سال 2006 نشان داد که وابستگیهای ورودی واقعی میتواند خطاهای را شناسایی کند و وابستگیهای ورودی کامپایلر از وابستگیهای ورودی واسط کاربر احتمال خطای بالاتری را ایجاد میکند (Schröter & Zeller, 2006) در یکی از تلاشهای تیم مایکروسافت نشان داده شد تغییرات کد و وابستگیها میتواند معیار موثری در شناسایی خطاهای پس از انتشار باشد. (Nagappan & Ball, 2007) ایدهی آنها این بود که اگر جز A در کد برنامه وابستگی زیادی به جز دیگری مانند B داشته باشد و جز B در طول انتشارات مختلف تغییر بکند جز A برای هماهنگ بودن با جز B نیازمند تغییراتی میباشد این تغییرات معمولاً در طول وابستگیها منتشر میشود. نگاپان و بال در این پژوهش بر روی ویندوز سرور 2003 نشان دادند درجه بالای وابستگی در کنار تغییرات کد میتواند باعث انتشار خطا در سراسر یک سیستم شود. زیمرمن و نگاپان در سال 2007 با کار بروی گراف وابستگی زیر سیستمهای کد نشان دادند بین پیچیدگی گراف وابستگی و خطاهای پس از انتشار ارتباط بالایی وجود دارد و هنگامی مدلهایی پیشگویی بر اساس زیر سیستمهایی که در معماری بالاتر هستند ساخته میشوند بهتر عمل میکنند. (Zimmermann & Nagappan, 2007) در سال 2008 زیمرمن و نگاپان معیارهایی بر اساس وابستگی موجود در کد استخراج نمودند. (Zimmermann & Nagappan, 2008) این معیارها بر اساس مشاهدات آنها از گراف وابستگی ویندوز سرور 2003 تعریف شده است. آنها در بررسی گراف وابستگی ویندوز سرور 2003 مشاهده کردند گرههای که حالت مرکزیت دارند و یا در مش هایی با تعداد گرههای زیاد قرار دارند از احتمال معیوب بودن بالایی برخوردارند بر اساس این مشاهدات این تیم تحقیقاتی معیارهایی تحت عنوان معیارهای شبکه استخراج نمود و کارایی آنها را برای پیشبینی خطا در مقایسه با معیارهای پیچیدگی کد بررسی کرد که در این مقایسه معیارهای شبکه توانستند 60% از کل اجزای معیوب برنامه را شناسایی نمایند در صورتی که معیارهای پیچیدگی تنها موفق به شناسایی 30% از کل خطاها شدند. در سال 2009 تورهان با بررسی و آزمایشاتی نشان داد که معیارهای شبکه روی برنامههای بزرگ کارایی بهتری از معیارهای پیچیدگی دارند اما در نرمافزارهایی با حجم کوچک تفاوتی میان قدرت پیشبینی خطای معیارهای شبکه و معیارهای پیچیدگی وجود ندارد. (Torhun et al. 2009).
تلاشی که در این رساله صورت گرفته است در دسته معیارهای پیوستگی جای میگیرد.
7-مراجع:
BIBLIOGRAPHY Akyama, F. (1971). An Example of Software System Debugging. International Conference on Digital Forensics (pp. 353-359). Vancouver, Canada: Chapman & Hall.Basili, V., Briand, L., & Melo, W. (1996). A validation of object-oriented design metrics as quality indicators. IEEE Transaction on Software Engineering , 22 (10) , (pp.751-761).Bener, A., Tosun, A., Turhan, B., & Menzies, T. (2010). Practical Considerations in Deploying Statistical Methods for Defect Prediction: A Case Study within the Turkish Telecommunications Industry. Information and Software Technology , vol.52, (p.1242-1257).Bevan, J., & Whitehead, E. J. (2003). Identification of Software Instabilities. Working Conference on Reverse Engineering, (pp. 134-145). Victoria, B.C., Canada.Binkley, A. B., & Schach, S. R. (1998). Validation of the coupling dependency metric as a predictor of failures and maintenance measures. In in International Conference on Software Engineering, (pp.452-455). Kyoto.Chidamber, S., & Kemerer, C. (1994). A metrics suite for object oriented design. IEEE Transaction on Software Engineering , 20 (6) , (pp.476-493).Clarke, A., & Pogdurski, L. (1990). A Formal Model of Program Dependences and its Implications for Software Testing, Debugging, and Maintenance. IEEE Transactions on Software Engineering , 16, (pp.965-979).Constantine, L. (1996). Usage-centered software engineering: new models, methods, and metrics. International Conference on Software Engineering: Education and Practice, (pp. 2-9). Hamilton, New Zealand.Fenton, N. E., & Lawrence, P. S. (1998). Software Metrics: A Rigorous and Practical Approach. Boston: PWS Publishing Co.Ferdinand, A. (1974). A Theory of System Complexity. Int’l J. General Systems , vol. 1, (pp. 19-33).Graves, T. L., Karr, A. F., Marron, J. S., & Siy, H. (2000). Predicting fault incidence using software change history. IEEE Transactions on Software Engineering , vol. 26, (pp. 653-661).Hand, D. J., Mannila, H., & Smyth, P. (2001). Principles of Data Mining. MIT-Press.Henry, S., & Kafura, D. (1981). Software Structure Metrics based on Information Folow. IEEE Transactions on Software Engineering , 7 (5) , (pp. 510-518).Hideaki, H., & Osamu, M. (2010). An Integrated Approach to Detect Fault-Prone Modules Using Complexity and Text Feature Metrics. the international conference on Advances in computer science and information technology, (pp. 457–468). Berlin Heidelberg.Hudepohl, J. P., Aud, S. J., Khoshgoftaar, T. M., Allen, E. B., & Mayrand, J. (1996). Emerald: Software Metrics and Models on the Desktop. IEEE Software , vol. 13, No. 5,(pp. 56-60).Jiang, Y., Cuki, B., Menzies, T., & Bartlow, N. (2008). Comparing design and code metrics for software quality prediction. The 4th international workshop on Predictor models in software engineering (pp. 11-18). Leipzig, Germany: ACM New York, NY, USA.Kafura, D., & Henry, S. (1981). Software Structure Metrics based on Information Flow. IEEE Transactions on Software Engineering , vol.7, (pp. 510-518).Kamyabi, J., Maleki, F. & S., A., (2012). Software defect prediction using transitive dependencies on software dependency graph. International Conference of Computer Science and its Applications. vol. 114, No. 1, (pp. 241-249). Jeju, South Korea: Springer Netherlands.Karp, R. M. (1975). Richard M. Karp. The Journal of Symbolic Logic , vol 40, No. 4, (pp. 618-619).Khoshgoftaar, T., Allen, E., Goel, N., Nandi, A., & McMullan, J. (1996). Detection of software modules with high debug code churn in a very large legacy system. Seventh International Symposium on Software Reliability Engineering, (pp. 364-371). White Plains, NY , USA .McCabe, T. J. (1976). A complexity measure. the 2nd international conference on Software, (p.p. 407).Menzies, T., Greenwald, J., & Frank, A. (2007). Data Mining Static Code Attributes to Learn Defect Predictors. IEEE Transactions on Software Engineering , vol 33, No. 1, (pp. 2-13).Menzies, T., Milton, Z., Turhan, B., Cukic, B., Jiang, Y., & Bener, A. (2010). Defect prediction from static code features: current results, limitations, new approaches. Emperical Software Engineering , Vol 17, No 4.Nagappan, N., & Ball, T. (2005). Use of relative code churn measures to predict system defect density. 27th International Conference on Software Engineering, (pp. 284-292). St. Louis, Missouri, USA.Nagappan, N., & Ball, T. (2007). Using Software Dependencies and Churn Metrics to Predict Field Failures: An Empirical Case Study. International Symposium on Empirical Software Engineering and Measurement, (pp. 364-373).Nagappan, N., Ball, T., & Murphy, B. (2006). Using Historical In-Process and Product Metrics for Early Estimation of Software Failures. 17th International Symposium on Software Reliability Engineering, (pp. 62-74). downtown Raleigh, North Carolina.Nagappan, N., Ball, T., & Zeller, A. (2006). Mining Metrics to Predict Component Failures. International Conference on Software Engineering, (pp. pp.452-461). Shanghai, China.Ohlsson, N., & Alberg, H. (1996). Predicting fault-prone software modules in telephone switches. IEEE Transaction on Software Engineering , 22 (12) , 886-894.Ostand, T. J., Weyuker, E. J., & Bell, R. M. (2004). Where the Bugs Are. The 2004 ACM SIGSOFT international symposium on Software testing and analysis, (pp. 86-96). Newport Beach, CA, USA.Ostrand, T., Weyuker, E., & Bell, R. (2005). Predicting the location and number of faults in large software systems. IEEE Transactions on Software Engineering , 31 (4) , 340-355.Pinzger, M., Gall, H., & Fischer, M. (2005). Towards an Inte-grated View on Architecture and its Evolution. Electronic Notes in Theoretical Computer Science, (pp. 183-196).Podgurski, A., & Clarke, L. (1990). A Formal Model of Program Dependences and Its Implications for Software Testing, Debugging, and Maintenance. IEEE Transactions on Software Engineering , 16 (9) , 965-979.Pressman, R. S. (1982). Software Engineering - A Practitioner's Approach. McGraw Hill.Sami, a & Fakhrahmad, m. (2010). Design-level metrics estimation based on code metrics. the ACM Symposium on Applied Computing. New York, NY, USA 2010.Schröter, A., Zimmermann, T., & Zeller, A. (2006). Predicting component failures at design time. International symposium on Empirical software engineering (pp. 18-27). Colorado: ACM New York, NY, USA.Schröter, A., Zimmermann, T., & Zeller, A. (2006). Predicting component failures at design time. ACM/IEEE International symposium on empirical software engineering (pp. 18-27). New York, NY, USA: ACM Press.Selby, R., & Porter, A. (1989). Software metric classification trees help guide the maintenance of large-scale systems. Software Maintenance, (pp. 116 - 123). Miami, FL , USA.Tosun, A., Turhan, B., & Bener, A. (2009). Validation of network measures as indicators of defective modules in software systems. the 5th International Conference on Predictor Models in Software Engineering. Zhao, M., Wohlin, C., Ohlsson, N., & and Xie, M. (1998). A Comparison between Software Design and Code metrics for the Prediction of Software Fault Content,. Information and Software Technology. , 40 (14) , 801-809.Zimmermann, T., & Nagappan, N. (2008). Predicting defects using network analysis on dependency graphs. The 2008 International Conference on Software Engineering, (pp. 531-540). Leipzig, Germany.Zimmermann, T., Weißgerber, P., Diehl, S., & Zeller, A. (2005). Mining Version Histories to Guide Software Changes. IEEE Transactions in Software Engineering , 31 (6) , 429-445.
Abstract
SOFTWARE DEFECT PREDICTION USING DATAMINING BASED ON SOFTWARE DEPENDENCIES AND CODE METRICS
By
Javad Kamyabi
In software production process, quality assurance resources are limited by time and cost. In order to achieve high quality, managers need to detect the defect prone parts of code and allocate the resources to them. So far, researchers have used some automated methods for defect prediction. These methods use software metrics to predict the defects. These metrics are complexity metrics, design metrics, dependency related metrics and historical data for software defect prediction. Although these methods are somewhat efficient, no one helps to predict all the defects. In this thesis we have extended the definition of dependency and as the result the concept of dependency tree is defined. Dependency tree covers all of the direct and indirect dependencies existed for each component. It helps us to extract some new metrics for defect prediction. Novelty of my work is that these metrics cover all direct and indirect dependencies and they provide better results in defect prediction in comparison with the previous metrics.
Shiraz University
Department of E-learning
M.S.THESIS
In Information Technology (e-commerce).
SOFTWARE DEFECT PREDICTION USING DATAMINING BASED ON SOFTWARE DEPENDENCIES AND CODE METRICS
By
Javad Kamyabi
Supervised by
Dr. Ashkan Sami
December 2011