การวัดที่มีประโยชน์สำหรับซอร์สโค้ดคืออะไร [ปิด]


33

การวัดที่มีประโยชน์ในการจับภาพสำหรับซอร์สโค้ดคืออะไร

เช่นเมตริก(ปฏิบัติการ) เส้นของรหัสหรือความซับซ้อน Cyclomaticช่วยให้มีการประกันคุณภาพหรือพวกเขาเป็นประโยชน์โดยทั่วไปสำหรับกระบวนการพัฒนาซอฟต์แวร์?


37
การวัดที่ถูกต้องเพียงอย่างเดียวคือ WTF / วินาที :)
ปลายทาง


คำตอบ:


30

"การวัดประสิทธิภาพการผลิตซอฟต์แวร์ด้วยบรรทัดของรหัสเปรียบเสมือนการวัดความก้าวหน้าของเครื่องบินด้วยน้ำหนักที่เท่าไหร่" - Bill Gates


3
กรุณาอย่าอัพเดทไม่ใช่คำตอบ
Eric Wilson

3
ในขณะที่เกร็ดเล็กเกร็ดน้อยที่น่าขบขันคำตอบนี้ไม่ได้มีส่วนช่วยตอบคำถาม
Chris Knight

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

7
downvote และความคิดเห็นของฉันมีวัตถุประสงค์เพื่อกีดกันคำตอบที่ไม่มีความลึกและไม่ตอบคำถามของ OP โดยตรง นี่อาจเป็นคำตอบที่ดีกว่านี้หากคุณพูดถึงรายละเอียดเพิ่มเติมเกี่ยวกับสาเหตุที่คุณเชื่อว่าการวัดซอฟต์แวร์ไม่มีประโยชน์เกี่ยวกับการพัฒนาซอฟต์แวร์และการประกันคุณภาพและมุ่งเน้นมากกว่า LOC
Chris Knight

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

12

ดูโพสต์ของ Jeff ในหัวข้อ:

การเยี่ยมชมจาก Metrics Maid

วิศวกรรมซอฟต์แวร์: ตายแล้วหรือ

โพสต์จาก Joel นั้นเก่า แต่ก็ดีเช่นกันที่เกี่ยวข้องกับการวัดซอฟต์แวร์และฉันขอแนะนำให้อ่าน: วิธีการจัดการ Econ 101

ประเด็นสำคัญสำหรับฉันคือสิ่งนี้การอ้างถึง Jeff: "การใช้เมตริกอย่างรับผิดชอบนั้นมีความสำคัญพอ ๆ กับการรวบรวมพวกมันตั้งแต่แรก"


+1 สำหรับการอ้างอิงว่า Jeff เป็นหนึ่งซับ ภูมิปัญญาบริสุทธิ์ที่แข็งกระด้างในการต่อสู้อยู่ที่นั่น
luis.espinal

11

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

Lines Of Code: ตามที่ 'ฉันได้กล่าวถึงนี่เป็นการวัดที่สำคัญและควรพิจารณาอย่างจริงจังที่สุด แต่ในแต่ละระดับ ฟังก์ชั่นคลาสไฟล์และอินเทอร์เฟซสามารถระบุรหัสทำทุกอย่างที่ยากต่อการบำรุงรักษาและค่าใช้จ่ายในระยะยาว เป็นการยากที่จะเปรียบเทียบจำนวนบรรทัดทั้งหมดของโค้ดกับสิ่งที่ระบบทำ อาจเป็นสิ่งที่ทำหลายอย่างและในกรณีนั้นจะมีรหัสหลายบรรทัด!

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

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

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

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


8

crap "source code metrics" นี้จะไม่ตายใช่หรือไม่

บรรทัดซอร์สของโค้ด (SLOC) เป็นเมทริกที่เก่าแก่ที่สุดง่ายที่สุดและพื้นฐานที่สุดที่มี

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

ณ จุดนั้นการวัดของ Halstead ถูกละทิ้งเนื่องจาก SLOC นั้นง่ายต่อการวัด


1
มีลิงค์ไปสู่การศึกษาหรือไม่?
Jon Hopkins

Google เป็นเพื่อนของคุณ แต่นี่คือสิ่งที่จะทำให้คุณเริ่มต้นได้ ecs.csun.edu/~rlingard/comp589/HoffmanArticle.pdf
John R. Strohm

