فهرست مطالب:
1-مقدمه:…………………… 14
2- پیشینه پژوهشی:………………… 16
2-1-معیارهای نرمافزار…………………. 16
2-2-معیارهای وابستگی:………………… 17
2-3-معیارهای تاریخی: …………………17
2-4-بررسی فعالیتهای گذشته…………………. 18
2-4-1- بررسی فعالیتها در زمینه معیارهای کد :………………… 18
2-4-2- بررسی فعالیتها در زمینه معیارهای تاریخی: …………………20
2-4-3- بررسی فعالیتها در زمینه معیارهای وابستگی:………………… 22
3-درخت وابستگی: …………………26
4-فرضیات: …………………33
5-جمع آوری داده:………………… 34
5-تحلیل و مقایسه:………………… 44
6-نتیجه گیری:………………… 76
7-مراجع:………………… 77
چکیده:
تضمین کیفیت نرمافزار همیشه دارای محدودیتهای زمان و هزینه بوده است. به منظور رسیدن به کیفیت بالا و کاهش محدودیتها، مدیران همواره سعی کردهاند تا بخشهای مستعد خطا را در نرمافزار پیشبینی نمایند و منابع مذکور را به صورت موثری به این بخشها اختصاص دهند. پیش از این، محققین روشهای خودکاری را برای کمک به مدیران در این امر مهم معرفی و از آنها استفاده کردهاند. روشهای خودکار مذکور با استفاده از اندازه گیری معیارهای مختلف نرمافزار و یافتن ارتباط میان این معیارها و خطاهای نرمافزاری، همواره سعی در افزایش سرعت و دقت در پیشبینی خطا داشتهاند. به نوعی میتوان این معیارها را در چهار دسته که عبارتند از معیارهای پیچیدگی، دادههای تاریخی، معیارهای طراحی و معیارهای وابستگی، قرار داد. اگرچه معیارهای استفاده شده، تا حدودی موثر هستند اما هنوز هیچکدام موفق به پیشبینی تمامی خطاهای موجود نشدهاند. در این رساله، ما با توسعه دادن مفهوم وابستگی در نرمافزار، به معرفی مفهوم جدیدی به نام درخت وابستگی میپردازیم. این مفهوم به ما کمک میکند تا با در نظر گرفتن تمامی وابستگیهای مستقیم و غیر مستقیم در بین اجزای نرمافزار، معیارهای جدیدی را استخراج نماییم که این معیارها میتوانند عملاً نتایج مطلوبتری را نسبت به معیارهای پیشین، در پیشبینی خطا ارائه دهند.
1- مقدمه
یکی چالش بر انگیزترین موضوعات مطرح در تضمین کیفیت[1]، در شرکتهای سازنده نرم افزار، موضوع رفع خطاهای نرم افزار است. خطاهای نرم افزاری میتوانند در زمان پیش و یا پس از انتشار[2] نرم افزار تشخیص داده شوند. اما منابعی که میتوان برای تشخیص و تصحیح خطاها در نظر گرفت محدود است (Kamyabi et al.).
خطاها را میتوان به دو دسته کلی تقسیم کرد. خطاهای نحوی[3] و خطاهای مفهومی[4]. با توجه بهاین که ابزارهای خودکار بسیار قدرتمندی برای تشخیص خطاهای نحوی وجود دارند، احتمالاین که خطایی ازاین دست تا زمان انتشار تشخیص داده نشود، بسیار کم است. خطاهای مفهومی به آن دسته از خطاها اشاره دارد که در اثر مشکلاتی جدای از اشتباهات نحوی و خطاهای انسانی ملموس اتفاق میافتند و معمولاً در اثر عدم هماهنگی در بخشهای مختلف کد و گاهی به صورت بسیار ناملموس به وجود میآیند که در اینجا به سادگی نمیتوان با بررسی کد، اینگونه خطاها را تشخیص داد. بنا بر این در مورد خطاهای مفهومی داستان فرق میکند چرا که عوامل بسیار زیادی میتوانند در بروزاینگونه از خطاها دخیل باشند. (Zimmermann & Nagappan, 2008) بنا براین همواره سعی شده است که با اندازه گیری معیارهای[5] مختلف و استفاده از آنها در روشهای پیشبینی خودکار خطا، سرعت و دقت را در امر تست نرم افزار افزایش دهند. طی تحقیقاتی که تا کنون صورت گرفته، متداولترین معیارهای استفاده شده در پیشبینی اتوماتیک خطا، معیارهای پیچیدگی[6] است. (Zimmermann & Nagappan, 2008) اما جدیدترین روشی که مطرح شده است، مسأله مربوط به وابستگیهای بین کلاسها[7] و همچنین بین ماژولها میباشد. انواع وابستگیها میتوانند بین دو کلاس و یا دو ماژول[8] مطرح شوند که تحقیقات نشان داده است که این وابستگیها ارتباط بسیار زیادی با وجود خطاهای مفهومی دارند.
برای اجرای روشمند و علمی روند یافتن روابط و الگوهای مناسب برای پیش بینی خطا بر اساس معیارهای قابل اندازه گیری، از مفهومی به نام دادهکاوی استفاده خواهیم کرد که در تشریح و بیان مسأله به آن خواهیم پرداخت.
دراین پایان نامه، سعی میکنیم که به بررسی چنین وابستگیهایی بپردازیم و بر اساس روابط موجود بین وابستگی و وجود خطا در نرم افزار، وجود خطا در کد را پیش بینی نماییم.
در ادامه این رساله در بخش دوم به بررسی تحقیقات قبلی انجام شده در این زمینه میپردازیم، در بخش سوم به بیان انگیزش و نحوه به وجود آمدن ایده کار شده در این رساله میپردازیم، در بخش چهارم فرضیات مورد بررسی را مطرح میکنیم، در بخش پنجم دادهها و ابزارهای جمع آوری شده برای انجام عملی آزمایشات را معرفی میکنیم، در بخش ششم به بیان شیوه و نوع آزمایشات و بیان نتایج آنالیزها و نتایج میپردازیم و در بخش هفتم و پایانی این رساله سعی در نتیجهگیری از آزمایشات انجام شده خواهیم داشت.
2- پیشینه پژوهشی:
تلاشهای گذشته با هدف پیشبینی خطا را در سه گروه مورد بررسی قرار میدهیم: معیارهای نرمافزار[9]، معیارهای وابستگی[10] و معیارهای تاریخی[11]. ابتدا به بیان توضیحی در مورد شیوه کار کردن این معیارها میپردازیم.
2-1- معیارهای نرمافزار:
معیارهای نرمافزار برای اندازهگیری درجه پیشرفته بودن یک محصول و یا یک فرآیند نرمافزاری به کار میروند. معیارهای نرمافزاری به چندین گروه تقسیم میشوند: معیارهای محصول[12]، معیارهای فرآیند[13]، معیارهای پروژه[14] و معیارهای منبع[15]. معیارهای نرمافزاری که در پیشبینی خطا به کار میروند معیارهای محصول میباشند که از مشخصات کد سیستم نرمافزاری استخراج میشوند. این معیارها به سه گروه تقسیم میشوند: معیارهای اندازه[16]، معیارهای پیچیدگی[17] و معیارهای کیفیت[18]. (Mills, 1988) معیارهای اندازه بر اساس تعداد خطوط کد برنامه محاسبه میشوند مانند تعداد کل خطوط برنامه[19]، تعداد خطوط توضیحات[20] و … معیارهای میزان نگهداشتپذیری[21] و قابلیت تست برنامه وابسته است از جمله معروفترین معیارهای پیچیدگی معیارهای پیچیدگی مک کیب[22] و معیارهای هالستد[23] میباشند. معیارهای مککیب پیچیدگی کد را بر اساس تعداد مسیرهای کنترلی محاسبه مینماید. (McCabe, 1976) هالستد معیارهای خود را بر اساس ارتباطات ریاضی بین اجزای کد، پیچیدگی کد و نوع زبان برنامه نویسی مطرح کرد. (Halstead M. H., 1975) معیارهای اتصال[24] و پیوستگی[25] از معروفترین معیارهای کیفیت میباشند که بالا و یا پایین بودن اندازه این دو معیار نشان دهنده کیفیت محصول و یا فرآیند نرمافزاری است. (Pressman, 1982) معیارهای کیفیت معیارهایی میباشند که درجه آنها میتواند تولیدکنندگان نرمافزار را در مورد توانایی دست کار کردن سیستمشان مطمئن سازد.
2-2- معیارهای وابستگی:
معیارهای وابستگی معیارهایی هستند که بر اساس ارتباط اجزای کد نرمافزار محاسبه میشوند. این ارتباط میتواند بین سطوح مختلف کد مطرح شود مانند سطح فایل، کلاس، تابع … نوع ارتباط و یا به عبارت دیگر وابستگی موجود بین اجزای کد نیز میتواند متفاوت باشد مانند وابستگی داده[26] که بر اساس تعریف و استفاده از داده میباشد و یا وابستگی صدا زدن[27] که بر اساس تعریف و صدا زدن مؤلفهها میباشد. (Zimmermann, 2008 & Nagappan )
2-3- معیارهای تاریخی:
این دسته از معیارهای بر اساس تغییراتی که در بین چندین انتشار[28] مختلف از یک سیستم نرمافزاری رخ میدهد تعریف میشوند. این تغییرات میتوانند اضافه شدن، حذف شدن، تغییر یافتن مؤلفههای جز مربوطه در بین چندین انتشار باشند. محدودیتی که در به کار بردن این معیارها وجود دارد این است که محاسبه این معیارهای تنها برای محصولات نرمافزاری مقدور میباشد که دارای چندین انتشار باشند و همچنین اطلاعات کامل در مورد انتشارات قبلی موجود باشد.
1 quality assurance
2 release
3 syntax errors
4 semantic defects
5 measures
6 complexity metrics
7 classes
8 module
software metrics[9]
dependency metrics[10]
historical metrics[11]
product metrics[12]
process metrics[13]
project metrics[14]
resource metrics[15]