940805_ST_4_HW1.pdf

‫به نام خدا‬
‫آزمون نرمافزار – تمرین اول‬
‫استاد‪ :‬دکتر میریان‬
‫مهلت ارسال‪1394/08/18 :‬‬
‫پاسخ به سواالت به صورت گروهی است‪ .‬ارسال پاسخ بعد از ساعت ‪ 12‬شب مهلت تعیین شده‪،‬‬
‫به ازای هر روز تاخیر باعث کسر ‪ ۵‬درصد از نمره تمرین میشود‪ .‬به پاسخهای ارسال شده با‬
‫بیش از ‪ ۱۴‬روز تاخیر نمرهای تعلق نخواهد گرفت‪.‬‬
‫نام گروهها در سایت درس قرار گرفته است‪ .‬پاسخها را به ‪ [email protected]‬ارسال‬
‫نمایید‪ .‬عنوان ایمیل ‪ ST1-GroupName‬باشد‪.‬‬
‫قسمت تئوری‬
‫‪ .1‬گزارههای زیر را اثبات یا با مثال نقض رد کنید‪:‬‬
‫‪ .a‬مجموعهی نیازمندیهای تست ‪ Complete Path Coverage‬برای همهی گرافها مجموعهای‬
‫متناهی است‪.‬‬
‫‪ .b‬با روشهای تست میتوان فالتهایی در ‪ Unreachable code‬را یافت‪.‬‬
‫‪ .c‬اگر مجموعهی تست ‪T1‬پوشش بیشتری از مجموعهی تست ‪ T2‬داشته باشد‪ ،‬آنگاه خطاهای بیشتری‬
‫را نیز در کد پیدا خواهد کرد‪.‬‬
‫‪ .d‬برای گرافهای بدون دور مجموعهی نیازمندیهای ‪ Prime Path Coverage‬با مجموعهی‬
‫نیازمندیهای ‪ Complete Path Coverage‬یکسان است‪.‬‬
‫قطعه کد زیر را در نظر بگیرید‪.‬‬
‫{ )‪public int[] merge(int[] a, int[] b‬‬
‫;]‪int[] result = new int[a.length + b.length‬‬
‫;‪int indexResult = 0‬‬
‫;‪int indexA = 0‬‬
‫;‪int indexB = 0‬‬
‫{ )‪while (indexResult < result.length‬‬
‫)]‪if (indexB >= b.length || a[indexA] < b[indexB‬‬
‫;]‪result[indexResult++] = a[indexA++‬‬
‫)]‪else if (indexA >= a.length || a[indexA] >= b[indexB‬‬
‫;]‪result[indexResult++] = b[indexB++‬‬
‫}‬
‫;‪return result‬‬
‫}‬
‫این تابع دو آرایهی مرتب شده را ادغام میکند‪.‬‬
‫‪ )a‬خطا یا خطاهای برنامه در کدام قسمت هستند؟ آنها را اصالح نمایید‪.‬‬
‫‪ )b‬در صورت امکان تستی ارائه کنید که هیچ فالتی را اجرا نمیکند‪.‬‬
‫‪ )c‬در صورت امکان تستی ارائه کنید که یک فالت را اجرا میکند اما در اثر آن برنامه به حالت خطا‬
‫(‪ )Error State‬نمیرود‪.‬‬
‫‪ )d‬در صورت امکان تستی ارائه کنید که یک فالت را اجرا میکند و برنامه را به حالت خطا‬
‫(‪ )Error State‬میبرد اما موجب ‪ Failure‬نمیشود‪.‬‬
‫‪ )e‬برای تست مورد قبل اولین حالت خطا را مشخص کنید‪.‬‬
‫‪ )f‬گراف جریان داده را به دست آورید‪.‬‬
‫‪ )g‬نیازمندیهای پوشش ‪ ADUPC‬را به دست آورید‪.‬‬
‫‪ )h‬مسیرهای آزمون و نمونههای آزمون را برای هر یک از این نیازمندیها مشخص کنید‪.‬‬
‫‪ )i‬آیا ‪ ADUPC‬میتواند خطای برنامه را کشف کند؟ اگر بله چگونه؟ اگر نه چرا؟‬
‫‪ .2‬گراف زیر را در نظر بگیرید و به موارد زیر پاسخ دهید‪.‬‬
‫‪ .a‬عبارت ‪ path expression‬این گراف را بدست آورید‪.‬‬
‫‪ .b‬با استفاده از مورد قبل تعداد مسیرهای این گراف از راس ابتدایی تا راس انتهایی که از هر یال‬
‫حداکثر یک بار استفاده کند را محاسبه کنید‪.‬‬
‫بخش عملی‬
‫‪1‬‬
‫‪ .1‬در مورد ‪ Unit Test‬مطالعه کنید و آن را به صورت خیلی خالصه (یک پاراگراف) توضیح دهید‪ .‬یک زبان‬
‫برنامهنویسی برای پیادهسازی انتخاب کنید‪ 2‬و در مورد ابزارهای مختلف برای انجام ‪ Unit Test‬در آن‬
‫تحقیق مختصری انجام دهید و یکی از آنها را با ذکر دلیل انتخاب کنید‪.‬‬
‫‪1‬نمرهی این بخش از تمرین بخشی از نمرهی پروژه است‪.‬‬
‫‪2‬پیشنهاد میشود از زبان جاوا برای تمرینهای عملی این درس استفاده نمایید‪ .‬ابزارهای پیچیده برای تست (مانند ‪)Mutation Testing‬‬
‫در زبانهای دیگر ممکن است در دسترس نباشند‪.‬‬
‫‪ .2‬در مورد مفهوم ‪ Code Coverage‬مطالعه کنید و آن را به صورت خیلی خالصه (یک پاراگراف) توضیح‬
‫دهید‪ .‬در مورد ابزارهای مختلف برای محاسبه ‪ Code Coverage‬در زبان انتخابی خود تحقیق مختصری‬
‫انجام دهید و یکی از آنها را با ذکر دلیل انتخاب کنید‪.‬‬
‫‪ .3‬برنامهای بنویسید که جستجوی دودویی انجام دهد‪ .‬قسمت انجام جستجو باید مجزا بوده (مثال یک‬
‫‪ function‬در جاوا(‪ .‬برنامه ورودی خود را از یک فایل با نام ‪ in.txt‬دریافت میکند‪ .‬این فایل در پوشه‬
‫ای که برنامه اجرا میشود قرار میگیرد‪ .‬این فایل شامل دو خط است‪ .‬در خط اول اعدادی (بدون تکرار)‬
‫که در آنها باید جستجو شود قرار دارند‪ .‬این اعداد با فاصله از همدیگر جدا شدند‪ .‬در خط دوم اعدادی‬
‫که باید در بین اعداد خط قبل جستجو شوند قرار دارند‪ .‬این اعداد نیز با فاصله از هم جدا شدهاند‪.‬‬
‫برنامه باید فایلی با نام ‪ out.txt‬ایجاد کند‪ .‬برای هر عدد در خط دوم فایل ورودی باید یک سطر در فایل خروجی‬
‫(با حفظ ترتیب) نوشته شود‪ .‬در صورتی که جستجو موفقیت آمیز بود اندیس عدد (‪ )zero based index‬را در‬
‫آرایه مرتب شده و در غیر این صورت ‪ -1‬نوشته شود‪ .‬در صورت بروز هر گونه خطا ‪ -2‬نوشته شود‪.‬‬
‫‪ ‬برنامه شما برای ورودیهای مشخص شده تست خواهد شد و میزان موفقیت آن بخشی از نمره‬
‫تمرین شما خواهد بود‪.‬‬
‫‪ Unit Test ‬هایی طراحی کنید که درصد ‪ Code Coverage‬برابر با صد باشد (تصاویر مربوط‬
‫به ‪ Code Coverage‬در ابزار مورد انتخاب خود را فایل ارسالی قرار دهید)‪.‬‬
‫‪ .4‬برای قسمت جستجوی دودویی برنامهای که در قسمت قبل نوشتید‬
‫‪ )a‬مسیرهای ‪ Prime‬را به دست آورید و نیازمندیهای پوشش ‪ Prime Path‬را بنویسد‪.‬‬
‫‪ )b‬مسیرهای آزمون را مشخص کنید‪.‬‬
‫‪ )c‬نمونه های آزمون را برای این نیازمندیها به دست آورید‪.‬‬
‫‪ )d‬برای نمونههای آزمون به دست آمده ‪ Unit Test‬بنویسید‪.‬‬