Cách kiểm tra dữ liệu trong SQL Database cho Tester
Cơ sở dữ liệu (CSDL) được ví như là trái tim của phần mềm, nó vô cùng quan trọng để xây dựng và phát triển phần mềm, ứng dụng trên nền tảng mobile, PC. Chính vì thế khi độ phức tạp của một ứng dụng tăng lên thì nhu cầu về CSDL phải mạnh mẽ và an toàn. Một số Hệ quản trị Cơ sở dữ liệu phổ biến, hay được các nhà phát triển phần mềm sử dụng như: MySQL, SQL Server, Oracle,… Trong bài viết này, chúng ta sẽ cùng tìm hiểu sâu hơn về Database Testing và cách kiểm tra dữ liệu trong SQL Database.
Nội Dung Bài Viết
Database Testing là gì? Tại sao phải kiểm tra cơ sở dữ liệu
Khái niệm Database Testing
Database Testing là kiểm tra cơ sở dữ liệu (CSDL) bao gồm một quy trình nhiều lớp, trong đó có lớp giao diện người dùng (UI – User Interface), lớp nghiệp vụ, lớp truy cập dữ liệu và chính cơ sở dữ liệu. Lớp UI xử lý thiết kế giao diện của CSDL, trong khi lớp nghiệp vụ các CSDL hỗ trợ các chiến lược của nghiệp vụ.
Kiểm tra CSDL là một loại kiểm thử phần mềm nhằm kiểm tra các bảng, tính ràng buộc, thuộc tính, lược đồ quan hệ của CSDL. tính toàn vẹn, nhất quán, độc lập và bền vững của dữ liệu, ngoài ra cần đảm bảo CSDL có luồng hoạt động ổn định, không xảy ra bất thường.
Database Testing có ý nghĩa quan trọng như thế nào? Tại sao phải kiểm tra CSDL?
Ý nghĩa của Database Testing quan trọng như là:
- CSDL là phần quan trọng trong bất kì ứng dụng phần mềm
- Hệ thống có thể bị lỗi nặng hay nhẹ nếu không may CSDL gặp sự cố dù là lỗi nhỏ nhất
- Nhiều kẻ Hacker lợi dụng sơ hở của ứng dụng để ăn cắp dữ liệu người dùng từ Database nhằm mục đích xấu
- Dữ liệu đầu vào không được kiểm soát chặt chẽ và lưu trữ hợp lệ, dần dần khi CSDL phình to ra có thể dẫn tới sập hệ thống, hệ thống không lưu trữ được tiếp, nhiều dữ liệu rác hoặc các lỗi không mong muốn khác.
Mục đích kiểm tra CSDL:
- Đảm bảo các dữ liệu đầu vào được kiểm soát và lưu trữ một cách hợp lệ trong CSDL
- Ngăn chặn những truy cập trái phép vào DB, đảm bảo sự an toàn CSDL cho ứng dụng
- Tốc độ xử lý dữ liệu nhanh chóng, phần mềm chạy ổn định
Danh sách các mục kiểm tra SQL Database
Khi thực hiện kiểm thử SQL Database, có nhiều mục cần kiểm tra quan trọng bạn nên xem xét. Dưới đây là danh sách các mục cần kiểm tra:
1. Data Mapping (Ánh xạ dữ liệu)
Đối với các phần mềm dữ liệu gọi từ DB (Database) thông qua API và hiển thị trên UI (User Interface – giao diện người dùng) và ngược lại. Vì thế cần kiểm tra tính ánh xạ dữ liệu:
Thông thường từ tài liệu yêu cầu xác định thông tin ánh xạ. Kiểm tra xem các trường trên UI có phù hợp và tương ứng trong từng bảng của DB hay không
Hành động thao tác của người dùng trên UI (thêm, sửa, xóa, cập nhật) tương ứng trong DB cũng được thực hiện. Tester sẽ phải kiểm tra xem các hành động này thực hiện thành công hay thất bại, đúng hay sai.
2. Thuộc tính ACID
Mỗi giao dịch mà Database thực hiện phải tuân thủ 4 thuộc tính sau:
- Atomicity (Tính bảo toàn) tức là một giao dịch thành công hoặc thất bại. Nếu giao dịch một phần không thành công tức là toàn bộ giao dịch thất bại. Quy tắc này thường được gọi là “tất cả hoặc không có gì”.
- Consistency (Tính nhất quán) tức là một giao dịch sẽ luôn có một trạng thái hợp lệ tương ứng trong Database
- Isolation (tính độc lập) nếu có nhiều giao dịch và cùng được thực hiện một lúc, kết quả hoặc trạng thái trong Database hiển thị như khi giao dịch được thực hiện lần lượt.
- Durability (Tính bền vững) nếu một giao dịch được thực hiện thì không nên thay đổi các yếu tố bên ngoài tác động tới giao dịch đó như mất điện, sự cố nào đó
3. Data Integrity (Tính toàn vẹn dữ liệu)
Tính toàn vẹn còn được hiểu là tính không bị hiệu chỉnh của dữ liệu. Vì vậy không nên cập nhật giá trị trên một trong các thao tác tạo, truy xuất, cập nhật, xóa, dữ liệu hoặc trạng thái hiển thị trên màn hình là giá trị gần nhất và hiển thị giá trị cũ hơn trên một thao tác khác.
Khi thực hiện trên ứng dụng, người dùng cuối chủ yếu thao tác CRUD (Create, Read, Update, Delete) trong Database. Tester hãy nghĩ ra các trường hợp kiểm thử bao gồm kiểm tra dữ liệu ở tất cả các vị trí xuất hiện để xem liệu nó có giống nhau không. Một trong bốn thao tác dưới đây đều ảnh hưởng tới CSDL trong Database:
- C (Create – tạo): Khi người dùng thao tác “tạo” giao dịch rồi ”lưu” mọi giao dịch mới trên hệ thống
- R (Read – Truy xuất): Khi người dùng “Tìm kiếm” hoặc “Đọc” mọi giao dịch đã lưu trên hệ thống
- U (Update – Cập nhật): Khi người dùng “Thay đổi” hay “Chỉnh sửa” bản ghi hiện có trên hệ thống
- D (Delete – Xóa): Khi người dùng “xóa” bất kỳ bản ghi nào khỏi hệ thống
4. Đảm bảo chuẩn nguyên tắc của nghiệp vụ
Các Tester sẽ phải thực hiện truy vấn SQL thích hợp với mỗi một nghiệp vụ để đảm bảo đúng nguyên tắc. Vì trong CSDL các thành phần phức tạp điển hình như các mối quan hệ ràng buộc, thủ tục được lưu trữ,…
Phương pháp kiểm tra dữ liệu trong SQL Database
Phương pháp kiểm tra dữ liệu trong SQL Database là một giai đoạn quan trọng trong quá trình kiểm thử phần mềm và đảm bảo tính toàn vẹn và chính xác của dữ liệu. Dưới đây là 4 phương pháp phổ biến mà người kiểm tra dữ liệu thường áp dụng:
1. Tự viết truy vấn
Để kiểm tra CSDL một cách chính xác, Tester phải nắm kiến thức về các câu lệnh SQL (căn bản tới nâng cao) và DML (Data Manipulation Language – Ngôn ngữ thao tác dữ liệu). Tester cũng cần phải biết cấu trúc CSDL bên trong Ứng dụng đang được kiểm tra.
Tester có thể kết hợp với GUI (giao diện đồ họa người dùng) và xác thực dữ liệu trong các bảng tương ứng để có phạm vi bao phủ tốt. Nếu bạn đang sử dụng Server SQL thì bạn có thể sử dụng trình phân tích truy vấn SQL để truy vấn, thực hiện và truy xuất kết quả.
Đây là cách tốt nhất và mạnh mẽ để kiểm tra CSDL khi ứng dụng có mức độ phức tạp thấp hoặc trung bình.
Nếu ứng dụng quá phức tạp thì Tester có thể khó hoặc không thể viết tất cả các truy vấn SQL được yêu cầu. Đối với câu truy vấn phức tạp, bạn cần sự trợ giúp từ Dev. Với phương pháp này, bạn sẽ tự tin khi kiểm tra cũng như nâng cao kỹ năng truy vấn SQL nên tôi khuyến khích bạn tham khảo Dev.
2. Quan sát dữ liệu tại mỗi bảng
Tester có thể xác thực dữ liệu bằng kết quả của thao tác CRUD. Điều này có thể thực hiện thủ công bằng cách sử dụng giao diện trên ứng dụng khi bạn biết tích hợp CSDL. Tuy nhiên điều này có thể gây nhàm chán và cồng kềnh khi có một lượng lớn dữ liệu trong các bảng CSDL khác nhau.
Đối với kiểm tra dữ liệu thủ công, Tester kiểm tra Database cần phải có kiến thức tốt về cấu trúc CSDL để có thể thực hiện được.
3. Tham khảo câu truy vấn từ Dev
Một trong những cách đơn giản nhất kiểm tra CSDL là tham khảo câu truy vấn của Dev. Thực hiện bất kỳ thao tác CRUD nào từ GUI và xác minh tác động của nó đúng hay sai bằng cách thực hiện câu lệnh truy vấn SQL tương ứng trong DB tham khảo từ Dev. Cách này không cần kiến thức SQL của Tester quá sâu và kiến thức về cấu trúc DB của ứng dụng, hiểu căn bản là được.
Tuy nhiên phương pháp này cần phải được sử dụng một cách thận trọng. Nếu như góc nhìn từ Dev viết câu truy vấn sai về mặt ngữ nghĩa và không đáp ứng đúng yêu cầu người dùng thì quá trình này sẽ không được xác thực dữ liệu hay nói cách khác việc xác thực dữ liệu sai, không thành công.
4. Sử dụng công cụ kiểm tra cơ sở dữ liệu tự động
Có một số công cụ có sẵn hỗ trợ Tester kiểm tra dữ liệu như là MySQL, SQL Server, Oracle,…. Bạn nên tham khảo trên mạng hay các diễn đàn IT để xem đánh giá và chọn công cụ phù hợp với nhu cầu của mình, tận dụng nó một cách hiệu quả nhất. Ngoài ra, trong dự án nên cài và sử dụng cùng một loại công cụ.
Các nguyên tắc thực hiện Database Testing
Về quy trình Tester kiểm tra cơ sở dữ liệu trong SQL Database nhìn chung cũng không khác kiểm tra dữ liệu trên các ứng dụng.
Các bước thực hiện kiểm tra Database cơ bản:
- Bước 1: Chuẩn bị môi trường Test
- Bước 2: Thực hiện Test
- Bước 3: Kiểm tra kết quả
- Bước 4: Kiểm chứng kết quả thực tế so với kết quả mong muốn
- Bước 5: Báo cáo kết quả cho các nhóm khác trong nhóm phát triển
Thông thường, ngôn ngữ truy vấn SQL hay được các Dev sử dụng. Lệnh được sử dụng phổ biến là “Select”.
Câu lệnh truy vấn đầy đủ format sau: SELECT * FROM <table name> WHERE <condition>
Ngoài lệnh Select thì trong SQL còn 3 loại lệnh quan trọng:
- DDL: Data definition language là ngôn ngữ định nghĩa dữ liệu
- DML: Data manipulation language là ngôn ngữ thao tác dữ liệu
- DCL: Data control language là ngôn ngữ kiểm soát dữ liệu
Dưới đây là những câu lệnh phổ biến tương ứng
- DDL sử dụng CREATE, ALTER, RENAME, DROP và TRUNCATE để xử lý các bảng (chỉ mục)
- DML bao gồm các câu lệnh ADD, UPDATE và DELETE bản ghi
- DCL xử lý việc cấp quyền thao tác và truy cập dữ liệu cho người dùng, bao gồm 2 lệnh GRANT và REVOKE. Cú pháp như sau:
Grant syntax:
Grant select/update/delete/…
On <table name>
To <user id1, user id2…user idn></em></code></pre>
Revoke syntax:
Revoke select/update/delete/…
on <table name>
from<user id1, user id2…user idn>;
Ví dụ và một số câu lệnh SQL dùng để kiểm tra cơ sở dữ liệu
Giả sử có một DB Quản lý sinh viên bao gồm 6 bảng: SINHVIEN, LOP, DIEMTHI, KHOA, MONHOC, GIANGVIEN có Diagrams như hình trên.
Dưới đây là một số câu lệnh SQL hay sử dụng để kiểm tra, truy vấn dữ liệu trong DB Quản lý sinh viên.
- SELECT
Cú pháp:
SELECT column 1, column 2,... FROM TABLE_NAME
Ví dụ:
SELECT * FROM MONHOC;
Dấu * dùng để lấy hết tất cả các records trong bảng MONHOC. Hoặc bạn có thể chỉ lấy tên môn học trong bảng MONHOC như sau: SELECT TenMH FROM MONHOC;
- WHERE
Nếu lấy dữ liệu kèm thêm điều kiện nào đó thì cú pháp như sau
SELECT column 1, column 2,... FROM TABLE_NAME WHERE condition;
Ví dụ: Lấy những sinh viên có ngày sinh > 2000-02-02 trong bảng SINHVIEN
SELECT * from SINHVIEN where NgaySinh > '2000-02-02 00:00:00.000'
- JOIN
Lệnh này dùng để kết hợp hai hoặc nhiều bảng với nhau để lấy dữ liệu. Có 3 loại hay sử dụng: RIGHT JOIN, LEFT JOIN, INNER JOIN
INNER JOIN = JOIN: là trả về tất cả các bản ghi ở cả 2 dòng khi chúng tương ứng với nhau hay giá trị dùng để JOIN 2 bảng với nhau đều có cả ở 2 bảng.
Cú pháp:
SELECT * FROM table 1
INNER JOIN table 2
ON table1.column_name = table2.column_name ;
Ví dụ:
SELECT SV.MASV, SV.TenSV, D.DIEMTHI
FROM SINHVIEN SV INNER JOIN DIEMTHI D
ON SV.MaSV = D.MaSV
- RIGHT JOIN
Là trả về tất cả các dòng của bảng bên phải và các dòng phù hợp từ bảng bên trái, nếu không tương ứng, sẽ hiển thị giá trị NULL cho các cột của bảng bên trái.
Cú pháp:
SELECT * FROM table 1
RIGHT JOIN table 2
ON table1.column_name = table2.column_name ;
Ví dụ:
SELECT SV.MASV, SV.TenSV, D.DIEMTHI
FROM SINHVIEN SV RIGHT JOIN DIEMTHI D
ON SV.MaSV = D.MaSV
- LEFT JOIN:
Là trả về tất cả các dòng của bảng bên trái và các dòng phù hợp từ bảng bên phải, nếu không tương ứng, sẽ hiển thị giá trị NULL cho các cột của bảng bên phải.
Cú pháp:
SELECT * FROM table 1
LEFT JOIN table 2
ON table1.column_name = table2.column_name ;
Ví dụ:
SELECT SV.MASV, SV.TenSV, D.DIEMTHI
FROM SINHVIEN SV LEFT JOIN DIEMTHI D
ON SV.MaSV = D.MaSV
- GROUP BY
Khi kết hợp với lệnh SELECT với các hàm COUNT, SUM, AVG, MAX, MIN thì sẽ nhóm các kết quả đặt theo một hoặc nhiều cột.
Cú pháp:
SELECT column_name(s) FROM table_name WHERE [condition] GROUP BY column_name(s)
Ví dụ:
SELECT MaLop COUNT(GioiTinh) FROM SINHVIEN GROUP BY MaLop;
- ORDER BY
Kết hợp với lệnh SELECT để sắp xếp các bản ghi theo thứ tự giảm dần (DESC) hoặc tăng dần (ASC)
Cú pháp:
SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC|DESC;
Ví dụ: Hiển thị các môn học theo thứ tự giảm dần mã môn học
SELECT * from MONHOC ORDER BY MaMH DESC
Hiển thị các môn học theo thứ tự tăng dần mã môn học
SELECT * from MONHOC ORDER BY MaMH ASC
Kết luận
Công việc kiểm thử dữ liệu là công việc mang tính đòi hỏi cả tư duy lẫn tính cẩn thận vì dữ liệu rất lớn và nghiệp vụ thực tế rất nhiều nghiệp vụ khó. Hy vọng qua bài viết chia sẻ này, phần nào các Tester cũng hiểu được thêm về cách kiểm tra dữ liệu trong SQL Database. Ngoài ra, bạn có thể truy cập link youtube của Test Mentor để tham khảo thêm những video liên quan tới SQL Database nhé.
Linh Đan
Leave a Comment