เราควรพยายามตรวจสอบรหัสของเราทั้งหมดหรือไม่


18

ขณะนี้เรากำลังปรับเปลี่ยนกระบวนการพัฒนาและฉันสงสัยว่าเราควรพยายามรักษาความมุ่งมั่นที่เราตรวจสอบไว้ 100%

ประสบการณ์ของคุณเกี่ยวกับการตรวจสอบรหัสคืออะไร

  • คุณมักจะใช้เวลา "มาก" กับพวกเขา (พูด 1/2 ชั่วโมงต่อวัน) หรือแค่อ่านเกิน 5/10 นาทีสูงสุดหรือไม่?
  • คุณมีเวลาที่แน่นอนในการใช้จ่ายต่อวัน / สัปดาห์ / การวิ่ง / โครงการหรือไม่?
  • ที่สำคัญที่สุดคุณคิดว่าเป้าหมายควรเป็น 100% ของรหัสที่จะตรวจสอบโดยเพื่อนหรือไม่จำเป็น 100%

ลองแตะ 80% ของรหัสด้วยความพยายาม 20% ลงทุนในเครื่องมืออัตโนมัติที่ดีที่สุดที่เงินสามารถซื้อได้
งาน

2
เครื่องมืออัตโนมัติเป็นสิ่งที่ยอดเยี่ยม แต่ไร้ประโยชน์หากคุณไม่มีเวลาและทรัพยากรในการรักษาการทดสอบทั้งหมดตามความทันสมัย
Kieren Johnstone

คำตอบ:


19

เรามีงาน 'ตรวจสอบโค้ด' ในแต่ละเรื่อง บางคนนึกคิดไม่เกี่ยวข้องกับการพัฒนาของเรื่องที่จะตรวจสอบการเปลี่ยนแปลงรหัสทั้งหมดที่เกี่ยวข้องกับเรื่องนั้น มันใช้งานได้ดี

เวลาเยอะมากเหรอ? ไม่มากขึ้นอยู่กับว่ามีโค้ดมากน้อยเพียงใด - เรากำลังมองหาข้อผิดพลาดที่เห็นได้ชัดการพิมพ์ผิดการตรวจสอบสติตรรกะพื้นฐานการยกเว้นที่ไม่ถูกตรวจจับเป็นต้น

เป็นขั้นตอนที่มีคุณภาพที่พบข้อบกพร่องดังนั้นจึงมีค่าบางอย่าง การจัดสรรเวลาอาจไม่ใช่วิธีที่ดีที่สุดในการทำเช่นนั้น - ถ้าเกี่ยวกับบางสิ่งที่ค่อนข้างซับซ้อนควรมีการตรวจสอบโค้ดหรือไม่

อย่างไรก็ตามมันเป็นสิ่งสำคัญที่คนอื่นจะตรวจสอบรหัส ..


3
"ยังไงก็ตามมันเป็นสิ่งสำคัญที่คนอื่นจะตรวจสอบรหัส .. " คำถามนั้นบ่งบอกว่าคนคนเดียวกันที่เขียนรหัสควรตรวจสอบหรือไม่? ถ้ามันอยู่ที่ไหน ฉันต้องการแก้ไข :) :)
Simeon

4
ไม่ไม่ฉันกำลังพูดอย่างครอบคลุมและบอกว่าสำคัญ
Kieren Johnstone

5
@Simeon เป็นความเข้าใจผิดที่ไม่ธรรมดาซึ่งเจ้าของสามารถตรวจสอบรหัสของตัวเองได้ มันทำลายการทำงานทั้งหมด
Tom Squires

5
@TomSquires: อย่างแน่นอน เมื่อคุณทำงานกับโค้ดเป็นเวลานานคุณสามารถกลายเป็น "คนตาบอด" ไปสู่ข้อบกพร่องที่เห็นได้ชัดเจนในตัวเพราะคุณเห็นว่ามันเป็นสิ่งที่ควรจะเป็นแทนที่จะเป็นอะไร ปัญหาเหล่านี้จะสังเกตเห็นได้ง่ายขึ้นสำหรับคนที่ไม่เคยเห็นรหัสมาก่อน นักเขียนมีปัญหาเดียวกันและเช่นเดียวกับหนังสือที่ไม่ได้รับการเผยแพร่โดยไม่ต้องพิสูจน์อักษรรหัสไม่ควรเผยแพร่โดยไม่ตรวจสอบ นอกจากนี้ยังมีประโยชน์อื่น ๆ ในการทำรีวิวโค้ดเช่นเป็นการดีที่จะถ่ายทอดความรู้ระหว่างสมาชิกในทีมของคุณ
hammar

