คืนดีกฎลูกเสือและการปรับโครงสร้างใหม่โดยมีการตรวจทานโค้ด


55

ฉันเป็นผู้ศรัทธาที่ยิ่งใหญ่ในกฎลูกเสือ :

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

ฉันยังเป็นผู้เชื่อที่ยอดเยี่ยมในแนวคิดที่เกี่ยวข้องกับการปรับโครงสร้างแบบฉวยโอกาส :

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

ข้อความที่ตัดตอนมาต่อไปนี้โดยเฉพาะอย่างยิ่งจากบทความ refactoring:

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

ที่ที่ฉันทำงานมีการพัฒนาวิธีปฏิบัติหนึ่งที่ทำให้เกิดการเสียดทานอย่างหนัก - Code Review (CR) เมื่อใดก็ตามที่ฉันเปลี่ยนแปลงสิ่งใดก็ตามที่ไม่อยู่ในขอบเขตของ "การมอบหมาย" ของฉันฉันกำลังถูกตำหนิโดยผู้ตรวจสอบของฉันว่าฉันกำลังทำการเปลี่ยนแปลงให้ยากขึ้น นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งเมื่อมีการ refactoring เนื่องจากทำให้การเปรียบเทียบแบบ "ต่อบรรทัด" เป็นเรื่องยาก วิธีการนี้เป็นมาตรฐานที่นี่ซึ่งหมายถึงการปรับโครงสร้างแบบฉวยโอกาสเกิดขึ้นได้ยากและต้องมีการปรับโครงสร้างใหม่ "ตามแผน" (ซึ่งมักจะน้อยเกินไปสายเกินไป) หากเกิดขึ้นจริง

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

(1) ส่วนใหญ่คุณจะตระหนักถึงสิ่งที่และวิธีที่คุณต้องการ refactor เมื่อคุณอยู่ในระหว่างการมอบหมายของคุณ อย่างที่ Martin Fowler กล่าวไว้

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

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

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

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

มีความคิดเกี่ยวกับวิธีที่ฉันจะแก้ไขสถานการณ์นี้ได้อย่างไร


40
ฉันรู้สึกไม่สบายใจที่ทำงานในสถานที่ที่your manager doesn't want you to "waste your time" on refactoring
Daenyth

19
นอกจากจะมี CRs หลายจุดสำคัญคือการที่แต่ละกระทำควรจะเป็นสำหรับวัตถุประสงค์เดียว: หนึ่งสำหรับ refactor หนึ่งสำหรับความต้องการ / ข้อผิดพลาด / ฯลฯ ด้วยวิธีนี้การตรวจสอบสามารถแยกความแตกต่างระหว่าง refactor และการเปลี่ยนแปลงรหัสที่ร้องขอ ฉันก็จะเถียงว่าผู้ทำ Refactor ควรจะทำก็ต่อเมื่อมีการทดสอบหน่วยในสถานที่ที่พิสูจน์ว่า Refactor ของคุณไม่ทำลายอะไรเลย (ลุงบ๊อบเห็นด้วย)

2
@ t0x1n ฉันไม่เห็นว่าเป็นสิ่งที่แตกต่าง
Daenyth

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

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

คำตอบ:


18

ตกลงดังนั้นตอนนี้มีสิ่งต่าง ๆ ที่นี่มากกว่าเหมาะสำหรับความคิดเห็น

TL; DR

สัญชาตญาณของคุณเกี่ยวกับสิ่งที่คุณควรทำ (refactoring ตามที่คุณไป) ถูกต้อง

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

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


ปัญหาเวิร์กโฟลว์ / สำนักงานการเมือง

ฉันจะทำตามคำแนะนำเดียวกับ GlenH7 ที่คุณสร้างสองคอมมิชชัน - อันที่มีเพียงการรีแฟคเตอร์และ (ไม่ชัดเจนหรือชัดเจน) ไม่มีการเปลี่ยนแปลงการใช้งาน

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


