การวิเคราะห์รหัสคืออะไร?
การวิเคราะห์รหัส (ก่อนหน้านี้ FxCop) เป็นเครื่องมือวิเคราะห์แบบคงที่ซึ่งค้นหารูปแบบทั่วไปซึ่งอาจระบุว่ามีบางอย่างผิดปกติในซอร์สโค้ด ตัวอย่างเช่นหากอินสแตนซ์ของคลาสที่ดำเนินการIDisposable
ไม่ถูกต้องการวิเคราะห์โค้ดจะส่งคำเตือน:
private void DoSomething()
{
var connection = new SqlConnection(...);
this.ChangeSomeData(connection);
}
นี่เป็นการใช้งานที่ถูกต้องของรหัสชิ้นก่อนหน้า:
private void DoSomething()
{
using (var connection = new SqlConnection(...))
{
this.ChangeSomeData(connection);
}
}
เช่นเดียวกับเครื่องมือวิเคราะห์แบบคงที่การวิเคราะห์รหัสมีจุดประสงค์เพื่อค้นหารูปแบบที่ยุ่งยาก (หรือน่าเบื่อเพียงเล็กน้อย) เพื่อค้นหาด้วยตนเอง ตัวอย่างเช่นในตัวอย่างก่อนหน้านี้มันอาจจะค่อนข้างน่าเบื่อสำหรับนักพัฒนาที่จะตรวจสอบว่าคลาสใดที่เขาใช้การดำเนินการIDisposable
(หรือจำคลาส. NET Framework ทั้งหมดที่ใช้งาน)
โครงการใดที่มีคุณสมบัติ
แม้ว่ามันจะเป็นเรื่องที่บวกเท็จเป็นเครื่องมือในการวิเคราะห์แบบคงที่ใด ๆ ก็มักจะเป็นประโยชน์ในการกำหนดเป้าหมายศูนย์คำเตือนรหัสทางธุรกิจที่สำคัญโดยไม่ต้องใช้suppressions ภายใน Visual Studio การวิเคราะห์โค้ดสามารถกำหนดค่าให้ทำงานในเวลาคอมไพล์ หากการตั้งค่าโครงการระบุว่าคำเตือนควรถือเป็นข้อผิดพลาดการละเมิดกฎการวิเคราะห์รหัสจะไม่มีการสังเกต
เนื่องจากการวิเคราะห์แบบสแตติกอาจใช้เวลาพอสมควรสำหรับโครงการขนาดกลางหรือใหญ่จึงควรย้ายจากเครื่องของนักพัฒนาซอฟต์แวร์ไปยังเซิร์ฟเวอร์ TFS build ในขณะที่เรียกใช้การวิเคราะห์รหัสในระหว่างการส่งข้อมูลล่วงหน้าไม่ใช่ความคิดที่ดี (ไม่เหมือนกับ StyleCop) แต่ก็ยังสามารถเรียกใช้งานบน build ได้และล้มเหลวหากพบคำเตือน
สำหรับรหัสที่ไม่สำคัญกับธุรกิจการวิเคราะห์รหัสอาจเรียกใช้ด้วยตนเองจาก Visual Studioหรือบรรทัดคำสั่ง การตรวจสอบและคำเตือนสามารถละเอียดในคุณสมบัติของโครงการเพื่อให้เหมาะกับความต้องการของคุณ ตัวอย่างเช่นคำเตือนโลกาภิวัตน์สามารถปิดได้หากโครงการของคุณไม่ได้ตั้งใจจะแปลเป็นภาษาท้องถิ่น
เช่นเดียวกับ StyleCop คุณจำเป็นต้องตัดสินใจว่าโครงการจะกำหนดเป้าหมายเป็นศูนย์คำเตือนจากการวิเคราะห์รหัสจากจุดเริ่มต้นของโครงการหรือไม่ การแนะนำในโครงการที่มีอยู่อาจจะเจ็บปวดเกินไป
แตกต่างจาก StyleCop หรือไม่
โปรดทราบว่าการวิเคราะห์รหัสไม่ใช่สิ่งเดียวกับStyleCop ความแตกต่างแรกคือการวิเคราะห์รหัสทำงานร่วมกับแอสเซมบลีที่คอมไพล์ในขณะที่ StyleCop ทำงานร่วมกับแหล่งที่มาของตัวเอง ข้อแตกต่างที่สอง (และที่สำคัญที่สุด) คือการวิเคราะห์รหัสค้นหา patters ซึ่งอาจบ่งบอกถึงข้อบกพร่องในขณะที่ StyleCop เป็นเพียงการบังคับใช้กฎสไตล์ - การประชุมที่ใช้โดยทีมของคุณ
การวิเคราะห์โค้ดมีประโยชน์อย่างยิ่งสำหรับผู้เริ่มต้นที่ไม่เข้าใจภาษามากนักเนื่องจากมันมักจะนำไปสู่ "Aha!" ช่วงเวลา ตัวอย่างเช่นCA2105: ฟิลด์ Array ไม่ควรอ่านอย่างเดียวอาจทำให้ใครบางคนค้นพบว่าแม้ว่าอาเรย์จะถูกทำเครื่องหมายว่าเป็นแบบอ่านอย่างเดียว แต่ก็ไม่ได้ทำให้ไม่สามารถเปลี่ยนรูปได้เพราะไม่มีอะไรจะห้ามการเปลี่ยนแปลงองค์ประกอบภายในอาเรย์ StyleCop ไม่นำไปสู่การค้นพบ: this
มีอะไรที่น่าสนใจในการรู้ว่าทุ่งต้นด้วยตัวอักษรตัวพิมพ์เล็กหรือที่โทรในประเทศควรจะนำหน้าด้วย
แม้ว่าจะมีการบังคับใช้กฎบางอย่างโดยการวิเคราะห์รหัสและ StyleCop (เช่นCA1707: ตัวระบุไม่ควรมีขีดล่างกับSA1310: ชื่อเขตข้อมูลจะต้องไม่มีเครื่องหมายขีดล่าง ) เครื่องมือทั้งสองนั้นเสริมและมักใช้เคียงข้างกัน
เรามีรีวิวโค้ด
การมีอยู่ของการตรวจทานโค้ดไม่ใช่เหตุผลที่จะหลีกเลี่ยงการวิเคราะห์โค้ด ทั้งการวิเคราะห์โค้ดและ StyleCop นั้นยอดเยี่ยมในการค้นหาสิ่งต่าง ๆ โดยอัตโนมัติก่อนการตรวจสอบโค้ด ไม่มีอะไรจะเลวร้ายไปกว่าการใช้รหัสตรวจทานระบุปัญหาสไตล์หรือรูปแบบที่มีปัญหาซึ่งสามารถพบได้โดยอัตโนมัติ เก็บความคิดเห็นรหัสสำหรับสิ่งที่น่าสนใจ
อีกแง่มุมหนึ่งคือผู้วิจารณ์มนุษย์ไม่จำเป็นต้องเก่งในการตรวจพบปัญหาที่พบในการวิเคราะห์รหัส ตัวอย่างเช่นอินสแตนซ์ของการใช้งานคลาสIDisposable
อาจถูกสร้างขึ้นในสถานที่แห่งหนึ่งและจากนั้นทิ้งในสถานที่ที่แตกต่างกัน จะใช้เวลาพอสมควรสำหรับผู้ตรวจสอบในการค้นหาในขณะที่ใช้เวลาเพียงไม่กี่มิลลิวินาทีสำหรับเครื่องมือวิเคราะห์แบบคงที่เพื่อค้นหา