@hammar - แน่นอนว่าการพยายามหาคนที่ไม่ได้เขียนรหัสซึ่งมีเวลาที่จะคุ้นเคยอย่างใกล้ชิดกับมันว่าพวกเขาสามารถตรวจสอบได้อย่างเป็นประโยชน์เป็นสิ่งที่ท้าทาย
Peter Ajtai

12

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

ก่อนอื่นให้ทำการรีวิวของคุณให้ได้ผลมากขึ้นจากนั้นตัดสินใจเลือกความคุ้มครอง

ความคิดเห็นควรจะดำเนินการไม่เพียง แต่ในรหัส แต่ยังเกี่ยวกับการออกแบบ



นอกจากนี้ความคิดเห็นจะไม่แทนที่การทดสอบและเครื่องมือ:

  • ความคิดเห็นสามารถเรียกใช้รหัสแห้ง
  • ความคิดเห็นอาจรวมถึงการวิเคราะห์รหัส
  • ความคิดเห็นตรวจสอบการใช้ซ้ำและการอ่าน
  • ความคิดเห็นสามารถตรวจสอบบางแง่มุมของประสิทธิภาพอย่างไรก็ตามสิ่งนี้ไม่ได้แทนที่การวัดจริงของเวลาทำงานและการค้นหาคอขวด
  • มีเครื่องมือสำหรับการวิเคราะห์รหัสคงที่
  • มีเครื่องมือสำหรับการทดสอบแบบแผนการเข้ารหัสไม่ต้องเสียเวลาตรวจสอบในเรื่องนี้
  • หน่วยระบบและการทดสอบการรวมรหัสเรียกใช้เปียก
  • การทดสอบหน่วยระบบและการรวมเข้าด้วยกันสามารถทำซ้ำได้โดยอัตโนมัติการตรวจสอบโค้ดมักจะใช้เพียงครั้งเดียว
  • การทดสอบหน่วยควรมีขอบเขตรหัสสูงและทดสอบทั้งสถานการณ์จำลองความสำเร็จหลักและเงื่อนไขสิ้นสุดการตรวจสอบโค้ดสามารถทำได้เพียงบางส่วนเท่านั้น
  • การทดสอบบูรณาการทดสอบความสามารถของหน่วยหรือระบบที่จะทำงานร่วมกันตรวจสอบรหัสไม่สามารถแทนที่นี้
  • ฟังก์ชั่นการทดสอบระบบการทดสอบของทั้งระบบตรวจสอบรหัสไม่สามารถแทนที่นี้



ลองอุทิศเวลาที่กำหนดไว้ล่วงหน้าต่อเดือน (หรือต่อการวิ่ง) สำหรับความคิดเห็น เลือกรหัสที่คุณต้องการตรวจสอบที่ช่องเฉพาะถัดไปโดยใช้การวิเคราะห์พฤติกรรมเช่น:

  • รหัสที่อาจมีข้อผิดพลาดที่ไม่ปรากฏหลักฐานที่มีการรายงาน
  • รหัสที่เมื่อเร็ว ๆ นี้มีข้อบกพร่องที่ระบุอยู่ภายใน
  • รหัสที่มีปัญหาด้านประสิทธิภาพ (คอขวด)
  • รหัสที่เขียนโดยนักพัฒนาใหม่
  • รหัสดั้งเดิมที่เพิ่งได้รับการปรับปรุงโดยบุคคลที่ไม่คุ้นเคยก่อนหน้านี้
  • รหัสในพื้นที่ใหม่
  • รหัสที่มีอยู่ที่คุณต้องการให้นักพัฒนาใหม่เพื่อเรียนรู้
  • รหัสที่แก้ปัญหาที่ซับซ้อน
  • รหัสที่ถูกระบุว่าซับซ้อนโดยเครื่องมือวิเคราะห์

