ฉันจะคำนวณปริมาณหนี้ทางเทคนิคที่มีอยู่ในโครงการได้อย่างไร


67

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

หากไม่มีสิ่งเหล่านี้มาก่อนฉันจะสนใจความคิดเกี่ยวกับวิธีเริ่มต้นกับสิ่งนั้น นั่นคือฉันจะหาจำนวนหนี้ทางเทคนิคที่เกิดขึ้นโดยวิธีการคลาสเนมสเปซแอสเซมบลี ฯลฯ ได้อย่างไร

ฉันสนใจที่จะวิเคราะห์และประเมินโค้ด C # มากที่สุด แต่โปรดอย่าลังเลที่จะพูดภาษาอื่นเช่นกัน


12
หนี้ทางเทคนิคมาจากการตัดสินใจไม่ใช่รหัส มันเพิ่มขึ้นเนื่องจากตัวเลือกการจัดการที่ไม่ดี ไม่ชัดเจนว่า "วิธีการคลาสเนมสเปซแอสเซมบลี" ประกอบด้วยหนี้สินทางเทคนิคด้วยตนเอง พวกเขาแสดงถึงความรับผิดเมื่อมีทางเลือกที่ดีกว่า
S.Lott

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

3
"ในตอนนั้นมีหนี้ไหม?" หนี้จำเป็นต้องสะสมคุณพูดถูก แต่มันไม่ใช่รหัส มันเป็นปริมาณของ "งาน" ที่ต้องทำเพื่อยกเลิก ข้อมูลจำเพาะ, การออกแบบ, รหัส, DBA- งานทั้งหมดนี้จะต้องมีการทำใหม่ การวัดหนี้จากสิ่งประดิษฐ์ซอฟต์แวร์ (เช่นซอร์สโค้ดของโค้ด) นั้นคล้ายคลึงกับการคาดการณ์ต้นทุนการพัฒนา
S.Lott

7
การวัดหนี้ทางเทคนิคนั้นยากและทำให้ผู้จัดการสับสน อย่างไรก็ตามฉันสามารถบอกวิธีที่ดีในการต่อสู้กับหนี้ทางเทคนิค: ต้นแบบราคาถูกดีและทำงานได้โดยเฉพาะอย่างยิ่งถ้าฐานรหัสหมุนรอบ GUI ตามที่โจเอลแนะนำไว้ที่นี่: joelonsoftware.com/articles/fog0000000332.htmlใช้เวลาสักครู่ในการทำความสะอาดทุกวัน การเปลี่ยนแปลงจะต้องเป็นการปรับปรุงในเชิงบวกไม่ใช่ "OMG หนี้ทางเทคนิคของเรา = pentablobs และมันเพิ่มขึ้นอย่างทวีคูณในอัตรา ... ท้องฟ้ากำลังลดลง" เพียงใช้เวลาสักครู่ในแต่ละวันกับไคเซ็นในแบบที่ไม่ทำลายสิ่งที่ได้ผล ทำความรู้จักกับเพื่อน.
งาน

6
@ ZoranPavlovic แปลกประหลาดที่ไม่พึงประสงค์และที่ไม่พึงประสงค์ของคุณหายไปเป็นตัวเลือกที่สาม: ฉันต้องการทราบว่ามีเครื่องมือใด ๆ ที่พยายามหาจำนวนหนี้ทางเทคนิคหรือไม่
Erik Dietrich

คำตอบ:


38

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

มีการวัดจำนวนหนึ่งที่อาจทำให้คุณมีข้อบ่งชี้เกี่ยวกับคุณภาพของรหัส:

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

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

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


1
ขณะนี้ฉันใช้ NDepend ( ndepend.com ), การวัด CodeRush และ VS เพื่อติดตามการวัดที่คุณพูดถึง (ยกเว้นการวัด Halstead ซึ่งฉันจะพิจารณาเพิ่มเติม) ฉันคิดว่าฉันอาจใช้การผสมผสานของตัวชี้วัดเหล่านี้เพื่อพยายามใส่ตัวเลขบางอย่างลงในองค์ประกอบของรหัสที่กำหนดซึ่งจะบ่งบอกโดยคร่าวๆว่ามันมีค่าใช้จ่ายเท่าไหร่ในการพัฒนาอย่างต่อเนื่อง
Erik Dietrich

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

