คำถามติดแท็ก static-analysis

การวิเคราะห์ซอร์สโค้ดหรือออบเจ็กต์โค้ดโดยไม่ต้องดำเนินการโปรแกรม ซึ่งอาจทำได้โดยเครื่องมืออัตโนมัติหรือโดยการวิเคราะห์โดยมนุษย์

5
มีความสัมพันธ์ระหว่างขนาดของโครงการและความเข้มงวดของภาษาหรือไม่
การอธิบายถึงความแตกต่างระหว่างความเข้มงวดของภาษาและกระบวนทัศน์ต่อเพื่อนร่วมงานของฉันฉันจึงยืนยันว่า: ภาษาที่ทนทานเช่นภาษาที่มีการเปลี่ยนแปลงและถูกตีความใช้ดีที่สุดสำหรับต้นแบบและโครงการขนาดเล็กหรือเว็บแอปพลิเคชันขนาดกลาง เมื่อเลือกภาษาไดนามิกที่หรูหราเช่น Python หรือ JavaScript ที่มี Node.js ประโยชน์คือ: การพัฒนาที่รวดเร็ว ลดรหัสสำเร็จรูป ความสามารถในการดึงดูดโปรแกรมเมอร์หนุ่มสาวผู้สร้างสรรค์ที่หนี“ ภาษาองค์กร” เช่น Java ภาษาที่พิมพ์ / เรียบเรียงแบบสแตติกเหมาะที่สุดสำหรับแอปพลิเคชันที่ต้องการความเข้มงวดสูงกว่าเช่นแอพที่สำคัญต่อธุรกิจหรือแอพสำหรับแอพขนาดกลางถึงขนาดใหญ่ กระบวนทัศน์และรูปแบบที่รู้จักกันดีพัฒนามานานหลายทศวรรษ ความง่ายในการตรวจสอบแบบคงที่ ความสามารถในการค้นหานักพัฒนามืออาชีพจำนวนมากที่มีประสบการณ์มานานหลายทศวรรษ ภาษาที่เข้มงวดเช่น Haskell, Ada หรือเทคนิคต่าง ๆ เช่นสัญญา Code ใน C # นั้นดีกว่าสำหรับระบบที่ให้ความปลอดภัยมากกว่าความยืดหยุ่น (แม้ว่า Haskell จะมีความยืดหยุ่นสูงมาก) เช่นระบบที่มีความสำคัญต่อชีวิตและระบบซึ่งคาดว่าจะเสถียรมาก ประโยชน์คือ: ความสามารถในการจับข้อบกพร่องให้ได้มากที่สุดในเวลารวบรวม ความง่ายในการตรวจสอบแบบคงที่ ความง่ายในการพิสูจน์อย่างเป็นทางการ อย่างไรก็ตามโดยดูที่ภาษาและเทคโนโลยีที่ใช้สำหรับโครงการขนาดใหญ่โดย บริษัท ขนาดใหญ่, ดูเหมือนว่าการยืนยันของฉันเป็นสิ่งที่ผิด ตัวอย่างเช่น Python ใช้สำหรับระบบขนาดใหญ่เช่น YouTube หรือแอปพลิเคชันอื่น ๆ …

4
ทำไมวิธีการไม่ควรโยนข้อยกเว้นที่ตรวจสอบหลายประเภท
เราใช้ SonarQube เพื่อวิเคราะห์โค้ด Java ของเราและมีกฎนี้ (ตั้งค่าเป็นวิกฤติ): วิธีการสาธารณะควรมีข้อยกเว้นที่ตรวจสอบได้มากที่สุดหนึ่งรายการ การใช้ข้อยกเว้นที่เลือกไว้จะบังคับให้ผู้เรียกใช้วิธีจัดการกับข้อผิดพลาดไม่ว่าจะโดยการเผยแพร่พวกเขาหรือโดยการจัดการพวกเขา สิ่งนี้ทำให้ข้อยกเว้นเหล่านั้นเป็นส่วนหนึ่งของ API ของวิธีการทั้งหมด เพื่อรักษาความซับซ้อนสำหรับผู้โทรที่เหมาะสมวิธีการไม่ควรมีข้อยกเว้นที่ตรวจสอบมากกว่าหนึ่งประเภท " อีกเล็กน้อยใน Sonar มีสิ่งนี้ : วิธีการสาธารณะควรมีข้อยกเว้นที่ตรวจสอบได้มากที่สุดหนึ่งรายการ การใช้ข้อยกเว้นที่เลือกไว้จะบังคับให้ผู้เรียกใช้วิธีจัดการกับข้อผิดพลาดไม่ว่าจะโดยการแพร่กระจายพวกเขาหรือโดยการจัดการพวกเขา สิ่งนี้ทำให้ข้อยกเว้นเหล่านั้นเป็นส่วนหนึ่งของ API ของวิธีการทั้งหมด เพื่อรักษาความซับซ้อนสำหรับผู้โทรที่เหมาะสมวิธีการไม่ควรมีข้อยกเว้นที่ตรวจสอบมากกว่าหนึ่งประเภท รหัสต่อไปนี้: public void delete() throws IOException, SQLException { // Non-Compliant /* ... */ } ควรได้รับการปรับสภาพใหม่เป็น: public void delete() throws SomeApplicationLevelException { // Compliant /* ... */ } …

