รู้จักกับ Algebraic Specification

สวัสดีครับ

หลังจากใช้เวลานานในการคิดว่าจะเขียนอะไรดี ก็คิดได้ว่านำเอาความรู้ที่ได้จากการไปเรียนทบทวนเรื่องวิศวกรรมซอฟต์แวร์มาเล่าสู่กันฟังดีกว่า เรื่องที่จะเล่านี้ก็คือ การเขียน 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  ทั้งนี้ผู้เขียนกำลังคิดอยู่ว่าจะเอาเจ้าสิ่งนี้มาทำประโยชน์ได้อย่างไร ถ้าคิดออกแล้วจะเอามาเล่าให้ฟังนะครับ

1 thought on “รู้จักกับ Algebraic Specification”

Comments are closed.