6
การศึกษาที่น่าสนใจแม้ว่าการศึกษาของพวกเขาจะดูเฉพาะโปรแกรมทั่วไประหว่าง 50 ถึง 100 บรรทัดของรหัส ด้วยปัญหาเล็ก ๆ ที่กำหนดไว้อย่างดีในการแก้ปัญหาผลลัพธ์ที่ได้จึงไม่น่าแปลกใจนัก
Chris Knight

ฉันจะบอกว่าในโลกแห่งความเป็นจริงการศึกษาทั้งหมดเหล่านี้กลายเป็นโคลน
Warren P

นี่เป็นเรื่องจริง ยิ่งรหัสมีความยาวเท่าใด sh1 จะมีคุณภาพมากที่สุด
Pablo Ariel

8

ตัวชี้วัดซอร์สโค้ดสำหรับการประกันคุณภาพมุ่งที่สองวัตถุประสงค์

  • การเขียนโค้ดที่มีข้อบกพร่องน้อยกว่าภายใน
  • การเขียนรหัสเพื่อการบำรุงรักษาง่าย

ทั้งสองนำไปสู่การเขียนโค้ดง่ายที่สุดเท่าที่จะทำได้ หมายความว่า:

  • หน่วยสั้น ๆ ของรหัส (ฟังก์ชั่นวิธีการ)
  • องค์ประกอบน้อยในแต่ละหน่วย (อาร์กิวเมนต์, ตัวแปรโลคอล, ข้อความ, พา ธ )
  • และเกณฑ์อื่น ๆ อีกมากมายที่ซับซ้อนมากขึ้นหรือน้อยลง (ดูตัวชี้วัดซอฟต์แวร์ใน Wikipedia)

7

ตามความรู้ของฉันที่ดีที่สุดจำนวนข้อบกพร่องที่พบโดยตรงมีความสัมพันธ์กับบรรทัดของรหัส (อาจปั่น) ภาษาโมดูโลโปรแกรมเมอร์และโดเมน

ฉันไม่รู้เกี่ยวกับตัวชี้วัดอื่น ๆ ที่ตรงไปตรงมาและใช้งานได้ดีซึ่งสัมพันธ์กับข้อบกพร่อง

สิ่งหนึ่งที่ฉันต้องการทำคือเริ่มใช้หมายเลขสำหรับโครงการต่าง ๆ ที่ฉันใช้อยู่ - Test Coverage :: kLOC จากนั้นให้อภิปราย "คุณภาพการรับรู้" เพื่อดูว่ามีความสัมพันธ์กันหรือไม่


1
ดังนั้นรหัสเพิ่มเติมที่มีข้อผิดพลาดมากกว่าที่มีอยู่ในมันได้หรือไม่

3
@Thor: l yep yep ขนลุกใช่มั้ย
พอลนาธาน

เท่าที่ฉันจำได้ว่าหมายเลขอุตสาหกรรมทั่วไปอยู่ที่ประมาณ 2-3 ข้อผิดพลาดต่อ 1,000 บรรทัดของรหัสสำหรับโครงการเฉลี่ยการเข้าใกล้บางอย่างเช่นข้อผิดพลาด 0.5 ต่อรหัส 1,000 บรรทัดสำหรับซอฟต์แวร์ควบคุมโรงไฟฟ้านิวเคลียร์หรือโครงการของ NASA ที่พวกเขาพยายามอย่างมาก การควบคุมการทดสอบการตรวจสอบและอื่น ๆ เนื่องจากความล้มเหลวอาจมีผลที่รุนแรงมาก ใครบ้างที่มีการอ้างอิงถึงตัวเลขที่สนับสนุนสิ่งนี้?
hlovdal

2
@hlovdal: ข้อผิดพลาด 2-3 ข้อต่อ KSLOC เป็นตัวเลขที่ต่ำมากแล้ว ตัวเลขต่ำสุดที่ฉันรู้จากโดเมนการบินและอวกาศและการรักษาความปลอดภัยอยู่ที่ 0.1 ข้อผิดพลาดต่อ KSLOC ตัวเลขทั่วไปดูเหมือนจะมีข้อผิดพลาด 20 ถึง 50 ต่อ KSLOC สำหรับการอ้างอิงกระดาษของ Google for Andy German มีชื่อว่า "การวิเคราะห์รหัสคงที่ของซอฟต์แวร์ - บทเรียนที่ได้เรียนรู้"
Schedler