2
อีกตัวชี้วัดง่ายๆที่ฉันเพิ่มลงในรายการคือจำนวนสิ่งที่ต้องทำ / HACK / WTF ความคิดเห็นในการ codebase ...
มี.ค.

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

1
@Thomas Owens: เห็นด้วย แต่เกือบทุกตัวชี้วัดสามารถโกงได้ หากใช้อย่างถูกต้องและตรงไปตรงมา "ตัวชี้วัดสิ่งที่ต้องทำ" ให้ภาพรวมราคาถูกว่ารหัสใดที่ขาดหายไปหรือควรเปลี่ยน (= หนี้ที่มองไม่เห็นสำหรับตัวชี้วัดที่ใช้รหัสเท่านั้น)
MaR

23

Sonarมีวิธีแก้ปัญหาหนี้แบบเชิงเทคนิครวมถึงคุณสมบัติอื่น ๆ ที่เป็นประโยชน์ต่อโครงการซอฟต์แวร์

นอกจากนี้ยังรองรับภาษาที่หลากหลาย

SonarQube (เดิมคือSonar ) เป็นแพลตฟอร์มโอเพ่นซอร์สสำหรับการตรวจสอบคุณภาพของโค้ดอย่างต่อเนื่อง ...

  • รองรับ 25+ ภาษา: Java, C / C ++, C #, PHP, Flex, Groovy, JavaScript, Python, PL / SQL, COBOL, ฯลฯ
  • SonarQube ยังใช้ใน Android Deveopment
  • เสนอรายงานเกี่ยวกับรหัสที่ซ้ำกันมาตรฐานการเข้ารหัสการทดสอบหน่วยการครอบคลุมโค้ดรหัสที่ซับซ้อนข้อบกพร่องที่อาจเกิดขึ้นข้อคิดเห็นและการออกแบบและสถาปัตยกรรม
  • ไทม์แมชชีนและมุมมองต่าง
  • การวิเคราะห์อัตโนมัติอย่างสมบูรณ์: รวมเข้ากับเครื่องมือการรวม Maven, Ant, Gradle และต่อเนื่อง (Atlassian Bamboo, Jenkins, Hudson, ฯลฯ )
  • รวมเข้ากับสภาพแวดล้อมการพัฒนา Eclipse
  • รวมเข้ากับเครื่องมือภายนอก: JIRA, Mantis, LDAP, Fortify, ฯลฯ
  • ขยายได้ด้วยการใช้ปลั๊กอิน
  • ใช้ วิธีการSQALEเพื่อคำนวณหนี้ทางเทคนิค ...

1
เจ๋งขอบคุณ! ฉันมีและใช้ NDepend สำหรับงาน C # ของฉัน แต่ฉันก็ทำงาน Java เล็กน้อยและสนใจในตัวชี้วัดที่นั่นเช่นกัน อย่างน้อยที่สุดสิ่งนี้ทำให้ฉันมีฟังก์ชั่นสำหรับ Java และมันอาจกลายเป็นส่วนเสริมที่ดีสำหรับ NDepend
Erik Dietrich

เยี่ยมมากเราใช้ Sonar ในที่ที่ฉันทำงานและมันก็ทำสิ่งที่ดีมาก ๆ ที่ทำให้คุณเข้าใจถึงสถานะของ codebase ของคุณ
Robert Greiner

2
@ErikDietrich, FYI Sonar มีปลั๊กอิน C #ด้วย
PéterTörök

@ErikDietrich FYI ตอนนี้มีปลั๊กอิน NDepend สำหรับ Sonar ndepend.com/docs/sonarqube-integration-ndepend
Patrick Smacchia - NDepend dev

มีทางเลือกโอเพนซอร์สหรือไม่
hellboy

5

ฉันเกลียดที่จะใช้การเปรียบเทียบจากการเงิน แต่ดูเหมือนว่าเหมาะสมจริงๆ เมื่อคุณกำหนดราคาบางอย่าง (สินทรัพย์ทุกประเภท) ก็สามารถมีทั้งมูลค่าที่แท้จริงและภายนอก ในกรณีนี้รหัสที่มีอยู่มีค่าที่แท้จริงซึ่งจะเป็นปริมาณที่สอดคล้องกับคุณภาพสัมพัทธ์ของรหัสดังกล่าวและมันก็จะมีมูลค่าภายนอก (มูลค่าจากสิ่งที่สามารถทำได้กับรหัส) และปริมาณเหล่านั้นจะเป็นสารเติมแต่ง มูลค่าที่แท้จริงสามารถแบ่งออกเป็นเครดิตและเดบิต (ดีกับไม่ดี) โดยใช้วิธีการใด ๆ ที่คุณใช้ในการให้คะแนนรหัส (+5 สำหรับความคิดเห็น / อ่านง่าย -10 สำหรับความคุ้มครองรหัส ฯลฯ )

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

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


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

