Phân tích động tự động: fuzzing, kiểm thử độ bền và fault injection với nhiều đầu vào có thể phát hiện lỗi nếu chương trình trở nên không ổn định, bị crash hoặc tạo kết quả sai; phương pháp này có hiệu quả vừa phải và có thể làm chậm chương trình. Có thể tích hợp cơ chế kiểm tra lỗi an toàn bộ nhớ trong lúc biên dịch, chẳng hạn AddressSanitizer cho C/C++; phương pháp này có hiệu quả vừa phải, cần đầu vào được tạo để đi tới đoạn mã lỗi, làm giảm hiệu năng và chỉ báo cáo điều kiện lỗi chứ không nhất thiết chỉ ra nguyên nhân ban đầu.
Phân tích động thủ công: chủ động tạo các điều kiện lỗi ít xảy ra trong sử dụng bình thường, như thiếu bộ nhớ, thiếu quyền, giao dịch bị ngắt hoặc mất các dịch vụ mạng cơ bản, rồi theo dõi hành vi bất thường. Ngoại lệ được môi trường ứng dụng bắt lại vẫn có thể cho thấy ứng dụng chưa xử lý đúng điều kiện bất ngờ.
Phân tích tĩnh tự động: SAST có thể tìm một số trường hợp bằng cách lập mô hình luồng dữ liệu và luồng điều khiển, sau đó tìm các mẫu nguy hiểm nối từ nguồn đầu vào tới nơi dữ liệu được sử dụng; phương pháp này có hiệu quả cao nhưng không bảo đảm phát hiện mọi trường hợp.