1
ฉันจะโต้แย้งตัวเลขเหล่านี้ - มันทั้งหมดขึ้นอยู่กับภาษาคอมไพเลอร์และสภาพแวดล้อมที่ปฏิบัติการได้ Typos ในโค้ด JavaScript อาจใช้เวลาหลายปีในการค้นหา แต่การพิมพ์ผิดในภาษาที่คอมไพล์จะพบได้ในคอมไพล์แรก
JBRWilkinson

7

การวัดจะมีประโยชน์ก็ต่อเมื่อคุณรู้ว่าต้องทำอย่างไรกับคำตอบที่คุณได้รับ ในสาระสำคัญตัวชี้วัดซอฟต์แวร์เป็นเหมือนเครื่องวัดอุณหภูมิ ความจริงที่ว่าคุณวัดบางอย่างที่ 98.6 ° F ไม่ได้มีความหมายอะไรจนกว่าคุณจะรู้ว่าอุณหภูมิปกติคืออะไร อุณหภูมิดังกล่าวดีสำหรับอุณหภูมิของร่างกาย แต่ไม่ดีสำหรับไอศครีม

ตัวชี้วัดทั่วไปที่สามารถเป็นประโยชน์ ได้แก่ :

  • ข้อบกพร่องที่ค้นพบ / สัปดาห์
  • ข้อบกพร่องได้รับการแก้ไข / สัปดาห์
  • # ข้อกำหนด / การกำหนดที่วางจำหน่าย
  • # ข้อกำหนดที่นำมาใช้ / เผยแพร่

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

ความซับซ้อนของวัฏจักรเป็นตัวชี้วัดที่น่าสนใจ ที่แนวคิดพื้นฐานมันเป็นจำนวนของเส้นทางการดำเนินการที่ไม่ซ้ำกันในฟังก์ชั่น / วิธี ในสภาพแวดล้อมที่มีการทดสอบหน่วยหนักนี้สอดคล้องกับจำนวนการทดสอบที่จำเป็นในการตรวจสอบทุกเส้นทางการดำเนินการ อย่างไรก็ตามเพียงเพราะคุณมีวิธีการที่มีความซับซ้อน Cyclomatic 96 ไม่ได้หมายความว่ามันเป็นรหัส buggy - หรือว่าคุณต้องเขียน 96 การทดสอบเพื่อให้ความมั่นใจที่เหมาะสม ไม่ใช่เรื่องแปลกสำหรับรหัสที่สร้างขึ้น (ผ่าน WPF หรือตัวแยกวิเคราะห์) เพื่อสร้างสิ่งที่ซับซ้อนนี้ สามารถให้ข้อมูลคร่าวๆเกี่ยวกับระดับความพยายามที่จำเป็นในการดีบักเมธอด

บรรทัดล่าง

การวัดทุกครั้งที่คุณใช้จะต้องมีการกำหนดไว้ดังต่อไปนี้หรือไร้ประโยชน์:

  • ความเข้าใจในสิ่งที่ "ปกติ" คือ สิ่งนี้สามารถปรับเปลี่ยนได้ตลอดอายุของโครงการ
  • เกณฑ์ภายนอก "ปกติ" ที่คุณต้องดำเนินการบางอย่าง
  • แผนการจัดการกับรหัสเมื่อเกินขีด จำกัด

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

ตัวชี้วัดเป็นเพียงเทอร์โมมิเตอร์สิ่งที่คุณทำกับมันขึ้นอยู่กับคุณ


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

@Rob Z ด้วยการวัดใด ๆ ผู้คนจะทำได้เพียงพอที่จะเพิ่มประสิทธิภาพการวัดนั้น ที่ข้อบกพร่องต่อบรรทัดของรหัสคุณอาจมีนักพัฒนาแนะนำตัวแปรที่ไม่ได้ใช้ที่พวกเขาเพิ่มขึ้นเพียงเพื่อเพิ่มจำนวนของ LOC ปราศจากข้อผิดพลาด (เนื่องจากเคาน์เตอร์ SLOC สามารถตรวจจับหลายอัฒภาค) แน่นอนว่ามันยังเพิ่มปริมาณของรหัสเพื่อลุย
Berin Loritsch

6

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

กล่าวโดยสรุปไม่มีการวัดที่มีประโยชน์สำหรับซอร์สโค้ดเนื่องจากการวัดซอร์สโค้ดด้วยตัวมันเองนั้นไม่มีประโยชน์