4
ทำไมทุกคนถึงต้องลงทุนใน Microsoft“ Roslyn”
ฉันเพิ่งอ่านเอกสารไวท์ & ตัวอย่างจากMicrosoft "Roslyn"และแนวคิดน่าสนใจมาก จากสิ่งที่ฉันสามารถบอกได้มันเปิดกล่องดำที่เป็นคอมไพเลอร์และให้ส่วนต่อประสานที่เราสามารถใช้รับข้อมูลและตัวชี้วัดเกี่ยวกับโค้ดที่เขียนใน Visual Studio โรสลินดูเหมือนว่าจะมีความสามารถในการ "สคริปต์" โค้ดและรวบรวม / ดำเนินการได้ทันที (คล้ายกับ CodeDom) แต่ฉันได้พบการใช้งานที่ จำกัด สำหรับประเภทการทำงานในประสบการณ์ของฉัน ในขณะที่องค์ประกอบการวิเคราะห์รหัสและตัวชี้วัดเป็นพื้นที่ที่น่าสนใจ ... มันเป็นสิ่งที่มีมานานแล้วและมีผู้ให้บริการจำนวนมากที่ได้ลงทุนเงินเป็นจำนวนมากในการวิเคราะห์รหัสและเครื่องมือการสร้างใหม่ (เช่น ReSharper, CodeRush , nCover และอื่น ๆ ) และพวกเขาทำได้ดีมาก! เหตุใด บริษัท ใดจึงออกนอกเส้นทางของพวกเขาเพื่อนำสิ่งที่สามารถให้มาได้ในราคาเพียงเศษเสี้ยวของต้นทุนโดยการซื้อใบอนุญาตสำหรับหนึ่งในเครื่องมือที่มีอยู่ บางทีฉันอาจพลาดฟังก์ชั่นหลักของโครงการ Roslyn ที่วางไว้นอกโดเมนของเครื่องมือที่กล่าวถึง ...

8
จะเถียงกับการลดมาตรฐานคุณภาพสำหรับ codebase แบบเดิมได้อย่างไร [ปิด]
เรามีฐานรหัสดั้งเดิมขนาดใหญ่ที่มีรหัสไม่ดีซึ่งคุณไม่สามารถจินตนาการได้ ตอนนี้เรากำหนดมาตรฐานคุณภาพบางอย่างและต้องการให้ได้มาตรฐานที่สมบูรณ์ใน codebase ใหม่ที่สมบูรณ์ แต่ถ้าคุณแตะรหัสเดิม และเราบังคับใช้กับ Sonar (เครื่องมือวิเคราะห์รหัส) ซึ่งมีการละเมิดหลายพันครั้งแล้ว ตอนนี้การสนทนาขึ้นมาเพื่อลดการละเมิดเหล่านั้นสำหรับมรดก เพราะมันเป็นมรดก การสนทนาเป็นเรื่องเกี่ยวกับกฎของการอ่าน ชอบจำนวน ifs ที่ซ้อนกัน / for .. มันสามารถมีได้ ตอนนี้ฉันจะเถียงกับการลดคุณภาพการเข้ารหัสของเราลงบนรหัสดั้งเดิมได้อย่างไร

