การวิเคราะห์เชิงสถิตคือกระบวนการวิเคราะห์ซอฟต์แวร์โดยไม่ต้องดำเนินการ นี่เป็นสิ่งที่ดีมากและแนะนำ แต่คุณต้องจำไว้ว่า
- เครื่องมือวิเคราะห์สแตติกที่แตกต่างกันมีความเข้าใจที่แตกต่างกันของรหัสที่พวกเขากำลังศึกษาอยู่ดังนั้นพวกเขาจึงสามารถส่งสัญญาณ เครื่องมือหนึ่งสามารถให้รายงานที่สะอาดได้และอีกเครื่องมือหนึ่งอาจบ่นได้หลายล้านเรื่อง
- เครื่องมือแบบไดนามิก (เพื่อตั้งชื่อตัวอย่างลองนึกถึง valgrind) สามารถค้นหาปัญหาอื่น ๆ อีกมากมายในราคาที่เป็นภาระร้ายแรงในการใช้ทรัพยากร (เวลาการใช้หน่วยความจำ) นี่เป็นเพราะคุณมักจะใช้งานซอฟต์แวร์เวอร์ชั่น โปรดสังเกตว่าด้วยการใช้เครื่องมือในทางใดทางหนึ่ง (แทนที่ malloc ของคุณด้วย debug malloc) มันไม่เหมือนกับซอฟต์แวร์ของคุณอย่างแน่นอน (อย่างที่คุณเห็นจากเวลาทำการ)
วิธีการทั้งสองนี้ประสบจากการขาดบริบท: พวกเขาไม่ทราบว่า sw ควรจะบรรลุอะไร
การตรวจสอบรหัสนั้นทำโดยผู้ทำรหัสอีกคนที่ควรจะรู้และสามารถตรวจสอบได้
- ถ้ารหัสถูกต้อง
- หากซอฟต์แวร์นั้นถูกต้องทางอรรถศาสตร์
มันมีราคาแพงกว่ามากและมีระดับการทำซ้ำที่แตกต่างกัน แต่เป็นความช่วยเหลือที่ดี
เช่นเคยไม่มี bullet เงินเดียวที่จะแก้ไขข้อบกพร่องทั้งหมดและหลีกเลี่ยงปัญหาทั้งหมด ใช้ - ให้มากที่สุดเท่าที่เป็นไปได้ให้สถานที่, รหัส, เวลา, สามรูปแบบของการตรวจสอบ (คงที่, แบบไดนามิก, ดวงตามากขึ้น (และสมอง) ดูรหัสจริง)
ps: ฉันต้องทราบว่าโดยปกติแล้วจะเป็นการดีกว่ามากหากใช้เครื่องมือตั้งแต่เริ่มต้น การแปลงระบบมรดกเป็นประสบการณ์ที่น่าพึงพอใจน้อยกว่ามากเนื่องจากผลบวกปลอม หากคุณเริ่มต้นจากศูนย์และมุ่งรักษาเครื่องมือวิเคราะห์ให้สะอาดอยู่เสมอคุณอาจหลีกเลี่ยงปัญหาได้มากมาย
pps: สำหรับเครื่องมือมันขึ้นอยู่กับภาษา ในโลก C และ C ++ คุณสามารถเริ่มต้นด้วยการดู Visual Studio ซึ่งมีเครื่องมือวิเคราะห์แบบคงที่ในตัว รายการที่ค่อนข้างสมบูรณ์สามารถพบได้ใน Wikipedia
ppps: การวิเคราะห์แบบสถิตเหมาะกับภาษาแบบคงที่เช่น C หรือ C ++ สำหรับ Python มันยากมากที่จะบอกว่าชื่อที่อ้างถึงรายการ ณ จุดหนึ่งจะอ้างถึงรายการสำหรับส่วนที่เหลือของโปรแกรมเนื่องจากคุณสมบัติแบบไดนามิก นี่ไม่ได้หมายความว่าจะไม่สามารถทำอะไรได้เลยเนื่องจากความพยายามของ JIT อย่างPyPyแสดงให้เห็น