Yêu cầu (requirement) là một phần khá nhỏ, nhưng kỹ năng đọc hiểu và phân tích lại to. Vì sẽ có rất nhiều nội dung công việc của tester là liên quan đến yêu cầu, nên kiểu gì thì kiểu, mình sẽ phải viết một bài cho riêng nó.

Khái niệm

Có nhiều thể loại phát biểu Requirements, nào thì requirement là các yêu cầu của khách hàng, nào thì là yêu cầu của người dùng, nào thì là yêu cầu của hệ thống, nào thì là yêu cầu của khách hàng,... Nhưng chung quy lại, đâu thể nào dùng "yêu cầu" để giải thích "Thế nào là yêu cầu?" phải không ạ?.

Yêu cầu là phát biểu, hoặc ràng buộc lên thiết kế của một sản phẩm phần mềm nhằm mục đích phục vụ nhu cầu của khách hàng | Requirement is a statement or constraint on the design of a software product to serve the needs of the customer

Đó, hiểu nôm na chính là như thế. Ví dụ nếu nói là Người dùng có thể đăng nhập sử dụng tài khoản Google, nó là một yêu cầu, vì nó đang ám chỉ rằng khách hàng muốn tính năng đăng nhập bằng tài khoản Google, và anh phải làm cho họ cái đấy.

Một kiểu yêu cầu khác là Người dùng chỉ có thể đăng nhập khi đã tích captcha, đây là một yêu cầu, do chúng ta có thể dễ thấy bản thân nó là một ràng buộc về tính năng đăng nhập, nó ám chỉ tính năng đăng nhập của các anh phải có captcha. Hay một kiểu khác Trang web phải vận hành trên backend NodeJS, đây cũng là một yêu cầu dạng ràng buộc, anh không thể nào làm backend bằng các framework khác được, anh phải làm bằng NodeJS, vì đội ngũ maintainer bên khách hàng chỉ biết mỗi NodeJS thôi.

Typical question: What is requirement? - Yêu cầu là gì?

Statement and Constraint

Một yêu cầu khi tồn tại ở dạng một phát biểu thường sẽ nêu lên một điều gì đó mà sản phẩm cần phải có, thường sẽ là tính năng, hoặc một hành vi cụ thể. Khi nhìn vào một yêu cầu được diễn đạt ở dạng phát biểu, câu từ của nó sẽ tuân theo một kiểu cấu trúc nhất định:

Là một người dùng, tôi muốn... | As a user, I want... Khi tôi làm..., tôi muốn... | When I do..., I want...

Còn khi yêu cầu được diễn đạt ở dạng ràng buộc, thì nó sẽ nêu lên một điều kiện cần phải được đáp ứng ở thiết kế của sản phẩm, thường sẽ là một điều kiện để một tính năng hoặc hành vi hoạt động đúng như mong muốn, hoặc một hạn chế. Câu từ của nó thường sẽ tuân theo một kiểu cấu trúc nhất định:

Người dùng phải... | User must... Hệ thống phải... | System must... Hệ thống cần... | System needs...

Typical question: What is the difference between statement and constraint? - Sự khác biệt giữa statement và constraint là gì?

Typical question: How does a requirement look like? - Một yêu cầu trông như thế nào?

Types of constraint

Nôm na thì các ràng buộc sẽ có một số loại cơ bản:

Typical question: What are the types of constraint? - Có những loại ràng buộc nào?

Levels of Requirement

Yêu cầu cũng có các tầng (Level), nhìn vào sơ đồ dưới đây:

requirement
requirement

Hiểu đơn giản thế này:

Ví dụ, User Level Requirement có thể có : Người dùng có thể theo dõi chi tiêu trong tháng trong một ứng dụng ngân hàng, thì System Level Requirement có thể có: Hệ thống phải lưu trữ dữ liệu chi tiêu của người dùng trong 365 ngày gần nhất và cho phép truy vấn thống kê của tháng

Typical question: What are the levels of requirements? - Có những tầng yêu cầu nào?

Functional and Non-Functional Requirement

Cũng chính trên cái sơ đồ kia mà chúng ta nhìn thấy cái gọi là "Functional" và "Non-Functional". Đây là hai loại yêu cầu cơ bản của một sản phẩm phần mềm:

Một ví dụ cơ bản về yêu cầu chức năng là : Người dùng có thể đăng nhập vào hệ thống bằng tài khoản Google, chính ví dụ ở trên, còn một ví dụ về yêu cầu phi chức năng là: Hệ thống phải xử lý được 100 người truy cập và sử dụng đồng thời

Typical question: What are functional and non-functional requirements? - Yêu cầu chức năng và phi chức năng là gì?

Study and clarify requirement

Để "học" một requirement, tức là đọc, phân tích, xác minh cách hiểu của bản thân về một yêu cầu, tester đi qua một chuỗi hành động như sau:

Đầu tiên, chúng ta sẽ đi 2 hạng mục ở trên, đọc và bóc tách. Phần đọc thì dễ rồi, trừ khi bạn không biết chữ, nhưng phụ thuộc vào cách viết requirement, đôi khi cách diễn đạt của chúng nó rất tối nghĩa, rất mông lung (ambiguous), vậy thì ngay lúc này cần phải note lại và đưa về phía BA để giúp làm rõ ý tứ của yêu cầu.

Sau đấy, cứ coi như yêu cầu khá dễ hiểu, chúng ta mường tượng ra khách hàng muốn cái gì, đi đến bước phân tích yêu cầu. Bản chất vấn đề ở đây là chúng ta sẽ không phân tích yêu cầu như kiểu Dev làm, vì Dev phân tích yêu cầu là để hiểu rõ về yêu cầu tính năng, từ đấy xây dựng tính năng. Còn chúng ta hiểu rõ yêu cầu để biết từ phía người dùng, một tính năng sẽ được sử dụng như thế nào, từ đấy lập ra phương án kiểm thử tính năng đấy khi Dev nhả hàng.

Typical question: What are the steps to study a requirement? - Các bước để học yêu cầu là gì?

Study a functional requirement

Để có thể nghiên cứu một yêu cầu chức năng, chúng ta thực hiện việc bóc tách thông tin từ yêu cầu ở dạng lời văn và điền vào những mục sau:

Typical question: What are the steps to study a functional requirement? - Các bước để học yêu cầu chức năng là gì?

Study an UIUX requirement

Cái này thì mình sẽ nói nhanh thôi, tóm lại là để nghiên cứu một yêu cầu giao diện, chúng ta đi qua 3 phần:

Typical question: What are the steps to study an UIUX requirement? - Các bước để học yêu cầu giao diện là gì?

Clarify requirement

Để xác minh yêu cầu, chúng ta cần phải lập ra các câu hỏi, câu hỏi này sẽ giúp chúng ta hiểu rõ hơn về yêu cầu, hoặc giúp xác minh yêu cầu.

Trước khi đưa câu hỏi đi, cần phải đảm bảo rằng:

Bình thường thì khi chúng ta đặt ra các câu hỏi, chúng ta cần đưa nó lên cho Lead trước, lý do là vì:

Typical question: What are the thing we should do when raising a question? - Cần làm gì khi đặt câu hỏi?

Nguồn tham khảo