ปัญหา VCS

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

  1. หากคุณใช้คอมไพล์คุณมีเครื่องมือที่ยอดเยี่ยมสำหรับเรื่องนี้

    • คุณสามารถใช้git add -iสำหรับการจัดเตรียมแบบโต้ตอบจากบรรทัดคำสั่ง
    • คุณสามารถใช้git guiและเลือกแต่ละ hunks และบรรทัดไปยังสเตจ (นี่เป็นหนึ่งในเครื่องมือ GUI ที่เกี่ยวข้องกับ VCS ไม่กี่อันที่จริง ๆ แล้วฉันชอบที่จะใช้บรรทัดคำสั่ง
    • คุณสามารถทำคอมมิทเล็ก ๆ ได้หลายอย่าง (การเปลี่ยนแปลงเดี่ยว ๆ หรือแก้ไขบั๊กประเภทเดียวกันในหลาย ๆ ที่) จากนั้นเรียงลำดับใหม่รวมเข้าด้วยกันหรือแยกพวกมันด้วย rebase -i
  2. หากคุณไม่ได้ใช้คอมไพล์ VCS ของคุณอาจยังมีเครื่องมือสำหรับสิ่งนี้ แต่ฉันไม่สามารถให้คำแนะนำได้โดยไม่ทราบว่าคุณใช้ระบบใด

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

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

    1. ทำการเปลี่ยนแปลงทดสอบและอื่น ๆ ทั้งหมดของคุณ
    2. ใช้diffเพื่อสร้างไฟล์แพทช์ (บริบทหรือรวม) กับการเปลี่ยนแปลงทั้งหมดตั้งแต่การส่งครั้งล่าสุด
    3. พาร์ทิชันที่เป็นสองไฟล์: คุณจะจบลงด้วยไฟล์ patch หนึ่งไฟล์ที่มี refactorings และอีกหนึ่งไฟล์ที่มีการเปลี่ยนแปลงการทำงาน
      • สิ่งนี้ไม่สำคัญเลยทีเดียว - เครื่องมือเช่นโหมด emacs diff อาจช่วยได้
    4. สำรองทุกอย่างขึ้น
    5. ย้อนกลับไปสู่การคอมมิชชันล่าสุดใช้patchเพื่อเล่นไฟล์แพตช์ไฟล์หนึ่งไฟล์คอมมิตการเปลี่ยนแปลงเหล่านั้น
      • NB หากแพทช์ไม่ได้ใช้อย่างหมดจดคุณอาจต้องแก้ไข hunks ที่ล้มเหลวด้วยตนเอง
    6. ทำซ้ำ 5 สำหรับไฟล์แพตช์ที่สอง

ตอนนี้คุณมีข้อผูกพันสองข้อโดยมีการเปลี่ยนแปลงการแบ่งพาร์ติชั่นอย่างเหมาะสม

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


ฉันไม่แน่ใจว่าฉันทำตาม - bullet 3.3 ถือว่าการเปลี่ยนการตั้งค่าใหม่และการทำงานมีอยู่ในไฟล์ที่แตกต่างกันหรือไม่? ไม่ว่าจะด้วยวิธีใดก็ตาม บางทีการคั่นด้วยเส้นมีเหตุผลมากกว่า แต่ฉันไม่คิดว่าเรามีเครื่องมือสำหรับเรื่องนี้ใน CVS (TFS) ของเรา ไม่ว่าในกรณีใดก็ตามมันจะไม่ทำงานสำหรับ refactorings (ส่วนใหญ่?) จำนวนมากที่การเปลี่ยนแปลงการทำงานขึ้นอยู่กับการเปลี่ยนแปลงของ refactored ตัวอย่างเช่นสมมติว่าฉัน refactor method Foo (ซึ่งฉันต้องการใช้เป็นส่วนหนึ่งของการเปลี่ยนแปลงการทำงานของฉัน) เพื่อรับพารามิเตอร์ 3 ตัวแทนที่จะเป็น 2 ตอนนี้ Imy functional code อาศัยรหัส refactor แม้การแยกตามบรรทัดจะไม่ช่วยอะไรเลย
t0x1n

1
บรรทัดที่แตกต่างกันในไฟล์เดียวกันนั้นใช้ได้ในเวิร์กโฟลว์ที่กำหนด และเมื่อการกระทำทั้งสองนั้นเป็นไปตามลำดับมันก็โอเคอย่างสมบูรณ์แบบสำหรับการกระทำที่สอง (หน้าที่) ที่ต้องพึ่งพาสิ่งแรก โอ้และ TFS2013 ถูกกล่าวหาว่าสนับสนุน git
ไร้ประโยชน์

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

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

1
ใช่ความเข้าใจของคุณถูกต้องคุณจะได้รับสองครั้งต่อเนื่อง (หน้าที่) ขึ้นอยู่กับลำดับแรก (refactoring) เวิร์กโฟลว์ diff / patch ที่อธิบายไว้ข้างต้นเป็นวิธีการในการทำสิ่งนี้อย่างแม่นยำโดยไม่ต้องลบการเปลี่ยนแปลงด้วยตนเองจากนั้นเขียนใหม่อีกครั้ง
ไร้ประโยชน์

29

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

มีความคิดเห็นเกี่ยวกับวิธีการแก้ไขสถานการณ์นี้อย่างไร

ทำสิ่งที่คุณทำต่อไปหรือไม่

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

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

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


5
ใช่ CRs มีขนาดใหญ่และเป็นทางการ การเปลี่ยนแปลงจะถูก CRed ออกจากระบบจากนั้นส่งไปยังคิว ควรมีการเพิ่มการเปลี่ยนแปลงเล็กน้อยเนื่องจากการวนซ้ำไปยัง CR ที่กำลังดำเนินอยู่แทนที่จะคอมมิตแยกต่างหาก WRT อย่างต่อเนื่องสิ่งที่ฉันทำที่แน่นอนอาจได้รับประโยชน์กลุ่ม แต่ผมเกรงว่ามันจะไม่ได้รับประโยชน์ผม คนที่ฉัน "ไม่สะดวก" อาจเป็นคนเดียวกันที่จะให้คะแนนฉันในการตรวจสอบรายปี ปัญหาเกี่ยวกับการเปลี่ยนวัฒนธรรมคือหัวหน้าใหญ่เชื่อในมัน บางทีฉันอาจจำเป็นต้องได้รับความเคารพในสายตาของพวกเขาก่อนที่จะลองทำสิ่งเหล่านั้น ...
t0x1n

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

ขอบคุณที่เป็นคนซื่อสัตย์ แน่นอนมันเป็นสิ่งที่พิจารณา
t0x1n

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

1
@ SeanPerry เห็นด้วย - แต่ฉันกำลังพูดถึงสถานการณ์ปกติที่มีการทดสอบอยู่จะทำการ
bash

14

ฉันมีความเห็นอกเห็นใจต่อสถานการณ์ของคุณมากมาย แต่มีข้อเสนอแนะที่เป็นรูปธรรมน้อย หากไม่มีอะไรอื่นฉันอาจจะโน้มน้าวให้คุณรู้ว่าสถานการณ์เลวร้ายมันอาจเลวร้ายลง มันอาจจะแย่กว่านั้น :-)

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

