top of page

Đừng để bị đánh lừa bởi kỹ thuật 3-value BVA trong kỳ thi ISTQB!

  • DaoCuong
  • 23 thg 5
  • 7 phút đọc

Nếu là một tester hoặc là một người đang có nhu cầu tìm hiểu về ngành test chắc hẳn bạn đã từng nghe tới kỳ thi ISTQB rồi đúng không?

Nghe thì có vẻ chỉ là một kỳ thi chứng chỉ chuyên môn đơn giản, nhưng đừng vội chủ quan. ISTQB nổi tiếng với phong cách đánh đố kiểu: “Bạn tưởng bạn chọn đúng đáp án à? Xin tặng bạn 0 điểm!”. Với một kỳ thi đầy tinh thần "gài bẫy" như thế, không ít người đã phải bỏ thêm khoảng 200 đô để thi lại lần nữa!

Vậy kỳ thi này đánh đố người thi như thế nào nhỉ?

Chuyện là…

======================================================================

Một ngày mệt mỏi tôi được sếp ném cho một tệp tài liệu với lời nhắn

"Lập bảng test giá trị biên với 3 giá trị (3-value BVA) cho yêu cầu này"

Tôi vâng vâng dạ dạ rồi lọ mọ mở tệp tài liệu, cái vòng tròn loading xoay xoay chỉ làm tôi thêm nhức đầu.

Tệp tin cũng chẳng có gì đặc biệt, một bảng quan điểm test với nhiều trường hợp mà có ai đó đã làm gần hết, chỉ còn chừa lại một phần. Nội dung của phần này đại khái là "chuyên mục bán vé cho người dùng từ 18 tuổi trở lên, còn đám trẻ con thì khỏi mua nhé! "

Nghĩa là sao? Nghĩa là, nếu thông tin tài khoản của bạn thể hiện rằng bạn đủ 18 tuổi hoặc lớn hơn thì hệ thống sẽ cho bạn tới trang mua vé, còn nếu không (từ 17 tuổi trở xuống) thì hệ thống sẽ trả về một dòng đỏ chót kiểu "Bạn chưa đủ tuổi!"

Sếp yêu câu kiểm tra giá trị biên với 3 giá trị (3-value BVA)  nên nếu tóm tắt lại bằng một cái bảng thì nó trông sẽ như thế này

STT

Giá trị nhập

Kết quả mong đợi

1

17

 "Chưa đủ tuổi"

2

18

 "Tới trang mua vé"

3

19

 "Tới trang mua vé"

Cũng đơn giản phải không. Tôi lập cái bảng trên trong vòng một phút ba mươi giây và gửi lại cho sếp rồi tắt máy kết thúc công việc và đi ngủ vì mệt mỏi. Sáng hôm sau tưởng rằng sếp sẽ khen tôi vì tôi làm việc quá nhanh gọn và hiệu quả thì KHÔNG!!! Ông ấy bảo tôi phải xem lại. Tôi cứ ngỡ là tối qua mắt mờ tay run đánh nhầm số hay viết nhầm chữ hay gì đó, nhưng mà không phải.

Sếp comment bảo: “Còn thiếu giá trị nhập 16”. 

“Sao lại có số 16 ở đây? Ông bảo tôi lập bảng kiểm thử giá trị biên với 3 giá trị mà??? Hay là ổng muốn 16, 17, 18” - Tôi thầm nghĩ

Nhưng comment chỉ bảo là thiếu số 16 chứ không bảo là dư số 19. Tôi đang hơi nghi ngờ khả năng đọc hiểu của mình (hoặc của sếp). Lờ ngợ nhận ra có gì đó không ổn tôi lập tức hỏi ChatGPT và nhận được câu trả lời 



Hoàn toàn giống với suy nghĩ của tôi. Tức là tư duy của tôi đâu có vấn đề gì đâu. Sếp sai lòi ra. Tôi chán chả buồn sửa nữa. Tôi đợi sếp đến rồi combat.

==================================

Ở trên là một giả định mà chắc là các bạn cũng đã gặp nhiều rồi. Trên thực tế trong trường hợp trên, 3-value BVA đúng là lấy ba giá trị bao gồm giá trị biên, giá trị biên -1 và giá trị biên +1. Tuy nhiên điểm sai ở đây là do độ tuổi có thể mua được vé là 18 không có nghĩa là bạn chỉ lấy mốc 18 tuổi để làm biên trong trường hợp này.

