คุณไม่สามารถรู้ได้ว่า CI คืออะไรเว้นแต่คุณจะรู้ว่าเราเคยทำอะไร ลองนึกภาพระบบที่มี 3 ส่วน มี UI ที่รวบรวมข้อมูลและวางไว้ในฐานข้อมูล มีระบบการรายงานที่สร้างรายงานจากฐานข้อมูล และมีเซิร์ฟเวอร์บางประเภทที่ตรวจสอบฐานข้อมูลและส่งการแจ้งเตือนทางอีเมลหากตรงตามเกณฑ์ที่กำหนด
นานมานี้จะถูกเขียนดังนี้:
- เห็นด้วยกับสคีมาสำหรับฐานข้อมูลและข้อกำหนด - ใช้เวลาหลายสัปดาห์เพราะมันจะต้องสมบูรณ์แบบเพราะคุณจะเห็นว่าทำไมในไม่ช้า
- กำหนด 3 devs หรือ 3 ทีมอิสระของ devs ไปยัง 3 ชิ้น
- ผู้พัฒนาแต่ละคนจะทำงานกับชิ้นส่วนของตนและทดสอบชิ้นส่วนของตนโดยใช้สำเนาฐานข้อมูลของตนเองเป็นเวลาหลายสัปดาห์หรือหลายเดือน
ในช่วงเวลานี้ devs จะไม่เรียกใช้รหัสของกันและกันหรือพยายามใช้รุ่นของฐานข้อมูลที่สร้างขึ้นโดยรหัสของผู้อื่น ผู้เขียนรายงานจะเพิ่มข้อมูลตัวอย่างจำนวนมาก ผู้เขียนการแจ้งเตือนจะส่งเพิ่มระเบียนที่จำลองเหตุการณ์รายงาน และผู้เขียน GUI จะดูที่ฐานข้อมูลเพื่อดูว่ามีการเพิ่ม GUI อย่างไร เมื่อเวลาผ่านไป devs จะรู้ว่าข้อมูลจำเพาะผิดไปในทางใดทางหนึ่งเช่นไม่ได้ระบุดัชนีหรือมีความยาวของฟิลด์สั้นเกินไปและ "แก้ไข" ในเวอร์ชันนั้น พวกเขาอาจบอกคนอื่น ๆ ว่าใครจะทำอะไร แต่ปกติแล้วสิ่งเหล่านี้จะอยู่ในรายชื่อในภายหลัง
เมื่อทั้งสามส่วนถูกเข้ารหัสอย่างสมบูรณ์และทดสอบโดย devs ของพวกเขาและบางครั้งก็ทดสอบโดยผู้ใช้ (แสดงรายงานหน้าจอหรือการแจ้งเตือนทางอีเมล) จากนั้นจะเข้าสู่ขั้นตอน "การรวม" เรื่องนี้มักจะถูกงบประมาณในหลายเดือน แต่จะยังคงไป การเปลี่ยนแปลงความยาวของฟิลด์นั้นโดย dev 1 จะถูกค้นพบที่นี่และจะต้องใช้ devs 2 และ 3 เพื่อทำการเปลี่ยนแปลงโค้ดขนาดใหญ่และอาจมีการเปลี่ยนแปลง UI เช่นกัน ดัชนีพิเศษนั้นจะทำลายความเสียหายของตัวเอง และอื่น ๆ หากหนึ่งใน devs ถูกผู้ใช้บอกให้เพิ่มเขตข้อมูลและทำตอนนี้จะเป็นเวลาที่อีกสองคนต้องเพิ่มมันด้วย
ช่วงนี้เจ็บปวดอย่างไร้ความปราณีและคาดเดาไม่ได้ ดังนั้นผู้คนเริ่มพูดว่า "เราต้องรวมบ่อยขึ้น" "เราต้องทำงานร่วมกันตั้งแต่ต้น" "เมื่อเราคนใดคนหนึ่งร้องขอการเปลี่ยนแปลง [นั่นคือวิธีที่เราพูดคุยกัน] คนอื่น ๆ ต้องรู้เกี่ยวกับเรื่องนี้" บางทีมเริ่มทำการทดสอบการรวมก่อนหน้านี้ในขณะที่ยังคงทำงานแยกกัน และบางทีมก็เริ่มใช้รหัสและผลลัพธ์ของกันและกันตลอดเวลาตั้งแต่เริ่มต้น และนั่นก็กลายเป็นการบูรณาการอย่างต่อเนื่อง
คุณอาจคิดว่าฉันกำลังพูดเกินจริงเรื่องแรก ฉันทำงานให้กับ บริษัท บ้างครั้งหนึ่งเมื่อผู้ติดต่อของฉันเคี้ยวฉันเพื่อตรวจสอบรหัสบางอย่างที่เกิดจากข้อบกพร่องต่อไปนี้:
- หน้าจอที่เขาไม่ได้ทำงานมีปุ่มที่ยังไม่ได้ทำอะไรเลย
- ผู้ใช้ไม่ได้ลงชื่อออกในการออกแบบหน้าจอ (สีและแบบอักษรที่แม่นยำการมีอยู่ของหน้าจอความสามารถและปุ่มที่มีอยู่ในข้อมูลจำเพาะ 300 หน้า)
มันเป็นความเห็นของเขาที่ว่าคุณไม่ได้ใส่สิ่งต่าง ๆ ลงไปในแหล่งข้อมูลควบคุมจนกว่ามันจะเสร็จสิ้น โดยปกติเขาจะเช็คอินหนึ่งหรือสองครั้งต่อปี เรามีปรัชญาที่ต่างกันเล็กน้อย :-)
นอกจากนี้หากคุณพบว่ามันยากที่จะเชื่อว่าทีมจะถูกตัดการเชื่อมต่อรอบ ๆ ทรัพยากรที่ใช้ร่วมกันเช่นฐานข้อมูลคุณจะไม่เชื่อจริงๆ คุณกำลังจะเขียนฟังก์ชั่นที่ฉันสามารถโทรได้หรือไม่? เยี่ยมมากเลยไปข้างหน้าและทำสิ่งนั้นฉันจะทำ hardcode สิ่งที่ฉันต้องการในระหว่างนี้ เดือนต่อมาฉันจะ "รวม" รหัสของฉันดังนั้นจึงเรียก API ของคุณและเราจะพบว่ามันระเบิดถ้าฉันผ่าน null ฉันระเบิดถ้ามันคืน null (และมันมากที่) มันกลับสิ่งที่ใหญ่เกินไป สำหรับฉันมันไม่สามารถจัดการปีอธิกสุรทินและอีกพันสิ่งได้ ทำงานอย่างอิสระและมีเฟสการรวมเป็นปกติ ตอนนี้ดูเหมือนบ้า