แล้วกฎการเข้ารหัสเหล่านั้นล่ะ?


10

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

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


3
หากคุณใช้ภาษา C # เป็นภาษาให้ใช้ StyleCop หากใช้ Java ...
งาน

@Job - ใช่เราส่วนใหญ่ใช้ C # StyleCop ดูน่าสนใจ
TheBoyan

คำตอบ:


9

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

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

บางครั้งแรงกดดันจากเพื่อนก็เป็นทางออกที่ดีที่สุดสำหรับสิ่งนี้


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

แน่นอน - และฉันคิดว่าถ้าคุณยึดติดกับคำแนะนำเพื่อมุ่งเน้นไปที่สาเหตุที่คุณต้องการกฎนั้นถ้าคุณคิดว่าคุณไม่ต้องการกฎคุณรู้ว่าทีมหรือคนมาจากความคิดที่เปิดกว้างมากกว่าแค่ การป้องกันเนื่องจากกระบวนการของกฎที่อธิบายไม่ได้
bethlakshmi

6

ที่ทำงานของฉันเราใช้โซลูชันทั้งสามต่อไปนี้:

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

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

3) บทวิจารณ์โค้ด หวังว่าคุณจะทำสิ่งเหล่านี้อยู่แล้ว แต่สิ่งหนึ่งที่ควรเน้นคือการที่กฎ / รูปแบบการเข้ารหัสกำลังทำลายการประชุม

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


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

4

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

พวกเขาเป็น "หัวแข็ง" โดยไม่ใช้วงเล็บหรือเป็นคำขอ "หัวแข็ง" หรือไม่

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

OO 101 : "Refactor เมื่อผลิตภัณฑ์ทำในสิ่งที่ต้องทำ" ไม่ก่อน


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

2

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

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

แน่นอนว่าบาง บริษัท ใช้สิทธิ์ในการเช็คอินอย่างสมบูรณ์จากโปรแกรมเมอร์รุ่นเยาว์ เมื่อพวกเขาเรียนรู้กฎการเข้ารหัส บริษัท ในที่สุดพวกเขาก็จะได้รับสิทธิพิเศษ


2
หากการจัดวางรั้งเป็นปัญหาคุณภาพที่ใหญ่ที่สุดของคุณฉันคิดว่าคุณโชคดีมาก นั่นคือระดับที่เหมาะสมที่จะมุ่งเน้น?
โบเพอร์สัน

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

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

1
เผง ฉันเลิกพยายามโน้มน้าวให้ผู้พัฒนาทำวงเล็บในบรรทัดของตัวเองแทนที่จะเป็นวงเล็บอินไลน์เพื่อแลกกับการเรียนรู้ SOLID และ TDD ... การค้าที่ยอดเยี่ยมที่ฉันพูดได้;)
Martin Blore

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

2

ฉันคิดว่าคุณกำลังพูดถึงปัญหาในระดับที่แตกต่างกันมาก:

วิธีทำให้คนที่หัวแข็งที่ไม่ชอบใช้วงเล็บในคำสั่ง if

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

หรือใช้สายเชื่อมต่อเดียวกันทุกที่ในรหัส

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

หรืออะไรก็ตามที่จะใช้กฎการเข้ารหัสโดยไม่ทำให้พวกเขาต่อต้านความคิด?

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

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


"แนะนำการจัดรูปแบบรหัสอัตโนมัติเมื่อทำการเช็คอินตามกฎที่ยอมรับ" ... นี่ฟังดูน่าสนใจและมีแนวคิดใดเพิ่มเติมที่ฉันจะได้พบกับสิ่งนี้
TheBoyan

@ ก่อนหน้านี้, IDEs หลัก ๆ ส่วนใหญ่ในปัจจุบันสนับสนุนกฎการจัดรูปแบบโค้ดในระดับที่น้อยกว่าหรือมากกว่าและสามารถจัดรูปแบบโค้ดของคุณโดยอัตโนมัติเมื่อบันทึกหรือเช็คอิน สำหรับ Java ทั้ง Eclipse และ IntelliJ ทำฉันเดา NetBeans เช่นกัน แต่ฉันไม่ได้มีประสบการณ์มากกับมัน สำหรับ C # ดูความคิดเห็นของ @ Job ด้านบน แต่ยังมีเครื่องมือแบบสแตนด์อโลนเช่นสไตล์ศิลปะสำหรับ C / C ++ และ SCC ส่วนใหญ่ที่ฉันรู้จักสนับสนุนการเรียกใช้สคริปต์ / ทริกเกอร์เฉพาะผู้ใช้เช่นเช็คอิน
PéterTörök

2

ทำให้พวกเขามีส่วนร่วมในการสร้างกฎ สิ่งนี้มักจะช่วยกระตุ้นให้ผู้คนติดตามพวกเขา


1

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


1

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

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

วิธีที่ฉันจะแก้มัน:

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

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

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