Nhìn vào bảng dưới đây bạn sẽ dễ dàng thấy được rằng chúng ta có thể chia yêu cầu trên bằng hai phần: phần xanh mua được vé và phần đỏ không mua được vé. Mỗi phần được giới hạn bởi giá trị biên của nó (dĩ nhiên là có âm tuổi,0 tuổi, 999, dương vô cực tuổi nhưng mà trong trường hợp này đừng để ý nhé, cứ tập trung vào khoảng giữa thôi). 

Vậy nên tuy rằng độ tuổi được đề cập trong yêu cầu phân tích là 18 nhưng chúng ta có tới 2 giá trị biên là 17 và 18 cho từng vùng.

Vì có tới tận 2 giá trị biên là 17 và 18 nên lúc này dựa vào công thức “ba giá trị bao gồm giá trị biên, giá trị biên -1 và giá trị biên +1” ta sẽ có

  1. 3-value BVA của 17 là 16, 17, 18

  2. 3-value BVA của 18 là 17, 18, 19 

Kết hợp cả (1.) và (2.) lại chúng ta dễ dàng rút ra được 3-value BVA cho ra giá trị test input lần này sẽ bao gồm 16, 17, 18, 19.

Nội dung này chính là nội dung được đề cập đến trong chương 4.2.2. Boundary Value Analysis của tài liệu ISTQB FL 4.0.1. Các bạn có thể xem tại đây.

Tuy nhiên tài liệu cũng không mô tả rõ cách áp dụng 3-value BVA và cũng không cho ví dụ cụ thể nên dù đã đọc qua tài liệu nhưng có thể có nhiều bạn vẫn còn lấn cấn ở mục này (trong đó có tôi).


Quay lại câu chuyện trên, nhân vật trong câu chuyện chỉ nghĩ tới 3 giá trị của biên 18 mà không biết được rằng 17 cũng là biên nên chỉ chọn (2.) cho bảng giá trị test của mình, điều này khiến sếp anh ta phải comment rằng thiếu giá trị 16 nhưng anh ta vẫn không thể hiểu được số 16 này ở đâu ra.

Tương tự nếu chúng ta đi thi nếu chỉ áp dụng kỹ thuật 3-value BVA nhưng không hiểu rõ cách phân loại biên thì cũng sẽ rất dễ chọn câu trả lời sai. (Và chính những lúc khi chọn sai đáp án nhưng bản thân chúng ta lại không thể hiểu được chúng ta sai ở đâu, cũng là lúc mà đề ISTQB lừa bạn)


Mở rộng thêm một chút về lý do vì sao ở yêu cầu trong câu chuyện chúng ta cần phải có biên 17 cho dù hệ thống chỉ yêu cầu đủ 18 tuổi trở lên thì mới được mua vé.

Humans make errors for various reasons, such as time pressure, complexity of work products,processes, infrastructure or interactions, or simply because they are tired or lack adequate training.” Trích ISTQB - 1.2.3. Errors, Defects, Failures, and Root Causes

Tạm dịch “Con người mắc lỗi vì nhiều lý do khác nhau, chẳng hạn như áp lực về thời gian, sự phức tạp của sản phẩm công việc, quy trình, hạ tầng hoặc tương tác, hoặc đơn giản chỉ vì họ mệt mỏi hoặc thiếu đào tạo đầy đủ.” ISTQB - 1.2.3. Errors, Defects, Failures, and Root Causes


Đầu tiên tôi muốn nói về lập trình một chút. Trong ngôn ngữ lập trình các toán tử quan hệ dùng để so sánh thường được sử dụng bao gồm:

  • > lớn hơn

  • == bằng

  • >= lớn hơn hoặc bằng

  • < nhỏ hơn

  • <= nhỏ hơn hoặc bằng

  •  != khác, không bằng


Để thể hiện nội dung “từ 18 tuổi trở lên được mua vé” cho máy tính hiểu anh lập trình viên thông qua sử dụng ngôn ngữ lập trình sẽ mô tả bằng hai cách.

Cách 1: Nếu độ tuổi lớn hơn hoặc bằng 18 thì cho mua vé

if (age >= 18) {

 allowBuyTicket();

} else printUnderageMessage();

※  nếu tuổi lớn hơn hoặc bằng 18, cho phép mua ticket. Nếu không, in ra chưa đủ tuổi

Cách 2: Nếu độ tuổi lớn hơn 17 thì cho mua vé

if (age > 17) {

 allowBuyTicket();

}  else printUnderageMessage()

※  nếu tuổi lớn hơn 17, cho phép mua ticket. Nếu không, in ra chưa đủ tuổi


Vậy anh lập trình viên chọn cách nào trong 2 cách trên nhỉ? 