5

ในระหว่างนักพัฒนาตัวชี้วัดความน่าเชื่อถือของตราสารหนี้อย่างเป็นธรรมทางเทคนิคดูเหมือนจะWTFs / นาที

ปัญหาของ "ตัวชี้วัด" นี้คือโดยทั่วไปแล้วมันค่อนข้างยากที่จะสื่อสาร "ภายนอก"

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

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

  • มันง่ายกว่ามากที่จะระบุว่าใช้เวลาทั้งหมด 3 สัปดาห์ในการใช้คุณสมบัติ Aมากกว่าที่
     
    ฉันใช้เวลา 14 ชั่วโมงในการใช้งานคุณลักษณะของร่าง A จากนั้น 29 ชั่วโมงในการทดสอบควันจากนั้น 11 ชั่วโมงในการใช้การแก้ไขปัญหา การใช้งานคุณสมบัติพร้อม หลังจากนั้นกลุ่มควบคุมคุณภาพใช้เวลา 17 ชั่วโมงในการทดสอบการเปิดตัวผู้สมัครครั้งแรก หลังจากนั้นฉันใช้เวลา 13 ชั่วโมงในการวิเคราะห์ข้อบกพร่องที่ส่งโดย QA สำหรับการเปิดตัวครั้งแรกและ 3 ชั่วโมงในการใช้การแก้ไข หลังจากนั้นฉันใช้เวลา 11 ชั่วโมงในการทดสอบควันการเปลี่ยนแปลงที่ฉันทำกับการเปิดตัวผู้สมัครครั้งแรก หลังจากนั้น...

ข้อมูลเกี่ยวกับการทดสอบและแก้ไขข้อผิดพลาดนั้นค่อนข้างง่ายในการสื่อสารในประสบการณ์ของฉัน

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


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

หากมีความเสี่ยงที่ข้อมูลจะถูกตีความผิดในลักษณะนั้นจะช่วยให้มีข้อมูลอ้างอิงเพิ่มเติมในบางสิ่งที่น้อยกว่าที่จะเปรียบเทียบกับWTF

  • บอกว่าถ้ามีสองส่วนที่คล้ายกัน / การใช้งานที่ดูแลโดยนักพัฒนาเดียวกัน (s), ครั้งแรกที่ปล่อย "อัตราการเสีย" ประมาณ 50% และครั้งที่สองที่ 80-90 ทำให้เป็นกรณีที่แข็งแกร่งสวยในความโปรดปรานของนี้สองเรื่องความเป็นอยู่ของหนี้ทางเทคนิค

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

ด้วยผู้ทดสอบคุณจะได้รับบางคนสำรองความเข้าใจในประเด็นการออกแบบ เมื่อมีนักพัฒนาเท่านั้นบ่นเกี่ยวกับคุณภาพของรหัสนี้มักจะเสียงเหมือนWTFs อัตนัยจากด้านหลังประตูที่ปิด
 
แต่เมื่อสิ่งนี้สะท้อนโดยคนงาน QA ที่พูดว่าcomponent Aมีข้อผิดพลาดในการถดถอย 100 รายการสำหรับคุณสมบัติใหม่ 10 รายการซึ่งต่างจากcomponent Bที่มีข้อผิดพลาดในการถดถอย 10 รายการต่อคุณสมบัติใหม่ 20 รายการการสื่อสารกลายเป็นเกมอีกเกมหนึ่งทั้งหมด


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

4

ฉันคิดว่าคำถามคือราคาเท่าไหร่ในการ "ซื้อคืน" หนี้ทางเทคนิคของคุณ - นั่นคือมันต้องใช้เงินเท่าไหร่ในการแก้ไข? ก็ขึ้นอยู่กับทีมที่จะคิดออก

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

หากคุณไม่ได้ทะเลาะกันฉันจะยึดมั่นในหลักฐานของฉัน - หนี้ทางเทคนิคควรถูกวัดด้วยต้นทุนของการรักษา


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

