Sunday, December 18, 2005

Fitnesse

ว่าจะเขียนถึง Testing Framework ตัวนี้มานานแล้ว
วันนี้เห็นว่าเขาปรับปรุงหน้า web page ของเขาสวยงามดีแล้ว
ก็เลยได้ฤกษ์ทดลองเสียที

ถ้าสงสัยว่ามันต่างจากพวก xUnit อย่างไร
ก็ลองดู quote นี้

xUnit: Building the Code Right

Fitnesse: Building the Right Code

jUnit เป็น Tool ที่ programmer ใช้ช่วยให้
ตัวเอง(และคนอื่น) มั่นใจว่า code ทำงานได้ถูกต้อง
แต่คำว่าทำงานได้ถูกนั้น มันมีความหมายอื่นอีก
ก็คือ "ทำงานได้ถูกต้องตามที่ลูกค้าต้องการ"

FitNesse ก็คือ tool ที่เข้ามาช่วยทำ Acceptance test
โดยการใช้ wiki เข้ามาเป็นช่องทางในการสื่อสารระหว่าง
ลูกค้า กับ developer โดยลูกค้าจะเป็นคน
กำหนดข้อมูลตัวอย่างว่า อะไรที่ควรทำได้ และอะไรที่ไม่ควรทำ
ไว้ใน wiki page
จากนั้นก็สั่งให้ fitnesse run test (จากการ click ใน wiki นั้นเองเลย)
ซึ่งผลลัพท์ที่ได้จากการ run ก็จะนำมา render เปรียบเทียบกับ
ค่าที่ลูกค้าคาดหวังว่าจะได้ ซึ่งเป็นการ feedback
ถึง status ของโปรแกรม ว่าทำงานถูกต้องหรือไม่

ลองมาดูตัวอย่างการใช้งานแบบง่ายๆดู
  • เริ่มด้วย customer สร้าง page ที่กำหนด ค่า input และ output
    ที่คาดหวังว่าจะเป็นก่อน
    (สามารถสร้างใน excel แล้วค่อย import เข้ามาก็ได้)



  • tester จะ edit page เพื่อใส่ class ที่รับผิดชอบ testcase นี้
    รวมทั้งกำหนด classpath ด้วย



  • หน้าตา java code ที่อยู่เบื้องหลัง test case นี้
    import fit.ColumnFixture;

    public class Wage extends ColumnFixture {

    public String givenWage;

    private BigDecimal getGivenWage() {
    return new BigDecimal(givenWage).setScale(2);
    }

    public String roundWage() {
    BigDecimal tmp = getGivenWage();
    ...
    return tmp.toString();
    }

    }


  • เมื่อต้องการ จะ test ก็เพียงแต่กดปุ่ม "test" ที่อยู่ข้างซ้ายของจอ
    ลองดูตัวอย่างผลลัพท์ที่ได้



    สีแดงแสดง error, ส่วนสีเขียวแสดงว่าค่าถูกต้องตรงตามที่คาดหวังไว้


ตัวอย่างที่แสดง เป็นตัวอย่างง่ายๆ
ถ้าอยากเห็นตัวอย่างการใช้งานจริง
(ซึ่งต้องการอะไรที่ซับซ้อนกว่าตัวอย่างนี้)
ลองเข้าไปที่นี่
SuiteAcceptanceTests อันนี้เป็น test ที่ fitnesses test ตัวมันเอง

Update
fitnesse สามารถใช้กับ java, .net, ruby, Python
, Delphi, Smalltalk, Perl

Related link from Roti

3 comments:

Mk said...

ใช้ camino รึครับ

มันเร็วดี mac-like ดี แต่สุดท้ายผมก็ถอยกลับไปใช้ firefox เพราะติด extension หลายตัว

bact' said...

สะดวกดีนะครับ น่าจะช่วยให้(ฝ่ายเทคนิคของ)ลูกค้า สื่อสารกับคนอิมพลีเมนต์ได้ดีขึ้น
+ บังคับขั้นตอนการทำ spec/testcase ไปในตัว

แต่ยังไงก็ตาม ในเรื่องการทดสอบ ผมว่ามันก็ไม่ต่างจากพวก xUnit เท่าไหร่นัก
ในแง่ที่ว่า เป็นการทดสอบโดยใช้ test case
มีชุดข้อมูลเข้า-ข้อมูลออกที่คาดหวัง (ซึ่งเป็นไปได้ยาก->เป็นไปไม่ได้ที่จะครอบคลุมทุกกรณี)
แต่ไม่ได้ทดสอบกับตัวกฏ/โมเดลของโปรแกรม

ถ้าเอาเรื่อง design by contract บวกเข้าไปด้วย จะทำให้มันรัดกุมขึ้นมั๊ยเนี่ย..

----

code right vs right code
ไปเจอใน Formal verification

Validation: "Are we building the right product?",
i.e., does the product do what the user really requires.

Verification: "Are we building the product right?", i.e., does the product conform to the specifications.

... แปล(แบบบริษัทซอฟต์แวร์ที่ต้องปวดหัวทำนองนี้บ่อย ๆ)ว่า บางทีสิ่งที่ลูกค้าบอกมา (spec) ก็ไม่ได้ตรงกับที่ลูกค้าต้องการจริง ๆ (requirement) (และกลับกัน) ! :P

polawat phetra said...

mk
==
ผมใช้ camino ตอน test program ครับ
ปกติใช้ safari
ส่วน firefox มันหน่วงๆ ก็เลยไม่ค่อยได้ใช้

bact'
===
เห็นด้วยนะว่า testcase มันก็เหมือนกับ xUnit
กำลังมองอยู่เหมือนกันว่า จะ implement เป็นแบบ
functional test ได้อย่างไง