รีวิวรหัส

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

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

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

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

  1. เครื่องมือที่คุณใช้มีแนวโน้มที่จะมุ่งเน้นรีวิวรหัสในบางวิธี นี่อาจเป็นปัญหา คณะกรรมการตรวจสอบช่วยให้คุณมีความแตกต่างทีละบรรทัดสีสันสดใสและช่วยให้คุณสามารถแนบความคิดเห็นกับบรรทัด สิ่งนี้ทำให้นักพัฒนาซอฟต์แวร์ส่วนใหญ่ไม่สนใจบรรทัดทั้งหมดที่ไม่เปลี่ยนแปลง ไม่เป็นไรสำหรับการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ มันไม่ดีนักสำหรับการเปลี่ยนแปลงครั้งใหญ่โค้ดใหม่ขนาดใหญ่หรือรหัสที่มีฟังก์ชั่นการเปลี่ยนชื่อ 500 รายการรวมกับฟังก์ชั่นใหม่ 10 บรรทัด
  2. แม้ว่าเราจะอยู่ในฐานรหัสเก่าที่ป่วยซึ่งส่วนใหญ่ไม่เคยได้รับการตรวจสอบมาก่อนมันกลายเป็น "ไม่สุภาพ" สำหรับผู้ตรวจสอบที่จะแสดงความคิดเห็นในสิ่งที่ไม่ใช่สายการเปลี่ยนแปลงแม้จะชี้ให้เห็นข้อผิดพลาดที่ชัดเจน "อย่ารบกวนฉันนี่เป็นสิ่งสำคัญในการเช็คอินและฉันไม่มีเวลาแก้ไขข้อบกพร่อง"
  3. เลือกซื้อคำวิจารณ์ที่ "ง่าย" บางคนจะดูบทวิจารณ์ 10 ไฟล์โดยมีบรรทัดที่เปลี่ยนไป 2000 บรรทัดเป็นเวลา 3 นาทีแล้วคลิก "จัดส่ง!" ทุกคนเรียนรู้ได้อย่างรวดเร็วว่าคนเหล่านั้นคือใคร หากคุณไม่ต้องการให้โค้ดของคุณถูกตรวจสอบตั้งแต่แรกให้ส่งไปยังผู้ตรวจสอบที่ "ง่าย" คุณเช็คอินจะไม่ช้าลง คุณสามารถคืนความโปรดปรานโดยกลายเป็นผู้ตรวจทาน "ง่าย" สำหรับรหัสของเขา
  4. หากคุณไม่ชอบบทวิจารณ์โค้ดเพียงเพิกเฉยต่ออีเมลที่คุณได้รับจาก Review Board ละเว้นการติดตามจากสมาชิกในทีมของคุณ เป็นเวลาหลายสัปดาห์ จนกว่าคุณจะมีบทวิจารณ์ที่เปิดอยู่ 3 โหลในคิวของคุณและชื่อของคุณจะปรากฏในการประชุมกลุ่มสองสามครั้ง จากนั้นเป็นผู้ตรวจสอบที่ "ง่าย" และล้างคำวิจารณ์ทั้งหมดของคุณก่อนอาหารกลางวัน
  5. หลีกเลี่ยงการส่งรหัสของคุณไปยังผู้ตรวจทาน "ยาก" (ประเภทนักพัฒนาที่จะถามหรือตอบคำถามเช่นนี้) ทุกคนจะเรียนรู้ได้อย่างรวดเร็วว่าใครเป็นคนวิจารณ์ "ยาก" เช่นเดียวกับที่พวกเขาเรียนรู้สิ่งที่ง่าย หากบทวิจารณ์โค้ดเป็นของเสียเวลา (™) จากนั้นอ่านคำติชมโดยละเอียดเกี่ยวกับรหัสที่คุณเป็นเจ้าของเป็นทั้งของเสียเวลา (™) และดูถูก
  6. เมื่อความคิดเห็นเกี่ยวกับโค้ดนั้นเจ็บปวดผู้คนจะนำออกมาและเขียนรหัสต่อไป คุณจะได้รับความคิดเห็นเกี่ยวกับรหัสน้อยลง แต่ทุกคนมีขนาดใหญ่ คุณต้องการบทวิจารณ์โค้ดที่น้อยลงซึ่งหมายความว่าทีมต้องการทราบวิธีทำให้พวกเขาเจ็บปวดที่สุด

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