1
@Erik Dietrich - ดีทีนั้นเป็นการเพิ่มความซับซ้อนให้กับโซลูชันอย่างแน่นอน ความยากลำบากอาจเป็นไปได้ว่าการแก้ไขชิ้นทีดีทีอาจมีราคาแพงกว่าโซลูชันขายส่ง ดังนั้นอาจเป็นไปได้ว่าคุณมีเรื่องราว 3 เรื่องที่จะถูกจัดอันดับในระดับละ 5 ถ้า TD ถูกกำจัด แต่มี 8 เรื่องที่มีหนี้อยู่ - ดังนั้นจึงเพิ่ม TD ได้ถึง 9 คะแนน ภารกิจในการแก้ไขปัญหา TD โดยรวม (โดยไม่คำนึงถึงเรื่องราว) อาจเป็น 8 ดังนั้นคุณสามารถยืนยันว่าโซลูชันการขายส่งมีค่าใช้จ่ายน้อยกว่า (8) น้อยกว่าทีละน้อย (9) นี่จะเป็นส่วนหนึ่งของการเจรจา
Matthew Flynn

นั่นทำให้รู้สึก และแน่นอนสิ่งที่ฉันกำลังมองหาที่จะทำคือ (ค่อนข้าง) กรณีวัตถุประสงค์ที่จะพูดอะไรบางอย่างเช่น "ในหนึ่งปีเราสามารถพัฒนาคุณสมบัติใหม่ X ถ้าเราเพิ่งไถหน้า แต่ X + Y คุณสมบัติใหม่ถ้าเรา ชำระหนี้ทางเทคนิคบางส่วนนี้ "
Erik Dietrich

2

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


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

2

นี่คือ Webinar จาก MIT ที่อธิบายการวิจัยเกี่ยวกับหนี้ทางเทคนิคในระบบซอฟต์แวร์ขนาดใหญ่: http://sdm.mit.edu/news/news_articles/webinar_050613/sturtevant-webinar-technical-debt.html

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

งานที่อธิบายไว้ในการสัมมนาผ่านเว็บสร้างจากการวิจัยแบบแยกส่วนที่ทำโดย Alan MacCormack และ Carliss Baldwin ที่ Harvard Business School ฉันจะดูเอกสารของพวกเขาเช่นกัน 'ต้นทุนการแพร่กระจาย' ของพวกเขาอาจเป็นสิ่งที่คุณกำลังมองหา


1

ฉันว่าตัวชี้วัดรหัสมาตรฐานสามารถใช้เป็นมุมมองญาติระดับสูงของหนี้ทางเทคนิค VS Ultimate มีตัววิเคราะห์รหัสที่จะให้ "ดัชนีการบำรุงรักษา" แก่คุณตามความซับซ้อนของวัฏจักร, ข้อต่อ, LoC และความลึกของการสืบทอด คุณสามารถดำดิ่งลงไปในจุดที่มีปัญหาและดูรายละเอียด (ลงไปที่ระดับฟังก์ชั่น) ฉันวิ่งไปที่โครงการของฉันและคะแนนต่ำสุดที่เราได้รับคือ 69 ในแพ็คเกจข้อมูลของเรา (การกำหนดค่าและการเริ่มต้น EF) และชุดทดสอบของเรา อย่างอื่น 90 หรือมากกว่านั้น มีเครื่องมืออื่น ๆ ที่จะช่วยให้คุณมีตัวชี้วัดเพิ่มเติมเช่นที่กล่าวถึงในPPPของ Uncle Bob


ดังนั้นสมมติว่าคุณมีบางอย่างที่ไม่ได้อยู่ในชุดทดสอบหรือแพ็คเกจข้อมูลที่มีคะแนนต่ำกว่า 90 คุณมีเกณฑ์ตัวเลขที่คุณบอกว่า "ไม่เป็นไรมันไม่ดีพอและเราจะสร้างใหม่" หรือคุณใช้ข้อมูลนี้เพื่อทำให้คดีแก่ฝ่ายบริหารหรือผู้มีส่วนได้เสียที่จำเป็นต้องทำการปรับโครงสร้างใหม่หรือไม่? นั่นคือผู้จัดการ / ผู้มีส่วนได้เสียสนใจเกี่ยวกับดัชนีการบำรุงรักษาของ Microsoft หรือคุณนำเสนอข้อมูลนั้นด้วยวิธีอื่นหรือไม่? หรือคุณไม่เพียงแค่นำเสนอและแก้ไขปัญหาด้วยตัวเองอย่างเงียบ ๆ หรือไม่?
Erik Dietrich

