Guiding an Evolutionary Architecture (การนำทางสถาปัตยกรรมเชิงวิวัฒนาการ)
ถ้า สถาปัตยกรรมของเราไม่หยุดนิ่งแต่วิวัฒนาการและเปลี่ยนแปลงอยู่ตลอดเวลา เราจะมั่นใจได้อย่างไรว่ามันกำลังเติบโตและเปลี่ยนแปลงไปในทางที่เราต้องการ แทนที่จะกลายพันธุ์เป็นก้อนความยุ่งเหยิงขนาดใหญ่ที่จัดการไม่ได้ ใน Building Evolutionary Architectures , 7 ผู้เขียนได้นำเสนอ fitness functions เพื่อช่วยเก็บข้อมูลเกี่ยวกับ "ความเหมาะสม" ของสถาปัตยกรรม เพื่อช่วยให้สถาปนิกตัดสินใจว่าจำเป็นต้องลงมือทำอะไรหรือไม่ จากในหนังสือ:
Evolutionary computing includes a number of mechanisms that allow a solution to gradually emerge via small changes in each generation of the software. At each generation of the solution, the engineer assesses the current state: Is it closer to or further away from the ultimate goal? For example, when using a genetic algorithm to optimize wing design, the fitness function assess[es] wind resistance, weight, air flow, and other characteristics desirable to good wing design. Architects define a fitness function to explain what better is and to help measure when the goal is met. In software, fitness functions check that developers preserve important architectural characteristics.
แนวคิด ของ fitness function คือมันถูกใช้เพื่อเข้าใจสถานะปัจจุบันของคุณสมบัติสำคัญบางอย่าง โดยที่ถ้าคุณสมบัตินั้นเปลี่ยนแปลงเกินขอบเขตที่ยอมรับได้ ก็จำเป็นต้องตรวจสอบการเปลี่ยนแปลงนั้น โดยทั่วไปแล้ว fitness function จะถูกใช้เพื่อมั่นใจว่าสถาปัตยกรรมถูกสร้างให้เป็นไปตามหลักการและข้อจำกัดที่วางไว้
ขอยืมตัวอย่างจาก Building Evolutionary Architectures ลองพิจารณาข้อกำหนดที่ว่าการตอบกลับจากเซอร์วิสหนึ่งต้องได้รับภายใน 100 ms หรือน้อยกว่า คุณสามารถสร้าง fitness function เพื่อเก็บข้อมูลประสิทธิภาพจากเซอร์วิสนี้ อาจจะในสภาพแวดล้อมทดสอบประสิทธิภาพ หรือจากระบบจริงที่กำลังทำงานอยู่ เพื่อมั่นใจว่าพฤติกรรมจริงของระบบตรงตามข้อกำหนด Building Evolutionary Architectures ลงรายละเอียดเรื่องนี้มากกว่านี้อีกมาก และผมขอแนะนำอย่างยิ่งถ้าคุณอยากสำรวจแนวคิดนี้ต่อไป
fitness function สำหรับสถาปัตยกรรมมาในหลายรูปแบบ แต่แนวคิดพื้นฐานคือคุณเก็บข้อมูลจากโลกจริงเพื่อเข้าใจว่าสถาปัตยกรรมของคุณกำลังบรรลุ "ความเหมาะสม" ตามเกณฑ์นั้นหรือไม่ นี่อาจเกี่ยวข้องกับประสิทธิภาพของระบบ code coupling รอบเวลา (cycle time) หรือแง่มุมอื่นๆ อีกมากมาย fitness function เหล่านี้ทำหน้าที่เป็นอีกแหล่งข้อมูลหนึ่งที่ช่วยให้สถาปนิกเข้าใจว่าตัวเองควรเข้าไปมีส่วนร่วมตรงไหน แต่โปรดสังเกตว่าสำหรับผม fitness function จะได้ผลดีที่สุดเมื่อรวมเข้ากับการทำงานร่วมกันอย่างใกล้ชิดกับคนที่กำลังสร้างระบบ fitness function ควรเป็นวิธีที่มีประโยชน์ในการช่วยให้คุณเข้าใจว่าสถาปัตยกรรมกำลังไปในทิศทางที่ถูกต้องหรือไม่ แต่มันไม่ได้ทดแทนความจำเป็นในการพูดคุยกับคนหน้างานจริงๆ อันที่จริง ผมขอแนะนำว่าการกำหนด fitness function ที่ถูกต้องจะต้องอาศัยความร่วมมืออย่างใกล้ชิด