1
อะไรคือจุดประสงค์ของการวิเคราะห์รหัสและเมื่อใดที่ฉันต้องใช้มัน
ฉันได้ยินเกี่ยวกับการวิเคราะห์รหัสของ Visual Studio แต่ไม่เคยใช้ ฉันอ่านMSDNแล้ว แต่ก็ยังไม่เข้าใจถึงการใช้งานจริงของการวิเคราะห์รหัส ไม่เหมือนกับ StyleCop หรือ ที่ไหนสักแห่ง FxCop ก็พูดถึง การวิเคราะห์รหัสแตกต่างกันอย่างไร ฉันจำเป็นต้องใช้การวิเคราะห์รหัสสำหรับทุกโครงการหรือไม่ เพื่อนร่วมงานของฉันทำรีวิวรหัสไม่เพียงพอหรือไม่?

10
แนวคิดของเอนโทรปีสามารถใช้ในการวิเคราะห์ซอร์สโค้ดด้วยวิธีที่มีประโยชน์ได้หรือไม่?
ดูเหมือนว่าฉันมีเหตุผลที่จะกำหนดบริบทสำหรับการวิเคราะห์ซอร์สโค้ดแบบสแตติกซึ่งรวมถึงกฎในการสร้างค่าสัมพัทธ์ของความซับซ้อน ฉันรู้ว่ามันไม่ได้เป็นไปตามความรู้สึกทางกายภาพเพราะ souce code ไม่มี "พลังงาน" แต่ฉันเดิมพันว่ามีความพยายามในการศึกษาทางวิชาการเพื่อวาดแบบขนาน มีใครรู้เรื่องนี้บ้างไหมและถ้าเป็นเช่นนั้นสิ่งใดที่ทำให้เกิดผลลัพธ์ที่มีประโยชน์?

3
มีความสัมพันธ์ระหว่างความซับซ้อนและความสามารถในการเข้าถึงได้หรือไม่?
ฉันได้ศึกษาความซับซ้อนของวงจร (McCabe) และความสามารถในการเข้าถึงซอฟต์แวร์ของ uni เมื่อเร็ว ๆ นี้ วันนี้อาจารย์ของฉันบอกว่าไม่มีความสัมพันธ์กันระหว่างตัวชี้วัดสองตัว แต่เป็นกรณีนี้จริงหรือ ฉันคิดว่าจะมีความสัมพันธ์กันอย่างแน่นอนเนื่องจากโปรแกรมที่ซับซ้อนน้อยกว่า (จากส่วนเล็กน้อยที่เราได้ดู) ดูเหมือนจะให้ผลลัพธ์ที่ดีกว่าในแง่ของการเข้าถึง ไม่มีใครรู้ว่ามีความพยายามที่จะดูทั้งสองตัวชี้วัดร่วมกันและถ้าไม่จะเป็นสิ่งที่ดีที่จะหาข้อมูลเกี่ยวกับความซับซ้อนและการเข้าถึงสำหรับโปรแกรมจำนวนมาก (ish)?

7
ประโยชน์ที่แท้จริงของการวิเคราะห์รหัสคงที่คืออะไร?
เครื่องมือเช่นpc-lintหรือQACสามารถใช้เพื่อทำการวิเคราะห์รหัสแบบคงที่บนฐานรหัส จากประสบการณ์ของฉันการวิเคราะห์แบบสแตติกมักให้เสียงดังมากเช่นคำเตือนในสิ่งที่ไม่ใช่ข้อบกพร่องจริง แต่อย่างใดละเมิดกฎข้อใดข้อหนึ่งในชุดกฎที่กำหนด การปิดกฎบางอย่าง (เพื่อผลดีในชุดกฎหรือผ่านความคิดเห็นพิเศษในรหัส) อาจเป็นกระบวนการที่ยุ่งยาก ประโยชน์ที่แท้จริงของการวิเคราะห์รหัสคงที่คืออะไร?

3
มีทางเลือกอื่นสำหรับการวิเคราะห์เชิงสถิตหรือไม่?
การพิมพ์แบบคงที่ในภาษาการเขียนโปรแกรมจะมีประโยชน์ในการบังคับใช้การค้ำประกันบางอย่างในเวลารวบรวม - แต่เป็นเครื่องมือชนิดเดียวสำหรับงานนี้หรือไม่? มีวิธีอื่นในการระบุค่าคงที่หรือไม่? ตัวอย่างเช่นภาษาหรือสภาพแวดล้อมสามารถช่วยบังคับใช้การรับประกันเกี่ยวกับความยาวของอาเรย์หรือเกี่ยวกับความสัมพันธ์ระหว่างอินพุตกับฟังก์ชัน ฉันไม่เคยได้ยินอะไรแบบนี้นอกระบบประเภท สิ่งที่เกี่ยวข้องที่ฉันสงสัยเกี่ยวกับคือหากมีวิธีการที่ไม่ประกาศใด ๆ ที่จะทำการวิเคราะห์แบบคงที่ (ประเภทที่มีการประกาศส่วนใหญ่ )

