อะไรคือจุดประสงค์ของการวิเคราะห์รหัสและเมื่อใดที่ฉันต้องใช้มัน


26

ฉันได้ยินเกี่ยวกับการวิเคราะห์รหัสของ Visual Studio แต่ไม่เคยใช้ ฉันอ่านMSDNแล้ว แต่ก็ยังไม่เข้าใจถึงการใช้งานจริงของการวิเคราะห์รหัส

ไม่เหมือนกับ StyleCop หรือ

ที่ไหนสักแห่ง FxCop ก็พูดถึง การวิเคราะห์รหัสแตกต่างกันอย่างไร

ฉันจำเป็นต้องใช้การวิเคราะห์รหัสสำหรับทุกโครงการหรือไม่ เพื่อนร่วมงานของฉันทำรีวิวรหัสไม่เพียงพอหรือไม่?

คำตอบ:


36

การวิเคราะห์รหัสคืออะไร?

การวิเคราะห์รหัส (ก่อนหน้านี้ 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อาจถูกสร้างขึ้นในสถานที่แห่งหนึ่งและจากนั้นทิ้งในสถานที่ที่แตกต่างกัน จะใช้เวลาพอสมควรสำหรับผู้ตรวจสอบในการค้นหาในขณะที่ใช้เวลาเพียงไม่กี่มิลลิวินาทีสำหรับเครื่องมือวิเคราะห์แบบคงที่เพื่อค้นหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.