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ả.

Ngân hàng câu hỏi SQA - PTIT trang 1

Trang 1

Ngân hàng câu hỏi SQA - PTIT trang 2

Trang 2

Ngân hàng câu hỏi SQA - PTIT trang 3

Trang 3

Ngân hàng câu hỏi SQA - PTIT trang 4

Trang 4

Ngân hàng câu hỏi SQA - PTIT trang 5

Trang 5

Ngân hàng câu hỏi SQA - PTIT trang 6

Trang 6

Ngân hàng câu hỏi SQA - PTIT trang 7

Trang 7

Ngân hàng câu hỏi SQA - PTIT trang 8

Trang 8

Ngân hàng câu hỏi SQA - PTIT trang 9

Trang 9

Ngân hàng câu hỏi SQA - PTIT trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 64 trang xuanhieu 4220
Bạn đang xem 10 trang mẫu của tài liệu "Ngân hàng câu hỏi SQA - PTIT", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Ngân hàng câu hỏi SQA - PTIT

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:

  • pdfngan_hang_cau_hoi_sqa_ptit.pdf