Testability Tactics

ขอแนะนำ tactic สำหรับการออกแบบสถาปัตยกรรมเพื่อให้ทดสอบได้ง่ายและสะดวกกันครับ มีไม่มากนัก แต่ออกแบบและจัดการไม่ง่ายนัก

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

มาดู testability tactic หลักๆ กันครับ…

Input/Output คือ การทดสอบเพื่อดูค่า output ว่าถูกต้องสันพันธ์กับ input หรือไม่ ได้แก่

Record/Playback

  • Record/Playback คือ การมีซอฟต์แวร์หรือ test script บันทึกการ input ค่าฟีลด์หรือพารามิเตอร์ต่างๆ มักใช้กับการทดสอบผ่านหน้าจอ โดยซอฟต์แวร์จะบันทึกแอ็กชั่นต่างๆ ในการ input ค่าลงฟอร์ม เปรียบเทียบคล้ายการบันทึกวิดีโอ เมื่อ input ค่าเสร็จก็หยุดการบันทึกแล้ว save เมื่อต้องการทดสอบ test case นี้อีกก็สามารถมา play back ได้ใหม่โดยไม่จำเป็นต้องเสียเวลามา input ค่าทั้งหมดใหม่อีกครั้ง
  • Record/Playback อาจใช้ทดสอบแบบไม่ผ่านหน้าจอก็ได้ อาทิ ใช้ test tool หรือเขียน test script โดยกำหนดว่าอิลิเม้นต์ที่ต้องการทดสอบต้องส่งพารามิเตอร์อะไรเข้าไปบ้าง จากนั้นก็กำหนดค่าให้กับพารามิเตอร์ ซึ่งต้องสอดคล้องกับ operation specification ของอิลิเม้นต์นั้นๆ เทคนิคนี้ทำให้เมื่อต้องการทดสอบก็สามารถนำมา run ได้โดยไม่ต้องป้อนค่าใหม่ทุกครั้ง คล้ายกับการทดสอบผ่านหน้าจอนั่นเอง

Separate Interface from Implementation

    • Separate Interface from Implementation คือ การแยกส่วนอินเตอร์เฟสออกจากส่วนอิมพลีเม้นต์โดยให้มี Coupling ต่ำๆ เมื่อจะทดสอบอินเตอร์เฟสใดๆ ก็ใช้การสร้าง implementation หลอกๆ ขึ้นมา บางทีเรียกว่า ‘Mock’ โดย implementation นี้ต้องอิมพลีเม้นต์อินเตอร์เฟสเดียวกับ implementation ตัวจริง

  • Separate Interface from Implementation ช่วยให้ไม่จำเป็นต้องทดสอบส่วน implementation ตัวจริงได้ กรณีที่ implementation ตัวจริงยังพัฒนาไม่เสร็จ หรือไม่ใช่ประเด็นเกี่ยวข้องกับการทดสอบของ test case นั้นๆ อาทิ CustomerService ต้องการติดต่อกับ database server เพื่อ query ข้อมูล แต่วัตถุประสงค์ของ test case นี้ไม่สนใจการเชื่อมต่อกับ database server เพราะต้องการทำ unit test ในส่วน CustomerService โดยส่วนเชื่อมต่อกับ database server คืออินเตอร์เฟส CustomerDAO มีคลาส implementation คือ OracleCustomerDAO เราจึงสร้าง implementation ปลอมขึ้นมาชื่อ MockOracleCustomerDAO โดยให้มีการทำงานหลอกๆ ที่ไม่ได้ออกไปเรียก database จริงๆ ทำให้ทดสอบ unit ส่วน CustomerService ได้สะดวก ดังนั้นการออกแบบ test case ที่ดี แต่ละส่วนการทำงานในสถาปัตยกรรมระบบจึงควรมีอินเตอร์เฟสหรือตัวกลางเสมอ

Specialize Access Routes/Interfaces

  • Specialize Access Routes/Interfaces คือ การกำหนดให้มีช่องทางในการเข้าถึงส่วนที่ต้องการทดสอบได้มากกว่า 1 ช่องทาง ซึ่งมีความเฉพาะเจาะจงแตกต่างกันไปตามวัตถุประสงค์ที่ต้องการทดสอบ อาทิ
    • การทดสอบการเรียกใช้ web service ได้กำหนดให้ทดสอบด้วยการเรียกผ่าน 1) หน้าจอส่วนผู้ใช้ 2) ใช้ test script ส่ง request เข้าไปที่ web service โดยตรง 3) ใช้ test script เรียกส่วน implementation ที่อยู่หลัง service interface โดยตรง
    • การทดสอบการดูยอดเงินคงเหลือของธนาคารแห่งหนึ่ง โดยกำหนดให้ทดสอบผ่าน 1) ตู้เอทีเอ็ม 2) เครื่องพนักงานที่สาขา 3) internet banking 4) mobile banking 5) ใช้ test script ทดสอบบนฝั่งเซิร์ฟเวอร์โดยตรง
    • การทดสอบฟังก์ชั่นการทำงาน โดยกำหนดให้มีช่องทางเข้าไปทดสอบคือ 1) ช่องทางสำหรับผู้ใช้ 2) ช่องทางสำหรับ tester
    • เป็นต้น

 

Internal Monitoring คือ การติดตามการทำงานภายในระบบ ได้แก่

  • Built-In Monitors คือ ซอฟต์แวร์หรือกลไกที่อยู่ภายในระบบเพื่อทำหน้าที่ติดตามการทำงานของอิลิเม้นต์ที่กำหนด ซึ่งในระบบหรือในสภาพแวดล้อมอาจมี Built-In Monitor ทำงานอยู่หลายตัวซึ่งติดตามการทำงานของอิลิเม้นต์คนละตัวกันก็ได้ อาทิ
    • ใช้ logging เพื่อบันทึกสถานะการทำงานลงหน้าจอคอนโซลหรือ log file
    • ใช้ software agent ที่ติดตามการทำงานระหว่างระบบกับ database server
    • ใช้ API ของไลบรารี่ของภาษาโปรแกรมหรือเฟรมเวิร์กเพื่อติดตามการใช้ซีพียูและหน่วยความจำของโปรแกรมที่เขียนด้วยภาษาโปรแกรมนั้นๆ
    • เป็นต้น
Advertisements

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s