09/02/2023
Kiểm thử phi tính năng là gì?
Mục lục
Bài viết được chia sẻ bởi một lập trình viên của AMELA.
Note: Vào một ngày đẹp trời đầu tháng 9 khi dự án đang sắp close, khách hàng đột nhiên muốn có tài 1 số tài liệu bàn giao trong đó có kiểm thử phi chức năng ( bao gồm security, performance). Team mình đã khá rối khi vừa phải chạy deadline vừa phải chuẩn khá nhiều tài liệu và quan trọng hơn là có khá ít thông tin, tài liệu liên quan về kiểm thử phi tính năng. Sau khi nhờ sợ trợ giúp của khá nhiều người cũng như tự tìm hiểu, báo cáo đã được khách hàng chấp nhận. Bài viết là những chia sẻ dựa trên góc nhìn của team mình, nếu có gì sai sót rất mong nhận được sự đóng góp của mọi người.
Kiểm thử phi chức năng là gì?
Kiểm thử phi chức năng đề cập đến các khía cạnh của phần mềm có thể không liên quan đến một chức năng cụ thể hoặc hành động người dùng, chẳng hạn như khả năng mở rộng và hiệu suất khác, hành vi dưới những hạn chế hoặc bảo mật nhất định. Dựa trên cách thức kiểm thử, có thể coi kiểm thử phi chức năng chính là kiểm thử chấp nhận người dùng UAT. Việc kiểm thử sẽ xác định điểm cuộn mà tại đó khả năng mở rộng và thực hiện của các điểm cực trị hoạt động không ổn định. Những yêu cầu phi chức năng thường là những phản ánh về chất lượng của sản phẩm, đặc biệt là trong bối cảnh các quan điểm phù hợp của người sử dụng nó. Mục tiêu của kiểm thử phi chức năng là:
● Đầu tiên, để tăng hiệu quả, khả năng bảo trì, khả năng sử dụng và tính di động của sản phẩm
● Tối ưu hóa cách cài đặt, thiết lập, thực thi, quản lý và giám sát sản phẩm
● Cải thiện và nâng cao kiến thức về hành vi sản phẩm và công nghệ của nó
● Hỗ trợ giảm rủi ro sản xuất và chi phí liên quan đến các khía cạnh phi chức năng của sản phẩm
● Thu thập và báo cáo các phép đo và chỉ số sản phẩm cho nghiên cứu và phát triển nội bộ
1. Kiểm thử hiệu năng (performance testing)
1.1 Khái niệm
Kiểm thử hiệu năng là 1 loại kiểm thử phần mềm tập trung vào việc kiểm tra hoạt động của hệ thống với các trường hợp truy cập đặc thù. Kiểm thử hiệu năng không phải loại kiểm thử tập trung vào việc tìm ra lỗi phần mềm hoặc sai sót của hệ thống mà để đo lường dựa theo các mốc và tiêu chuẩn, nhờ đó có thể giúp cho đội dev phỏng đoán được và loại trừ các rủi ro trong quá trình vận hành hệ thống (nguồn viblo). Hiểu đơn giản kiểm thử hiệu năng để xác định tính sẵn sàng của hệ thống (nguồn viblo). Hiểu đơn giản kiểm thử hiệu năng để xác định tính sẵn sàng của hệ thống trong các trường hợp truy cập đặc thù.
Kiểm thử hiệu năng bao gồm 3 loại:
- Kiểm thử tải (Load testing): kiểm thử hiệu năng của ứng dụng với các tốc độ kết nối mạng khác nhau. Kiểm thử khi có nhiều người dùng cùng truy cập hoặc cùng yêu cầu một trang xem hệ thống có thể duy trì hoạt động được không? Hoặc kiểm thử khi người dùng tải lên hoặc tải xuống một số lượng dữ liệu đặc biệt lớn…
- Kiểm thử áp lực (Stress testing) : tức là việc đẩy hệ thống ra ngoài giới hạn của nó, thử làm gián đoạn trang web bằng cách tăng lượng tải cao hơn và kiểm tra xem hệ thống phản ứng như thế nào và phục hồi như thế nào.
- Volume testing : đề cập tới việc kiểm thử phần mềm ứng dụng với một lượng dữ liệu nhất định. Số lượng này có thể là kích thước cơ sở dữ liệu hoặc nó cũng có thể là kích thước của 1 tập tin giao tiếp là đối tượng của volume testing (định nghĩa trong các thuật ngữ chung).
Để hiểu hơn về các khái niệm này mọi người có thể tham khảo các tài liệu trên mạng
1.2 Các tool kiểm thử hiệu năng
Để kiểm thử hiệu năng của hệ thống mọi người có thể sử dụng một số tool sau:
● Jmeter: là công cụ để đo độ tải và performance của đối tượng, có thể sử dụng để test performance trên cả nguồn tĩnh và nguồn động, có thể kiểm tra độ tải và hiệu năng trên nhiều loại server khác nhau như: Web – HTTP, HTTPS, SOAP, Database via JDBC, LDAP, JMS, Mail – SMTP(S), POP3(S) và IMAP(S)…
● LoadComplete: là một công cụ kiểm tra lượng tải, cho phép tạo và chạy tự động cho web servers và services. Giúp người dùng kiểm tra được hiệu năng của web server dưới một lượng tải lớn.
● The Grinder: là một tool kiểm thử hiệu năng dựa trên nền tảng JavaTM.
1.3 Các bước triển khai kiểm thử hiệu năng
Việc thực hiện Performance/Load test có nhiều mục đích khác nhau, và tùy thuộc vào từng mục đích, ta xây dựng các các kịch bản, tình huống khác nhau. Dưới đây là các bước mình đã làm để kiểm thử hiệu năng với Jmeter.
1.4 Các phần cần có trong báo cáo kiểm thử hiệu năng
Tổng quan hệ thống
Phần này chúng ta cần nêu lên infra của hệ thống hiện tại, hệ thống triển khai ở đâu, dùng các dịch vụ nào. Điều này sẽ giúp người đọc có cái nhìn khái quát về hệ thống.
Các tool dùng để kiểm thử
Nêu các tool sẽ dùng trong phần kiểm thử này.
Kế hoạch kiểm thử
List các đầu mục kiểm thử theo từng loại. Nên có số CCU để dễ dàng đánh giá.
Chi tiết kiểm thử
Đưa toàn bộ các thông tin về kết quả kiểm thử đối với từng testcase. Phần này mọi người có thể số liệu được trích xuất từ Jmeter đối với việc test API và CPU monitor với việc test truy cập. Kết quả sẽ tập trung vào độ đáp ứng của hệ thống (thời gian response trung bình, thời gian response tại request thứ xx, số lần api lỗi,…) Kết quả test sẽ được trình bày dưới dạng sau:
2. Kiểm thử bảo mật (security testing)
2.1 Khái niệm
Kiểm thử bảo mật là một loại kiểm thử phần mềm nhằm khám phá các lỗ hổng, mối đe dọa, rủi ro trong một ứng dụng phần mềm và ngăn chặn các cuộc tấn công độc hại từ những kẻ xâm nhập. Mục đích của Kiểm tra bảo mật là xác định tất cả các lỗ hổng và điểm yếu có thể có của hệ thống phần mềm có thể dẫn đến việc mất thông tin, doanh thu, danh tiếng dưới tay của nhân viên hoặc người ngoài của Tổ chức.
Mục tiêu của kiểm tra bảo mật là xác định các mối đe dọa trong hệ thống và đo lường các lỗ hổng tiềm ẩn của nó, để hệ thống không ngừng hoạt động hoặc bị khai thác. Nó cũng giúp phát hiện tất cả các rủi ro bảo mật có thể có trong hệ thống và giúp các nhà phát triển khắc phục các sự cố này thông qua mã hóa.
Các loại kiểm thửu bảo mật:
● Quét lỗ hổng (Vulnerability Scanning): Thực hiện thông qua phần mềm tự động để quét một hệ thống chống lại các chữ ký dễ bị tổn thương đã biết.
● Quét bảo mật (Security Scanning): Nó liên quan đến việc xác định các điểm yếu của mạng và hệ thống, và sau đó cung cấp các giải pháp để giảm các rủi ro này. Quá trình quét này có thể được thực hiện cho cả Quét thủ công và Tự động.
● Kiểm tra thâm nhập (Penetration testing): Loại thử nghiệm này mô phỏng một cuộc tấn công từ một tin tặc độc hại. Thử nghiệm này bao gồm phân tích một hệ thống cụ thể để kiểm tra các lỗ hổng tiềm ẩn đối với nỗ lực hack bên ngoài.
● Đánh giá rủi ro (Risk Assessment): Thử nghiệm này bao gồm phân tích các rủi ro bảo mật được quan sát trong tổ chức. Rủi ro được phân loại là Thấp, Trung bình và Cao. Thử nghiệm này khuyến nghị kiểm soát và các biện pháp để giảm thiểu rủi ro.
● Kiểm toán bảo mật (Security Auditing): Đây là một kiểm tra nội bộ của Ứng dụng và Hệ điều hành cho các lỗi bảo mật. Việc kiểm toán cũng có thể được thực hiện thông qua kiểm tra từng dòng mã
● Hack đạo đức (Ethical hacking): Đó là hack một hệ thống phần mềm tổ chức. Không giống như các tin tặc độc hại, những kẻ đánh cắp lợi ích của chúng, mục đích là để lộ các lỗ hổng bảo mật trong hệ thống.
● Đánh giá tư thế (Posture Assessment): Điều này kết hợp quét Bảo mật, Hack đạo đức và Đánh giá rủi ro để hiển thị một tư thế bảo mật tổng thể của một tổ chức.
2.2 Một số công cụ kiểm thử bảo mật
WireShark
WireShark là một công cụ phân tích mạng trước đây được gọi là Ethereal. Nó chụp gói tin trong thời gian thực và hiển thị chúng ở định dạng có thể đọc được. Về cơ bản, nó là một bộ phân tích gói mạng – cung cấp các chi tiết nhỏ nhất về các giao thức mạng, giải mã, thông tin gói, v.v … Nó là một mã nguồn mở và có thể được sử dụng trên Linux, Windows, OS X, Solaris, NetBSD, FreeBSD và nhiều các hệ thống khác.
Owasp
OWASP là một tiêu chuẩn để phục vụ việc kiểm thử của Penetration Testing (Pentest) do tổ chức Open Web Application Security Project(OWASP) đề xuất. OWASP là tổ chức phi lợi nhuận và đưa ra chuẩn OWASP phục vụ cho công việc pentest hiệu quả và chi tiết. Tuy nhiên, để rõ hơn, mình xin giới thiệu sơ qua Pentest là gì.
OWASP là một tổ chức phi lợi nhuận trên toàn thế giới tập trung vào việc cải thiện tính bảo mật của phần mềm. Dự án có nhiều công cụ để kiểm tra các môi trường và giao thức phần mềm khác nhau. Các công cụ hàng đầu của dự án bao gồm:
● Zed Attack Proxy (ZAP – một công cụ tự động tìm các lỗi bảo mật trong khi bạn đang phát triển và thử nghiệm ứng dụng)
● Kiểm tra phụ thuộc OWASP (quét các phụ thuộc của dự án và kiểm tra các lỗ hổng đã biết)
● Dự án môi trường thử nghiệm web OWASP (bộ sưu tập các công cụ và tài liệu bảo mật)
Burp Suite
Burp Suite là một trong những công cụ kiểm tra thâm nhập và tìm lỗ hổng phổ biến nhất và thường được sử dụng để kiểm tra bảo mật ứng dụng web. Burp Suite là một công cụ dựa trên proxy được sử dụng để đánh giá tính bảo mật của các ứng dụng dựa trên web và thực hiện kiểm tra thực hành.
2.3 Các kỹ thuật kiểm thử bảo mật
Việc kiểm thử bảo mật sẽ phải tùy thuộc vào từng yêu cầu của dự án. Dưới đây là các vấn đề thường xuyên gặp phải.
Bảo mật về header
HTTP Security Headers là các HTTP response headers xác định các biện pháp bảo mật nên được kích hoạt hay vô hiệu hóa trên trình duyệt web. HTTP Security Headers là một phần cơ bản của bảo mật website, giúp chống lại các cuộc tấn công mà website có nguy cơ gặp phải cao như: MIME types, clickjacking, code injection, XSS…
Kiểm tra quyền truy cập ứng dụng
Đa số các ứng dụng hoặc trang web đều có phần quyền truy cập vào từng chức năng, module trên ứng dụng, trang web. Vì vậy chúng ta cần kiểm tra xem quyền truy cập của các user có đúng hay không.
Kiểm tra việc bảo vệ dữ liệu
Tập trung chủ yếu vào việc mã hóa các dữ liệu nhạy cảm(thông tin cá nhân người dùng, mật khẩu,…)
SQL Injection và XSS
SQL injection là kĩ thuật cho phép các kẻ tấn công thực hiện các lệnh thực thi SQL bất hợp pháp (mà người phát triển không lường trước được), bằng cách lợi dụng các lỗ hổng bảo mật từ dữ liệu nhập vào của các ứng dụng.
Ngăn chặn viruses
XSS là một kĩ thuật tấn công, trong đó kẻ tấn công sẽ chèn các đoạn mã độc (thường là Javascript) vào bên trong trang web, các đoạn mã này sẽ được thực thi khi người dùng truy cập và hiển thị các trang có chứa những đoạn mã đó.
Kiểm tra quản lý session
Chúng ta sẽ phải kiểm tra việc có chấm dứt phiên sau thời gian tối đa (expire time), chấm dứt phiên sau khi đăng xuất, kiểm tra phạm vi và thời lượng cookie, kiểm tra xem một tài khoản có thể chạy đồng thời trên nhiều phiên làm việc không?
2.4 Các cách triển khai kiểm thử bảo mật
Tổng quan hệ thống
Phần này chúng ta cần nêu lên infra của hệ thống hiện tại, hệ thống triển khai ở đâu, dùng các dịch vụ nào. Điều này sẽ giúp người đọc có cái nhìn khái quát về hệ thống.
Các tool dùng để kiểm thử
Nêu các tool sẽ dùng trong phần kiểm thử này.
Liệt kê Test case
Liệt kê ra các phần sẽ kiểm tra bảo mật trong hệ thống. Các testcase bên mình trải đề các đầu mục để tăng phần khách quan
Chi tiết kiểm thử
Phần này sẽ tập trung chủ yếu vào các việc triển khai các testcase. Các thông tin nên có bao gồm:
● Tên testcase
● Loại testcase
● Độ phủ (tất cả màn hình, api hay 1 màn hình nào đó)
● Độ nguy hại, phân tích rủi ro
● Link tham khảo về testcase(thường sẽ là link đến owasp)
● Cách kiểm thử
● Kết quả
Đánh giá tổng quan về hệ thống
Đánh giá về mức độ bảo mật của trang web, ứng dụng. Điều này giúp chúng ta có cái nhìn tổng quan về bảo mật của hệ thống, điều gì đang được bỏ qua, điều gì cần được khắc phục.
3. Tổng kết
Trên đây là một số thông tin khá cơ bản về kiểm thử phi tính năng. Đây là một phần rất quan trọng của hệ thống nhưng thường bị bỏ qua và xem nhẹ trong quá trình phát triển phần mềm.
Mọi người có thể tham khảo thêm thông tin tại:
● OWSAP: https://owasp.org/www-project-web-security-testing-guide/v42/4-Web_Application_Security_Testing/
Biên tập: AMELA