จำนวนข้อผิดพลาดเฉลี่ยต่อ loc นั้นเท่ากันสำหรับภาษาการเขียนโปรแกรมที่แตกต่างกันหรือไม่? [ปิด]


45

ฉันได้รับแจ้งว่าจำนวนข้อบกพร่อง / ข้อบกพร่องโดยเฉลี่ยต่อบรรทัดของรหัสคือ "คงที่" สำหรับภาษาการเขียนโปรแกรมที่แตกต่างกัน Ruby ของ KLOC 10 ตัวจะมีจำนวนบั๊กเท่ากับ 10 KLOC ของ c ++ อาร์กิวเมนต์มักจะใช้เพื่อส่งเสริมการใช้ภาษาที่แสดงออก (คิดว่าหลาม / ruby ​​มากกว่า c ++ / แอสเซมบลี) เนื่องจากจำนวนบรรทัดเพื่ออธิบายการทำงานเดียวกันจะมีขนาดเล็กลง

ไม่มีใครทราบว่าข้อเรียกร้องนี้มาจากไหน ภาษาระดับสูงขึ้นนำไปสู่ข้อบกพร่องน้อยลงหรือไม่


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

10
Bugs / LOC เป็นตัวชี้วัดที่ผิดสำหรับทุกสิ่ง มันขึ้นอยู่กับภาษา แต่มันขึ้นอยู่กับโปรแกรมเมอร์เขียน ดังนั้นการหาค่าเฉลี่ยสำหรับภาษาจึงไม่มีเหตุผลเนื่องจากความผันผวนขนาดใหญ่อยู่ในตัวแปรอื่น นี่เป็นเพียง IMO, ofc
K.Steff

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

4
คุณคิดว่า{1≥⍴⍵:⍵⋄e←⍵[?⍴⍵]⋄ (∇(⍵<e)/⍵) , ((⍵=e)/⍵) , ∇(⍵>e)/⍵}มันมีแนวโน้มที่จะมีข้อผิดพลาดint pivot = arr.Count / 2;หรือไม่?
svick

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

คำตอบ:


43

ตรงกันข้ามกับสัญชาตญาณจำนวนข้อผิดพลาดต่อ 1,000 บรรทัดดูเหมือนจะค่อนข้างคงที่โดยไม่คำนึงถึงภาษาเฉพาะที่เกี่ยวข้อง Steve McConnellผู้เขียนโค๊ดสมบูรณ์และการประมาณค่าซอฟต์แวร์: เข้าใจอย่างลึกซึ้งถึงศิลปะสีดำในรายละเอียดบางอย่าง

ฉันไม่มีสำเนาของฉันพร้อมส่ง - พวกเขานั่งอยู่บนชั้นวางหนังสือในที่ทำงาน - แต่ Google อย่างรวดเร็วพบคำพูดที่เกี่ยวข้อง:

ค่าเฉลี่ยอุตสาหกรรม: "ข้อผิดพลาดประมาณ 15 - 50 ข้อต่อรหัสส่ง 1,000 บรรทัด"
(สตีฟ) กล่าวเพิ่มเติมว่านี่มักจะเป็นตัวแทนของรหัสที่มีระดับของการเขียนโปรแกรมที่มีโครงสร้างอยู่ด้านหลัง แต่อาจรวมถึงการผสมผสานของเทคนิคการเข้ารหัส

อ้างอิงจากCode Completeพบได้ที่นี่: http://mayerdan.com/ruby/2012/11/11/bugs-per-line-of-code-ratio/

