Software Testing - Performance Testing (1)
1. Mục tiêu bài học (Objectives)
Chương này nhằm cung cấp cho người học cái nhìn toàn diện về kiểm thử hiệu năng (Performance Testing).
Sau khi học xong, người học có thể:
-
Hiểu khái niệm hiệu năng (Performance) trong hệ thống phần mềm.
-
Hiểu khái niệm kiểm thử hiệu năng (Performance Testing).
-
Nắm vững vòng đời kiểm thử hiệu năng (Performance Testing Lifecycle), bao gồm:
-
Lập kế hoạch kiểm thử (Planning).
-
Viết kịch bản và tiến hành kiểm thử (Creating scripts and conducting tests).
-
Phân tích kết quả và tinh chỉnh hệ thống (Analyzing results and tuning system)
-
2. Hiệu năng là gì? (What is Performance?)
Hiệu năng của một hệ thống phần mềm không có một định nghĩa duy nhất. Tùy thuộc vào từng loại dự án, hiệu năng có thể được hiểu khác nhau. Tuy nhiên, có hai yếu tố quan trọng nhất để đánh giá hiệu năng:
-
Thời gian phản hồi (Response Time):
Khoảng thời gian từ khi người dùng gửi yêu cầu đến khi hệ thống trả về toàn bộ kết quả. -
Thông lượng (Throughput):
Lượng công việc hoặc số giao dịch mà hệ thống có thể xử lý trong một đơn vị thời gian.
Ví dụ minh họa:
-
Khi mua hàng trên một website thương mại điện tử:
-
Response time: thời gian từ khi người dùng bấm nút “Thanh toán” đến khi nhận được thông báo đơn hàng đã được xác nhận.
-
Throughput: số lượng đơn hàng mà hệ thống xử lý mỗi giây trong giờ cao điểm.3. Kiểm thử hiệu năng là gì? (What is Performance Testing?)
-
Kiểm thử hiệu năng là quá trình kiểm tra xem hệ thống có đạt được các mục tiêu hiệu năng đã đề ra hay không.
-
Phương pháp: mô phỏng các hoạt động của người dùng thật bằng công cụ kiểm thử hoặc các kịch bản tự động.
-
Mục đích: thu thập dữ liệu hiệu năng hiện tại của hệ thống.
-
Đặc điểm: kết quả kiểm thử hiệu năng không đưa ra phán xét tốt hay xấu, mà chỉ cung cấp dữ liệu để đối chiếu với yêu cầu ban đầu.
Ví dụ minh họa:
Một ứng dụng đặt vé máy bay yêu cầu thời gian phản hồi ≤ 3 giây.
Trong quá trình kiểm thử với 5.000 người dùng đồng thời, hệ thống phản hồi trung bình 8 giây. Điều này cho thấy hệ thống chưa đạt yêu cầu.
4. Kiểm thử chịu tải (Stress Testing)
Stress Testing là một dạng kiểm thử hiệu năng đặc biệt.
-
Mục đích: xác định giới hạn tải tối đa của hệ thống – tức điểm mà hệ thống bắt đầu thất bại.
-
Phương pháp: đặt hệ thống ở mức tải cao hơn so với yêu cầu thiết kế.
-
Thời điểm: thường thực hiện ở giai đoạn cuối của kiểm thử hiệu năng.
Ví dụ minh họa:
Một hệ thống học trực tuyến được thiết kế để phục vụ 10.000 sinh viên đồng thời.
Khi thực hiện Stress Testing với 30.000 sinh viên, hệ thống treo và không thể xử lý thêm yêu cầu. Như vậy, 30.000 sinh viên chính là ngưỡng cực hạn của hệ thống.
5. Vòng đời kiểm thử hiệu năng (Performance Testing Lifecycle – 1)
Quy trình kiểm thử hiệu năng bao gồm ba giai đoạn chính:
-
Planning: Lập kế hoạch kiểm thử.
-
Create scripts and conduct tests: Viết kịch bản và tiến hành kiểm thử.
-
Analyze results and tune system: Phân tích kết quả và tinh chỉnh hệ thống.
Đây là khung quy trình chuẩn, đảm bảo quá trình kiểm thử diễn ra có hệ thống và hiệu quả.
6. Giai đoạn lập kế hoạch (Lifecycle – 2)
-
Đây là giai đoạn quan trọng nhất, chiếm khoảng 50% tổng khối lượng công việc.
-
Nội dung công việc:
-
Thu thập thông tin về kiến trúc hệ thống và môi trường triển khai.
-
Xác định hành vi dự kiến của người dùng.
-
Đặt ra các mục tiêu hiệu năng (thời gian phản hồi, throughput, độ ổn định).
-
Lập tài liệu Performance Test Plan.
-
Ví dụ minh họa:
Một hệ thống thi trực tuyến cần phục vụ 20.000 sinh viên.
-
Mục tiêu: thời gian hiển thị câu hỏi ≤ 2 giây.
-
Kiến trúc: hệ thống gồm 3 server web và 1 cluster database.
-
Tất cả thông tin này được ghi lại trong tài liệu Test Plan để làm căn cứ thực hiện.
7. Giai đoạn viết kịch bản và tiến hành kiểm thử (Lifecycle – 3)
-
Công việc cần làm:
-
Viết script kiểm thử bằng công cụ chuyên dụng (JMeter, LoadRunner, v.v.).
-
Chạy baseline test với số lượng người dùng nhỏ để xác minh kịch bản đúng.
-
Tăng tải dần dần để thu thập dữ liệu hiệu năng.
-
Ví dụ minh họa:
Kịch bản cho một website bán hàng:
-
Đăng nhập.
-
Xem sản phẩm.
-
Thêm sản phẩm vào giỏ.
-
Thanh toán.
Ban đầu chạy với 1 người dùng (baseline), sau đó tăng lên 1.000 rồi 5.000 người dùng để đánh giá hệ thống.
8. Giai đoạn phân tích và tinh chỉnh hệ thống (Lifecycle – 4)
-
Các bước thực hiện:
-
Thu thập và phân tích kết quả kiểm thử.
-
Xác định “nút thắt cổ chai” (bottleneck) – nguyên nhân gây chậm trễ.
-
Thực hiện tinh chỉnh hệ thống (tối ưu code, cấu hình, hoặc nâng cấp phần cứng).
-
Kiểm thử lại để xác minh hiệu quả cải tiến.
-
Ví dụ minh họa:
Hệ thống bị chậm khi 5.000 người dùng đồng thời. Phân tích log cho thấy một câu lệnh SQL chạy không tối ưu. Sau khi thêm chỉ mục cho cơ sở dữ liệu, CPU giảm từ 95% xuống 60% và thời gian phản hồi từ 12 giây xuống còn 3 giây.
9. Lập kế hoạch kiểm thử chi tiết (Planning for the Performance Test)
Kế hoạch kiểm thử hiệu năng bao gồm các bước chính:
-
Tạo môi trường kiểm thử: giống với môi trường thực tế càng nhiều càng tốt.
-
Xác định mục tiêu hiệu năng: cụ thể, có thể đo lường được.
-
Xây dựng usage model: mô tả hành vi và tần suất của người dùng.
-
Định nghĩa các chỉ số (key metrics): xác định các thông số cần theo dõi trong suốt quá trình kiểm thử.
Ví dụ minh họa:
Một website thương mại điện tử đặt mục tiêu:
-
Checkout < 3 giây.
-
Tỉ lệ lỗi < 1%.
-
Usage model: 70% khách hàng chỉ xem sản phẩm, 20% thêm vào giỏ, 10% thanh toán.
-
Metrics theo dõi: CPU, memory, throughput (TPS).
10. Tạo môi trường kiểm thử hiệu năng (Create Performance Test Environment – 1)
-
Tester cần:
-
Hiểu rõ chức năng của hệ thống.
-
Tham gia dự án từ sớm để nắm thông tin đầy đủ.
-
Thu thập dữ liệu từ tài liệu kỹ thuật và trao đổi với các bên liên quan.
-
Ví dụ minh họa:
Một hệ thống bệnh viện gồm ba chức năng chính:
-
Đặt lịch khám.
-
Quản lý hồ sơ bệnh án.
-
Thanh toán viện phí.
Nếu tester chỉ biết đến chức năng “đặt lịch khám” mà bỏ qua “truy cập hồ sơ bệnh án khẩn cấp”, thì kết quả kiểm thử sẽ không phản ánh đúng nhu cầu thực tế của bệnh viện.
Tóm tắt cuối chương
-
Performance được đánh giá qua Response Time và Throughput.
-
Performance Testing là quá trình kiểm tra hệ thống có đạt yêu cầu hiệu năng hay không.
-
Stress Testing giúp tìm giới hạn tải cực đại của hệ thống.
-
Lifecycle gồm ba giai đoạn: Planning → Scripts & Testing → Analyze & Tune.
-
Giai đoạn Planning quan trọng nhất, chiếm 50% công việc.
-
Tester cần tham gia dự án từ sớm và tạo môi trường kiểm thử sát với thực tế.