และจำไว้ว่าคุณกำลังตรวจสอบรหัส (หรือการออกแบบหรือการทดสอบ) และไม่ใช่ผู้เขียน



ฉันแนะนำวัสดุการอ่านดังต่อไปนี้:

บทวิจารณ์แบบไม่มีการเลือกภายในบ้านเลือกความ
ลับที่ดีที่สุดของการทบทวนรหัสเพียร์


5

มันขึ้นอยู่กับ.

ขึ้นอยู่กับว่าซอฟต์แวร์ของคุณทำอะไร:

  • ถ้ามันควบคุมเครื่องกระตุ้นหัวใจอิเล็กทรอนิกส์หรือกระสวยอวกาศก็ใช่ว่าแน่นอน

  • ถ้ามันเป็นต้นแบบของการโยนทิ้งอาจจะไม่ใช่

นอกจากนี้ยังขึ้นอยู่กับว่าคุณมีทรัพยากรที่ดีอย่างไรนักพัฒนาของคุณมีประสบการณ์มากน้อยเพียงใดและคุณกำลังมองหาอะไรในบทวิจารณ์โค้ด (โปรดจำไว้ว่านักพัฒนาซอฟต์แวร์โดยเฉลี่ยที่ตรวจสอบรหัสของคนอื่นอาจจะสังเกตเห็นปัญหาเกี่ยวกับรูปแบบและคิดถึงข้อบกพร่องของอัลกอริทึมที่บอบบาง ... โดยเฉพาะอย่างยิ่งเนื่องจากการตรวจสอบโค้ดนั้นเป็นเรื่องน่าเบื่อ)

คำแนะนำของฉันคือการบันทึกความพยายามในการตรวจสอบรหัสของคุณสำหรับรหัสที่ความถูกต้องมีความสำคัญและค่าใช้จ่ายของข้อผิดพลาดที่ตรวจไม่พบนั้นสูง


5

ก่อนอื่นคุณต้องตอบคำถามนี้: ทำไมคุณถึงตรวจสอบรหัส?

ด้วยคำตอบนั้นคุณสามารถทราบได้ว่าต้องการตรวจสอบรหัสใด

ความคิดเห็นเกี่ยวกับรหัสบางอย่างบรรลุผลตามที่การทดสอบทำหรือจะทำ หากนั่นคือเป้าหมายของบทวิจารณ์ของคุณการเข้าใกล้ 100% เป็นความคิดที่ดีถ้าคุณมีการทดสอบเล็กน้อย อย่างไรก็ตามการอนุญาตให้เครื่องมือทดสอบทำเช่นนี้จะช่วยลดความจำเป็นในการตรวจสอบโค้ดทั้งหมด

ความคิดเห็นที่ดีส่วนใหญ่ดูเหมือนจะเน้นไปที่การแบ่งปันความรู้และเพิ่มความสามารถของนักพัฒนาในการตรวจสอบ (ไม่ว่าจะเป็นคนที่เขียนรหัสหรือคนที่วิจารณ์รหัส) ด้วยเหตุผลนี้เป็นเหตุผลหลักในการตรวจสอบการตรวจสอบให้แน่ใจว่าการตรวจสอบรหัส 100% นั้นอาจเกินความเป็นจริง


3

ในโลกที่สมบูรณ์แบบทุกอย่างจะถูกอ่านอย่างชัดเจนโดยผู้เขียนและเพื่อนที่ได้รับการตรวจสอบจากบุคคลอื่นอย่างน้อยหนึ่งคนตั้งแต่ข้อกำหนดคุณสมบัติจนถึงคู่มือผู้ใช้ไปจนถึงกรณีทดสอบ แต่ความเห็นแม้แต่การตรวจสอบโต๊ะอย่างง่ายต้องใช้เวลาและค่าใช้จ่าย ซึ่งหมายความว่าคุณต้องเลือกสิ่งที่คุณควรตรวจสอบและเมื่อคุณควรตรวจสอบ

