ST9401_HW2.pdf

‫به نام خدا‬
‫آزمون نرمافزار – تمرین دوم‬
‫استاد‪ :‬دکتر میریان‬
‫مهلت ارسال‪4990/49/40 :‬‬
‫پاسخ به سواالت به صورت گروهی است‪ .‬ارسال پاسخ بعد از ساعت ‪ 21‬شب مهلت تعیین‬
‫شده‪ ،‬به ازای هر روز تاخیر باعث کسر ‪ ۵‬درصد از نمره تمرین میشود‪ .‬به پاسخهای ارسال‬
‫شده با بیش از ‪ 2۱‬روز تاخیر نمرهای تعلق نخواهد گرفت‪.‬‬
‫نام گروهها در سایت درس قرار گرفته است‪ .‬پاسخها را به ‪[email protected]‬‬
‫ارسال نمایید‪ .‬عنوان ایمیل ‪ ST2-GroupName‬باشد‪.‬‬
‫قسمت تئوری‬
‫‪ .2‬تابعی به زبان جاوا ارائه دهید که نشان دهد ‪ CACC‬نیازمندی تست بیشتری از ‪ PC‬دارد‪ .‬در رابطه با این سوال نیاز به‬
‫تابعی جهت محاسبه مقادیر نیازمندی تست ‪ CACC‬و ‪ PC‬نیست‪ .‬کافی است یک تابع ساده به عنوان نمونه ارائه شود که‬
‫این امر با محاسبه مقادیر نیازمندی تست ‪ CACC‬و ‪ PC‬برای آن نشان داده شود‪.‬‬
‫‪ .1‬با در نظر گرفتن تابع ‪ A‬موارد زیر را به دست آورید‬
‫̅̅̅̅̅̅̅̅̅̅‬
‫(‬
‫))̅‬
‫(‬
‫̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅‬
‫))‬
‫(‬
‫(̅‬
‫‪ .a‬مقدار ‪PI‬های غیرتکراری برای ‪ A‬و نقیض آن را به دست آورید‪.‬‬
‫‪ .b‬مجموعه تست برای پوشش ‪ UTPC‬و ‪ CUTPNFP‬تابع ‪ A‬به دست آورید‪.‬‬
‫‪ .3‬با توجه به برنامه داده شده به سواالت زیر پاسخ دهید‪.‬‬
‫‪ .a‬در حالتی که بازیکن ‪ 2‬بازنده شود‪ ،‬مقادیر ‪ GACC ،CACC‬و ‪ RACC‬را برای تمام متغیرها حساب کنید‪.‬‬
‫‪ .b‬برای حالتی که بازیکن ‪ 1‬بازنده شود‪ ،‬مقادیر ‪ GICC‬و ‪ RICC‬را به ازای تمام متغیرها حساب کنید‪.‬‬
‫* مقادیر ورودی به تابع متغیرهایی برای تعیین روال بازی هستند‪ .‬مقادیر ‪ Pi‬میزان امتیاز بازیکن ‪ i‬را مشخص میکنند‪.‬‬
‫بازیکن با امتیاز کمتر بازنده خواهد بود‪.‬‬
‫در این کد عملگر → همان ‪ implication‬است‪.‬‬
‫)‪int[] three_player_game(bool x, bool y, bool z‬‬
‫{‬
‫;][‪int result= new int‬‬
‫;‪int p1,p2,p3=0‬‬
‫) ))‪if not ( (x or y) and ((not x) or z) and (x or (not z‬‬
‫;‪{ p2=50‬‬
‫;‪p3=50‬‬
‫}‬
‫(( ‪else if‬‬
‫)‬
‫))‬
‫;‪{ p1=50‬‬
‫;‪p3=50‬‬
‫}‬
‫{‪else‬‬
‫;‪p1,p2=50‬‬
‫}‬
‫;}‪result={p1,p2,p3‬‬
‫;‪return result‬‬
‫}‬
‫‪ .۱‬با توجه به تابع زیر به سواالت پاسخ دهید‬
‫)‪public Set delta(Set s1, set s2‬‬
‫‪// if s1 or s2 are null throw NullPointerException‬‬
‫‪// return a set equal to symmetric difference‬‬
‫‪// of sets s1 and s2‬‬
‫‪Characteristic: Type of s1‬‬
‫‪- s1 = null‬‬
‫}{ = ‪- s1‬‬
‫‪- s1 has at least one element‬‬
‫‪Characteristic: Relation between s1 and s2‬‬
‫‪- s1 and b represent the same set‬‬
‫‪- s1 is subset of s2‬‬
‫‪- s2 is subset of s1‬‬
‫‪- s1 and s2 do not have any elements in common‬‬
‫‪ .a‬شرط ‪ completeness‬و ‪ disjointness‬را برای ‪ characteristic‬های معرفی شده بررسی کنید‪.‬‬
‫‪ .b‬تعداد نیازمندیهای آزمون را برای ‪ BCC ،PWC ،ECC ،ACoC‬به دست آورید‪.‬‬
‫‪ .۵‬تابع زیر را در نظر بگیرید‬
‫)‪public int[] merge(int[] a, int[] b‬‬
‫‪// if a or b are null throw NullPointerException‬‬
‫‪// if a or b is not sorted (ascending) throw ArgumentException‬‬
‫‪// return sorted(ascending) array contains all elements of a and b‬‬
‫‪ .a‬حداقل پنج مورد ‪ characteristic‬تعریف کنید‪.‬‬
‫‪ .b‬نیازمندیها و موارد آزمون را برای ‪ BCC‬به دست آورید‪( .‬ورودی و خروجی مورد انتظار مشخص شود)‬
‫قسمت عملی‬
‫‪ .2‬در مورد ‪ mocking‬مطالعه کنید و آن را به صورت خیلی خالصه توضیح دهید‪ .‬توضیح دهید چرا در آزمون نرمافزار به‬
‫‪ mocking‬احتیاج خواهیم داشت‪ .‬یک زبان برنامه نویسی و یکی ابزار مرتبط با آن جهت انجام ‪ mocking‬انتخاب‬
‫کنید‪.‬‬
‫‪ .1‬نرمافزاری را در نظر بگیرید که هدف آن ثبت محل جغرافیایی مرتبط با ‪ IP‬باشد‪ .‬این نرمافزار قسمتهای زیر است‪:‬‬
‫‪ .a‬پردازش درخواستهای کاربر‬
‫‪ .b‬به دست آوردن کشور از ‪IP‬‬
‫‪ .c‬ارتباط با پایگاه داده‬
‫سناریو اول‪ :‬کاربر یک ‪ IP‬وارد میکند‪ ،‬کشور مرتبط با ‪ IP‬مورد نظر به دست میآید و در پایگاه داده ذخیره و به‬
‫کاربر نمایش داده میشود‪.‬‬
‫سناریو دوم‪ :‬کاربر بتواند بر اساس نام اختصاری کشور (مثال ‪ )IR‬در پایگاه داده جستجو کند و ‪ IP‬هایی که مربوط‬
‫به آن کشور هستند را مشاهده کند‪.‬‬
‫نکته‪:‬‬
‫ نیاز به رابط کاربری پیچیده نیست‪ .‬هر چه سادهتر بهتر‪ ،‬حتی نیاز به رابط کاربری گرافیکی هم نیست‪ .‬رابط کاربری‬‫خود را به نحوی طراحی کنید که تنها توابعی از واحد پردازش دستور را فراخوانی کند‪ .‬در واقع رابط کاربری خالی از‬
‫هر گونه منطق باشد و تنها عملکرد آن فراخوانی تابعی از واحد پردازش دستور و نمایش خروجی تابع باشد‪.‬‬
‫ برای به دست آوردن کشور از ‪ IP‬میتوانید از ‪ http://api.hostip.info‬استفاده کنید‪ .‬برای مثال‬‫‪http://api.hostip.info/get_html.php?ip=4.2.2.4‬‬
‫ پایگاه داده دلخواه خود را انتخاب کنید‪.‬‬‫با استفاده از زبان برنامه نویسی انتخابی خود نرمافزار مورد نظر را پیادهسازی کنید‪ .‬با ‪ mock‬کردن ماژولهای مختلف‬
‫نرمافزار (مثالً ماژول مدیریت دادهها در پایگاه داده‪ ،‬ماژول تشخیص کشور از ‪ IP‬و ‪ )...‬اقدام به نوشتن ‪ unit test‬به‬
‫صورتی که ‪ code coverage‬حداکثر شود نمایید‪( .‬با توجه به نکات مطرح شده نیازی به تست کردن رابط کاربری‬
‫نیست)‪.‬‬