Ngân hàng câu hỏi SQA - PTIT
- Lỗi phần mềm(Software Error) là các phần code sai do lôi cú pháp, logic hoăc lỗi do phân tích, thiết
kế
- Nguyên nhân gây ra lỗi:
1. Lỗi khi định nghĩa yêu cầu
2. Quan hệ Client-developer tồi
3. Sai phạm có chủ ý với yêu cầu phần mềm
4. Lỗi thiết kế logic
5. Lỗi lập trình
6. Không tuân thủ các hướng dẫn viết tài liệu và code
7. Thiếu sót của quá trình kiểm thử
8. Lỗi giao diện người dùng và thủ tục
9. Lỗi tài liệu
Pregunta 1.4: Kể ra các độ đo đặc trưng chất lượng chính của McCall? Giải thích nội
dung của nó?
McCall có 11 tiêu chí; chia thành các nhóm.
– Tiêu chí vận hành sản phẩm
+ Tính đúng đắn – Correctness : Đặc tả về độ chính sác, tính toàn vẹn, thời gian của outputs.
+ Tính tin cậy – Reliability : Định ra tỉ lệ lỗi cho từng chức năng hoặc cả hệ thống
+ Tính hiệu quả - Efficiency : Tài ng phần cứng cần để thực hiện các chức năng của phần mềm
+ Tính toàn vẹn – Integrity : Bảo mật hệ thống, ngăn truy cập trái phép
+ Tính khả dụng - Usability : Tính dễ học, dễ dùng, hiệu quả.
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Ngân hàng câu hỏi SQA - PTIT
....} public static void f6() {...} Sử dụng đầu vào ca kiểm thử dưới đây: t1= f1(0, 0) t2= f1(1, 1) t3= f1(0, 1) t4= f1(3, 2) t5= f1(3, 4) a. Vẽ đồ thị luồng điều khiển b. Chỉ ra đường trên đồ thị luồng điều khiển tương ứng với mỗi đầu vào ca kiểm thử c. Tìm tập đầu vào ca kiểm thử nhỏ nhất để bao phủ hết nút d. Tìm tập đầu vào ca kiểm thử nhỏ nhất để bao phủ hết cạnh e. Tìm tập đầu vào ca kiểm thử nhỏ nhất để bao phủ hết đường Pregunta 3.15: public void foo2(int a, int b, int x) { if (a>1 && b==0) { x=x/a; } for ( int i = 1; i < 3; i++){ if true x=x+1; } } a. Vẽ đồ thị luồng điều khiển b. Từ đồ thị luồng điều khiển, xác định tập các đường từ đầu vào tới đầu ra để bao phủ được toàn bộ ngã rẽ (branch) c. Liệu tất cả các đường trên có khả thi hay không? Nếu không chỉ ra những đường không khả thi. d. Xác định test case tương ứng với các đường khả thi Pregunta 3.16: sum(a, numEntry,sum){ sum = 0; Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers for (init =1; init <=numEntry;init++) if (a[init]>0) sum = sum + a[init]; if (false) sum = 0; } a. Vẽ đồ thị luồng điều khiển b. Từ đồ thị luồng điều khiển, xác định tập các đường từ đầu vào tới đầu ra để bao phủ được toàn bộ ngã rẽ (branch) c. Liệu tất cả các đường trên có khả thi hay không? Nếu không chỉ ra những đường không khả thi. d. Xác định test case tương ứng với các đường khả thi Pregunta 3.17: Cho sơ đồ gọi các module như sau (còn thiếu) a. Xác định thứ tự tích hợp và các stub/driver (nếu cần) khi dùng kỹ thuật topdown b. Xác định thứ tự tích hợp và các stub/driver (nếu cần) khi dùng kỹ thuật bottom up c. Xác định thứ tự tích hợp và các stub/driver (nếu cần) khi dùng kỹ thuật sandwich Pregunta 3.18: Cho code 1. int modifiedbinsearch(int X, int V[], int n){ 2. int low, high, mid; 3. low = 0; 4. high = n - 1; 5. while (low <= high) { 6. mid = (low + high)/2; 7. if (X < V[mid]) { 8. high = mid - 1; 9. mid = mid - 1; } A Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers 10. else if (X > V[mid]) a. low = mid + 1; b. else c. return mid; d. } 11. return -1; 12. } a. Vẽ đồ thị luồng dữ liệu. b. Xác định điểm bất thường (anomaly) của code trên c. Giả sử mảng V[] có ít nhất 1 phần tử, xác định đường không khả thi. a. Vẽ đồ thị luồng dữ liệu. b. Xác định điểm bất thường (anomaly) của code trên : Câu lệnh 9 (sẽ ko có tác dụng) c. Giả sử mảng V[] có ít nhất 1 phần tử, xác định đường không khả thi. 1-2-3-4-5-11-12 Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers Pregunta 3.19: Chương trình SquaresLoopRange(start-number, stop-number) hiển thị bình phương của 1 dãy số từ start-number tới stop-number. Nếu start-number lớn hơn stop-number error message cần được hiển thị: Start-limit greater than stop-limit!Sq a. Viết chương trình b. Thiết kế test cases c. Viết code JUnit tương ứng Pregunta 3.20: Viết chương trình MultiplesLoopRange(start-number, stop-number, num) hiển thị dãy số trong khoảng [start-number, stop-number] và dãy số phải là bội số của num. Nếu start-number lớn hơn stop-number, chương trình sẽ hiển thị dãy giảm dần. a. Viết chương trình b. Thiết kế test cases c. Viết code JUnit tương ứng Pregunta 3.21: Hệ thống ghi lại nhật ký nhiệt độ theo thời gian. Nhưng output ở một format riêng, bao gồm một dãy các symbols, đầu tiên là 1 số biểu diễn nhiệt độ bắt đầu, ký hiệu tiếp biểu diễn sự thay đổi nhiệt độ so với trước đó. Các symbols được giải mã như sau: • '.' không thay đổi • '+' tăng 1 độ so với trước nó • '-' giảm 1 độ so với trước nó Các giá trị được biên dịch thành các số kiểu int. Ta cần tính median của dữ liệu nhiệt độ. Đầu tiên, ta cần sắp xếp. Sau đó: Nếu mảng chứa số lẻ phần tử n, median là phần tử chính giữa:phần tử (n-1)/2 của mảng. Nếu mảng chứa số chẵn phẩn tử, median là giá trị trung bình của 2 phần tử n/2 và (n/2)-1 của mảng. Lưu ý: nhiệt độ là integer, nhưng giá trị median là float. a. Viết chương trình TempMedian b. Thiết kế test cases c. Viết code JUnit tương ứng Pregunta 3.22: DNA được tạo bởi 2 DNA-Strands (chuỗi), chúng xoắn với nhau tạo thành 1 double helix. Mỗi chuỗi DNA là chuỗi các bases. Gồm 4 bases: adenine (abbreviated A) cytosine (C) guanine (G) thymine (T) Bases có cặp: A bắt cặp với T, C bắt cặp với G. Ví dụ, một sợi là A-C-G-G-T-C Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers Sợi còn lại sẽ là : T-G-C-C-A-G Vì ta có các cặp A:T, C:G, G:C, G:C, T:A và C:G. Cách lưu trữ thông tin như vậy là dư thừa, nhưng ta có thể phân đôi 1 double helix và bỏ 1 phía đi, ta vẫn có thể tái tạo lại nó. Ngoài ra, nếu là muốn nhân đôi double helix, ta có thể chia thành 2 chuỗi, tại tạo lại mỗi phía và sẽ thu được 2 bản copy từ bản gốc. Ta cần tạo 1 class để biểu diễn 1 chuỗi DNA. API cho class DNAStrand: public DNAStrand(String dna): khởi tạo public boolean isValidDNA(): Trả về true nếu DNA là valid, nghĩa là chỉ có các ký tự hoa A, T, C, G và chứa ít nhất 1 ký tự. public String complementWC(): Trả về Watson Crick complement, là chuỗi DNA bù – sợi còn lại trong double helix. Thay T bằng A, A bằng T, C bằng G và G bằng C. public String palindromeWC(): Trả vềWatson Crick Palindrome, chuỗi đảo của chuỗi DNA bù. public boolean containsSequence(String seq): Trả về true nếu DNA chứa chuỗi con seq. public String toString(): Trả về string DNA. a. Viết chương trình TempMedian b. Thiết kế test cases c. Viết code JUnit tương ứng Pregunta 3.11: Hàm bên dưới trả về chỉ số phần tử cuối cùng trong x có giá trị bằng 0. Nếu không tồn tại, trả về giá trị -1. int lastZero(int[] x){ for (int i = 0; i < x.length; i++){ if (x[i] == 0) return i; } return -1; } Cho đầu vào ca kiểm thử dưới đây: t1= (x={5}) t2= (x={0}) t3= (x={5,-2,5,7,0}) t4= (x={-1,2,0,5,-9}) t5= (x={0,-2,3,7,9}) a. Vẽ đồ thị luồng điều khiển Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers b. Chỉ ra đường trên đồ thị luồng điều khiển tương ứng với mỗi đầu vào ca kiểm thử c. Tìm tập đầu vào ca kiểm thử nhỏ nhất để bao phủ hết câu lệnh d. Tìm tập đầu vào ca kiểm thử nhỏ nhất để bao phủ hết ngã rẽ e. Tìm tập đầu vào ca kiểm thử nhỏ nhất để bao phủ hết đường với số phần tử của mảng x = 4 f. Liệu tất cả các đường tương ứng ở e có khả thi hay không? Nếu không chỉ ra những đường không khả thi. Pregunta 3.15: public void foo2(int a, int b, int x) { if (a>1 && b==0) { x=x/a; } for ( int i = 1; i < 3; i++){ if true x=x+1; } } a. Vẽ đồ thị luồng điều khiển Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers b. Từ đồ thị luồng điều khiển, xác định tập các đường từ đầu vào tới đầu ra để bao phủ được toàn bộ ngã rẽ (branch) : có đường tất cả 1-2-5-6-end 1-2-5-6-7-8-6-end 1-2-3-5-6-end 1-2-3-6-7-8-6-end 1-2-3-4-5-6-end 1-2-3-4-5-6-7-8-6-end c. Liệu tất cả các đường trên có khả thi hay không? Nếu không chỉ ra những đường không khả thi. d. Xác định test case tương ứng với các đường khả thi Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers Pregunta 3.19: Chương trình SquaresLoopRange(start-number, stop-number) hiển thị bình phương của 1 dãy số từ start-number tới stop-number. Nếu start-number lớn hơn stop-number error message cần được hiển thị: Start-limit greater than stop-limit!Sq a. Viết chương trình b. Thiết kế test cases c. Viết code JUnit tương ứng a. code public class Squares { int startNum; int stopNum; public Squares(int startNum, int stopNum) { this.startNum = startNum; this.stopNum = stopNum; } public String show(){ if(startNum <= stopNum){ for(int i= startNum;i<= stopNum;i++){ System.out.print(i*i+" "); } System.out.println("\n"); return "1"; } System.out.println("Start-limit greater than stop-limit!"); return "0"; } Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers } b. test case : :java SquaresLoopRange 10 20 100 121 144 169 196 225 256 289 324 361 400 :java SquaresLoopRange 1 10 1 4 9 16 25 36 49 64 81 100 Nếu start-number lớn hơn stop-number error message cần được hiển thị: :java SquaresLoopRange 10 1 Start-limit greater than stop-limit! c. JUnit : public SquaresTest() { } @BeforeClass public static void setUpClass() { } @AfterClass public static void tearDownClass() { } @Before public void setUp() throws Exception { } @After public void tearDown() { } @Test public void testCase1(){ int a = 10; int b = 20; System.out.println(":java SquaresLoopRange "+a+" "+b); Squares sq=new Squares(a, b); Assert.assertEquals("1", sq.show()); Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers } @Test public void testCase2(){ int a=1; int b=10; System.out.println(":java SquaresLoopRange "+a+" "+b); Squares sq=new Squares(a, b); Assert.assertEquals("1", sq.show()); } @Test public void testCase3(){ int a=10; int b=1; System.out.println(":java SquaresLoopRange "+a+" "+b); Squares sq=new Squares(a, b); Assert.assertEquals("1", sq.show()); } Pregunta 3.20: Viết chương trình MultiplesLoopRange(start-number, stop-number, num) hiển thị dãy số trong khoảng [start-number, stop-number] và dãy số phải là bội số của num. Nếu start-number lớn hơn stop-number, chương trình sẽ hiển thị dãy giảm dần. a. Viết chương trình b. Thiết kế test cases c. Viết code JUnit tương ứng a. code public class MultiplesLoopRange { int startNum; int stopNum; int number; public MultiplesLoopRange(int startNum, int stopNum, int number) { this.startNum = startNum; this.stopNum = stopNum; this.number = number; } public String show(){ if(startNum <= stopNum){ for(int i= startNum;i<= stopNum;i++){ if(i% number ==0) System.out.print(i+" "); } System.out.println("\n"); return "1"; } for(int i= startNum;i>= stopNum;i--){ if(i% number ==0) System.out.print(i+" "); } Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers System.out.println("\n"); return "0"; } } b. test case : : java MultiplesLoopRange 20 30 3 21 24 27 30 Nếu start-number lớn hơn stop-number, chương trình sẽ hiển thị dãy giảm dần. Ví dụ: : java MultiplesLoopRange 30 20 3 30 27 24 21 Nếu ko có số nào là bội num thì in ra : java MultiplesLoopRange 3 20 30 don’t have any number c. JUnit public class MultiplesLoopRangeTest { public MultiplesLoopRangeTest() { } @BeforeClass public static void setUpClass() { } @AfterClass public static void tearDownClass() { } Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers @Before public void setUp() { } @After public void tearDown() { } @Test public void testCase1(){ int a = 20; int b = 30; int c=3; System.out.println(": java MultiplesLoopRange "+a+" "+b); MultiplesLoopRange sq=new MultiplesLoopRange(a, b,c); Assert.assertEquals("1", sq.show()); } @Test public void testCase2(){ int a=30; int b=20; int c=3; System.out.println(": java MultiplesLoopRange "+a+" "+b); MultiplesLoopRange sq=new MultiplesLoopRange(a, b,c); Assert.assertEquals("0", sq.show()); } } Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers Pregunta 3.21: Hệ thống ghi lại nhật ký nhiệt độ theo thời gian. Nhưng output ở một format riêng, bao gồm một dãy các symbols, đầu tiên là 1 số biểu diễn nhiệt độ bắt đầu, ký hiệu tiếp biểu diễn sự thay đổi nhiệt độ so với trước đó. Các symbols được giải mã như sau: • '.' không thay đổi • '+' tăng 1 độ so với trước nó • '-' giảm 1 độ so với trước nó Các giá trị được biên dịch thành các số kiểu int. Ta cần tính median của dữ liệu nhiệt độ. Đầu tiên, ta cần sắp xếp nhiệt độ theo thứ tự. Sau đó: Nếu mảng chứa số lẻ phần tử n, median là phần tử chính giữa:phần tử thứ (n+1)/2 . Nếu mảng chứa số chẵn phẩn tử, median là giá trị trung bình của 2 phần tử thứ n/2 và (n/2)+1. Lưu ý: nhiệt độ là integer, nhưng giá trị median là float. a. Viết chương trình TempMedian b. Thiết kế test cases c. Viết code JUnit tương ứng a. Code b. Test case c. jUnit a. code public class TempMedian { String temp; public TempMedian(String temp) { this.temp = temp; } public float process(){ String []word=temp.split(" "); int []result=new int[word.length]; int startTemp; try{ startTemp=Integer.parseInt(word[0]); } Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers catch(Exception e){return 0;} result[0]=startTemp; //Giải mã các ký hiệu for(int i=1;i<word.length;i++){ if(word[i].equals(".")) result[i]=result[i-1]; else if(word[i].equals("+")) result[i]=result[i-1]+1; else if(word[i].equals("-")) result[i]=result[i-1]-1; } //In dãy nhiệt độ sau khi giải mã for(int i=0;i<word.length;i++) System.out.print(result[i]+" "); System.out.println("\n"); int tem; //Biến trung gian để sắp xếp //Sắp xếp theo thứ tự tăng dần for(int i=0;i<word.length;i++){ for(int j=i+1;j<word.length;j++)//Đưa giá trị nhỏ nhất còn lại về vị trí i if(result[i]> result[j]) { tem=result[i]; result[i]=result[j]; result[j]=tem; } } //In dãy nhiệt độ sau khi sắp xếp for(int i=0;i<word.length;i++) System.out.print(result[i]+" "); System.out.println("\n"); Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers //Nếu số lượng phần tử của dãy là lẻ -> median là phần tử chính giữa dãy if((result.length)%2==1) { System.out.println(""+result[(result.length-1)/2]); return result[(result.length-1)/2]; }else { //Số lượng phần tử của dãy là chẵn -> median là 2 phần tử chính giữa dãy float medium=(float)(result[result.length/2] + result[(result.length/2)-1])/2; System.out.println(""+medium); return medium; } } } b. test case : java TempMedian 34 . . . + . - - - . + 34 34 34 34 35 35 34 33 32 32 33 32 32 33 33 34 34 34 34 34 35 35 34.0 : java TempMedian 7 - - - . . 7 6 5 4 4 4 4 4 4 5 6 7 4.5 : java TempMedian 10 - + . - . - . + 10 9 10 10 9 9 8 8 9 8 8 9 9 9 9 10 10 10 9.0 : java TempMedian 3 - - - - 3 2 1 0 -1 Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers -1 0 1 2 3 1.0 c. junit public class TempMedianTest { public TempMedianTest() { } @BeforeClass public static void setUpClass() { } @AfterClass public static void tearDownClass() { } @Before public void setUp() { } @After public void tearDown() { } @Test public void testCase1(){ String s="34 . . . + . - - - . +"; Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers TempMedian temp=new TempMedian(s); float medium=34; System.out.println(": java TempMedian "+s); Assert.assertEquals(medium, temp.process()); } @Test public void testCase2(){ String s="7 - - - . ."; TempMedian temp=new TempMedian(s); float medium=(float) 4.5; System.out.println(": java TempMedian "+s); Assert.assertEquals(medium, temp.process()); } @Test public void testCase3(){ String s="10 - + . - . - . +"; TempMedian temp=new TempMedian(s); float medium=9; System.out.println(": java TempMedian "+s); Assert.assertEquals(medium, temp.process()); } @Test public void testCase4(){ String s="3 - - - -"; TempMedian temp=new TempMedian(s); Youtube.com/PoppinKhiem - Sân Chơi Giới Trẻ PTITers float medium=1; System.out.println(": java TempMedian "+s); Assert.assertEquals(medium, temp.process()); } }
File đính kèm:
- ngan_hang_cau_hoi_sqa_ptit.pdf