ข้ามไปยังเนื้อหา
บทความนี้ได้รับการแปลจากภาษาญี่ปุ่นโดยใช้ AI
อ่านฉบับภาษาญี่ปุ่น
บทความนี้อยู่ในสาธารณสมบัติ (CC0) โปรดใช้งานได้อย่างอิสระ CC0 1.0 Universal

การพัฒนาแบบเน้นการพัฒนาและการทดสอบที่ขับเคลื่อนด้วยการปรับโครงสร้างโค้ด

การพัฒนาคือการสร้างสรรค์สิ่งใหม่และมีประโยชน์ซ้ำๆ

เมื่อเรานึกถึงการพัฒนา มักจะนึกถึงการพัฒนาผลิตภัณฑ์ใหม่ ซึ่งแตกต่างจากการผลิตที่สร้างผลิตภัณฑ์แต่ละชิ้น แต่เป็นการสร้างข้อกำหนดการออกแบบหรือแม่พิมพ์สำหรับผลิตภัณฑ์เหล่านั้น

ดังนั้น แบบพิมพ์เขียวหรือแม่พิมพ์ที่สร้างขึ้นจากการพัฒนาผลิตภัณฑ์ใหม่จึงถูกนำไปใช้ซ้ำๆ ในโรงงานเพื่อผลิตผลิตภัณฑ์ที่เหมือนกันจำนวนมาก

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

แม้ว่าอำนาจทางเศรษฐกิจของบุคคลและสังคมอาจผันผวนตามสภาวะเศรษฐกิจ แต่ความสามารถที่ได้รับการพัฒนาขึ้นนั้นโดยพื้นฐานแล้วจะคงอยู่ถาวร

แม้ว่าจะลดลง ก็ถือเป็นการเสื่อมถอยมากกว่าการผันผวนขึ้นลงของความเจริญรุ่งเรืองทางเศรษฐกิจ

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

และในบรรดาผลิตภัณฑ์ ความสามารถ ความรู้ และเทคโนโลยีที่เป็นผลลัพธ์ของการพัฒนาเหล่านี้ บางส่วนสามารถนำไปสู่การพัฒนาในลำดับถัดไปได้

ด้วยการพัฒนาผลลัพธ์ที่เป็นประโยชน์ดังกล่าว ขอบเขตของการพัฒนาก็จะกว้างขึ้น และประสิทธิภาพกับคุณภาพก็จะดีขึ้นด้วย

การพัฒนาซอฟต์แวร์ที่ขับเคลื่อนด้วย AI

โดยทั่วไปแล้ว การพัฒนาต้องใช้เวลาและความพยายามอย่างมาก โดยเฉพาะอย่างยิ่งเมื่อสังคมก้าวหน้าและสิ่งต่างๆ มีความซับซ้อนมากขึ้น การสร้างสิ่งใหม่ๆ ก็ยิ่งยากขึ้นไปอีก

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

ในสถานการณ์นี้ วิสัยทัศน์ในอนาคตที่ตัวแทนอัตโนมัติที่ใช้ AI เชิงสร้างสรรค์จะกลายเป็นศูนย์กลางของการพัฒนาซอฟต์แวร์ในฐานะวิศวกรซอฟต์แวร์ กำลังกลายเป็นความจริงแล้ว

ขณะนี้เราอยู่ในช่วงเปลี่ยนผ่าน แม้ว่าเราจะยังไม่สามารถมอบหมายการพัฒนาทั้งหมดให้ AI เชิงสร้างสรรค์ได้ แต่การใช้ AI เชิงสร้างสรรค์อย่างชาญฉลาดสามารถขับเคลื่อนการพัฒนาซอฟต์แวร์ได้อย่างมีประสิทธิภาพ

สิ่งนี้เรียกว่าการพัฒนาซอฟต์แวร์ที่ขับเคลื่อนด้วย AI

การพัฒนาแบบเน้นการพัฒนา

