สวัสดีครับ
หลังจากใช้เวลานานในการคิดว่าจะเขียนอะไรดี ก็คิดได้ว่านำเอาความรู้ที่ได้จากการไปเรียนทบทวนเรื่องวิศวกรรมซอฟต์แวร์มาเล่าสู่กันฟังดีกว่า เรื่องที่จะเล่านี้ก็คือ การเขียน Specification ในรูปแบบหนึ่งซึ่งอาจจะใหม่สำหรับบางคน เรียกว่า Algebraic Specification (ชื่อภาษาไทยว่าอะไร ไปหาเอาเองนะครับ)
Algebraic Specification เป็นรูปแบบหนึ่งของ Formal Specification (อย่าเพิ่งงงนะครับ) ในการเขียน specification รูปแบบนี้จะใช้คณิตศาสตร์เข้ามาช่วยเพื่อให้เห็นการติดต่อระหว่าง module หรือ component ที่ชัดเจน
แล้วมันต่างจากที่เขียนอยู่ยังไง?
ถ้าคุณเขียน specification พรรณนาด้วยภาษามนุษย์ยาวเป็นหน้า ๆ อันนั้นเรียกว่า form-based specification ครับ เป็นวิธีการเขียนที่มนุษย์อ่านแล้วเข้าใจมากกว่า แต่ในการใช้ภาษาเขียนนั้น อาจจะเกิดความกำกวมได้ครับ ประเภทที่คนอ่าน อ่านแล้วงง อ่านแล้วรู้สึกว่ามีหลายความหมายหรือเข้าใจไม่ชัดเจนซึ่งอาจเป็นผลมาจาก Requirement definition และ Requirement specification ที่กำกวมเช่นเดียวกัน
ดังนั้นจึงมีผู้ปราดเปรื่องบางท่านคิด Algebraic specification ขึ้นมาซึ่งหน้าตาเป็นดังนี้
ARRAY (Elem: [Undefined -> Elem]) |
sort ArrayImports INTEGER |
DescriptionArrays are collections of elements of generic type Elem. They have a lower and upper bound (discovered by the operations First and Last). Individual elements are accessed via their numeric index.Create takes the array bounds as parameters and creates the array, initializing its values to Undefined. Assign creates a new array which is the same as its input with the specified element assigned the given value. Eval reveals the value of a specified element. If an attempt is made to access a value outside the bounds of the array, the value is undefined. |
OperationsCreate (Integer, Integer) -> ArrayAssign (Array, Integer, Elem) -> Array
First (Array) -> Integer Last (Array) -> Integer Eval (Array, Integer) -> Elem |
AxiomsFirst (Create (x, y)) = xFirst (Assign (a, n, v)) = First (a)
Last (Create (x, y)) = y Last (Assign (a, n, v)) = Last (a) Eval (Create (x, y), n) = Undefined Eval (Assign (a, n, v), m) = if m < First (a) or m > Last (a) then Undefined else if m = n then v else Eval (a, m) |
จะสังเกตได้ว่าอย่างไรเสียก็ต้องมีคำอธิบายที่มนุษย์เข้าใจอยู่บ้างใช่ไหมครับ แต่ในส่วนที่เพิ่มเข้ามาคือ operations และ axioms การใช้คณิตศาสตร์ทำให้เราสามารถเห็น input output ของแต่ละการทำงานชัดเจน ลองเปรียบเทียบสองตัวอย่างนี้ดูนะครับ
“สิ่งมีชีวิตสามารถกินอะไรก็ได้ที่กินได้”
Eat (Life, Eatable)
ทั้งนี้ที่ Algebraic specification ยังไม่เป็นที่นิยมก็เพราะว่าผู้ใช้เข้าใจยากครับ ตอนทวนสอบความต้องการอาจจะต้องอธิบายกันหัวหมุน แต่ข้อดีของมันก็น่าทึ่งเพราะคนที่อ่านเข้าใจก็จะเห็นส่วนการติดต่อเชื่อมโยงกันชัดเจนระหว่าง operation module หรือ component ทั้งนี้ผู้เขียนกำลังคิดอยู่ว่าจะเอาเจ้าสิ่งนี้มาทำประโยชน์ได้อย่างไร ถ้าคิดออกแล้วจะเอามาเล่าให้ฟังนะครับ
(0.0″)