4

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


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

+1 รหัสที่มาเพิ่มเติมไม่จำเป็นต้องดีกว่า
Larry Coleman

เฉพาะแอปพลิเคชันที่ง่ายมากที่สามารถรองรับการทดสอบได้ 100% (ทำให้การครอบคลุมซ้ำซ้อน) มันมีราคาแพง (ถ้าไม่เป็นไปไม่ได้) เพื่อให้ได้ความครอบคลุมการทดสอบ 100% สำหรับซอฟต์แวร์ที่ซับซ้อน เราทราบดีว่าความจริงนั้นมีมานานกว่า 6 ทศวรรษแล้ว ประการที่สองการทดสอบเพียงบอกคุณว่าคุณไม่พบข้อผิดพลาด - ไม่รับประกันว่าจะไม่มีข้อบกพร่องไม่เกี่ยวกับคุณภาพโครงสร้างขนาดหรือความซับซ้อน (สิ่งที่รู้จักกันมานานแล้ว) ไม่ทราบข้อเท็จจริงเหล่านี้เมื่อทำงาน ในซอฟต์แวร์นั้นคล้ายกับนักฟิสิกส์ที่ไม่รู้กฎของอุณหพลศาสตร์จริงๆ
luis.espinal

@ luis.espinal Software ใหญ่มากจนแพงเกินกว่าที่จะทำการทดสอบได้ซอฟต์แวร์ที่เขียนไม่ดีอย่างไม่น่าเชื่อ มันใกล้ที่จะไม่มีเงื่อนงำในการสร้างซอฟต์แวร์ที่ใช้งานได้
Pablo Ariel

@PabloAriel - "ซอฟต์แวร์มีขนาดใหญ่เกินกว่าที่จะทดสอบได้" << นั่นไม่ใช่สิ่งที่ฉันพูด อ่านความคิดเห็น (อาจสองหรือสามครั้ง) เพื่อให้แน่ใจว่าคุณกำลังอ่านสิ่งที่คุณคิดว่าคุณกำลังอ่าน
luis.espinal

4

เรื่องเล็ก ๆ น้อย ๆ เพื่อแสดงว่าเหตุใดการนับ KLOC จึงไร้ประโยชน์ (และเป็นอันตรายแม้แต่) ในการวัดประสิทธิภาพ

หลายปีที่ผ่านมาฉันทำงานในโครงการขนาดใหญ่ (มีคนมากกว่า 70 คนใน บริษัท ของเราอีก 30 คนเป็นลูกค้าของเรา) ซึ่งใช้ KLOC เป็นตัวชี้วัดประสิทธิภาพของทีมและบุคคล

สำหรับความพยายาม Y2K ของเรา (บอกคุณเมื่อนานมาแล้วว่าเป็น :)) เราทำการล้างข้อมูลส่วนใหญ่ของรหัสที่ทีมของฉันรับผิดชอบ เราลงเอยด้วยการเขียนโค้ดประมาณ 30,000 บรรทัดไม่ใช่งาน 3 เดือนที่แย่สำหรับ 5 คน นอกจากนี้เรายังได้ทิ้งโค้ดอีก 70,000 บรรทัดซึ่งเป็นงานที่ดีมากสำหรับการทำงาน 3 เดือนโดยเฉพาะเมื่อรวมกับโค้ดใหม่

