บทความนี้เป็น ตอนที่ 3 จากทั้งหมด 4 ตอน สามารถอ่านตั้งแต่ต้นได้ที่ บทความนี้
บทความทั้งหมดในชุดนี้ มีดังนี้
- ประสิทธิภาพในการพัฒนาซอฟต์แวร์
- วัฒนธรรมองค์กร
- การผลิตซอฟต์แวร์แบบต่อเนื่อง (บทความนี้)
- การบริหารแบบลีน
ตอนที่ 3 - การผลิตซอฟต์แวร์แบบต่อเนื่อง
จากบทความที่แล้ว เราได้สรุปว่าแนวทางที่จะสามารถเปลี่ยนแปลงวัฒนธรรมองค์กรได้นั้น มีอยู่ 2 แนวทาง คือ การผลิตซอฟต์แวร์แบบต่อเนื่อง และ การบริหารแบบลีน ในบทความนี้เราจะมาพูดถึงส่วนแรก ซึ่งก็คือ การผลิตซอฟต์แวร์แบบต่อเนื่อง หรือ Continuous Delivery
รูปที่ 1 - การผลิตซอฟต์แวร์แบบต่อเนื่องและผลกระทบของมัน
การผลิตซอฟต์แวร์แบบต่อเนื่องคืออะไร
เรามาเริ่มต้นกันที่ นิยาม ของการผลิตซอฟต์แวร์แบบต่อเนื่อง โดยในทางเทคนิค เราอาจจะรู้จักสิ่งที่เรียกว่า CI/CD ที่หมายถึงกระบวนการที่ทำโดยอัตโนมัติหลังจากที่เราทำการแก้ไขโค้ดโปรแกรมส่วนกลาง แต่จริง ๆ แล้ว การผลิตซอฟต์แวร์แบบต่อเนื่อง หรือ Continuous Delivery ไม่ใช่เป็นเพียงโปรแกรมอัตโนมัติ แต่เป็น แนวคิด หรือแนวปฎิบัติ หรือสภาพแวดล้อม ที่จะทำให้เราสามารถที่จะทำการแก้ไขเปลี่ยนแปลงซอฟต์แวร์ได้อย่างต่อเนื่อง รวดเร็ว และมีคุณภาพ ได้แก่
การควบคุมคุณภาพในทุกขั้นตอน หมายถึง การคำนึงถึงคุณภาพในทุก ๆ ขั้นตอน ตั้งแต่ออกแบบจนถึงปล่อยใช้งานจริง แทนที่จะรอให้ทุกอย่างเสร็จแล้วจึงจะทำการทดสอบคุณภาพ วิธีคิดนี้จะช่วยลดเวลาที่ต้องเสียไปกับการแก้ไขปัญหาที่พบจากการทดสอบในช่วงท้าย ซึ่งโดยทั่วไปจะใช้เวลาโดยรวมสูงกว่าการที่เราทำไว้ตั้งแต่แรก
การแบ่งงานออกเป็นส่วนเล็ก ๆ หมายถึง การแบ่งงานออกเป็นส่วนย่อย ๆ และทำแต่ละงานให้เสร็จตั้งแต่ต้นจนจบ แทนที่จะรีบทำงานให้ได้ปริมาณมาก ๆ และไปกองรอให้คนต่อไปทำต่อ เช่น การที่โปรแกรมเมอร์เร่งทำหลาย ๆ สตอรี่ แล้วไปกองรอให้คนทดสอบทำต่อ
การให้คอมพิวเตอร์ทำงานแทน งานจำพวกที่ทำซ้ำ ๆ อย่างเช่น การทดสอบโปรแกรม หรือ การส่งโปรแกรมขึ้นใช้งานจริง เป็นงานประเภทที่ควรให้คอมพิวเตอร์เป็นคนทำ แทนที่จะเป็นคน เพื่อลดเวลา และ ความผิดพลาด
การปรับปรุงพัฒนาอย่างต่อเนื่อง เราควรที่จะแสวงหาแนวทางในการทำงานใหม่ ๆ ที่จะช่วยให้เราทำงานได้เร็วขึ้นและคุณภาพดีขึ้น อยู่ตลอดเวลา เช่น การหาความรู้ทางเทคนิคใหม่ ๆ ทำให้เราสามารถที่จะออกแบบและเขียนโปรแกรมได้ดีขึ้น หรือหาแนวทางการทำงานร่วมกันที่ดีขึ้นร่วมกันระหว่างคนในทีม
ความรับผิดชอบเป็นทีม ความผิดพลาด หรือ ความสำเร็จ ที่เกิดขึ้นจากทีม คนในทีมจะต้องรู้สึกถึงความรับผิดชอบร่วมกัน ไม่ใช่เป็นของคนใดคนหนึ่งในทีม หากเป็นเช่นนี้ได้ เมื่อเกิดปัญหาขึ้น ทุกคนก็จะช่วยกันคิดหาทางออกและวิธีการป้องกัน อีกทั้งยังไม่ทำให้ใครคนใดคนหนึ่งต้องแบกรับภาระอยู่คนเดียว
ความสามารถที่จำเป็นต้องมีใน การผลิตซอฟต์แวร์แบบต่อเนื่อง
จากผลการวิจัยได้พบว่าความสามารถหลัก ๆ ที่องค์กรจำเป็นที่จะต้องมี หรือ ทำให้มี เพื่อที่จะขับเคลื่อนแนวทาง การพัฒนาซอฟต์แวร์อย่างต่อเนื่อง ให้เกิดขึ้นในองค์กรได้ ดังนี้
การควบคุมเวอร์ชัน งานทุกอย่าง ไม่ว่าจะเป็นโค้ดโปรแกรม คอนฟิกกูเรชันของเซริฟเวอร์ หรือเอกสาร จะต้องมีการจัดการเป็นเวอร์ชัน และสามารถที่จะสืบค้นหรือย้อนกลับได้ทุกเมื่อ ซึ่งปัจจุบันนี้เครื่องมือที่นิยม ก็คือ GIT (กิต)
การทดสอบแบบอัตโนมัติ ซอฟต์แวร์จะต้องมีการทดสอบความถูกต้องในการทำงานอย่างอัตโนมัติ ทุกครั้งเมื่อมีการเปลี่ยนแปลง แก้ไข เกิดขึ้น ในทุกระดับ ตั้งแต่ โปรแกรมหน่วยย่อย ๆ จนถึงระดับหน้าจอสำหรับผู้ใช้งาน ที่สำคัญคือ โปรแกรมทดสอบเหล่านี้ จะต้องทำงานได้อย่างน่าเชื่อถือ ปรับเปลี่ยนได้ง่าย และล่าสุดอยู่เสมอ สิ่งเหล่านี้ จะทำให้เรามีความมั่นใจที่จะแก้ไขปรับปรุงซอฟต์แวร์ของเราเป็นอย่างมาก
ข้อมูลสำหรับทดสอบ ชุดข้อมูลที่ใช้ในการทดสอบก็มีความสำคัญโดยเฉพาะกับการทดสอบแบบอัตโนมัติ หาก ข้อมูลที่ใช้ทดสอบไม่มีความน่าเชื่อถือ หรือถูกเปลี่ยนแปลงโดยไม่ตั้งใจ ก็จะส่งผลให้โปรแกรมทดสอบไม่มีความน่าเชื่อถือ หรือไม่สามารถทำงานได้
การพัฒนาโดยมีโค้ดหลักเพียงชุดเดียว หมายถึง การที่โค้ดโปรแกรมที่เก็บอยู่ในระบบควบคุมเวอร์ชัน มีบรานซ์หลักเพียงบรานซ์เดียว และจะไม่มีฟีเจอร์บรานช์ที่แยกออกจาก บรานซ์หลัก เป็นระยะเวลานาน เหตุผลก็คือ การที่โค้ดโปรแกรมถูกแก้ไขพร้อม ๆ กัน แต่แยกบรานซ์กัน ยิ่งเวลาผ่านไปก็จะมีความแตกต่างมากขึ้น และเมื่อต้องนำโค้ดกลับมารวมกันก็จะยากขึ้นเรื่อย ๆ เมื่อเวลาผ่านไป และอาจทำให้เกิดข้อผิดพลาดในการรวมโค้ดมากยิ่งขึ้น และที่สำคัญ คือ เมื่อเกิดปัญหาจากการใช้งานจริง ปริมาณโค้ดที่รวมกันจำนวนมาก ทำให้เป็นการยากที่จะหาจุดที่ทำให้เกิดปัญหา อีกด้วย
การรวมโค้ดกันอย่างต่อเนื่อง (CI) หมายถึง การที่นักพัฒนานำโค้ดที่ทำเสร็จแล้วรวมกับเข้าไปที่ส่วนกลาง อยู่เป็นประจำ อย่างน้อย วันละครั้งหรือบ่อยกว่า ก่อนและหลังการรวมโค้ด จะต้องมีการตรวจสอบว่า โค้ดที่มีการเปลี่ยนแปลงนั้น ไม่ทำให้เกิดข้อผิดพลาด โดยการรันโปรแกรมทดสอบแบบอัตโนมัติ และเมื่อไม่พบว่ามีข้อผิดพลาดก็จะปล่อยโปรแกรมออกสู่ผู้ใช้งานต่อไป ขั้นตอนทั้งหมด จะต้องถูกทำโดยอัตโนมัติ และแจ้งผลให้ผู้เกี่ยวข้องได้รับรู้ ซึ่งในปัจจุบันนี้ เครื่องมือที่ทำหน้าที่นี้มีให้เลือกใช้อย่างหลากหลาย และไม่ยุ่งยาก
ความปลอดภัยอยู่ในทุกขั้นตอน ทุกวันนี้ ความปลอดภัยของซอฟต์แวร์นั้นมีความสำคัญมากขึ้นเรื่อย ๆ แต่ในทางปฎิบัติมักจะถูกคิดทีหลัง หรือไม่ก็ถูกละเลย ปัญหาคือ การที่เรามาแก้ไขปัญหาทางด้านความปลอดภัย หลังจากที่พัฒนาโปรแกรมเสร็จแล้ว นั้นมีต้นทุนที่สูงและก่อให้เกิดความล่าช้า เมื่อเทียบกับการออกแบบและพัฒนาความปลอดภัยเข้าไปตั้งแต่ต้น โดยแนวทางก็คือ การกำหนดความต้องการทางด้านความปลอดภัยเป็นส่วนหนึ่งของสิ่งที่กำลังจะพัฒนา
สถาปัตยกรรมแบบขึ้นต่อกันต่ำ ความหมายก็คือ โครงสร้างของซอร์ฟแวร์แต่ละส่วนที่ทำงานร่วมกันเพื่อที่จะตอบโจทย์ผู้ใช้งาน จะต้องทำงานได้อย่างอิสระ หรือมีการพึ่งพาส่วนอื่น ๆ ให้น้อยที่สุดเท่าที่จะเป็นไปได้ การแบ่งโครงสร้างของซอฟต์แวร์และทีมนักพัฒนาให้ตรงกับโครงสร้างทางธุรกิจ เป็นแนวทางหนึ่ง ที่สามารถนำมาใช้แบ่งส่วนของซอฟต์แวร์ เพื่อให้มีการเพิ่งพากันน้อยลง และจะทำให้การตัดสินใจการเปลี่ยนแปลงต่าง ๆ ทำได้อย่างรวดเร็วและมีประสิทธิภาพยิ่งขึ้น
ทีมที่ตัดสินใจได้ด้วยตัวเอง ทีมผู้ผลิตงาน ควรที่จะสามารถตัดสินใจเลือก สิ่งต่าง ๆ ได้ด้วยตัวเอง แทนที่จะต้องทำตามหรือได้รับการอนุมัติจากส่วนกลางเท่านั้น ไม่ว่าจะเป็น แนวทางการทำงาน เครื่องมือที่ใช้ หรือซอฟต์แวร์ที่จะส่งมอบให้กับผู้ใช้งาน เพราะว่าทีมควรที่จะต้องรู้ดีที่สุดว่าอะไรที่เหมาะสมและทำให้พวกเขาทำงานได้ดีที่สุด และที่สำคัญคือ จะต้องมีเป้าหมายเป็นไปในทิศทางเดียวกับองค์กร
การสังเกตการณ์ระบบ ข้อมูลการทำงานของระบบที่สำคัญ จะต้องมีพร้อมสำหรับทีมที่ดูแล เพื่อใช้ในการตรวจสอบความผิดปกติ ได้ตลอดเวลา หรือสามารถที่จะลงมือป้องกันก่อนปัญหาจะเกิดกับผู้ใช้งานได้ ตัวชี้วัดที่สำคัญ อย่างเช่น จำนวนการทำงานที่ผิดพลาด ความเร็วของระบบ การใช้งานที่ผิดปกติ หรือในระดับธุรกิจ เช่น ปัญหาที่ถูกร้องเรียนเข้ามา ปริมาณการใช้งาน หรือรายได้
ผลกระทบจากการ ผลิตซอฟต์แวร์แบบต่อเนื่อง
ความสามารถในการทำซอฟต์แวร์แบบต่อเนื่อง ที่พูดถึงข้างต้นนั้น ถูกนำไปหาความสัมพันธ์กับการวัดผลอื่น ๆ ซึ่งทีมผู้วิจัย พบว่า ความสามารถในการผลิตซอฟต์แวร์แบบต่อเนื่องนั้น ส่งผลกับทั้ง วัฒนธรรมองค์กร ประสิทธิภาพในการพัฒนาซอฟต์แวร์ รวมถึง คนทำงานที่เกี่ยวข้อง
สิ่งที่เกิดขึ้นตามมา สำหรับ คนที่ทำงาน ได้แก่ การลดความยากลำบากในขั้นตอนการปล่อยซอฟต์แวร์สู่ผู้ใช้งานจริง การลดความรู้สึกหมดพลังในการทำงาน การเพิ่มความรู้สึกผูกพันธ์กับองค์กร และการเพิ่มความพึงพอใจต่องานที่ทำ มากยิ่งขึ้น
สรุป
จากผลการวิเคราะห์นี้ คุณจะพบว่า แนวทางการผลิตซอฟต์แวร์แบบต่อเนื่องนี้ มีส่วนสำคัญในการสร้างองค์กรที่มีประสิทธิภาพสูง ความสามารถหรือแนวปฎิบัติที่พูดถึงมาทั้งหมดนั้น ค่อนข้างมีความชัดเจนและสามารถนำไปใช้เป็นแนวทางในการพัฒนาองค์กรด้านเทคโลยีไปข้างหน้า ได้เป็นอย่างดี ต่อไป ผมจะพูดถึงอีกหนึ่งปัจจัยที่มีความสำคัญไม่แพ้กัน ซึ่งก็คือ การบริหารงานแบบลีน