Thật ra là cách nào cũng được, nhưng chúng ta là tester, chúng ta không được đọc mã nguồn và cũng không biết anh lập trình viên đã chọn cách 1 hay cách 2 để làm. Chính vì vậy nên chúng ta mới cần kiểm tra cho cả biên 17 lẫn biên 18.

Trong trường hợp anh lập trình viên chọn cách 2 tức là kiểm tra tuổi nếu lớn hơn 17 thì cho mua vé. Đêm hôm trước anh ấy uống nhiều nên say quá, đến lúc làm việc thay vì gõ vào chương trình if (age > 17) anh ấy lại nhầm toán tử > (lớn hơn) với toán tử != (không bằng, khác). Tức là ảnh sẽ viết

if (age != 17) {

 allowBuyTicket();

}  else printUnderageMessage()

※  Nếu tuổi không phải là 17, cho phép mua ticket. Nếu là 17, in ra chưa đủ tuổi

Bình luận của người viết: Tôi thật sự không hiểu anh lập trình viên say tới mức nào mà để nhầm được từ [>] thành [!=] nhưng nói chung là con người mà, ai chả có lúc mắc sai lầm.

 

Vậy nhìn vào đây ta biết được chỉ cần nhập các số không phải là 17 chúng ta có thể đến được trang mua vé. Nếu chúng ta sử dụng cách của nhân vật trong câu chuyện là dùng bảng giá trị bao gồm 17,18,19 để test

STT

Giá trị nhập

Kết quả mong đợi

Kiểm tra thực tế

1

17

 "Chưa đủ tuổi"

 "Chưa đủ tuổi"

2

18

 "Tới trang mua vé"

 "Tới trang mua vé"

3

19

 "Tới trang mua vé"

"Tới trang mua vé"

Kiểm tra 3 giá trị 17,18,19 cho ra kết đúng với những gì chúng ta mong đợi, 17 cho ra chưa đủ tuổi, 18 và 19 có thể tới được trang mua vé. Vậy là chúng ta kết luận chức năng này không có vấn đề gì cả. Một kết luận sai lầm. 

Tới đây chúng ta cần sử dụng cả biên 17 và áp dụng 3-value BVA để cover cho cả trường hợp lẩn thẩn của anh lập trình viên ở trên. Lúc này là màn xuất hiện giá trị input 16, hiển nhiên người 16 tuổi sẽ không mua được vé nhưng vì lỗi ngớ ngẩn trên kết quả là họ cũng mua được luôn.

Bảng kết quả sẽ như dưới đây:

STT

Giá trị nhập

Kết quả mong đợi

Kiểm tra thực tế

1

16

  "Chưa đủ tuổi"

 "Tới trang mua vé"

2

17

 "Chưa đủ tuổi"

 "Chưa đủ tuổi"

3

18

 "Tới trang mua vé"

 "Tới trang mua vé"

4

19

 "Tới trang mua vé"

"Tới trang mua vé"

Nhờ vào giá trị 16 chúng ta đã phát hiện ra lỗi phải không nào. 

Tới đây tôi đoán các bạn cũng đã hiểu được cách áp dụng 3-value BVA vào trong thực tiễn như thế nào, cũng như áp dụng vào giải đề thi ISTQB để tránh những nhầm lẫn không đáng có.


Lời kết:

Tài liệu ôn thi ISTQB sau khi chuyển sang phiên bản 4.0 đã có những thay đổi lớn nhỏ. Phần Boundary Value Analysis cũng là phần đã bị thay đổi khá nhiều trong lần cải cách giáo trình này. 

Trước đó các bạn có thể tìm hiểu kỹ thuật "Phân tích giá trị biên" và "Phân vùng tương đương" (nằm trong giáo trình cũ của ISTQB). Tôi cho rằng áp dụng kỹ thuật này cũng giúp chúng ta có thể cover các trường hợp trong câu chuyện được nói đến ở đầu bài 

Học kiến thức mới hay áp dụng kiến thức cũ quả thật là đau đầu phải không. Nhưng dù là cách nào đi nữa tôi nghĩ rằng việc hiểu rõ các phương pháp, kỹ thuật kiểm thử mới là điều quan trong. Việc hiểu rõ kỹ thuật giúp chúng ta có thể phân tích tài liệu một chính xác hơn, cải thiện chất lượng sản phẩm tốt hơn cũng là một bằng chứng để chúng ta an tâm hơn về năng lực của mình trong lĩnh vực testing phải không nào. 


Tài liệu tham khảo: Link



 
 
 

Comentarios


bottom of page