ผลลัพธ์สุดท้ายสำหรับไตรมาส: -40.000 บรรทัดของรหัส ในระหว่างการตรวจสอบประสิทธิภาพตามไตรมาสเราได้รับการตำหนิอย่างเป็นทางการจาก บริษัท สำหรับความล้มเหลวในการปฏิบัติตามข้อกำหนดการผลิตของเราที่มีจำนวน 20,000 บรรทัดของรหัสที่ผลิตต่อไตรมาส (หลังจากทั้งหมดเครื่องมือได้แสดงให้เห็นว่า จะส่งผลให้เราทุกคนถูกระบุว่ามีประสิทธิภาพต่ำกว่าและไม่ผ่านการโปรโมตการฝึกอบรมการจ่ายเงินเพิ่มเป็นต้นและอื่น ๆ ไม่มีผู้จัดการโครงการและทีมงาน QA เข้ามาแทรกแซงและได้รับการตำหนิ

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


ทำไมคุณไม่แสดงให้เห็นถึงความแตกต่างล่ะ!
reinierpost

ฉันคิดว่านั่นคือสิ่งที่ทำ แต่ถ้าระบบมีความแข็งแกร่งมาก ๆ มันก็ไม่แม้แต่จะส่งเสียงสัญญาณเตือนเมื่อดาต้าพอยน์ผิด ๆ ดังปรากฏขึ้นมันก็ไม่ได้ดีอะไรนัก
jwenting

2
คำตอบของคุณไม่ได้แสดงว่า KLOC ไร้ประโยชน์มันแสดงให้เห็นว่าจะไม่ใช้มันอย่างไร
Neil N

2
มันแสดงให้เห็นว่าการพึ่งพาพวกเขาในฐานะที่เป็นเครื่องวัดความสามารถในการผลิตนั้นขาดความเชื่อมั่นในระยะสั้น ในโครงการอื่น ๆ ที่ใช้ KLOC เป็นเครื่องวัดประสิทธิภาพการผลิตและคุณภาพเราเพิ่มจำนวนตัวเลขได้อย่างง่ายดายด้วยการสร้างมาตรฐานการเข้ารหัสที่ทำให้เกิดการโหลดของบรรทัด (C ++ bracing practice, บรรทัดว่างเปล่าพิเศษพร้อมความคิดเห็นสั้น ๆ ทุกที่โดยแยกเงื่อนไขในคำสั่ง if 3 สาย ฯลฯ )
jwenting

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

2

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

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


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

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

1

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

ตราบใดที่ไม่มีการคอมมิตทำลายบิลด์ ...


1

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

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


1

ฉันมักจะทำงานกับแพคเกจ C ++ ขนาดใหญ่และเมื่อมองหารหัสที่มีปัญหาควรปรับค่าCyclomatic ComplexityหรือFanIn / FanOut ที่น่ากลัวมักจะมีธงสีแดงที่น่าค้นหาอยู่ การแก้ไขปัญหาที่เกิดขึ้นมักจะนำไปสู่การปรับปรุงใน codebase ทั้งหมด

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


1

มีหลายสถานการณ์ในที่ทำงานของฉันที่ฉันใช้การวัดรหัส:

ในขณะที่เขียนรหัส

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

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

ระหว่างการตรวจสอบ QA / Code

สิ่งแรกที่ฉันทำโดยทั่วไปเมื่อทำการตรวจสอบรหัสคือการตรวจสอบความครอบคลุมรหัสของรหัสที่ฉันตรวจทานร่วมกับเครื่องมือครอบคลุมรหัสซึ่งเน้นว่าบรรทัดรหัสใดครอบคลุม นี่ทำให้ฉันมีความคิดทั่วไปว่ารหัสทดสอบนั้นละเอียดมากแค่ไหน ฉันไม่สนใจจริงๆถ้าความคุ้มครองนั้นอยู่ที่ 20% หรือ 100% ตราบใดที่รหัสที่สำคัญได้รับการทดสอบแล้ว ดังนั้นเปอร์เซ็นต์ที่ครอบคลุมค่อนข้างไม่มีความหมาย แต่ 0% แน่ใจว่าโดดเด่นเหมือนนิ้วหัวแม่มือเจ็บเป็นสิ่งที่ฉันต้องการดูอย่างระมัดระวัง

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

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

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

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


0

ถาม: เมตริกที่มีประโยชน์ในการจับภาพสำหรับซอร์สโค้ดคืออะไร

สำหรับธุรกิจ:

A: จำนวนชั่วโมงทำงาน

สำหรับหัวหน้าแผนกของ coder:

ตอบ: ไม่เป็นไร มาทำทุกอย่างกันเถอะ

สำหรับความภาคภูมิใจในตนเองของ coder:

A: จำนวน SLOC (ซอร์สโค้ดของโค้ด)

สำหรับแม่ของ coder:

ตอบ: กินม้วนฝรั่งเศสนุ่ม ๆ เหล่านี้และดื่มชา

ดำเนินการต่อในความคิดเห็นด้านล่าง ...


-1

เตือนความจำ: รหัสทั้งหมดสามารถลดได้อย่างน้อย 1 คำสั่ง รหัสทั้งหมดมีข้อผิดพลาดอย่างน้อย 1 ข้อ ดังนั้นรหัสทั้งหมดสามารถลดลงเป็นคำสั่งเดียวซึ่งไม่ทำงาน หวังว่าจะช่วย!


และมีผลข้างเคียงน้อย

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