หากหน่วยความจำทำงานได้อย่างถูกต้องสตีฟจะทำการอภิปรายอย่างละเอียดซึ่งแสดงให้เห็นว่าตัวเลขนั้นมีความคงที่ในภาษาต่างๆ (C, C ++, Java, Assembly และอื่น ๆ ) และแม้จะมีปัญหา (เช่นการกำหนดว่า

ที่สำคัญที่สุดคือเขามีแหล่งอ้างอิงจำนวนมาก - เขาไม่ได้เสนอความคิดเห็นที่ไม่มีเงื่อนไข แต่มีการอ้างอิงเพื่อสำรองข้อมูลเหล่านั้น

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

(นอกเหนือจาก: หากคุณยังไม่มี Code Complete ให้ไปซื้อสำเนาของตัวเองและอ่านอย่างละเอียด - คุ้มค่ากับการลงทุน)

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


4
ยังไม่มีสำเนาของการประมาณค่าซอฟต์แวร์ แต่ใน Code Complete McConnel อ้างถึงรายงาน 1963 ของ Capers Jones "คุณภาพของโปรแกรมและประสิทธิภาพการทำงานของโปรแกรมเมอร์" เป็นแหล่งที่มาของตารางข้อผิดพลาดต่อ LOC ต่อขนาดโครงการ ประเด็นที่ McConnel พยายามทำคือข้อผิดพลาดเพิ่มขึ้นอย่างมากเมื่อขนาดของโครงการเพิ่มขึ้นและบันทึกว่าข้อมูลเป็นเพียง "ภาพรวมของอุตสาหกรรม" และ "ตัวเลขอาจมีความคล้ายคลึงกับโครงการที่คุณทำงานอยู่เล็กน้อย " ฉันไม่เห็นอะไรเลยในนั้นที่เกี่ยวกับคำถามนี้
Roc Martí

Code Complete ฉบับใดที่คุณมี @ RocMartí ฉันรู้ว่ารุ่นที่สองเป็นการอัปเดตที่สำคัญ จะต้องขุดมันออกมาและดูว่ามันบอกอะไรเมื่อฉันไปทำงานวันจันทร์
Bevan

ฉันคิดว่าการแก้ไขของคุณ ( อัปเดต:)เป็นแก่นของปัญหา หรืออย่างที่ Mark Twain กล่าวว่ามีการโกหกสามประเภท: Lies, Damn Lies และสถิติ
GalacticCowboy

1
@ RocMartí "ข้อผิดพลาดเพิ่มขึ้นอย่างมากเมื่อขนาดของโครงการเพิ่มขึ้น" เขายังชี้ให้เห็นว่าน้ำเปียกหรือไม่ แน่นอนว่ามีข้อผิดพลาดเมื่อสิ่งต่าง ๆ มีความซับซ้อนมากขึ้น เพราะการเปลี่ยนแปลงใหม่ทุกครั้งจะต้องจำไว้ทุกชิ้นที่เป็นไปได้ที่อาจได้รับผลกระทบ ซึ่งเติบโตขึ้นเมื่อโครงการเติบโตขึ้น
คู่ปรับ Shot

3
คำพูดไม่ถูกต้องหรือล้าสมัย ในรุ่นที่สองมีอยู่ในหน้า 521: "ประสบการณ์เฉลี่ยอุตสาหกรรมอยู่ที่ประมาณ 1 - 25 ข้อผิดพลาดต่อ 1,000 บรรทัดของรหัสสำหรับซอฟต์แวร์ที่จัดส่งซอฟต์แวร์มักได้รับการพัฒนาโดยใช้เทคนิคผสม"
Aryeh Leib Taurog

18

การอ้างสิทธิ์คือ - ที่ดีที่สุด - ไร้เดียงสา

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

for (i = 0; i < 100; i += 1) printf("hello"); 

ที่นี่เรามี LOC ทางกายภาพหนึ่งแห่ง แต่มีสองตรรกะ ( forและprintfข้อความ) แต่แน่นอนเราสามารถเขียนตัวอย่างเป็น:

for (i = 0; i < 100; i += 1) 
  printf("hello"); 

ซึ่งจะให้เราสอง LOC ทางกายภาพและสอง LOCs ตรรกะ ฉันคิดว่าเป็นที่ชัดเจนว่าการวัด "บั๊กต่อตำแหน่ง" ใด ๆ ที่ขึ้นอยู่กับ LOC ทางกายภาพจะเสียรูปแบบการเขียนโปรแกรมดังนั้นการวัดของเราจะไร้ประโยชน์อย่างมาก

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

แหล่งหนึ่งที่เป็นไปได้สำหรับการอ้างสิทธิ์คือความล้มเหลวของซอฟต์แวร์และความล้มเหลวของซอฟต์แวร์ Les Hatton :

เราสามารถสรุปได้ว่าการเลือกภาษาการเขียนโปรแกรมนั้นเกี่ยวข้องกับความน่าเชื่อถือน้อยที่สุด

หลังจากนั้นกระดาษกล่าวถึงความหนาแน่นข้อบกพร่องที่คล้ายกันสำหรับ C และ C ++:

ในการศึกษาเมื่อเร็ว ๆ นี้เปรียบเทียบสองระบบที่มีขนาดใกล้เคียงกัน (ประมาณ 50,000 บรรทัดต่อหนึ่ง) หนึ่งใน C และอีกหนึ่งใน C ++ ที่ออกแบบโดยวัตถุความหนาแน่นของข้อบกพร่องที่เกิดขึ้นแสดงให้เห็นว่ามีค่าเท่ากับ 2.4 และ 2.9 ต่อ 1,000 บรรทัดตามลำดับ

อย่างไรก็ตามนี่ไม่ได้หมายความว่า "บั๊กต่อ LOC" เป็นค่าคงที่ในภาษาการเขียนโปรแกรมหรือมันจะมีความสำคัญหากเป็นเช่นนั้น


หากคุณคิดว่าข้อบกพร่อง / คำสั่งคงที่ก็มีความแตกต่างสำหรับภาษา ตัวอย่าง C ทั่วไปมีข้อบกพร่องในสำหรับ () และ printf () args หากคุณต้องเขียนโค้ดฟังก์ชั่น printf เต็มคุณจะมีข้อบกพร่องมากขึ้นตามสัดส่วนและหากคุณมีภาษาระดับสูงกว่าด้วยการเรียกใช้ printRepeat () ครั้งเดียวจะมีโอกาสน้อยที่จะทำให้มันผิด
Martin Beckett

2
สรุป: ข้อบกพร่องต่อคำสั่ง / ฟังก์ชั่นจุดคงที่ภาษาระดับต่ำมีโค้ดเพิ่มเติมที่เขียนโดยโปรแกรมเมอร์ที่เข้าใจผิดภาษาระดับสูงที่คุณพิมพ์น้อยลง - ดังนั้นข้อบกพร่องน้อยลง แม้ว่าข้อบกพร่องประเภทการออกแบบที่ไม่ถูกต้องทั้งหมดอาจจะเหมือนกัน!
Martin Beckett

2
นับประสาว่าสิ่งที่ถือเป็น "หนึ่งข้อบกพร่อง" เป็นเรื่องส่วนตัวสูงและข้อบกพร่องนั้นแตกต่างกันอย่างรุนแรงในความรุนแรงผลกระทบและความสำคัญ
tdammers

@ ผู้ส่งอีเมลและความสำคัญนั้นอาจเป็นลบได้ เรามีข้อบกพร่องจำนวนหนึ่งที่ลูกค้าคุ้นเคย / คาดหวัง / ต้องการดังนั้นเราจึงไม่สามารถแก้ไขได้ ...
Izkata

@Izkata: ขึ้นอยู่กับนิยามของข้อบกพร่องของคุณ ...
tdammers

12

การสังเกตนี้เก่ามากและมาจากแหล่งข้อมูลที่น่าเคารพนับถืออย่างมากคือเฟรดบรูคในหนังสือ "The Mythical Man Month" เขาเป็นผู้จัดการอันดับต้น ๆ ของ IBM และจัดการโครงการการเขียนโปรแกรมจำนวนมากรวมถึงระบบปฏิบัติการระบบปฏิบัติการ milions-of-line ในความเป็นจริงเขารายงานว่าจำนวนข้อบกพร่องในโปรแกรมไม่ได้เป็นสัดส่วนกับความยาวของรหัส แต่เป็นกำลังสอง ! จากการวิจัยของเขาพบว่าจำนวนข้อบกพร่องนั้นแปรผันตามความยาวของโปรแกรมต่อกำลัง 1.5 กล่าวอีกนัยหนึ่งโปรแกรมที่มีความยาวมากกว่าสิบเท่าจะมีข้อผิดพลาดมากกว่า 30 เท่า และเขารายงานว่าสิ่งนี้มีอยู่ในทุกภาษาโปรแกรมและระดับของภาษาโปรแกรม


6

ฉันไม่พบ Bugs ต่อ LOC ให้เป็นค่าคงที่สำหรับภาษาใดภาษาหนึ่ง ข้อบกพร่องต่อ LOC ดูเหมือนว่าตัวชี้วัดที่ผู้จัดการบางคนใช้ในการกำหนดคุณภาพของนักพัฒนาเมื่อต้องตรวจสอบเวลา

นอกเหนือจากนี้บางภาษามีแนวโน้มที่จะเกิดข้อผิดพลาดหรือข้อบกพร่องมากกว่าภาษาอื่น ๆ โดยทั่วไป แต่ไม่เสมอไปนี่เป็นภาษาระดับต่ำกว่าภาษาที่สูงกว่า ตัวอย่างเช่นการเขียนโค้ดใน C กับ C # (หรือ Java.) ฉันมักจะพูดเพราะความเป็นจริงของมันและปมของคำตอบที่คุณกำลังมองหาลงมาที่คุณภาพของนักพัฒนาและการเขียนโปรแกรมในสถานที่ ฉันเห็นนักพัฒนา C ที่ดีมากที่มีคุณภาพโค้ดสูงกว่าและนับจำนวนข้อบกพร่องน้อยกว่านักพัฒนา Java / C # โดยเฉลี่ย นี่คือหนึ่งรายการที่แยกนักพัฒนาอาวุโสออกจากรุ่นรอง ไม่ใช่จำนวน LOC ที่พวกเขาเขียนในกรอบเวลาที่กำหนด แต่คุณภาพของรหัสที่เขียนโดยไม่คำนึงถึงภาษา LOC หรือกรอบเวลา

คำตอบเดียวที่ฉันสามารถบอกได้ว่าอาจเกี่ยวข้องกันก็คือยิ่ง LOC ยิ่งมีข้อบกพร่องมากเท่าไหร่ก็ยิ่งมีข้อบกพร่องมากขึ้นเท่านั้น


คำถามของฉันเกี่ยวกับจำนวนข้อบกพร่องโดยเฉลี่ยต่อบรรทัดของโค้ดที่ไม่ขึ้นกับภาษา
Kristian

4
@ คริสเตียนไม่มีหมายเลขดังกล่าว มันเปลี่ยนแปลงต่อบุคคลที่เกี่ยวข้องกับงานและความเชี่ยวชาญของนักพัฒนาและภาษาที่พวกเขากำลังเขียนรหัสฉันไม่คิดว่ามีค่าเฉลี่ยสากล
Akira71

1
@ Akira71 "ไม่มีหมายเลขดังกล่าว" เอาละแน่นอน แต่มีการแจกแจงความน่าจะเป็นซึ่งคุณสามารถแยกตัวเลขได้ นอกจากนี้ยังมีจำนวนไม่กี่นิ้วของฝนตกในป่าฝนอเมซอนทุกปี แต่คุณสามารถหาค่าเฉลี่ยได้
คู่ปรับ Shot

3

ข้อบกพร่องต่อสายของรหัส

Bugs / LOC สัมพันธ์กับบุคคลเท่านั้น สำหรับธุรกิจที่ใช้เครื่องมือติดตามบั๊กที่ลิงก์กับที่เก็บซอร์สโค้ด เป็นไปได้สำหรับผู้จัดการที่จะจัดการปัญหาโดยนักพัฒนาเรียงตามปัญหาที่ผ่านมาและการเปลี่ยนแปลงรหัส

ข้อบกพร่องมีความสัมพันธ์กับงานของคุณ

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

เป็นไปได้อย่างไร?

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

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

ไวยากรณ์ภาษาเป็นสิ่งสำคัญ

ข้อโต้แย้งที่ว่าภาษานั้นมีข้อบกพร่องน้อยกว่าเพราะมันสามารถที่จะประสบความสำเร็จได้มากขึ้นในโค้ดที่น้อยลงนั่นคือตำนานที่สมบูรณ์ ภาษาที่มีโครงสร้างสูงเช่น C ++ / C # / Java บังคับให้นักพัฒนาแสดงชัดเจนในการเขียนสิ่งที่ควรจะเป็นคำสั่งที่เป็นภาษาเช่น Python / PHP ไม่มีโครงสร้างมาก ภาษาเหล่านั้นอนุญาตให้มีการแสดงออกเป็นลายลักษณ์อักษรที่ไม่เพียง แต่จะสร้างความสับสนให้กับนักพัฒนา แต่ยังแยกวิเคราะห์ภาษา

คอมไพเลอร์ลดข้อบกพร่อง

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

อัปเดต 2019:

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


3
คอมไพเลอร์ลดข้อผิดพลาด: ทั้ง Python และ PHP มีเทคนิคในการคอมไพเลอร์พวกเขาไม่ได้ทำการตรวจสอบแบบเดียวกันกับที่ภาษาที่พิมพ์แบบคงที่ทำ ฉันยังไม่เห็นด้วยว่าการตรวจสอบดังกล่าวมีผลอย่างมีนัยสำคัญต่อการนับบั๊กตอนจบเพราะแทบทุกข้อผิดพลาดที่คอมไพเลอร์สามารถจับได้นั้นจะถูกทดสอบน้อยที่สุด
Winston Ewert

3
ตกลงกันว่าข้อบกพร่องที่คอมไพเลอร์สามารถจับได้นั้นโดยทั่วไปจะถูกจับด้วยการทดสอบอัตโนมัติหรือด้วยตนเองตามสมควร ความแตกต่างคือภาษาที่พิมพ์แบบสแตติกให้คุณผ่านการทดสอบครั้งแรก (a) ฟรีและ (b) อย่างรวดเร็วจริงๆ ชุดการทดสอบ Ruby ที่ดีนั้นดีกว่าคอมไพเลอร์ แต่โดยทั่วไปคุณไม่สามารถรันได้อย่างรวดเร็วคุณจะไม่ได้รับฟรีและโดยทั่วไปจะไม่ชี้ไปที่บรรทัดของโค้ดที่ ปัญหา.
Ken Smith

@KenSmith ประเภทสแตติกไม่ฟรี courses.cs.washington.edu/courses/cse590n/10au/…
Hugo Wood

1

FWIW ในประสบการณ์ของฉัน

  1. มีข้อบกพร่องสองชนิด: a) โปรแกรมไม่เป็นไปตามความคาดหวังและ b) โปรแกรมไม่สามารถทำตามความคาดหวังที่สมเหตุสมผลได้เพราะมันทำให้แฮงค์ / แฮงค์ / จะไม่คอมไพล์

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

