Phân tích tĩnh là quá trình phân tích một phần mềm mà không thực hiện nó. Điều này là rất tốt và được khuyến khích, nhưng bạn phải nhớ rằng
- các công cụ phân tích tĩnh khác nhau có sự hiểu biết khác nhau về mã mà họ đang nghiên cứu, do đó chúng có thể báo hiệu (hoặc không báo hiệu) các vấn đề khác nhau. Một công cụ có thể đưa ra một báo cáo rõ ràng và công cụ kia có thể phàn nàn về một triệu điều.
- một công cụ động (để đặt tên cho một ví dụ, nghĩ về valgrind) có thể tìm thấy nhiều vấn đề khác, với giá của một gánh nặng nghiêm trọng đối với việc tiêu thụ tài nguyên (thời gian, sử dụng bộ nhớ). Điều này là như vậy bởi vì bạn thường chạy một phiên bản phần mềm cụ. Lưu ý rằng, bằng cách được thiết bị theo một cách nào đó (thay thế malloc của bạn bằng một malloc gỡ lỗi), nó không hoàn toàn giống với phần mềm của bạn (như bạn có thể thấy từ thời gian thực hiện)
Cả hai cách tiếp cận này đều bị thiếu ngữ cảnh: họ không biết những gì sw cần phải đạt được.
Đánh giá mã được thực hiện bởi một lập trình viên khác, người được cho là biết nó và có thể kiểm tra
- nếu mã đúng
- nếu phần mềm đúng về mặt ngữ nghĩa.
Nó đắt hơn nhiều và nó có mức độ lặp lại khác nhau nhưng là một trợ giúp tuyệt vời.
Như mọi khi, không có một viên đạn bạc nào có thể khắc phục tất cả các lỗi và tránh tất cả các vấn đề. Áp dụng - càng nhiều càng tốt cho địa điểm, mã, thời gian, ba hình thức kiểm tra (tĩnh, động, nhiều mắt (và não) thực sự nhìn vào mã) được khuyến nghị.
ps: Tôi phải lưu ý rằng việc áp dụng các công cụ từ đầu thường tốt hơn nhiều. Chuyển đổi một hệ thống di sản là một kinh nghiệm ít thú vị hơn nhiều, do tích cực sai. Nếu bạn bắt đầu từ đầu và luôn hướng đến việc giữ cho công cụ phân tích sạch sẽ, có lẽ bạn sẽ tránh được rất nhiều vấn đề.
pps: như đối với các công cụ, nó phụ thuộc vào ngôn ngữ. Trong thế giới C và C ++, bạn có thể bắt đầu bằng cách nhìn vào Visual Studio, nơi chứa công cụ phân tích tĩnh tích hợp. Một danh sách tương đối đầy đủ có thể được tìm thấy trên Wikipedia.
ppps: Phân tích tĩnh phù hợp hơn với các ngôn ngữ tĩnh, như C hoặc C ++. Đối với Python, có thể rất khó để nói nếu một tên đề cập đến một danh sách tại một điểm sẽ đề cập đến một danh sách cho phần còn lại của chương trình, do các thuộc tính động của nó. Điều này không có nghĩa là không có gì có thể được thực hiện, như một nỗ lực của JIT như PyPy cho thấy.