refactoring

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

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

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

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

1
" อาจจะเลวร้ายอาจจะ Rainin'.. " เมื่อฉันอ่านย่อหน้าสุดท้ายของคุณ (จุดที่สอง # 4) ผมคิดว่าพวกเขาจำเป็นต้องมีการตรวจสอบมากขึ้นcoderตรวจสอบ และ refactoring บางอย่างเช่นใน: "yourSalary = 0"

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

13

ทำไมคุณไม่ทำทั้งสองอย่าง แต่แยกกันทำ?

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

แต่ถ้าคุณเห็นปัญหาที่เห็นได้ชัดจำนวนหนึ่งมีสองตัวเลือกที่คุณสามารถติดตามได้

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

  2. หากการตรวจสอบโค้ดมีปัญหาที่ต้องแก้ไขให้ขอให้ผู้พัฒนาทำการปรับโครงสร้างใหม่ตามคำแนะนำของ Resharper


ฉันรวบรวมจากคำตอบของคุณที่คุณเชื่อในการเป็นเจ้าของรหัสที่แข็งแกร่ง ผมแนะนำให้คุณอ่านความคิดของฟาวเลอร์เกี่ยวกับเหตุผลที่มันเป็นความคิดที่ดี: martinfowler.com/bliki/CodeOwnership.html เพื่อกล่าวถึงประเด็นของคุณโดยเฉพาะ: (1) เป็นตำนานที่เกิดขึ้นในขณะที่คุณกำลังทำการเปลี่ยนแปลง - ไม่ว่าจะก่อนหรือหลังในรูปแบบที่สะอาดและไม่เกี่ยวข้องซึ่งแยกจากกัน (2) กับ devs ส่วนใหญ่จะไม่เกิดขึ้น ไม่เคย นักพัฒนาซอฟต์แวร์ส่วนใหญ่ไม่สนใจสิ่งเหล่านี้มากนักเมื่อมาจากคนอื่นที่ไม่ใช่ผู้จัดการของพวกเขา พวกเขามีสิ่งที่ตัวเองต้องการทำ
t0x1n

8
@ t0x1n: หากผู้จัดการของคุณไม่สนใจเกี่ยวกับการปรับโครงสร้างใหม่และเพื่อนร่วมงานของคุณไม่สนใจเกี่ยวกับการเปลี่ยนโฉมหน้า ... จากนั้น บริษัท ก็จะค่อยๆจมลง วิ่งหนีไป! :)
logc

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

