คุณจะจัดการการเปลี่ยนโครงสร้างใหม่ด้วยฐานรหัสขนาดใหญ่และนักพัฒนาจำนวนมากได้อย่างไร


13

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

เรามีโค้ด 4.5 ล้านบรรทัดและนักพัฒนาซอฟต์แวร์มากกว่า 20 ทีมในสี่ทวีป

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

คุณรู้วิธีแก้ปัญหาหรือไม่?


1
ไม่ทราบเกี่ยวกับปลั๊กอิน Eclipse ใด ๆ ... ฟังดูคล้ายกับงานสำหรับระบบควบคุมเวอร์ชัน
SL Barth - Reinstate Monica

ทำไมคุณต้องการป้องกันสิ่งนั้น มันคือการหลีกเลี่ยงภาวะแทรกซ้อน (ข้อบกพร่อง) หรือเพื่อประหยัดเวลาของนักพัฒนา? การแก้ปัญหาขึ้นอยู่กับคำตอบของ IMO นี้เป็นอย่างมาก
KaptajnKold

ทำไมคุณไม่ลอง SVN, Apache Subversion หรือ Tortoise svn จะดีสำหรับสิ่งนี้

1
ทำไมยี่สิบทีมแก้ไขแหล่งเดียวกัน

เรามี VCS เราเพิ่งเปลี่ยนจาก ClearCase เป็น Git
Roger CS Wernersson

คำตอบ:


14

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

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

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


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

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

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

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

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

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

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

ฉันไม่ต้องการที่จะเพิ่มข้อผิดพลาดสำหรับแต่ละ refactoring วิธีการคือการล้างรหัสที่คุณเปลี่ยน การจัดทำรายงานข้อผิดพลาดสำหรับแต่ละไฟล์ดูเหมือนว่าจะทำงานมากเกินไป
Roger CS Wernersson

6

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


3
+1: ยอมรับและอัปเดตบ่อยครั้งก็หมายความว่าการเปลี่ยนแปลงมีขนาดเล็กและจัดการได้ง่ายทำให้เกิดข้อขัดแย้งในการจัดการได้ง่ายขึ้น
Bringer128

กระทำมักจะช่วย น่าเสียดายที่ฉันไม่สามารถเปลี่ยนแปลงสิ่งนั้นได้ ฉันกำลังมองหาเครื่องมือที่จะช่วยให้เราสื่อสาร
Roger CS Wernersson

3

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


3
เขาพูดถึง 20 ทีมไม่ใช่ทีม 20 คน
Ingo

1
+1 สำหรับเทคโนโลยีไม่สามารถแก้ปัญหาสังคมได้ แต่แก้ไขคำตอบเพื่อพูดว่า "ด้วย 20 ทีมโครงสร้างและกฎเกณฑ์บางอย่างจะเป็นสิ่งจำเป็น"
MarkJ

บางคนนอนหลับขณะที่คนอื่นทำงาน เรามีทีมในสี่ทวีป
Roger CS Wernersson

0

หากคุณออกจากnotice that someone else is working on the same piece of code and talk to the first one before modifying anythingสิ่งที่คุณพูดคุณต้องมีระบบควบคุมเวอร์ชัน (CVS / SVN / GIT) ฉันไม่แน่ใจ แต่ถ้าคุณต้องการรวมสิ่งนั้นด้วยคุณจะต้องมีสิ่งขั้นสูง


เรามี Git ก่อนหน้านั้นเรามี ClearCase VCS ไม่ใช่วิธีแก้ปัญหา เราต้องการกลไกการกระตุ้นบางอย่าง
Roger CS Wernersson

0

นักพัฒนากำลังล็อกไฟล์ในการควบคุมแหล่งที่มาควรแก้ปัญหาของคุณได้อย่างง่ายดาย แต่แล้วฉันคิดว่าคุณอาจมีปัญหาที่ใหญ่กว่า

4.5 ล้าน LOC's เป็น sandbox ขนาดใหญ่ที่เล่นได้ดังนั้นในโซลูชันที่ออกแบบมาอย่างดีคุณไม่ควรพลาดสถานการณ์ที่นักพัฒนาหลายทีมกำลังเหยียบเท้ากัน ความจริงที่ว่าสิ่งนี้เกิดขึ้นมากกว่าบังเอิญคือการบอกถึงข้อบกพร่องในการออกแบบที่อาจเกิดขึ้นอย่างร้ายแรงที่ควรพิจารณา


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

0

บางสิ่ง:

  1. แยกโมดูลการทำงาน
  2. พูดคุยเกี่ยวกับการเปลี่ยนแปลงก่อนที่พวกเขาจะทำ [กับ devs ทั้งหมด]
  3. การทดสอบหน่วย [สำหรับการตรวจสอบและหลีกเลี่ยงการทำลายสิ่งที่เกี่ยวข้อง]
  4. อย่างที่คนอื่น ๆ พูดถึง VCS

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