สิ่งเหล่านี้ (อีกครั้งในประสบการณ์ของฉัน) ไม่ใช่ฟังก์ชั่นของภาษา แต่เป็นทักษะ / วุฒิภาวะของโปรแกรมเมอร์ โปรแกรมที่มีข้อผิดพลาดน้อยกว่านั้นมักจะมีขนาดเล็กกว่ามากในแง่ของ LOC สำหรับชุดการทำงานที่กำหนด

ฉันเคยเห็นระบบที่บางคนเขียนโปรแกรมในขณะที่คนอื่นเขียนไดเรกทอรีและอดีตมักจะ "เพิ่งทำงาน" เมื่อเทียบกับระบบหลัง


1

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


downvote นี้เป็นอย่างไร ดังนั้นกำลังเต็มไปด้วยตัวตลก
codyc4321

0

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

ภาษาระดับสูงขึ้นนำไปสู่ข้อบกพร่องน้อยลงหรือไม่

สิ่งนี้แตกต่างจากบั๊ก / LOC เนื่องจากภาษาระดับสูงทำได้มากกว่าโดยใช้รหัสน้อยกว่า การใช้ความต้องการคุณสมบัติบางอย่างอาจใช้ LISP 500 บรรทัดกับชุด x86 15000 บรรทัด

ดังนั้นแม้ว่า bugs / LOC จะมีค่าคงที่ระหว่างทุกภาษาภาษาระดับสูงจะยังคงให้บั๊กน้อยลง


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