ฉันขอแนะนำให้จัดลำดับความสำคัญสิ่งต่าง ๆ เพื่อเลือกวิธีที่คุณต้องการตรวจทานและพยายามทบทวนให้มากที่สุดเท่าที่จะทำได้ด้วยรายละเอียดในระดับที่เหมาะสม การจัดลำดับความสำคัญอาจขึ้นอยู่กับประเภทของสิ่งประดิษฐ์เช่นการระบุว่าต้องมีการทบทวนข้อกำหนดการออกแบบและรหัสการผลิตควรได้รับการตรวจสอบและสามารถตรวจสอบกรณีทดสอบได้ ภายในนั้นคุณยังสามารถระบุได้ว่ามีความเสี่ยงสูงหรือส่วนประกอบที่มีมูลค่าสูงจะได้รับความสำคัญในการตรวจสอบหรืออาจเป็นการทบทวนที่เป็นทางการมากขึ้น

เท่าที่ผ่านมาทุกอย่างกลับไปสู่ความสำคัญขององค์ประกอบที่สำคัญ มีหลายครั้งที่ฉันใช้เวลาทบทวน 10-15 นาทีและหลายครั้งที่คนหลายคนอ่านรหัสทีละคนจากนั้นก็เดินเข้าไปในห้องเพื่อทำกระบวนการตรวจสอบที่เป็นทางการมากขึ้นซึ่งใช้เวลา 30-45 นาที (ขึ้นอยู่กับขนาดของ โมดูล)

ในท้ายที่สุดมันคือความสมดุลระหว่างเวลาราคาขอบเขตและคุณภาพ คุณไม่มีพวกเขาทั้งหมดดังนั้นคุณต้องปรับให้เหมาะสมที่คุณสามารถทำได้


3

เป็นข้อเสนอแนะหากคุณวางแผนที่จะทำการตรวจสอบใด ๆ เลยมีแนวทางที่ใช้ร่วมกันบางอย่างเกี่ยวกับขอบเขตการตรวจสอบและเป้าหมายเพื่อให้แน่ใจว่าการตรวจสอบจะไม่ทำให้เกิดความขัดแย้งที่ไม่จำเป็นระหว่างสมาชิกในทีม

ทีมเชื่อมโยงกันสร้างโครงการที่ดีกว่า ผู้คนอาจหลวมความสัมพันธ์กับเรื่องไร้สาระหรือคำขอที่สมบูรณ์แบบ มักจะมีคนคนหนึ่งที่จะบ่นเกี่ยวกับเรื่องนี้หรือว่าและข้อผิดพลาดอื่น ๆ เพียงเพราะเขาเป็นเช่นนั้น ...


2

ฉันจองชั่วโมงต่อวันสำหรับทำรีวิวเพียร์ แต่ไม่จำเป็นต้องใช้เสมอ รหัสฐานของเราใช้ร่วมกันระหว่างผลิตภัณฑ์สองโหล นโยบายของเราคือการเปลี่ยนแปลงเล็กน้อยในรหัสที่ไม่ซ้ำกันสำหรับหนึ่งผลิตภัณฑ์นั้นสามารถทำการเช็คอินได้โดยไม่ต้องมีการตรวจสอบ การเปลี่ยนแปลงผลิตภัณฑ์เดียวที่ซับซ้อนมากขึ้นนั้นจำเป็นต้องมีการตรวจสอบ แต่อาจไม่เป็นทางการเท่ากับการโทรหาเพื่อนร่วมงานที่โต๊ะทำงานของคุณอีกครั้ง การเปลี่ยนแปลงรหัสที่ใช้ร่วมกันจำเป็นต้องมีการตรวจสอบอย่างเป็นทางการรวมถึงผู้พัฒนาผลิตภัณฑ์อื่น ๆ ฉันคิดว่านโยบายของเรามีความสมดุลค่อนข้างดีเมื่อเทียบกับ บริษัท อื่น ๆ ที่ฉันเคยทำงานมา

ฉันใช้เวลาอ่านรีวิวต่อวันมากกว่าเพื่อนร่วมงานบางคนที่มีบทบาทสำคัญน้อยกว่า แต่ฉันไม่คิดว่าจะใช้เวลานานเกินไปเพราะก่อนที่นโยบายการตรวจทานจะทำให้ฉันเสียเวลาได้ง่ายกว่าการติดตามข้อบกพร่องที่นักพัฒนาซอฟต์แวร์ แนะนำผลิตภัณฑ์อื่น