เมื่อ AI เชิงสร้างสรรค์ทำให้การพัฒนาซอฟต์แวร์มีประสิทธิภาพมากขึ้น มันไม่เพียงแต่ช่วยปรับปรุงการพัฒนาซอฟต์แวร์ที่เป็นเป้าหมายสุดท้ายเท่านั้น แต่ยังช่วยปรับปรุงการพัฒนาซอฟต์แวร์ที่ช่วยในการพัฒนาเองด้วย

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

ดังนั้น ด้วยการพัฒนาซอฟต์แวร์ที่ช่วยในการพัฒนาระหว่างกระบวนการพัฒนาซอฟต์แวร์ ประสิทธิภาพโดยรวมสามารถเพิ่มขึ้นได้ และทรัพย์สินเหล่านี้สามารถนำไปใช้ประโยชน์สำหรับการพัฒนาในอนาคตได้

ตามปกติแล้ว การพัฒนาซอฟต์แวร์เสริมดังกล่าวเป็นเรื่องปกติ แต่ต้องใช้เวลาและความพยายามในการพัฒนาของตัวเอง ซึ่งต้องพิจารณาอย่างรอบคอบและดำเนินการอย่างมุ่งเน้น

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

ด้วยเหตุนี้ การพัฒนาซอฟต์แวร์เพื่อช่วยในการพัฒนาระหว่างกระบวนการพัฒนาซอฟต์แวร์จึงง่ายกว่าเมื่อก่อน

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

เราจะเรียกสิ่งนี้ว่า "การพัฒนาแบบเน้นการพัฒนา"

ในการฝึกฝนการพัฒนาแบบเน้นการพัฒนา เราต้องมีนิสัยในการสังเกตการพัฒนาซอฟต์แวร์ของตนเองอย่างเป็นกลาง พิจารณาว่าส่วนใดที่สามารถจัดการได้โดยซอฟต์แวร์และส่วนใดที่มนุษย์เท่านั้นที่สามารถจัดการได้ พร้อมกับทักษะในการพัฒนาซอฟต์แวร์เสริมดังกล่าว

นอกจากนี้ AI เชิงสร้างสรรค์ยังสามารถนำไปรวมไว้ในเครื่องมือซอฟต์แวร์เหล่านี้ได้ ด้วยการฝังไว้ในซอฟต์แวร์ ซึ่งแตกต่างจากเอเจนต์ AI เชิงสร้างสรรค์ ขอบเขตของการประมวลผลสามารถจำกัดได้ในระดับหนึ่ง และสามารถกำหนดเส้นทางได้

ในขณะที่เอเจนต์ AI สามารถบรรลุผลลัพธ์ที่คล้ายกันผ่านพร้อมต์ ซอฟต์แวร์ที่มี AI เชิงสร้างสรรค์แบบฝังสามารถเพิ่มความแม่นยำได้ง่ายขึ้นโดยการรวมทั้งโปรแกรมและพร้อมต์เข้าด้วยกัน

หากสามารถฝึกฝนการพัฒนาแบบเน้นการพัฒนาได้ โครงการที่สองจะแสดงให้เห็นถึงการปรับปรุงทั้งคุณภาพและต้นทุนเมื่อเทียบกับโครงการแรก ยิ่งไปกว่านั้น ในแต่ละโครงการถัดไป—โครงการที่สาม สี่ และอื่นๆ—การปรับปรุงจะยังคงสะสมต่อไป

สิ่งนี้แตกต่างอย่างสิ้นเชิงจากการใช้ AI เชิงสร้างสรรค์เพื่อพัฒนาซอฟต์แวร์เท่านั้น ช่องว่างที่สำคัญจะเกิดขึ้นเมื่อเวลาผ่านไประหว่างทีมที่เพียงแค่เชี่ยวชาญเครื่องมือ AI เชิงสร้างสรรค์กับทีมที่ฝึกฝนการพัฒนาแบบเน้นการพัฒนา

การทดสอบที่ขับเคลื่อนด้วยการปรับโครงสร้างโค้ด (Refactoring-Driven Testing)

มีแนวคิดที่เรียกว่า Test-Driven Development (TDD) ซึ่งมีการออกแบบการทดสอบตามข้อกำหนดก่อน แล้วจึงพัฒนาซอฟต์แวร์ให้ผ่านการทดสอบเหล่านั้น

