เรากำลังทำโครงการ แต่เราใช้รหัสจำนวนมากระหว่างโครงการและมีห้องสมุดจำนวนมากที่มีรหัสทั่วไปของเรา ในขณะที่เราใช้งานโครงการใหม่เราค้นหาวิธีเพิ่มเติมในการแยกตัวประกอบของรหัสทั่วไปและใส่ลงในไลบรารี ห้องสมุดขึ้นอยู่กับแต่ละอื่น ๆ และโครงการขึ้นอยู่กับห้องสมุด แต่ละโปรเจ็กต์และไลบรารีทั้งหมดที่ใช้ในโปรเจ็กต์นั้นจำเป็นต้องใช้เวอร์ชันเดียวกันกับไลบรารีทั้งหมดที่อ้างถึง ถ้าเราปล่อยชิ้นส่วนของซอฟต์แวร์เราจะต้องแก้ไขข้อบกพร่องและอาจเพิ่มคุณสมบัติใหม่เป็นเวลาหลายปีบางครั้งก็เป็นเวลาหลายทศวรรษ เรามีห้องสมุดประมาณหนึ่งโหลการเปลี่ยนแปลงมักจะถูกตัดข้ามมากกว่าสองรายการและหลายทีมทำงานในหลายโครงการพร้อมกันโดยทำการเปลี่ยนแปลงพร้อมกันกับไลบรารีทั้งหมดเหล่านี้
เมื่อเร็ว ๆ นี้เราได้เปลี่ยนเป็นคอมไพล์และตั้งค่าที่เก็บสำหรับแต่ละไลบรารีและแต่ละโครงการ เราใช้ที่เก็บของเป็นที่เก็บข้อมูลทั่วไปทำสิ่งใหม่ ๆ ในฟีเจอร์สาขาจากนั้นทำการร้องขอการดึงและรวมเข้าด้วยกันหลังจากตรวจสอบแล้ว
ปัญหาหลายอย่างที่เราต้องจัดการในโครงการต้องการให้เราทำการเปลี่ยนแปลงในหลาย ๆ ไลบรารีและรหัสเฉพาะของโครงการ สิ่งเหล่านี้มักจะรวมถึงการเปลี่ยนแปลงอินเทอร์เฟซของไลบรารีซึ่งบางอย่างไม่เข้ากัน (ถ้าคุณคิดว่ามันฟังดูแปลก ๆ : เราเชื่อมต่อกับฮาร์ดแวร์และซ่อนฮาร์ดแวร์ที่เฉพาะเจาะจงไว้ข้างหลังอินเตอร์เฟสทั่วไปเกือบทุกครั้งที่เรารวมฮาร์ดแวร์ของผู้ขายรายอื่นที่เราพบในกรณีที่อินเทอร์เฟซปัจจุบันของเราไม่ได้คาดหวัง ตัวอย่างเช่นสมมติว่าโครงการที่P1
ใช้ห้องสมุดL1
, และL2
ยังใช้และ, และใช้เช่นกัน กราฟการพึ่งพามีลักษณะดังนี้:L3
L1
L2
L3
L2
L3
<-------L1<--+
P1 <----+ ^ |
<-+ | | |
| +--L2 |
| ^ |
| | |
+-----L3---+
ตอนนี้คิดคุณลักษณะสำหรับโครงการนี้ต้องมีการเปลี่ยนแปลงในP1
และที่เปลี่ยนอินเตอร์เฟซของL3
L3
ตอนนี้เพิ่มโปรเจ็กต์P2
และP3
ลงในแบบผสมซึ่งยังอ้างถึงไลบรารีเหล่านี้ เราไม่สามารถเปลี่ยนทุกสิ่งให้เป็นอินเทอร์เฟซใหม่ทำการทดสอบทั้งหมดและปรับใช้ซอฟต์แวร์ใหม่ ดังนั้นทางเลือกคืออะไร
- ใช้อินเทอร์เฟซใหม่ใน
L3
- ทำการดึง
L3
และรอการตรวจสอบ - ผสานการเปลี่ยนแปลง
- สร้างรุ่นใหม่ของ
L3
- เริ่มทำงานกับคุณสมบัติ
P1
โดยอ้างอิงจากรีL3
ลีสใหม่แล้วนำฟีเจอร์นั้นไปใช้กับฟีเจอร์P1
ของสาขา - ทำให้คำขอดึงได้รับการตรวจสอบและผสาน
(ฉันเพิ่งสังเกตุว่าฉันลืมที่จะเปลี่ยนL1
และL2
เปิดตัวใหม่และฉันไม่รู้ด้วยซ้ำว่าจะติดตั้งที่ใดเพราะจะต้องทำควบคู่ไปกับP1
... )
นี่เป็นกระบวนการที่น่าเบื่อข้อผิดพลาดและใช้เวลานานมากในการใช้งานคุณลักษณะนี้ต้องการการตรวจสอบที่เป็นอิสระ (ซึ่งทำให้ยากต่อการตรวจสอบ) ไม่ได้ปรับขนาดเลยและมีแนวโน้มที่จะนำเราออกจากธุรกิจเพราะเรา จมอยู่ในกระบวนการเราไม่เคยทำอะไรเลย
แต่เราจะใช้วิธีการแยกสาขาและการแท็กเพื่อสร้างกระบวนการที่ช่วยให้เราสามารถใช้คุณสมบัติใหม่ในโครงการใหม่ที่ไม่มีค่าใช้จ่ายมากเกินไปได้อย่างไร