Get Appointment

Manual Tester cần học SQL đến mức nào?
Blog Devpro
DevPro

Manual Tester có cần học SQL sâu như Developer? Tìm hiểu mức kiến thức SQL cần thiết để kiểm tra Database, đối chiếu UI – API – dữ liệu và hỗ trợ khoanh vùng Bug hiệu quả.

Blog Devpro
Blog Devpro

Manual Tester cần học SQL đến mức nào?

Khi bắt đầu học kiểm thử phần mềm, khá nhiều bạn gặp một danh sách kiến thức dài: Test Case, Bug Report, API, SQL, Database… và bắt đầu tự hỏi: “Làm Manual Tester thì tại sao lại phải học SQL? Có cần học sâu như Developer không?”

Câu trả lời ngắn gọn là: Manual Tester không cần trở thành Database Developer, nhưng nên có đủ kiến thức SQL để đọc, truy vấn và đối chiếu dữ liệu khi kiểm thử. Quan trọng hơn việc thuộc nhiều câu lệnh là hiểu mình đang cần kiểm tra dữ liệu nào, dữ liệu đó liên quan đến nghiệp vụ ra sao và câu truy vấn SQL sẽ giúp xác nhận điều gì.

Để hiểu rõ hơn, hãy bắt đầu bằng một tình huống rất thường gặp khi kiểm thử hệ thống.

Khi giao diện hiển thị sai, Tester sẽ kiểm tra gì tiếp theo?

Giả sử bạn đang kiểm thử chức năng quản lý đơn hàng của một website thương mại điện tử. Khách hàng vừa thanh toán thành công, nhưng khi mở màn hình quản trị, trạng thái của đơn hàng vẫn hiển thị là “Chưa thanh toán”.

Nếu chỉ nhìn trên UI, Tester có thể xác nhận rằng kết quả thực tế đang không đúng với mong đợi. Nhưng một câu hỏi quan trọng hơn xuất hiện ngay sau đó: dữ liệu bắt đầu sai từ đâu?

Trong một tình huống kiểm thử đơn giản, Tester có thể lần theo dữ liệu giữa UI, API và Database. UI đang hiển thị “Chưa thanh toán”, nhưng khi kiểm tra API lại thấy paymentStatus = PAID. Tiếp tục truy vấn Database, record tương ứng với đơn hàng cũng đang lưu payment_status = PAID.

Lúc này, Tester chưa cần và cũng không nên vội kết luận chính xác đoạn code nào gây lỗi. Tuy nhiên, việc đối chiếu dữ liệu đã giúp thu hẹp phạm vi cần kiểm tra: Database có dữ liệu đúng, API cũng trả về đúng nhưng giao diện lại hiển thị sai, vì vậy vấn đề có khả năng nằm ở quá trình xử lý hoặc hiển thị phía UI.

Ở một tình huống khác, nếu API đã trả về dữ liệu sai hoặc Database đang lưu sai trạng thái ngay từ đầu, hướng kiểm tra sẽ thay đổi. Tester có thể cần xem lại request trước đó, dữ liệu đầu vào, điều kiện nghiệp vụ hoặc quá trình cập nhật dữ liệu phía Backend.

UI → API → Database vì vậy là một cách minh họa khá dễ hiểu cho tư duy đối chiếu dữ liệu. Trên thực tế, kiến trúc của một hệ thống có thể phức tạp hơn và còn có nhiều lớp xử lý khác, nhưng nguyên tắc quan trọng vẫn giống nhau: Tester không chỉ xác nhận “đang sai”, mà nên thu thập đủ thông tin để hiểu sai ở đâu trong phạm vi mình có thể kiểm tra.

Đây chính là một trong những lý do SQL trở thành kỹ năng hữu ích với Manual Tester.

SQL với Tester không đơn thuần là học SELECT, JOIN hay GROUP BY

Khi học SQL lần đầu, nhiều người thường tiếp cận theo từng câu lệnh: SELECT để lấy dữ liệu, WHERE để lọc, JOIN để kết hợp nhiều bảng, GROUP BY để nhóm dữ liệu. Đây là những kiến thức nền cần có, nhưng nếu chỉ học thuộc cú pháp, bạn vẫn có thể gặp khó khăn khi bước vào một bài toán kiểm thử thực tế.

