Dynamic Analysis Là Gì?
Phân tích động – Dynamic analysis là một phương pháp kiểm thử và phân tích phần mềm bằng cách thực hiện các kiểm tra, đánh giá hoặc thu thập dữ liệu khi chương trình đang chạy. Đây là một phương pháp khá linh hoạt, không yêu cầu source code của chương trình và tập trung vào việc quan sát hành vi của phần mềm trong khi nó đang thực thi.
Trong dynamic analysis, các dữ liệu đầu vào được cung cấp và chương trình được thực thi trong môi trường thực tế hoặc một môi trường mô phỏng. Kết quả của việc thực thi được theo dõi và phân tích để xác định sự hoạt động, hiệu suất, lỗi và các vấn đề khác có thể xảy ra trong quá trình chạy của chương trình.
Các Lỗi Phát Hiện
Phân tích động được sử dụng để phát hiện các lỗi mà các triệu chứng chỉ hiển thị khi code được thực thi. Ví dụ: khả năng rò rỉ bộ nhớ có thể được phát hiện bằng phân tích tĩnh (tìm code phân bổ nhưng không bao giờ giải phóng bộ nhớ), nhưng rò rỉ bộ nhớ có thể dễ dàng nhận thấy bằng phân tích động.
Các lỗi không thể tái hiện ngay lập tức (không liên tục) có thể gây ra hậu quả đáng kể đối với nỗ lực kiểm thử và khả năng phát hành hoặc sử dụng phần mềm một cách hiệu quả. Những lỗi như vậy có thể do rò rỉ bộ nhớ hoặc tài nguyên, sử dụng con trỏ không chính xác và các lỗi khác (ví dụ: ngăn xếp hệ thống).
Do tính chất của những lỗi này, có thể bao gồm việc hiệu suất hệ thống giảm dần hoặc thậm chí là sự cố hệ thống. Các chiến lược kiểm thử phải xem xét các rủi ro liên quan đến các lỗi đó và khi thích hợp, thực hiện phân tích động để giảm thiểu chúng (thường bằng cách sử dụng các công cụ). Vì những lỗi này thường là những lỗi tốn kém nhất để tìm và sửa. Do đó nên tiến hành phân tích động sớm trong dự án.
Phân tích động có thể được áp dụng để thực hiện những điều sau:
- Ngăn chặn các lỗi xảy ra bằng cách phát hiện rò rỉ bộ nhớ (memory leak) và các con trỏ hoang dã (wild pointers);
- Phân tích các lỗi hệ thống không thể tái tạo dễ dàng;
- Đánh giá hành vi mạng;
- Cải thiện hiệu suất hệ thống bằng cách sử dụng trình phân tích code để cung cấp thông tin về hoạt động của hệ thống thời gian chạy có thể được sử dụng để thực hiện các thay đổi sáng suốt.
Memory Leak Detection Là Gì?
Phát hiện rò rỉ bộ nhớ – Memory leak detection là một quá trình trong kiểm thử phần mềm hoặc phân tích source code nhằm xác định và điều tra các tình huống trong đó một ứng dụng hoặc chương trình máy tính không thể truy cập hoặc giải phóng bộ nhớ một cách đúng đắn sau khi nó không còn cần thiết. Khi các phần của bộ nhớ không được giải phóng và không thể truy cập được nữa, điều này có thể dẫn đến tình trạng gọi là rò rỉ bộ nhớ.
Rò rỉ bộ nhớ là một tác dụng phụ nghiêm trọng do lỗi của nhà phát triển khi làm việc trong môi trường cho phép phân bổ bộ nhớ động mà không có tính năng thu thập rác tự động. Thu gom rác có nghĩa là hệ thống sẽ tự động khôi phục bộ nhớ được phân bổ sau khi nhà phát triển hoàn thành việc đó. Ví dụ: Java có tính năng thu thập rác tự động, trong khi trình biên dịch C và C++ tiêu chuẩn thì không.
Khi xảy ra rò rỉ bộ nhớ, bộ nhớ này sẽ không thể truy cập từ các phần khác của chương trình, dẫn đến việc sử dụng không hiệu quả của bộ nhớ. Nó cũng có thể gây ra các vấn đề nghiêm trọng như giảm hiệu suất hệ thống và tiêu thụ tài nguyên bộ nhớ cần thiết.
Sử Dụng Tool Trong Phát Hiện Rò Rủi Bộ Nhớ
Việc kiểm tra lỗi rò rỉ bộ nhớ có thể không đem lại hiệu quả nếu chúng ta không sử dụng sự trợ giúp của công cụ phân tích động. Chúng ta có xu hướng khởi động một hệ thống, chạy nó trong thời gian tương đối ngắn để thực hiện một số thử nghiệm rồi tắt nó đi. Vì rò rỉ bộ nhớ có xu hướng là một vấn đề lâu dài nên chúng ta thường không tìm thấy chúng trong quá trình kiểm tra thông thường.
Khách hàng và người dùng hệ thống của chúng ta tìm thấy chúng vì họ thường khởi động hệ thống và chạy nó 24/7, tuần này qua tuần khác và tháng này qua tháng khác. Những gì có thể chỉ là một nốt ruồi trong phòng thí nghiệm thường trở thành một ngọn núi trong môi trường chạy thực tế.
Một công cụ phân tích động có thể theo dõi rò rỉ bộ nhớ thường giám sát cả việc phân bổ và giải phóng bộ nhớ. Khi một khối bộ nhớ được phân bổ động vượt quá phạm vi mà không được giải phóng rõ ràng, công cụ sẽ ghi lại vị trí rò rỉ. Sau đó, một số công cụ ghi thông tin đó vào nhật ký, trong khi những công cụ khác có thể dừng việc thực thi ngay lập tức và đi tới dòng code nơi xảy ra phân bổ. Tất cả các công cụ này đều viết các báo cáo đồ sộ cho phép các nhà phát triển truy tìm nguyên nhân gốc rễ của lỗi.
Mình xin dừng bài viết hôm nay tại đây. Hẹn gặp lại các bạn trong các bài viết tiếp theo.
Happy Testing!