Professional Documents
Culture Documents
Một số ý chính
1. Kiểm thử hộp đen là một phương pháp kiểm thử phần mềm nhằm kiểm tra chức năng của một
ứng dụng. Các trường hợp kiểm thử có thể được xây dựng dựa trên:
- Đặc tả của hàm/chức năng
- Các trường hợp biên
2. Kiểm thử hộp trắng
Kiểm thử dựa trên mã lệnh của chương trình
3 Kiểm thử đầy đủ (path-complete) nếu mọi trường hợp kiểm thử tiềm năng thông qua mã lệnh
được kiểm thử ít nhất một lần.
Bài 3.
Sử dụng phương pháp kiểm thử hộp trắng. Xây dựng bộ kiểm thử đầy đủ cho hàm sau
(với giả sử đầu vào là các chuỗi ký tự):
def union(set1, set2):
""" set1 và set2 là một tập hợp các đối tượng, có thể rỗng
(empty). Giả sử rằng các đối tượng là có cùng một kiểu.
Mỗi tập hợp set1, set2 không chứa các đối tượng trùng lặp trong nó.
Nhưng có thể có đối tượng trong set1 trùng lặp với đối tượng trong
set2.
Hàm trả về tập hợp các đối tượng chứa tất cả các đối tượng của set1 và
set2 và không chứa các đối tượng trùng lặp. """
if len(set1) == 0:
return set2
elif set1[0] in set2:
return union(set1[1:], set2)
else:
return set1[0] + union(set1[1:], set2)
Đáp án tham khảo
STT Giá trị đầu vào Kết quả mong muốn Mô tả
Kiểm tra điều kiện
1 union('','abc'), abc len(set1)==0
Kiểm tra điều kiện
2 union('a','abc'), abc set1[0] in set2
Kiểm tra điều kiện
3 union('ab','abc'), abc set1[0] in set2
Kiểm tra điều kiện
4 union('d','abc') abcd else
Bài 4.
Sử dụng phương pháp kiểm thử hộp trắng. Xây dựng bộ kiểm thử đầy đủ cho hàm sau:
Bài 5.
Cho hàm sau:
Bài 6.
Cho hàm sau:
def f(n):
""" n: số nguyên, n >= 0. hàm trả về n*f(n-1) """
if n == 0:
return n
else:
return n * f(n-1)
Khi gọi hàm f(3) kết quả mọng đợi là 6
Khi gọi hàm f(1) kết quả mọng đợi là 1
Khi gọi hàm f(0) kết quả mọng đợi là 0
Hãy tìm lỗi và sửa lỗi cho hàm trên.
Đáp án tham khảo
Chú ý: Giảng viên hướng dẫn sinh viên phương pháp tìm lỗi (sử dụng lệnh print, phương
pháp chia đôi để tìm lỗi).
def f(n):
if n == 0 or n==1:
return n
else:
return n * f(n-1)
Bài 7.
Viết chương trình/hàm cho biết tháng và năm (Giả định năm là số nguyên, tháng là số tự
nhiên trong khoảng 1 - 12), chương trình phải in ra số ngày của tháng đó.
Xây dựng các trường hợp kiểm thử để tìm lỗi và sửa lại chương trình cho đúng.
def checkLeapYear(year):
if year % 400 ==0:
return true
elif year % 4 == 0:
return true
else:
return false
Xây dựng 12 testcase tương ứng với 12 tháng (kiểm tra dữ liệu của mảng dữ liệu
dayOfMonth).
Dựa trên hiểu biết về năm nhuận xây dựng bộ testcase sau:
Tháng Năm Kết quả mong muốn Mô tả
Năm không chia hết cho 400 nhưng chia hết
cho 4 và chia hết cho 100 (là năm không
2 1900 28 nhuận) với tháng 2.
Năm không chia hết cho 400 nhưng chia hết
cho 4 và chia hết cho 100 (là năm không
nhuận). Có thể kiểm tra với tất cả các tháng
8 1900 31 khác tháng 2.
Bài 8
Viết chương trình cho biết độ dài 3 cạnh của một tam giác (Giả định 3 cạnh của tam giác
là các số nguyên hoặc số thực lớn hơn 0) , cho biết đây có phải là một tam giác hay
không và nó là loại tam giác nào (cân, đều, vuông, bình thường).
Xây dựng các trường hợp kiểm thử để tìm lỗi và sửa lại chương trình cho đúng.
Đáp án tham khảo
def validateTriangle(a,b,c):
if (a + b) <= c or (a + c) <= b or (b + c) <= a:
return False
return True
def getTriangleName(a,b,c):
if validateTriangle(a,b,c) == False:
return "khong phai tam giac"
if a == b and b == c:
return "tam giac deu"
if a*a == b*b + c*c or b*b == a*a + c*c or c*c == a*a + b*b:
return "tam giac vuong"
if a == b or b == c or c == a:
return "tam giac can"
1,2,3 khong phai tam giac Không phải tam giác (3 điểm thẳng hàng)
4,2,1 khong phai tam giac Không phải tam giác
1,5,3 khong phai tam giac Không phải tam giác
3.4,3.4,3.4 tam giac deu Tam giác đều
5,4,3 tam giac vuong Tam giác vuông
4,5,3 tam giac vuong Tam giác vuông
3,4,5 tam giac vuong Tam giác vuông
2,2,3 tam giac can Tam giác cân
3,4,4 tam giac can Tam giác cân
5,4,5 tam giac can Tam giác cân
6,4,5 tam giac thuong Tam giác thường
Kiểm tra trường hợp vuông cân, và sửa chương trình để in ra trường hợp này:
5,5,7.071 tam giac vuong can Tam giác vuông cân
Gợi ý 1 cách sửa
def validateTriangle(a,b,c):
if (a + b) <= c or (a + c) <= b or (b + c) <= a:
return False
return True
def getTriangleName(a,b,c):
if validateTriangle(a,b,c) == False:
return "khong phai tam giac"
if a == b and b == c:
return "tam giac deu"
if (round(a*a,2) == round(b*b + c*c, 2) or round(b*b,2) ==
round(a*a + c*c,2) or round(c*c,2) == round(a*a + b*b,2)) and (a == b
or b == c or c == a) :
return "tam giac vuong can"
else:
if a*a == b*b + c*c or b*b == a*a + c*c or c*c == a*a + b*b:
return "tam giac vuong"
else:
if a == b or b == c or c == a:
return "tam giac can"
Bài 9
Viết chương trình kiểm tra một số nguyên dương có phải là số nguyên tố hay không?
Xây dựng các trường hợp kiểm thử để tìm lỗi và sửa lại chương trình cho đúng nếu phát
hiện lỗi.
Đáp án tham khảo
def checkPrime(n):
for i in range(2,n):
if n % i ==0:
return False
return True;
print(checkPrime(int(input())))
Bài 10.
Viết chương trình yêu cầu người dùng nhập vào 1 chuỗi, chương trình phải rút gọn chuỗi
theo quy tắc: nếu kí tự giống nhau viết liên tiếp thì chỉ ghi kí tự đó 1 lần và kèm theo số,
trường hợp bằng 1 thì chỉ ghi kí tự không cần ghi con số.
Ví dụ: aabbbcddab => a2b3cd2ab
Xây dựng các trường hợp kiểm thử để tìm lỗi và sửa lại chương trình cho đúng.
Đáp án tham khảo
inputString = input()
result = ""
currentCount = 1
currentKey = inputString[0]
l = len(inputString)
for i in range(1, l):
if inputString[i] == currentKey:
currentCount += 1
else:
result += currentKey
if (currentCount > 1):
result += str(currentCount)
currentKey = inputString[i]
currentCount = 1
result += str(currentKey)
print(result)
Bài 11.
Viết chương trình chuẩn hóa tên do người dùng nhập với yêu cầu sau:
+ không có dấu cách thừa ở đầu và cuối
+ giữa các từ phân cách nhau bởi 1 dấu cách
+ viết hoa chữ cái đầu của các từ, các chữ cái còn lại viết thường
Xây dựng các trường hợp kiểm thử để tìm lỗi và sửa lại chương trình cho đúng.
Đáp án tham khảo
return s2
def upperFirstCharacter(s):
s2 = """"
for i in range(len(s)):
if i == 0 or s[i-1] == ' ':
s2 += s[i].upper()
else:
s2 += s[i]
return s2
def formatName(s):
s1 = deleteSpace(s)
s2 = s1.lower()
s3 = upperFirstCharacter(s2)
return s3
print(formatName(s))"
Bài 12.
Viết chương trình giải phương trình bậc hai: a*x^2 +b*x +c = 0
Xây dựng các trường hợp kiểm thử để tìm lỗi và sửa lại chương trình cho đúng.
Đáp án tham khảo
import math
a = float(input("moi nhap he so a: "))
b = float(input("moi nhap he so b: "))
c = float(input("moi nhap he so c: "))