Thay vì bắt đầu bằng câu hỏi “SELECT viết như thế nào?”, Tester nên tập đặt câu hỏi từ nghiệp vụ. Ví dụ: “Tôi vừa tạo đơn hàng DH1002 trên giao diện, record tương ứng đã được tạo trong Database chưa?”, “Khách hàng vừa thanh toán 860.000 đồng, số tiền và trạng thái lưu trong Database có đúng không?” hoặc “API trả về customer_id = 125, tôi cần kiểm tra khách hàng này trong bảng nào?”

Khi câu hỏi kiểm thử xuất hiện trước, SQL trở thành công cụ để tìm câu trả lời. Cách học này không chỉ giúp nhớ câu lệnh lâu hơn mà còn rèn khả năng hiểu dữ liệu và nghiệp vụ, hai yếu tố rất quan trọng với Tester.

Manual Tester cần học SQL đến mức nào?

Nếu đang hướng tới vị trí Intern, Fresher hoặc Junior Manual Tester, bạn không cần học toàn bộ SQL ngay từ đầu. Mục tiêu hợp lý hơn là đủ khả năng tìm dữ liệu cần thiết, đọc mối quan hệ giữa các bảng và sử dụng truy vấn để đối chiếu kết quả kiểm thử.

Trước tiên, Tester nên hiểu những khái niệm cơ bản của Database như table, column, record, primary key, foreign key và mối quan hệ giữa các bảng. Khi nhìn vào những bảng như users, orders, order_items hay payments, bạn cần hình dung được dữ liệu nào đang nằm ở đâu và chúng liên kết với nhau bằng trường nào.

Sau đó, SELECT và WHERE là những phần nên được luyện thật chắc. Trong quá trình kiểm thử, Tester thường xuyên cần tìm một record theo ID, email, trạng thái, ngày tạo hoặc một điều kiện cụ thể. Vì vậy, các điều kiện như AND, OR, IN, LIKE, BETWEEN hay cách xử lý NULL đều có giá trị thực tế.

JOIN là phần tiếp theo rất nên học. Trong nhiều hệ thống, dữ liệu của một nghiệp vụ không nằm trong một bảng duy nhất. Ví dụ, bảng orders có thể chỉ lưu customer_id, thông tin khách hàng nằm trong users, còn thông tin thanh toán lại nằm trong payments. Nếu muốn kiểm tra đầy đủ một đơn hàng, Tester cần biết cách kết hợp các bảng liên quan.

Ở mức tiếp theo, COUNT, SUM, GROUP BY và HAVING giúp xử lý những tình huống cần kiểm tra số lượng hoặc dữ liệu tổng hợp, chẳng hạn số đơn hàng của một khách hàng, tổng giá trị giao dịch hoặc số bản ghi theo từng trạng thái. Subquery cũng hữu ích, nhưng nên học sau khi đã thực sự quen với truy vấn cơ bản và JOIN.

Nói ngắn gọn, với một Manual Tester mới bắt đầu, SQL nên giúp bạn làm được những việc như:

  • Tìm đúng record cần kiểm tra trong Database.
  • Lọc dữ liệu theo điều kiện của Test Case.
  • Đọc dữ liệu từ nhiều bảng có liên quan.
  • Sử dụng JOIN để đối chiếu dữ liệu.
  • Kiểm tra số lượng hoặc dữ liệu tổng hợp khi nghiệp vụ yêu cầu.
  • Đối chiếu dữ liệu giữa UI, API và Database.
  • Sử dụng kết quả truy vấn để hỗ trợ khoanh vùng Bug.

Nếu đã làm được những việc này một cách tương đối chủ động, kiến thức SQL của bạn đã bắt đầu có giá trị thực tế trong công việc kiểm thử.

Tester có cần học INSERT, UPDATE và DELETE không?

Có, nhưng cách tiếp cận nên khác với SELECT.

Tester nên hiểu INSERT, UPDATE và DELETE để biết dữ liệu được tạo, thay đổi hoặc xóa như thế nào. Tuy nhiên, việc trực tiếp chạy những câu lệnh làm thay đổi dữ liệu cần phụ thuộc vào môi trường, quyền truy cập và quy trình của từng dự án.