7
วิธีการหลีกเลี่ยงข้อผิดพลาดของการวิเคราะห์แบบคงที่
ฉันทำงานที่ บริษัท ที่ทำคะแนนได้ 11 จาก Joel Test - อย่างน้อยก็ในกระดาษ อย่างไรก็ตามในทางปฏิบัติไม่มีอะไรทำงานได้ดีอย่างที่คาดหวังและโครงการนี้ใช้DEFCON 1มาครึ่งปีแล้ว ตอนนี้เพื่อนส่วนใหญ่ของฉันมีความสุขถ้าพวกเขาสามารถกลับบ้านเวลา 18.00 น. - ในวันอาทิตย์ หนึ่งในแนวทางปฏิบัติที่ดีที่ทำให้ฉันไม่ทำงานคือการใช้เครื่องมือวิเคราะห์แบบคงที่ โครงการทั้งสองแทร็ค GCC คำเตือน -Wall และเป็นกรรมสิทธิ์และมีราคาแพงมาก"C / C ++"เครื่องมือ คำเตือนของ Gcc ทำบ่อยกว่าไม่ได้ชี้ไปที่ข้อผิดพลาดที่แท้จริง อย่างไรก็ตามเครื่องมือที่เป็นกรรมสิทธิ์ของรายการสิ่งต่าง ๆ เช่นการปลดเปลื้องโดยปริยายและขนาดของตัวอักษรสตริง การปลดเปลื้องโดยนัยจะถูกขึ้นบัญชีดำในหนังสือสไตล์ของพวกเขาด้วย การปฏิบัติตามมาตรฐานคือผู้คนถูกกดเพื่อให้ทุกคำเตือนปิดขึ้น โปรดทราบว่านี่ไม่รวมคำเตือนที่เป็นเท็จบวกส่วนใหญ่นี่ไม่ใช่ปัญหา ผลลัพธ์คือ: ผู้คนเพิ่มการปลดเปลื้องประเภทให้กับทุกค่าและให้กับทุกข้อโต้แย้งที่ซ่อนชนิดที่มีปัญหาจริงในกระบวนการ ผู้คนแนะนำโดยข้อบกพร่องหนึ่งหรือใช้คุณสมบัติภาษาที่มีปัญหาที่แตกต่างกัน (strlen แทน sizeof, strncpy แทน strcpy ฯลฯ ) คำเตือนถูกปิดเสียง รายงานข้อผิดพลาดเริ่มกลิ้งเข้ามา ประเด็นหลักคือรหัสต้นฉบับนั้นทำงานและเขียนโดยคนที่เล่นอย่างปลอดภัยภายในความสามารถทางภาษาของพวกเขาในขณะที่การแก้ไขไม่ได้ ตอนนี้ฉันไม่คิดว่า บริษัท …

5
โดยทางโปรแกรมแล้วการหาสัญกรณ์กุ๊บ (สัญกรณ์ Big O หรือ Theta) ของอัลกอริทึม?
ฉันเคยค้นหาสัญกรณ์ Landau (Big O, Theta ... ) ของอัลกอริทึมของฉันด้วยมือเพื่อให้แน่ใจว่าพวกเขาได้รับการปรับให้เหมาะสมที่สุดเท่าที่จะเป็นไปได้ แต่เมื่อฟังก์ชั่นมีขนาดใหญ่และซับซ้อนจริงๆ เวลามากเกินไปที่จะทำด้วยมือ นอกจากนี้ยังมีแนวโน้มที่จะเกิดข้อผิดพลาดของมนุษย์ ฉันใช้เวลากับ Codility (แบบฝึกหัดการเข้ารหัส / อัลโก) และสังเกตว่าพวกเขาจะให้สัญกรณ์ Landau สำหรับการแก้ปัญหาที่คุณส่ง (ทั้งในเวลาและการใช้หน่วยความจำ) ฉันสงสัยว่าพวกเขาทำได้อย่างไร ... คุณจะทำอย่างไร มีวิธีอื่นนอกเหนือจากการวิเคราะห์คำศัพท์หรือการแยกรหัส? คำถามนี้เกี่ยวกับ PHP และหรือ JavaScript เป็นหลัก แต่ฉันเปิดรับทุกภาษาและทุกทฤษฎี
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.