2
@ t0x1n - ฉันจำไม่ได้ว่าพูดอะไรเกี่ยวกับการเป็นเจ้าของรหัสที่แข็งแกร่ง คำตอบของฉันคือรักษาบทบาทของคุณในฐานะนักวิจารณ์ หากผู้ตรวจทานแนะนำการเปลี่ยนแปลงแสดงว่าพวกเขาไม่ได้เป็นเพียงผู้ตรวจทานอีกต่อไป

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

7

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

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

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

นอกจากนี้สมมติว่าคุณกำลังทำ TDD หรือ refactor สีเขียวสีเขียวบางรูปแบบวิธีหนึ่งที่จะทำให้แน่ใจว่าคุณได้รับการมีส่วนร่วมจากเพื่อนของคุณคือการใช้เทคนิคการจับคู่ปิงปอง เพียงอธิบายว่าไดรเวอร์ถูกหมุนสำหรับแต่ละขั้นตอนของวงจร RGR คือคู่ที่ 1 เขียนการทดสอบที่ล้มเหลวคู่ที่ 2 แก้ไขมันคู่ refactors 1 คู่ที่ 2 เขียนการทดสอบที่ล้มเหลว .... และอื่น ๆ


คะแนนที่ยอดเยี่ยม น่าเสียดายที่ฉันสงสัยอย่างจริงใจว่าฉันจะสามารถเปลี่ยน "ระบบ" ได้ บางครั้งผู้ตรวจสอบอาจมาจากเขตเวลาและสถานที่ทางภูมิศาสตร์ที่แตกต่างกันดังนั้นในกรณีเช่นนี้จะไม่สามารถทำการบินได้
t0x1n

6

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

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

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


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

2
ไม่คุณกำลังค้าขายเงินสำหรับหลักการ @ t0x1n เรียบง่ายเหมือนที่ คุณมีสามตัวเลือก: ทำงานเพื่อแก้ไขระบบยอมรับระบบออกจากระบบ ตัวเลือกที่ 1 และ 3 นั้นดีต่อจิตวิญญาณ
ฌอนเพอร์รี

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

1
Meh, วิญญาณจะ overrated;)
t0x1n

2
@ SeanPerry ฉันพยายามแก้ไขระบบจริงๆ แต่มันยากมาก (1) ฉันอยู่คนเดียวตามลำพังในเรื่องนี้และเป็นการยากที่จะต่อสู้กับหัวหน้าใหญ่ (ฉันเป็นแค่นักพัฒนาประจำไม่ใช่ผู้อาวุโส) (2) สิ่งเหล่านี้ต้องใช้เวลาซึ่งฉันก็ไม่มี มีงานจำนวนมากและสภาพแวดล้อมทั้งหมดใช้เวลานานมาก (อีเมล, การขัดจังหวะ, CR, การทดสอบรอบที่ล้มเหลวที่คุณต้องแก้ไขการประชุม ฯลฯ ) ฉันพยายามอย่างเต็มที่ในการกรองและมีประสิทธิผล แต่โดยทั่วไปฉันสามารถทำงาน "ตามกำหนดเวลา" ได้ไม่เต็มที่ (การมีมาตรฐานระดับสูงไม่ได้ช่วยที่นี่) ให้ทำงานเพื่อเปลี่ยนแปลงระบบ ... คน
t0x1n

5

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

1. อย่า refactor เมื่อคุณไม่สามารถทดสอบการเปลี่ยนแปลงที่ทำกับการทดสอบอัตโนมัติ