Trong môi trường test hoặc staging, đôi khi Tester được phép tạo hoặc chỉnh sửa dữ liệu để phục vụ Test Case. Nhưng với Database dùng chung hoặc những môi trường chứa dữ liệu quan trọng, việc tự ý chạy UPDATE hay DELETE có thể gây ảnh hưởng lớn nếu câu lệnh không được kiểm soát.

Chỉ một điều kiện WHERE viết sai cũng có thể khiến nhiều record bị thay đổi ngoài ý muốn. Vì vậy, khi mới học SQL cho Manual Test, nên ưu tiên thật chắc các truy vấn đọc dữ liệu trước. Những câu lệnh thay đổi dữ liệu cần được thực hành trong môi trường an toàn và tuân theo quy trình của dự án.

Có cần học SQL nâng cao như Database Developer?

Thông thường là chưa cần ở giai đoạn đầu.

Manual Tester không nhất thiết phải đi sâu ngay vào tối ưu execution plan, indexing chuyên sâu, replication, database tuning, quản trị hệ quản trị cơ sở dữ liệu hay thiết kế kiến trúc dữ liệu phức tạp. Đây là những kiến thức có thể hữu ích nếu sau này công việc yêu cầu sâu hơn, nhưng không phải mục tiêu đầu tiên của người đang học Manual Testing.

Một lỗi khá phổ biến khi học công nghệ là cố gắng học thật rộng trước khi biết kiến thức đó sẽ được sử dụng vào đâu. Với SQL cũng vậy. Nếu mục tiêu hiện tại là Manual Tester, hãy ưu tiên những nội dung có liên hệ trực tiếp với việc kiểm tra dữ liệu và nghiệp vụ trước.

Khi đã có nền tảng và bắt đầu tham gia những dự án có hệ thống dữ liệu phức tạp hơn, bạn hoàn toàn có thể học thêm theo nhu cầu thực tế.

Một câu SQL chỉ thực sự hữu ích khi gắn với Test Case

Giả sử bạn đang kiểm thử chức năng đăng ký tài khoản. Sau khi người dùng bấm “Đăng ký” và nhận thông báo thành công, Tester không nhất thiết phải dừng lại ở giao diện. Nếu Test Case yêu cầu kiểm tra sâu hơn, bạn có thể xác nhận user đã được tạo trong Database hay chưa, email có được lưu đúng không, trạng thái mặc định của tài khoản là gì hoặc hệ thống xử lý thế nào khi đăng ký lại bằng cùng một email.

Với chức năng đặt hàng, câu hỏi lại khác. Order đã được tạo chưa? Các sản phẩm có liên kết đúng với Order không? Tổng tiền lưu trong Database có khớp với UI không? Sau khi thanh toán thành công, payment_status có được cập nhật đúng không? Nếu giao dịch thất bại, trạng thái đơn hàng được xử lý như thế nào?

Khi SQL được học thông qua những tình huống như vậy, Tester không chỉ luyện câu truy vấn mà đồng thời phát triển khả năng đặt Test Case, hiểu luồng dữ liệu và đọc nghiệp vụ. Đây mới là phần có giá trị lâu dài.

SQL có thể giúp Bug Report rõ ràng hơn như thế nào?

Giả sử Tester chỉ ghi trong Bug Report rằng: “Trạng thái đơn hàng hiển thị sai”. Thông tin đó có thể đủ để xác nhận một vấn đề trên giao diện, nhưng đội phát triển vẫn cần tiếp tục kiểm tra khá nhiều bước để tìm nguyên nhân.

Nếu Tester có thể cung cấp thêm thông tin rằng UI đang hiển thị “Chưa thanh toán”, API trả về PAID, Database cũng lưu payment_status = PAID và lỗi xảy ra với Order ID DH1002, Bug Report đã có thêm dữ liệu để Developer bắt đầu điều tra.

Điều này không có nghĩa Tester phải tìm ra chính xác nguyên nhân ở dòng code nào. Debug và xác định root cause kỹ thuật còn phụ thuộc vào cấu trúc hệ thống và trách nhiệm của từng thành viên trong dự án.