นั่นคือค่าเฉลี่ยหรือไม่ การ จำกัด การตรวจทานที่ซับซ้อนถึงหนึ่งชั่วโมงนั้นดูแปลกและถ้ามีไม่มากนักที่จะตรวจสอบ .. ดีฉันไม่สามารถเห็นได้ว่าชั่วโมงต่อวันจะใช้งานได้อย่างไร
Kieren Johnstone

นั่นไม่ จำกัด ฉันตั้งเวลาตามระยะเวลาที่ใช้ไม่ใช่วิธีอื่น ฉันมักจะได้รับคำวิจารณ์ 2 ครั้งภายในหนึ่งชั่วโมง หากใช้เวลานานกว่านั้นเช็คอินของคุณมีขนาดใหญ่เกินไปคุณจะไม่ได้รับการตรวจสอบการออกแบบเพียงพอก่อนถึงมือหรือเครื่องมือตรวจสอบโค้ดของคุณยุ่งยากเกินไป บทวิจารณ์โค้ดเป็นการตรวจสอบไม่ใช่การออกแบบใหม่
Karl Bielefeldt

2

เราได้ตรวจทานโค้ด 100% แล้ว มันถูกกว่าการทดสอบมากโดยเฉพาะการทดสอบการครอบคลุมโค้ด 100% เราไม่ใช้เวลามากเกินไปในการตรวจสอบมากกว่าหนึ่งชั่วโมงต่อวันจะมีประสิทธิภาพน้อยลง (30 นาทีไม่มาก)

ในขณะที่คุณกำลัง zeroing ในกระบวนการให้จดบันทึก คุณพบอะไร ระบบประกันคุณภาพพบอะไรในภายหลัง ลูกค้าของคุณค้นพบอะไร ทำไมข้อบกพร่องเหล่านี้ถึงหนีคุณ?


7
การตรวจสอบถูกกว่าการทดสอบอัตโนมัติอย่างไร สมมติว่าคุณเขียนการทดสอบหนึ่งครั้งทบทวนการทดสอบหนึ่งครั้งและมีชุดการทดสอบที่มีเสถียรภาพคุณควรใช้เวลาน้อยลงและใช้เงินในการดำเนินการทดสอบมากกว่าที่ใช้ในการตรวจสอบทุกประเภท (ตลอดอายุโครงการ) นอกจากนี้การตั้งเป้าหมายการครอบคลุมโค้ด 100% นั้นเป็นการสิ้นเปลืองทรัพยากรซึ่งอาจเป็นสาเหตุของเวลา / ค่าใช้จ่ายในการทดสอบที่มากขึ้น ฉันยังถามถึงความคิดเห็น 30 นาที - เราอาจตรวจสอบโมดูลเป็นเวลา 30 นาที แต่มีเวลาเตรียมการในการอ่านโค้ดในตอนแรกทำความเข้าใจบทบาทของมันในระบบและแสดงความคิดเห็น
Thomas Owens

การเรียกร้องของ @Malters นั้นไม่เคยได้ยินมาก่อน แต่ฉันก็สงสัยว่ามันใช้เวลาเพียง 30 นาทีเท่านั้น .. ฉันได้อ่านที่เดียวที่มันเป็นกรณีที่การตรวจสอบนั้นคุ้มค่ากว่าการทดสอบหน่วยอัตโนมัติและนั่นคือนาซ่า ในกรณีนั้นในที่สุดพวกเขาก็ลดการทดสอบหน่วยทั้งหมดเนื่องจากมีราคาถูกกว่าเพื่อตรวจสอบรหัสด้วยตนเอง แน่นอนว่านาซ่ายังคงมีผู้ทดสอบ 12: 1: อัตราส่วนนักพัฒนาดังนั้นพวกเขาจึงทำการทดสอบอื่น ๆ อีกมากมายเช่นกัน ...
Michael

