[QA-QC] Database Testing

Why? - Mục đích

  • Data mapping

  • Đảm bảo tính chất của CSDL ACID => Việc đảm bảo ACID nhằm tránh trường hợp dữ liệu tại các bước của 1 trans không khớp, dẫn đến tình trạng thất thoát dữ liệu

  • Đảm bảo tính toàn vẹn

  • Đảm bảo tuân thủ quy tắc kinh doanh

What? - Checklist

  1. Check tính hợp lệ của dữ liệu

    1. Check transactions:

      • Check sự hợp lệ của dữ liệu theo các common: tương tự như Check GUI nhưng là thực hiện trên DB

      • Check theo tiêu chuẩn ACID

  2. Check tính toàn vẹn của dữ liệu

    1. Database Schemas

      1. Định nghĩa: namesapce để gom nhóm các đối tượng giúp dễ dàng quản lý; thuận lợi cho việc tách, quản lý, sở hữu các đối tượng

      2. 1 số lệnh khi thao tác Schemas:

        • Tạo: CREATE SCHEMAS <tên schemas>

        • Xóa: DROP SCHEMAS <tên schemas>

        • Cấp quyền sử dụng schemas: GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: <tên_schema> TO <tên_user>

        • Xóa quyền sử dụng schemas: GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: <tên_schema> TO <tên_user>

    2. Constraint- Ràng buộc: các quy tắc đặt cho cột dữ liệu trên table. Một số ràng buộc:

      • NOT NULL

      • DEFAULT

      • UNIQUE

      • PRIMARY Key

      • FOREIGN Key

      • CHECK: đảm bảo giá trị trong cột thỏa mãn 1 điều kiện nào đó

      • INDEX: tạo và lấy dữ liệu 1 cách nhanh chóng theo ID

    3. Trigger

      • Định nghĩa: là mã thủ tục được thực hiện tự động để đáp ứng sự kiện nhất định trên 1 bảng hoặc 1 view

      • Tự động thực thi khi có thao tác insert, update, delete → Thường được sử dụng để kiểm tra tính toàn vẹn

      • Ví dụ:

        • Tạo trigger để lấy log

        • Ktra các ràng buộc giữa các đối tượng như Khi tạo nhân viên thì tụ động tạo bản ghi về lương, bh….

  3. Check hiệu năng

  4. Check thủ tục (Stored Proceduce- Thủ tục lưu trữ): tương tự như 1 hàm trong ngôn ngữ lập trình.

    • Tái sử dụng (viết 1 lần, sử dụng nhiều lần)

    • Giảm tải hiệu suất → tăng performence

=> Hoạt động kiểm thử dữ liệu:

  • Đảm bảo data mapping theo đúng requirement:

    • Mapping Bảng, cột, kiểu dữ liệu

    • Mapping dữ liệu khi tìm kiếm

    • CRUD success

    • CRUD is correct

  • Đảm bảo theo đúng Thuộc tính ACID

  • Đảm bảo dữ liệu được toàn vẹn

    • Check nếu 1 số dữ liệu đã tồn tại không đúng

    • Check case insert khi dữ liệu không đúng

    • Check case insert đối tượng con trước khi insert đối tượng cha

    • Check case xóa bản ghi khi bản ghi đó có liên kết trong các bảng khác

    • Check case đồng bộ dữ liệu

  • Đảm bảo theo quy tắc kinh doanh

How? - Quy trình thực hiện

Các loại kiểm thử dữ liệu

  1. Kiểm thử cấu trúc

    1. Kiểm thử schemas

    2. Kiểm thử bảng,cột (constraint)

    3. Kiểm thử thủ tục

    4. Kiểm thử trigger

  2. Kiểm thử chức năng

  3. Kiểm thử phi chức năng

Các phương pháp kiểm thử dữ liệu

  1. Kiểm thử hộp trắng (thường do dev thực hiện)

    • Kiểm tra mã nguồn (dev thực hiện)

    • Thực hiện tuần tự các câu lệnh (Unit test - Dev thực hiện)

    • Test các store procedure

      • Phân tích dữ liệu và ràng buộc của các tham số

      • Gọi store procedure với số lượng bản ghi ít - nhiều

      • Thực thi store procedure bằng cách truyền vào tham số khác nhau và so sánh KQ với expect

    • Kiểm tra trigger

  2. Kiểm thử hộp đen (QC thực hiện)

    1. Step:

      1. Chuẩn bị môi trường

      2. Run test

      3. Check test result

      4. Validate according to the expected results

      5. Report the findings to the respective stakeholders

Các lỗi thường phát sinh trong Kiểm thử dữ liệu

  • Lỗi toàn vẹn dữ liệu

    • Sai lệch dữ liệu khi lưu trữ: mất dữ liệu, dữ liệu không chính xác

  • Lỗi đầu ra:

    • Có lỗi trong việc truy vấn, thực hiện thao tác xử lý… dù dữ liệu nguồn là chính xác

    • Ví dụ: Không kết nối được CSDL, ko đủ bộ nhớ nên ko lưu được data

Một số lỗi phổ biến

  • Tạo bảng sai (sai tên, kiểu dữ liệu, max length,…)

  • Khởi tạo sai giá trị mặc định

  • Select, insert… không đúng theo yêu cầu

  • Kết nối CSDL bị thất bại: mất mạng, server bị mã hóa, ko đủ bộ nhớ

  • Sai sót trong các lệnh thao tác: Xử lý sai dấu phẩy, nháy đơn, kiểu dữ liệu, chính tả…