Giá trị của SQL nằm ở việc giúp Tester kiểm tra sâu hơn, cung cấp bằng chứng rõ hơn và thu hẹp phạm vi của vấn đề thay vì chỉ mô tả những gì nhìn thấy trên màn hình.

Học SQL cho Tester nên bắt đầu như thế nào?

Một lộ trình phù hợp có thể bắt đầu từ việc hiểu Database và cấu trúc bảng, sau đó luyện SELECT, WHERE và các điều kiện lọc. Khi đã quen với việc lấy dữ liệu từ một bảng, chuyển sang JOIN để xử lý các nghiệp vụ liên quan đến nhiều bảng, rồi học tiếp các hàm tổng hợp, GROUP BY, HAVING và những truy vấn phức tạp hơn khi thực sự cần.

Quan trọng nhất là mỗi kiến thức nên được đặt vào một tình huống kiểm thử. Thay vì chỉ hỏi “JOIN viết thế nào?”, hãy đặt bài toán: “Thông tin đơn hàng nằm trong bảng orders nhưng tên khách hàng nằm trong users, vậy tôi cần đối chiếu hai dữ liệu này bằng cách nào?”

Tương tự, thay vì học COUNT một cách riêng lẻ, hãy thử kiểm tra xem một khách hàng hiện có bao nhiêu đơn hàng hoặc có bao nhiêu giao dịch đang ở trạng thái FAILED.

Khi bài toán xuất hiện trước, câu lệnh SQL sẽ trở thành phương tiện giải quyết vấn đề thay vì một danh sách cú pháp cần ghi nhớ.

Khi nào có thể nói SQL đã đủ để bắt đầu làm Manual Tester?

Không có một con số cố định về số câu lệnh cần thuộc hay số bài tập phải hoàn thành. Một cách đánh giá thực tế hơn là nhìn vào khả năng xử lý tình huống.

Khi nhận một Order ID, bạn có tìm được record tương ứng không? Khi dữ liệu nằm ở hai hoặc ba bảng khác nhau, bạn có biết cách kết hợp chúng để kiểm tra không? Khi UI và API có kết quả khác nhau, bạn có thể vào Database để xác nhận dữ liệu đang được lưu như thế nào không? Khi viết Test Case, bạn có nhận ra trường hợp nào nên kiểm tra thêm dữ liệu phía sau giao diện không?

Nếu dần trả lời được những câu hỏi này, SQL của bạn đang đi đúng hướng dành cho Manual Tester. Bạn chưa cần biết mọi thứ về Database. Điều quan trọng hơn là biết mình cần tìm dữ liệu gì và sử dụng công cụ nào để kiểm tra dữ liệu đó.

Manual Tester không cần biết mọi thứ về SQL

SQL không phải mục tiêu cuối cùng của Tester. Mục tiêu vẫn là xác định hệ thống có đang hoạt động đúng với requirement, logic nghiệp vụ và kỳ vọng của người dùng hay không.

SQL chỉ là một trong những công cụ giúp quá trình kiểm thử đi sâu hơn. Vì vậy, thay vì hỏi “Tôi phải học bao nhiêu câu SQL?”, một câu hỏi thực tế hơn là: “Với dữ liệu của hệ thống, tôi đã đủ khả năng tự kiểm tra và đối chiếu những gì?”

Khi có thể hiểu UI đang hiển thị gì, API đang trả về gì và Database đang lưu gì, Tester không còn chỉ quan sát phần nổi của sản phẩm. Bạn bắt đầu nhìn được sâu hơn vào luồng dữ liệu, có thêm căn cứ để phân tích vấn đề và xử lý những bài toán kiểm thử phức tạp hơn.

Đó cũng là cách SQL nên được tiếp cận trong quá trình học Manual Test: không học để trở thành Database Developer, mà học đủ sâu để phục vụ tư duy kiểm thử và công việc thực tế.

Nếu bạn đang tìm hiểu lộ trình Manual Test từ kiến thức nền tảng, Test Case, Bug Report đến API, Database và SQL, có thể tham khảo chương trình Kiểm thử phần mềm tại DevPro:

https://devpro.edu.vn/khoahoc/kiem-thu-phan-mem


Thuộc danh mục
  • Workshop
Facebook