ฉันรักคำถามนั้น คำตอบของฉันคือการเขียนรหัสที่ดีที่สุดที่คุณสามารถไม่ใช่สิ่งที่คุณขออนุญาตทำ ฉันใช้สิ่งที่ลุงบ๊อบเรียกว่า "กฎ boyscout" (มักปล่อยให้รหัสอยู่ในสภาพที่ดีกว่าเมื่อคุณมาถึง) และฉันเรียกการปรับโครงสร้างแบบฉวยโอกาส แนวคิดก็คือเมื่อคุณต้องแก้ไขโค้ดที่มีอยู่ใช้เวลาในการ a) ครอบคลุมในการทดสอบหน่วย b) refactor ให้สะอาด Michael Feathers ทำงานอย่างมีประสิทธิภาพด้วยรหัสมรดกให้คำแนะนำในการทำเช่นนี้
Michael Brown

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

หมายเหตุฉันไม่ได้ดำน้ำในและทำความสะอาดโค้ด ฉันบอกว่าจะล้างรหัสที่คุณทำงานอยู่แล้วฉันยังทำงานกับรหัสที่มีการควบคุมสูง (รับรายการงานต้องมีรายการของการเปลี่ยนแปลงที่ทำเพื่อจัดการกับรายการงานเพื่อขออนุมัติดำเนินการเปลี่ยนแปลงที่อนุมัติ ) 9/10 ครั้งที่อธิบายการเปลี่ยนโครงสร้างในคำขอเปลี่ยนแปลงจะส่งผลให้ได้รับการอนุมัติ
Michael Brown

0

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


2
จากมุมมองทางการเมืองที่แท้จริงฉันขอยืนยันว่าคนส่วนใหญ่เต็มใจที่จะได้รับความเลวร้ายในระยะยาวสำหรับผลระยะสั้นอาจเป็นไปได้ว่าคนส่วนใหญ่มีแนวโน้มที่จะบันทึกการตัดสินใจของพวกเขา ดังนั้นฉันเห็นด้วยกับความคิดของคุณในทางทฤษฎี แต่ฉันคิดว่าอนุกรม "ผู้ขอความช่วยเหลือ" จะเป็นไปได้น้อยที่สุดที่จะติดตามความสมดุลของความโปรดปราน
Erik Dietrich

@ErikDietrich - ฉันเห็นด้วย และผู้ที่กระทำผิดต่อเนื่องที่เลวร้ายยิ่งไม่รู้ว่าพวกเขากำลังเพิ่มหนี้ของพวกเขา (คล้ายกับบัตรเครดิตที่แย่ที่สุดในการจัดอันดับเครดิต) แต่จุดเริ่มต้นสันนิษฐานว่าความต้องการในการหาปริมาณและมันยากสำหรับผู้ที่ไม่ใช่นักเขียนที่จะหาจำนวน คุณไม่รู้ว่าคนเซ่ออยู่ที่ไหนถ้าไม่ใช่สุนัขของคุณหรือคุณเกิดขึ้นกับมัน
MathAttack

0

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

คุณคิดยังไง? มีความสุขที่จะตอบคำถามใด ๆ และอยากฟังความคิดเห็นของคุณ :)

การเป็นเจ้าของเพื่อป้องกันข้อบกพร่อง & หนี้เทคโนโลยีที่ไม่พึงประสงค์

ความเป็นเจ้าของเป็นตัวบ่งชี้ชั้นนำของสุขภาพทางวิศวกรรม

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

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

นี้จะค่อนข้างคล้ายคลึงกับโศกนาฏกรรมของสาธารณสมบัติ

การทำงานร่วมกันเพื่อปรับปรุงสถาปัตยกรรม

การทำงานร่วมกันเป็นตัวบ่งชี้ต่อท้ายของส่วนประกอบที่กำหนดไว้อย่างดี

การทำงานร่วมกันและการมีเพศสัมพันธ์ได้รับการยอมรับมานานแล้วว่าเป็นแนวคิดที่สำคัญที่จะมุ่งเน้นเมื่อออกแบบซอฟต์แวร์

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

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

Churn เพื่อระบุพื้นที่ปัญหา

Churn (กิจกรรมซ้ำ ๆ ) ช่วยระบุและจัดลำดับพื้นที่ที่สุกงอมสำหรับการปรับโครงสร้างใหม่ในระบบที่กำลังเติบโต

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

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

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


-1

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

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