คนที่ทำการตรวจสอบรหัสของคุณจะต้องมั่นใจได้ว่าการเปลี่ยนแปลงที่คุณทำนั้นไม่ทำลายสิ่งที่เคยใช้งาน นี่คือเหตุผลที่ดีที่สุดที่จะปล่อยให้โค๊ดทำงานเพียงอย่างเดียว ใช่มันจะเป็นการดีกว่าถ้าคุณจะปรับฟังก์ชั่นที่ยาว 1,000 บรรทัด (นั่นคือสิ่งที่น่ารังเกียจจริงๆ) ลงในฟังก์ชั่นมากมาย แต่ถ้าคุณไม่สามารถทำการทดสอบของคุณได้โดยอัตโนมัติ ขวา. ฉันเคยทำผิดพลาดมาก่อนแน่นอน

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

อย่าปรับแต่งส่วนของรหัสที่ต้องมีความรู้เฉพาะโดเมนที่คุณไม่มี

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

แทนที่จะเปลี่ยนชื่อตัวแปรเชิงสำนวนเพียงแค่ใส่ความคิดเห็นเพื่ออธิบายสิ่งที่พวกเขาเป็น หากพวกเขาไม่ใช่สำนวนโปรดเปลี่ยนชื่อพวกเขา อย่าปล่อยให้i, j, k, x, yฯลฯ ลอยรอบเมื่อชื่อที่ดีกว่าจะทำงาน

Rule of thumb สำหรับตัวย่อ: ถ้าเมื่อผู้คนกำลังพูดถึงพวกเขาใช้ตัวย่อมันก็โอเคที่จะใช้ตัวย่อนั้นในรหัส ตัวอย่างจากรหัสฐานที่ทำงาน:

เรามีแนวคิดต่อไปนี้ซึ่งเรามักจะย่อเมื่อพูดถึงพวกเขา: "พื้นที่ของความกังวล" กลายเป็น "AOC", "การระเบิดของเมฆไอ" กลายเป็น VCE สิ่งเช่นนั้น ในฐานรหัสของเรามีคน refactored อินสแตนซ์ทั้งหมดที่เรียกว่า aoc to AreaOfConcern, VCE to vaporCloudExplosion, nPlanes ไปยัง confiningPlanesCount ... ซึ่งทำให้รหัสอ่านได้ยากสำหรับผู้ที่มีความรู้เฉพาะโดเมน ฉันมีความผิดในการทำสิ่งนี้เช่นกัน


สิ่งนี้อาจใช้ไม่ได้กับสถานการณ์ของคุณ แต่มีความคิดของฉันเกี่ยวกับปัญหา


ขอบคุณโคดี เกี่ยวกับ "ผู้ตรวจสอบโค้ดของคุณจะไม่มีข้อแก้ตัว (ถูกกฎหมาย) สำหรับความไม่พอใจ" - ข้อแก้ตัวของพวกเขานั้นผิดกฎหมายแล้ว
t0x1n

2

คำถามนี้มีปัญหาที่แตกต่างกันสองประการ - ง่ายต่อการตรวจสอบการเปลี่ยนแปลงในการตรวจทานโค้ดและเวลาที่ใช้ในการปรับโครงสร้างใหม่

ที่ที่ฉันทำงานมีการพัฒนาวิธีปฏิบัติหนึ่งที่ทำให้เกิดการเสียดทานอย่างหนัก - Code Review (CR) เมื่อใดก็ตามที่ฉันเปลี่ยนแปลงสิ่งใดก็ตามที่ไม่อยู่ในขอบเขตของ "การมอบหมาย" ของฉันฉันกำลังถูกตำหนิโดยผู้ตรวจสอบของฉันว่าฉันกำลังทำการเปลี่ยนแปลงให้ยากขึ้น

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

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

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

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

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


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

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

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

@EricKing ฉันคิดว่าฉันสามารถทำได้ อย่างไรก็ตาม: (1) ฉันต้องทำงานกับรหัสที่น่าเกลียดและจดบันทึกสิ่งที่ฉันต้องการปรับปรุงจนกว่าฉันจะทำกับการเปลี่ยนแปลงการทำงานที่ทั้งสอง sucks และจริง ๆ แล้วความคืบหน้าการทำงานของฉันช้าลง(2) เมื่อฉันส่งการเปลี่ยนแปลงการทำงาน และทบทวนบันทึกย่อของฉันเพื่อการปรับโครงสร้างใหม่ซึ่งจะเป็นการทำซ้ำครั้งแรกและการดำเนินการเปลี่ยนสถานะใหม่อาจใช้เวลานานกว่านี้ซึ่งตามที่คุณแนะนำให้ใช้
t0x1n

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