ในตอนแรก ผมก็คิดเช่นกันว่าด้วยการใช้ AI เชิงสร้างสรรค์ จะสามารถพัฒนาโปรแกรมทดสอบสำหรับการทดสอบอัตโนมัติได้อย่างง่ายดาย ทำให้ TDD เป็นไปได้

อย่างไรก็ตาม เมื่อผมเริ่มฝึกฝนการพัฒนาแบบเน้นการพัฒนา ผมก็เชื่อว่าการคิดเกี่ยวกับการทดสอบก่อนการนำไปใช้งานไม่ได้เป็นแนวทางที่เหมาะสมที่สุดเสมอไป

โดยเฉพาะอย่างยิ่งสำหรับซอฟต์แวร์เช่นเว็บแอปพลิเคชันที่เกี่ยวข้องกับแง่มุมส่วนตัว เช่น การใช้งานและการออกแบบภาพ ซึ่งผู้ใช้โต้ตอบโดยตรง ผมตระหนักว่าการรันและโต้ตอบกับซอฟต์แวร์จริงมีความสำคัญมากกว่าการทดสอบแบบละเอียด

นั่นเป็นเพราะว่าหากมีความไม่พอใจอย่างมากในระดับ UI/UX หลังจากโต้ตอบกับมันแล้ว ก็มีความเป็นไปได้ที่จะต้องการเปลี่ยนส่วนพื้นฐาน เช่น เฟรมเวิร์ก สถาปัตยกรรมพื้นฐาน โมเดลข้อมูล หรือกรณีการใช้งาน

ในโครงการพัฒนาซอฟต์แวร์ส่วนตัวปัจจุบันของผม ผมสังเกตเห็นปัญหาเกี่ยวกับความยืดหยุ่นของฟีเจอร์และประสิทธิภาพ และสุดท้ายก็เปลี่ยนเฟรมเวิร์กสองตัวไปใช้ตัวอื่น

ผมยังต้องทบทวนการประมวลผลบางส่วนทั้งหมดเนื่องจากการใช้หน่วยความจำที่ไม่มีประสิทธิภาพ

เป็นช่วงเวลาของการปรับโครงสร้างโค้ดนี่เองที่การทดสอบกลายเป็นสิ่งที่ต้องพิจารณาอย่างมีสติเป็นอันดับแรก

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

อย่างไรก็ตาม หากการพัฒนาค่อนข้างก้าวหน้าแล้วและมีหลายรายการที่ต้องตรวจสอบ การทดสอบจะจำเป็นเพื่อยืนยันว่าการปรับโครงสร้างโค้ดไม่ได้นำข้อบกพร่องหรือข้อผิดพลาดทางฟังก์ชันมาด้วย

ดังนั้น แนวทางในการสร้างโปรแกรมทดสอบเมื่อการพัฒนาดำเนินไปในระดับหนึ่งและจำเป็นต้องมีการปรับโครงสร้างโค้ดจึงไม่ใช่ความคิดที่ไม่ดี

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

สิ่งนี้สามารถเรียกว่า Refactoring-Driven Testing

บทสรุป

Generative AI กำลังเปลี่ยนแปลงการพัฒนาซอฟต์แวร์อย่างมาก

ในบทความก่อนหน้านี้ ผมได้เขียนเกี่ยวกับความสำคัญของการมุ่งมั่นที่จะเป็น "วิศวกรรอบทิศ" ที่สามารถพัฒนาระบบที่รวมโดเมน โครงสร้างพื้นฐาน และสภาพแวดล้อมการทำงานต่างๆ เข้าด้วยกัน ซึ่งก้าวข้ามขีดจำกัดของวิศวกร Full-Stack แบบดั้งเดิม

ผมยังได้เขียนบทความที่ชี้ให้เห็นว่าเรากำลังเข้าสู่ยุคของ "การพัฒนาที่เน้นประสบการณ์และพฤติกรรม" ซึ่งไม่ใช่การมุ่งเน้นที่การทำให้ข้อกำหนดสอดคล้องกับการใช้งาน แต่เป็นการปรับปรุงประสบการณ์ผู้ใช้ผ่านพฤติกรรมของซอฟต์แวร์

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