2
@Thomas Owens: การทดสอบหน่วยพบข้อบกพร่องอย่างง่าย ข้อบกพร่องที่มีราคาแพงคือสิ่งที่หลาย ๆ หน่วยรวมกันในรูปแบบที่ไม่คาดคิด ข้อผิดพลาดอีกประเภทหนึ่งคือกรณีมุมพลาด นักพัฒนาที่พลาดกรณีจะไม่เขียนการทดสอบหน่วย แต่อย่างใดอย่างหนึ่ง แต่ดวงตาชุดที่สองจะมองเห็น
MSalters

@MSalters นั่นเป็นเหตุผลที่คุณเขียนการรวมระบบอัตโนมัติและการทดสอบระบบรวมถึงการทดสอบหน่วย จริงๆแล้วการทดสอบเพียงอย่างเดียวที่อาจต้องดำเนินการด้วยตนเองคือการทดสอบการยอมรับ และโดยการทบทวนการทดสอบตามการสร้างจะช่วยให้มั่นใจว่ากรณีที่สำคัญที่สุดได้รับการทดสอบ
โธมัสโอเวนส์

2

มีการตรวจสอบรหัสปกติเป็นส่วนใหญ่สำหรับการสร้างทีมและแบ่งปันแนวคิดในการใช้ คุณสามารถเรียนรู้มากมายจากเพื่อนร่วมงานของคุณด้วยวิธีนี้


สิ่งนี้บ่งบอกถึงประโยชน์เพียงเล็กน้อยเท่านั้น คุณคิดว่าการหาข้อผิดพลาดนั้นสำคัญหรือไม่? ถ้าเป็นเช่นนั้นเท่าไหร่
JeffO

แน่นอนว่าการค้นหาข้อผิดพลาดมีความสำคัญ แต่ประโยชน์ที่ใหญ่กว่าคือความรู้ระยะยาวที่ได้จากการทบทวนรหัส บางทีข้อผิดพลาดอาจเกิดจากวิธีการที่ไม่ดีที่สามารถป้องกันได้ในอนาคต
coder

2

เราต้องการการตรวจสอบเพียร์โค้ดสำหรับทุกการเช็คอิน หากไม่มีเพียร์ให้บริการเราจะจัดให้มีการตรวจสอบหลังการเช็คอิน ผู้ตรวจสอบจะถูกบันทึกไว้ในความคิดเห็นการเช็คอินควบคุมแหล่งที่มา

สิ่งเหล่านี้ไม่ใช้เวลามากและเนื่องจากทำระหว่างเพื่อนไม่มีความเป็นพิษต่อเด็ก


2

จำเป็นต้องมีการตรวจสอบรหัส IMO คุณ 99.999 ... % ของเวลาไม่ถูกต้องเสมอไปดังนั้นคุณต้องแน่ใจว่าถูกต้อง ฉันมีเวลาที่กำหนดหรือไม่? ไม่ แต่ฉันใช้เวลาในการตรวจสอบรหัสของฉัน ปกติฉันมีเพื่อนร่วมงานทำเช่นเดียวกัน


1

การตรวจสอบโค้ดอาจดูน่ากลัว แต่เป็นเครื่องมือที่มีคุณค่าเมื่อดำเนินการอย่างถูกต้อง พวกเขาจะเป็นบรรทัดแรกของการป้องกันการออกแบบและการใช้งานผิดพลาด หากคุณไม่ได้ทำการตรวจสอบโค้ดเกี่ยวกับสถานที่ที่คุณใส่คุณควรเริ่มต้นโดยเร็ว

สำหรับเวลาที่ใช้ไปกับบทวิจารณ์ของเพื่อนวิธีปฏิบัติที่ดีคือการปล่อยให้ 5-10% ของเวลาการพัฒนาโดยรวมของคุณสำหรับการดำเนินการและการตอบสนองต่อการตรวจสอบโค้ด

เรามีเอกสารทางเทคนิคเกี่ยวกับการตรวจสอบโค้ดที่มีประสิทธิภาพซึ่งสามารถช่วยให้คุณเริ่มต้นได้ทันที มันเป็นคำแนะนำทีละขั้นตอนและพูดถึงข้อผิดพลาดทั่วไปที่คุณอาจเผชิญและวิธีการแก้ไข คุณสามารถดาวน์โหลดได้จากเว็บไซต์ของเรา

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