2

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

คุณธรรมของเรื่องราวหรือไม่ ฉันไม่รู้. ฉันเดาว่าบางครั้งคุณก็ไม่สามารถทำให้ใคร ๆ พอใจได้ยกเว้นตัวคุณเอง ผมไม่เสียเวลา (ในสายตาของฉัน) - ทำความสะอาดรหัสเป็นง่ายต่อการอ่านและทำความเข้าใจ มันเป็นเพียงเครื่องมือควบคุมการเปลี่ยนแปลงแบบดั้งเดิมที่คนอื่นใช้ทำงานพิเศษแบบ one-shot เครื่องมือดั้งเดิมเกินไปที่จะเพิกเฉยต่อพื้นที่ / การแท็บและการแสดงความคิดเห็นซ้ำ


ใช่ฉันถูก hosed สำหรับการเว้นวรรคด้วยเช่นเดียวกับสิ่งเล็ก ๆ น้อย ๆ เช่นการคัดเลือกนักแสดงที่ซ้ำซ้อน ฯลฯ สิ่งที่ไม่ได้รับคำสั่งอย่างสมบูรณ์จากการเปลี่ยนแปลงของฉันคือ "เสียง"
t0x1n

2

หากคุณสามารถแยกการเปลี่ยนแปลงที่ร้องขอและ refactor ที่ไม่ได้รับการร้องขอเป็นคอมมิชชันแยกต่างหาก (จำนวนมาก) ดังที่บันทึกไว้โดย @Useless, @Telastyn และอื่น ๆ นั่นคือสิ่งที่ดีที่สุดที่คุณสามารถทำได้ คุณจะยังคงทำงานกับ CR เดียวโดยไม่มีค่าใช้จ่ายด้านการดูแลระบบในการสร้าง "refactoring" เพียงแค่ให้ความมุ่งมั่นของคุณเล็กและมุ่งเน้น

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

หัวข้อที่ครอบคลุมรวมถึง:

  • ทำความเข้าใจกลไกของการเปลี่ยนแปลงซอฟต์แวร์: การเพิ่มคุณสมบัติการแก้ไขข้อบกพร่องการปรับปรุงการออกแบบการเพิ่มประสิทธิภาพ
  • รับรหัสดั้งเดิมในชุดทดสอบ
  • การเขียนแบบทดสอบที่ป้องกันคุณจากการแนะนำปัญหาใหม่
  • เทคนิคที่สามารถใช้กับภาษาหรือแพลตฟอร์มใด ๆ - ตัวอย่างใน Java, C ++, C และ C #
  • ระบุอย่างแม่นยำว่าต้องทำการเปลี่ยนแปลงรหัสที่ใด
  • การรับมือกับระบบดั้งเดิมที่ไม่ได้มุ่งเน้นวัตถุ
  • การจัดการแอปพลิเคชันที่ดูเหมือนจะไม่มีโครงสร้างใด ๆ

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


2

ฉันก็เป็นผู้เชื่อที่ยอดเยี่ยมในกฎ Boyscout และ Refactoring ปัญหามักเกิดจากการซื้อการจัดการการปรับโครงสร้างนั้นมาพร้อมกับความเสี่ยงและค่าใช้จ่าย สิ่งที่ผู้บริหารมักมองข้ามคือหนี้ทางเทคนิคก็เช่นกัน

มันเป็นธรรมชาติของมนุษย์ เราคุ้นเคยกับการจัดการกับปัญหาจริงไม่ใช่พยายามป้องกันพวกเขา เรามีปฏิกิริยาไม่ใช่เชิงรุก

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

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

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

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


1

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

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

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


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

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

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

@ t0x1n: ฟังดูน่าผิดหวังอย่างมาก โปรดทราบว่าฉันไม่ได้หมายถึงเพียงแค่ "การวิเคราะห์รหัสแบบคงที่" แต่ยังมีคำแนะนำอื่น ๆ ซึ่งเป็นสิ่งที่เทียบเท่ากับ Nexus แน่นอนว่าไม่มีเครื่องมือใดดึงดูดความหมายได้ 100% นี่เป็นเพียงกลยุทธ์การแก้ไข
logc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.