تضمین کیفیت نرمافزار همیشه دارای محدودیتهای زمان و هزینه بوده است. به منظور رسیدن به کیفیت بالا و کاهش محدودیتها، مدیران همواره سعی کردهاند تا بخشهای مستعد خطا را در نرمافزار پیشبینی نمایند و منابع مذکور را به صورت موثری به این بخشها اختصاص دهند. پیش از این، محققین روشهای خودکاری را برای کمک به مدیران در این امر مهم معرفی و از آنها استفاده کردهاند. روشهای خودکار مذکور با استفاده از اندازه گیری معیارهای مختلف نرمافزار و یافتن ارتباط میان این معیارها و خطاهای نرمافزاری، همواره سعی در افزایش سرعت و دقت در پیشبینی خطا داشتهاند. به نوعی میتوان این معیارها را در چهار دسته که عبارتند از معیارهای پیچیدگی، دادههای تاریخی، معیارهای طراحی و معیارهای وابستگی، قرار داد. اگرچه معیارهای استفاده شده، تا حدودی موثر هستند اما هنوز هیچکدام موفق به پیشبینی تمامی خطاهای موجود نشدهاند. در این رساله، ما با توسعه دادن مفهوم وابستگی در نرمافزار، به معرفی مفهوم جدیدی به نام درخت وابستگی میپردازیم. این مفهوم به ما کمک میکند تا با در نظر گرفتن تمامی وابستگیهای مستقیم و غیر مستقیم در بین اجزای نرمافزار، معیارهای جدیدی را استخراج نماییم که این معیارها میتوانند عملاً نتایج مطلوبتری را نسبت به معیارهای پیشین، در پیشبینی خطا ارائه دهند. فهرست مطالب عنوان صفحه 1-مقدمه:142- پیشینه پژوهشی:.. 162-1-معیارهای نرمافزار.. 162-2-معیارهای وابستگی:.. 172-3-معیارهای تاریخی:.. 172-4-بررسی فعالیتهای گذشته.. 182-4-1- بررسی فعالیتها در زمینه معیارهای کد :.. 182-4-2- بررسی فعالیتها در زمینه معیارهای تاریخی:.. 202-4-3- بررسی فعالیتها در زمینه معیارهای وابستگی:.. 223-درخت وابستگی:264-فرضیات:.. 335-جمع آوری داده:.. 345-تحلیل و مقایسه:.. 446-نتیجه گیری:767-مراجع:.. 77 فهرست تصاویر عنوان صفحهشکل 1: نمونهای از وابستگیهای میان کلاسها.. 29شکل 2: نمونهای از وابستگیهای پیچیده در میان کلاسها.. 30شکل 3: تصویری از نمای کلی برنامهClass Dependency Analyzer37شکل 4: نمونهای از کلاس دیاگرام نمایش داده شده در برنامه Class Dependency Analyzer37شکل 5: نمایش تمامی کلاسهای وابسته به یک کلاس خاص در برنامهClass Dependency Analyzer38شکل 6: نمونهای از یک گراف جهت دار.. 39شکل 7: ماتریس وابستگی مربوط به گراف جهت دار در شکل شماره 6. 39شکل 8: درخت وابستگی تشکیل شده از روی ماتریس وابستگی شکل 7. 42شکل 9: متغیر تصادفی، انحراف معیار σ حول محور μ. 53 فهرست نمودارها عنوان صفحهنمودار 1: ارتباط بین جفتگری و انسجام.. 28نمودار 2: بررسی رفتار معیار دقت در هنگام افزایش وابستگی درجه 1. 46نمودار 3: بررسی رفتار معیار دقت در هنگام افزایش وابستگی درجه 2. 46نمودار 4: بررسی رفتار معیار دقت در هنگام افزایش وابستگی درجه 3. 47نمودار 5: مقایسه نتیجه «دقت» در دسته بندی سه نسخه اکلیپس.. 54نمودار 6: مقایسه نتیجه «فراخوانی» در دسته بندی سه نسخه اکلیپس.. 55نمودار 7: مقایسه نتیجه «صحت» در دسته بندی سه نسخه اکلیپس.. 56نمودار 8: مقایسه نتیجه «معیار F» در دسته بندی سه نسخه اکلیپس.. 56نمودار 9: مقایسه نتیجه «منحنی مشخصه عملکرد» در دسته بندی سه نسخه اکلیپس 57نمودار 10: مقایسه نتیجه «کاپا» در دسته بندی سه نسخه اکلیپس.. 57نمودار 11: مقایسه نتیجه «انحراف معیار» در دسته بندی سه نسخه اکلیپس.. 58نمودار 12: مقایسه نتیجه «دقت» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی.. 59نمودار 13: مقایسه نتیجه «فراخوانی» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی.. 60نمودار 14: مقایسه نتیجه «صحت» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی.. 60نمودار 15: مقایسه نتیجه «معیار F» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی.. 61نمودار 16: مقایسه نتیجه «منحنی مشخصه عملکرد» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی.. 61نمودار 17: مقایسه نتیجه «کاپا» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی.. 62نمودار 18: مقایسه نتیجه «انحراف معیار» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی.. 62نمودار 19: قیاس نتیجه «دقت» در دستهبندی بر روی کل دادهها.. 64نمودار 20: قیاس نتیجه «فراخوانی» در دستهبندی بر روی کل دادهها.. 65نمودار 21: قیاس نتیجه «صحت» در دستهبندی بر روی کل دادهها.. 66نمودار 22: قیاس نتیجه «معیار F» در دستهبندی بر روی کل دادهها.. 66نمودار 23: قیاس نتیجه «منحنی مشخصه عملکرد» در دستهبندی بر روی کل دادهها 67نمودار 24: قیاس نتیجه «کاپا» در دستهبندی بر روی کل دادهها.. 67نمودار 25: قیاس نتیجه «انحراف معیار» در دستهبندی بر روی کل دادهها.. 68یکی چالش بر انگیزترین موضوعات مطرح در تضمین کیفیت[1]، در شرکتهای سازنده نرم افزار، موضوع رفع خطاهای نرم افزار است. خطاهای نرم افزاری میتوانند در زمان پیش و یا پس از انتشار[2] نرم افزار تشخیص داده شوند. اما منابعی که میتوان برای تشخیص و تصحیح خطاها در نظر گرفت محدود است (Kamyabi et al.).خطاها را میتوان به دو دسته کلی تقسیم کرد. خطاهای نحوی[3] و خطاهای مفهومی[4]. با توجه بهاین که ابزارهای خودکار بسیار قدرتمندی برای تشخیص خطاهای نحوی وجود دارند، احتمالاین که خطایی ازاین دست تا زمان انتشار تشخیص داده نشود، بسیار کم است. خطاهای مفهومی به آن دسته از خطاها اشاره دارد که در اثر مشکلاتی جدای از اشتباهات نحوی و خطاهای انسانی ملموس اتفاق میافتند و معمولاً در اثر عدم هماهنگی در بخشهای مختلف کد و گاهی به صورت بسیار ناملموس به وجود میآیند که در اینجا به سادگی نمیتوان با بررسی کد، اینگونه خطاها را تشخیص داد. بنا بر این در مورد خطاهای مفهومی داستان فرق میکند چرا که عوامل بسیار زیادی میتوانند در بروزاینگونه از خطاها دخیل باشند. (Zimmermann & Nagappan, 2008) بنا براین همواره سعی شده است که با اندازه گیری معیارهای[5] مختلف و استفاده از آنها در روشهای پیشبینی خودکار خطا، سرعت و دقت را در امر تست نرم افزار افزایش دهند. طی تحقیقاتی که تا کنون صورت گرفته، متداولترین معیارهای استفاده شده در پیشبینی اتوماتیک خطا، معیارهای پیچیدگی[6] است. (Zimmermann & Nagappan, 2008) اما جدیدترین روشی که مطرح شده است، مسأله مربوط به وابستگیهای بین کلاسها[7] و همچنین بین ماژولها میباشد. انواع وابستگیها میتوانند بین دو کلاس و یا دو ماژول[8] مطرح شوند که تحقیقات نشان داده است کهاین وابستگیها ارتباط بسیار زیادی با وجود خطاهای مفهومی دارند.برای اجرای روشمند و علمی روند یافتن روابط و الگوهای مناسب برای پیش بینی خطا بر اساس معیارهای قابل اندازه گیری، از مفهومی به نام دادهکاوی استفاده خواهیم کرد که در تشریح و بیان مسأله به آن خواهیم پرداخت.دراین پایان نامه، سعی میکنیم که به بررسی چنین وابستگیهایی بپردازیم و بر اساس روابط موجود بین وابستگی و وجود خطا در نرم افزار، وجود خطا در کد را پیش بینی نماییم.در ادامه این رساله در بخش دوم به بررسی تحقیقات قبلی انجام شده در این زمینه میپردازیم، در بخش سوم به بیان انگیزش و نحوه به وجود آمدن ایده کار شده در این رساله میپردازیم، در بخش چهارم فرضیات مورد بررسی را مطرح میکنیم، در بخش پنجم دادهها و ابزارهای جمع آوری شده برای انجام عملی آزمایشات را معرفی میکنیم، در بخش ششم به بیان شیوه و نوع آزمایشات و بیان نتایج آنالیزها و نتایج میپردازیم و در بخش هفتم و پایانی این رساله سعی در نتیجهگیری از آزمایشات انجام شده خواهیم داشت. 2- پیشینه پژوهشی: تلاشهای گذشته با هدف پیشبینی خطا را در سه گروه مورد بررسی قرار میدهیم: معیارهای نرمافزار[9]، معیارهای وابستگی[10] و معیارهای تاریخی[11]. ابتدا به بیان توضیحی در مورد شیوه کار کردن این معیارها میپردازیم. معیارهای نرمافزار برای اندازهگیری درجه پیشرفته بودن یک محصول و یا یک فرآیند نرمافزاری به کار میروند. معیارهای نرمافزاری به چندین گروه تقسیم میشوند: معیارهای محصول[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-1- معیارهای وابستگی: معیارهای وابستگی معیارهایی هستند که بر اساس ارتباط اجزای کد نرمافزار محاسبه میشوند. این ارتباط میتواند بین سطوح مختلف کد مطرح شود مانند سطح فایل، کلاس، تابع ... نوع ارتباط و یا به عبارت دیگر وابستگی موجود بین اجزای کد نیز میتواند متفاوت باشد مانند وابستگی داده[26] که بر اساس تعریف و استفاده از داده میباشد و یا وابستگی صدا زدن[27] که بر اساس تعریف و صدا زدن مؤلفهها میباشد. (Zimmermann, 2008 & Nagappan ) 2-2- معیارهای تاریخی: این دسته از معیارهای بر اساس تغییراتی که در بین چندین انتشار[28] مختلف از یک سیستم نرمافزاری رخ میدهد تعریف میشوند.این تغییرات میتوانند اضافه شدن، حذف شدن، تغییر یافتن مؤلفههای جز مربوطه در بین چندین انتشار باشند. محدودیتی که در به کار بردن این معیارها وجود دارد این است که محاسبه این معیارهای تنها برای محصولات نرمافزاری مقدور میباشد که دارای چندین انتشار باشند و همچنین اطلاعات کامل در مورد انتشارات قبلی موجود باشد.
استفاده از داده کاوی در پیشبینی خطای نرمافزار بر اساس متریکهای کد و وابستگی WORD
تضمین کیفیت نرمافزار همیشه دارای محدودیتهای زمان و هزینه بوده است. به منظور رسیدن به کیفیت بالا و کاهش محدودیتها، مدیران همواره سعی کردهاند تا بخشهای مستعد خطا را در نرمافزار پیشبینی نمایند و منابع مذکور را به صورت موثری به این بخشها اختصاص دهند. پیش از این، محققین روشهای خودکاری را برای کمک به مدیران در این امر مهم معرفی و از آنها استفاده کردهاند. روشهای خودکار مذکور با استفاده از اندازه گیری معیارهای مختلف نرمافزار و یافتن ارتباط میان این معیارها و خطاهای نرمافزاری، همواره سعی در افزایش سرعت و دقت در پیشبینی خطا داشتهاند. به نوعی میتوان این معیارها را در چهار دسته که عبارتند از معیارهای پیچیدگی، دادههای تاریخی، معیارهای طراحی و معیارهای وابستگی، قرار داد. اگرچه معیارهای استفاده شده، تا حدودی موثر هستند اما هنوز هیچکدام موفق به پیشبینی تمامی خطاهای موجود نشدهاند. در این رساله، ما با توسعه دادن مفهوم وابستگی در نرمافزار، به معرفی مفهوم جدیدی به نام درخت وابستگی میپردازیم. این مفهوم به ما کمک میکند تا با در نظر گرفتن تمامی وابستگیهای مستقیم و غیر مستقیم در بین اجزای نرمافزار، معیارهای جدیدی را استخراج نماییم که این معیارها میتوانند عملاً نتایج مطلوبتری را نسبت به معیارهای پیشین، در پیشبینی خطا ارائه دهند. فهرست مطالب عنوان صفحه 1-مقدمه:142- پیشینه پژوهشی:.. 162-1-معیارهای نرمافزار.. 162-2-معیارهای وابستگی:.. 172-3-معیارهای تاریخی:.. 172-4-بررسی فعالیتهای گذشته.. 182-4-1- بررسی فعالیتها در زمینه معیارهای کد :.. 182-4-2- بررسی فعالیتها در زمینه معیارهای تاریخی:.. 202-4-3- بررسی فعالیتها در زمینه معیارهای وابستگی:.. 223-درخت وابستگی:264-فرضیات:.. 335-جمع آوری داده:.. 345-تحلیل و مقایسه:.. 446-نتیجه گیری:767-مراجع:.. 77 فهرست تصاویر عنوان صفحهشکل 1: نمونهای از وابستگیهای میان کلاسها.. 29شکل 2: نمونهای از وابستگیهای پیچیده در میان کلاسها.. 30شکل 3: تصویری از نمای کلی برنامهClass Dependency Analyzer37شکل 4: نمونهای از کلاس دیاگرام نمایش داده شده در برنامه Class Dependency Analyzer37شکل 5: نمایش تمامی کلاسهای وابسته به یک کلاس خاص در برنامهClass Dependency Analyzer38شکل 6: نمونهای از یک گراف جهت دار.. 39شکل 7: ماتریس وابستگی مربوط به گراف جهت دار در شکل شماره 6. 39شکل 8: درخت وابستگی تشکیل شده از روی ماتریس وابستگی شکل 7. 42شکل 9: متغیر تصادفی، انحراف معیار σ حول محور μ. 53 فهرست نمودارها عنوان صفحهنمودار 1: ارتباط بین جفتگری و انسجام.. 28نمودار 2: بررسی رفتار معیار دقت در هنگام افزایش وابستگی درجه 1. 46نمودار 3: بررسی رفتار معیار دقت در هنگام افزایش وابستگی درجه 2. 46نمودار 4: بررسی رفتار معیار دقت در هنگام افزایش وابستگی درجه 3. 47نمودار 5: مقایسه نتیجه «دقت» در دسته بندی سه نسخه اکلیپس.. 54نمودار 6: مقایسه نتیجه «فراخوانی» در دسته بندی سه نسخه اکلیپس.. 55نمودار 7: مقایسه نتیجه «صحت» در دسته بندی سه نسخه اکلیپس.. 56نمودار 8: مقایسه نتیجه «معیار F» در دسته بندی سه نسخه اکلیپس.. 56نمودار 9: مقایسه نتیجه «منحنی مشخصه عملکرد» در دسته بندی سه نسخه اکلیپس 57نمودار 10: مقایسه نتیجه «کاپا» در دسته بندی سه نسخه اکلیپس.. 57نمودار 11: مقایسه نتیجه «انحراف معیار» در دسته بندی سه نسخه اکلیپس.. 58نمودار 12: مقایسه نتیجه «دقت» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی.. 59نمودار 13: مقایسه نتیجه «فراخوانی» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی.. 60نمودار 14: مقایسه نتیجه «صحت» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی.. 60نمودار 15: مقایسه نتیجه «معیار F» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی.. 61نمودار 16: مقایسه نتیجه «منحنی مشخصه عملکرد» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی.. 61نمودار 17: مقایسه نتیجه «کاپا» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی.. 62نمودار 18: مقایسه نتیجه «انحراف معیار» در دسته بندی آپاچی بر روی متریکهای کد و درخت وابستگی.. 62نمودار 19: قیاس نتیجه «دقت» در دستهبندی بر روی کل دادهها.. 64نمودار 20: قیاس نتیجه «فراخوانی» در دستهبندی بر روی کل دادهها.. 65نمودار 21: قیاس نتیجه «صحت» در دستهبندی بر روی کل دادهها.. 66نمودار 22: قیاس نتیجه «معیار F» در دستهبندی بر روی کل دادهها.. 66نمودار 23: قیاس نتیجه «منحنی مشخصه عملکرد» در دستهبندی بر روی کل دادهها 67نمودار 24: قیاس نتیجه «کاپا» در دستهبندی بر روی کل دادهها.. 67نمودار 25: قیاس نتیجه «انحراف معیار» در دستهبندی بر روی کل دادهها.. 68یکی چالش بر انگیزترین موضوعات مطرح در تضمین کیفیت[1]، در شرکتهای سازنده نرم افزار، موضوع رفع خطاهای نرم افزار است. خطاهای نرم افزاری میتوانند در زمان پیش و یا پس از انتشار[2] نرم افزار تشخیص داده شوند. اما منابعی که میتوان برای تشخیص و تصحیح خطاها در نظر گرفت محدود است (Kamyabi et al.).خطاها را میتوان به دو دسته کلی تقسیم کرد. خطاهای نحوی[3] و خطاهای مفهومی[4]. با توجه بهاین که ابزارهای خودکار بسیار قدرتمندی برای تشخیص خطاهای نحوی وجود دارند، احتمالاین که خطایی ازاین دست تا زمان انتشار تشخیص داده نشود، بسیار کم است. خطاهای مفهومی به آن دسته از خطاها اشاره دارد که در اثر مشکلاتی جدای از اشتباهات نحوی و خطاهای انسانی ملموس اتفاق میافتند و معمولاً در اثر عدم هماهنگی در بخشهای مختلف کد و گاهی به صورت بسیار ناملموس به وجود میآیند که در اینجا به سادگی نمیتوان با بررسی کد، اینگونه خطاها را تشخیص داد. بنا بر این در مورد خطاهای مفهومی داستان فرق میکند چرا که عوامل بسیار زیادی میتوانند در بروزاینگونه از خطاها دخیل باشند. (Zimmermann & Nagappan, 2008) بنا براین همواره سعی شده است که با اندازه گیری معیارهای[5] مختلف و استفاده از آنها در روشهای پیشبینی خودکار خطا، سرعت و دقت را در امر تست نرم افزار افزایش دهند. طی تحقیقاتی که تا کنون صورت گرفته، متداولترین معیارهای استفاده شده در پیشبینی اتوماتیک خطا، معیارهای پیچیدگی[6] است. (Zimmermann & Nagappan, 2008) اما جدیدترین روشی که مطرح شده است، مسأله مربوط به وابستگیهای بین کلاسها[7] و همچنین بین ماژولها میباشد. انواع وابستگیها میتوانند بین دو کلاس و یا دو ماژول[8] مطرح شوند که تحقیقات نشان داده است کهاین وابستگیها ارتباط بسیار زیادی با وجود خطاهای مفهومی دارند.برای اجرای روشمند و علمی روند یافتن روابط و الگوهای مناسب برای پیش بینی خطا بر اساس معیارهای قابل اندازه گیری، از مفهومی به نام دادهکاوی استفاده خواهیم کرد که در تشریح و بیان مسأله به آن خواهیم پرداخت.دراین پایان نامه، سعی میکنیم که به بررسی چنین وابستگیهایی بپردازیم و بر اساس روابط موجود بین وابستگی و وجود خطا در نرم افزار، وجود خطا در کد را پیش بینی نماییم.در ادامه این رساله در بخش دوم به بررسی تحقیقات قبلی انجام شده در این زمینه میپردازیم، در بخش سوم به بیان انگیزش و نحوه به وجود آمدن ایده کار شده در این رساله میپردازیم، در بخش چهارم فرضیات مورد بررسی را مطرح میکنیم، در بخش پنجم دادهها و ابزارهای جمع آوری شده برای انجام عملی آزمایشات را معرفی میکنیم، در بخش ششم به بیان شیوه و نوع آزمایشات و بیان نتایج آنالیزها و نتایج میپردازیم و در بخش هفتم و پایانی این رساله سعی در نتیجهگیری از آزمایشات انجام شده خواهیم داشت. 2- پیشینه پژوهشی: تلاشهای گذشته با هدف پیشبینی خطا را در سه گروه مورد بررسی قرار میدهیم: معیارهای نرمافزار[9]، معیارهای وابستگی[10] و معیارهای تاریخی[11]. ابتدا به بیان توضیحی در مورد شیوه کار کردن این معیارها میپردازیم. معیارهای نرمافزار برای اندازهگیری درجه پیشرفته بودن یک محصول و یا یک فرآیند نرمافزاری به کار میروند. معیارهای نرمافزاری به چندین گروه تقسیم میشوند: معیارهای محصول[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-1- معیارهای وابستگی: معیارهای وابستگی معیارهایی هستند که بر اساس ارتباط اجزای کد نرمافزار محاسبه میشوند. این ارتباط میتواند بین سطوح مختلف کد مطرح شود مانند سطح فایل، کلاس، تابع ... نوع ارتباط و یا به عبارت دیگر وابستگی موجود بین اجزای کد نیز میتواند متفاوت باشد مانند وابستگی داده[26] که بر اساس تعریف و استفاده از داده میباشد و یا وابستگی صدا زدن[27] که بر اساس تعریف و صدا زدن مؤلفهها میباشد. (Zimmermann, 2008 & Nagappan ) 2-2- معیارهای تاریخی: این دسته از معیارهای بر اساس تغییراتی که در بین چندین انتشار[28] مختلف از یک سیستم نرمافزاری رخ میدهد تعریف میشوند.این تغییرات میتوانند اضافه شدن، حذف شدن، تغییر یافتن مؤلفههای جز مربوطه در بین چندین انتشار باشند. محدودیتی که در به کار بردن این معیارها وجود دارد این است که محاسبه این معیارهای تنها برای محصولات نرمافزاری مقدور میباشد که دارای چندین انتشار باشند و همچنین اطلاعات کامل در مورد انتشارات قبلی موجود باشد.