Our SuccessKnowledges
NEXTZY Logo
Crews
Chat
Talk with Team
NEXTZY Logo
NEXTZY
Chat
Home>Knowledges

มอง Test ให้เป็น Layer ช่วยเพิ่มคุณภาพให้ Product เราอย่างไร

Share:

มอง Test ให้เป็น Layer ช่วยเพิ่มคุณภาพให้ Product เราอย่างไร

Table of contents

  • Test process
  • หน้าที่รับผิดชอบของแต่ละ layer
  • ในส่วนของ Developer
  • Unit testing
  • Integration testing
  • สรุป
Nonthawit

Nonthawit

CEO | Engineer | Designer

VIEW

7,622

CATEGORY

Technical

LAST UPDATED

February 19, 2017

Nonthawit

Nonthawit

CEO | Engineer | Designer

VIEW

7,622

CATEGORY

Technical

LAST UPDATED

February 19, 2017

หลังจากเราได้เขียน test มาได้ซักพัก เจอ pain อยู่อย่างหนึ่งคือเวลาเขียนๆไป เราจะเกิดคำถามตลอดว่า code ในส่วนนี้เราควรเขียน test ด้วยไหมน้าาา? ทำให้คิด test case อะไรออกก็ยัดมันลงไปหมด ทำให้เขียน test ออกมาค่อนข้างเละและไม่เป็นระเบียบเอาซะเลย เราจึงค่อยๆหาศึกษาเพิ่มเติมและพบว่าจริงๆแล้ว test มันก็มี layer นะ วันนี้เราจึงจะมาแชร์การมอง test ให้เป็น layer ช่วยให้ชีวิตการเขียน test เรา สนุกขึ้น 😎

แต่ก่อนอื่นต้องเข้าใจภาพรวม Test proccess ที่เรานิยมใช้กันตอนนี้ก่อน

Test process

process ที่เราจะหยิบมาพูดเป็นส่วนหนึ่งของ agile อยู่ละ มันคือ V-Model นั่นเอง

V-Model

layer ของการ test จึงมีอยู่ 4 ระดับ

Layer 1 : Unit testing หรือ Component testing

ในโลกของ test หน่วย หรือ unit ที่เล็กที่สุดคือ “method” ใน layer นี้หน้าที่ของเราคือ test แค่ระดับ method อย่างเดียวไม่ต้องไปสนใจอย่างอื่น สนแค่ logic ข้างใน method นั้นว่าทำงานได้ตามที่เราต้องการไหม

Layer 2 : Integration testing

ชื่อก็บอกไว้ตรงตัว Integration = การรวมเข้าด้วยกัน คือการ test ระหว่าง class-to-class ว่าเรียก method ระหว่าง class ถูกต้องตามที่เราวางไว้หรือไม่ ใน layer นี้เราสนใจแค่นี้ จะเห็นว่าเราไม่ยุ่งใน method เหมือน unit test เลย

note: ถ้าศัพท์ทางการหน่อยเราเรียกกันว่า test behavior ระหว่าง class

Layer 3 : System testing

คล้ายๆ กับ integration testing แต่มองขึ้นมาอีกระดับ มันคือการ test ทั้งระบบ นั่นเอง พูดในอีกแง่คือการยก real-life scenario เข้ามา test มากกว่า จึงทำให้รายละเอียด process ด้านในของ layer นี้ก็ต่างจาก integration testing นะ เป็นการมองภาพรวมทั้งระบบ

BONUS: what difference between integration and system testing

Layer 4 : User acceptance testing ( UAT )

คือ layer บนสุดของ v-model เป็นระดับที่เอา user จริงๆเข้ามานั่ง test product ของเรา เพื่อดูพฤติกรรมของ user ที่มีต่อ product เราว่าเป็นตามที่เราได้คาดการไว้หรือไม่

note: จะเห็นว่าแต่ละ layer มีวัตถุประสงค์ในการ test คนละแบบ เรากำลังอยู่ layer ไหนให้สนแค่ใน layer นั้นอย่าเอามาปนกันดีที่สุด

เมื่อเข้าใจ process ทั้ง 4 ระดับแล้วเรามาต่อกันที่

หน้าที่รับผิดชอบของแต่ละ layer

SA + Tester ส่วนใหญ่แล้วจะยุ่งกับ layer 3 และ 4 เป็นส่วนใหญ่

Developer แน่นอนว่าต้อง ยุ่งกับ layer ระดับล่าง คือ layer 1, 2 และ 3

แต่มีอยู่ 1 layer ที่ intercept กันคือ System testing อันนี้แล้วแต่บริษัทว่าจะให้ใครเป็นคนดูแล หรือรวมๆกัน

ถ้าเป็น SA + Tester ก็ทำ test case ต่างๆ และเพิ่มเติมจะใช้ พวก Automate test เพื่อ test ทั้งระบบ เช่น Robot framework, Cucumber เป็นต้น เพราะเป็นภาษาที่ค่อนข้าง high level ใกล้กับภาษามนุษย์มาก

ถ้าเป็น Developer อาจแยกเป็น platform ให้หัวหน้าทีมแต่ละทีมเป็นคนดู เช่น mobile, web เพื่อ test ทั้งระบบของ platform นั้นก็ได้

เนื่องจากเจ้าของบล็อกเป็น Android Developer วันนี้เราจะมาแชร์ใน มุมของ develop เนาะ 😎

ในส่วนของ Developer

อย่างที่เราบอกไว้ตอนแรก ตอนที่เราไม่ได้มอง test เป็น layer ทำให้เวลาเขียน test มันปนกันมั่วไปหมด ไม่เป็นระบบเอาซะเลยถึงเวลา พอ requirment บางอย่างเปลี่ยน กลับมาแก้ก็ไล่ยากซะเหลือเกิน 😭

เรามาลองดู code ตัวอย่างง่ายๆกัน (สมมุตว่าเราใช้ PowerMockito ในการ mock object ต่างๆนะ)

สมมุติเราใช้ MVP เป็นโครงในโปรเจค class มีดังนี้

Unit testing

จากรูปตัวอย่างด้านบนเราเขียน Unit test สำหรับ Activity ทำการ mock presenter ให้เรียบร้อย

หน้าที่ใน layer นี้เรา test แค่ logic ที่อยู่ใน method แค่นั้นว่าให้ผลลัพธ์ที่เราต้องการหรือไม่ และจะสังเกตเห็นว่ามีบาง method เรียก method ใน presenter แต่เราไม่ได้เขียนใน layer นี้(ถ้าเป็นเมื่อก่อนเราคงยัดไว้หมดละ) เพราะมันเป็นส่วนของ integration testing นั่นเอง(อย่าลืมว่าตอนนี้เราอยู่ใน layer อะไร)

Unit test ใน presenter ก็เช่นกันเรา test แค่ logic ใน method นั้นๆพอถ้ามีการเรียกใช้ method ใน class อื่นเอาไว้ test ใน integration testing แทน

ส่วนใน Manager ก็ทำลักษณะเดียวกันขอข้ามเนาะ

Integration testing

ขอยกตัวอย่างแค่ case เดียวก็น่าจะพอเห็นภาพ

Integration testing ระหว่าง Presenter กับ Manager

จะเห็นว่าเราทำการ Test แค่ method เดียวคือ requestService( ) เพราะ เป็น method เดียวที่ไปเรียก manager นั่นเอง

note: ในตัวอย่างเราใช้ spy ไปเลย มันคือการใช้ object จริงๆ ที่สามารถ verify(…) ได้นั่นเอง PowerMock จงเจริญ…

ซึ่งใน layer นี้เราสนแค่การ test ระหว่าง class-to-class แค่นั้น เพราะในแต่ละ method เราทำ Unit test ไปแล้วเรียบร้อย

เสร็จแล้วจะไปเขียน Integration test ระหว่าง Activity กับ Presenter หรือ ระหว่าง 3 class ต่ออันนี้ต้องคุยกับทีมครับว่าจำเป็นมากแค่ไหน เพราะใช้แรงพอสมควรเลย แต่ที่แน่ๆ Unit test ใส่ให้ครบทุก class เป็นดีที่สุดครับ 😇

สรุป

layer 1 : Unit testing → สนแค่ในระดับ method

layer 2 : Integration testing → สนแค่ในระดับ class-to-class

layer 3 : System testing

layer 4 : UAT

การมอง test เป็น layer มันทำให้เราเขียน test เป็นระบบมากขึ้น เพราะทำให้เราตระหนักว่าตอนนี้เราอยู่ใน layer อะไร หน้าที่ที่เราต้องเขียนในแต่ละ layer นั้นเป็นอย่างไร รวมไปถึงทำให้ test เราครอบคลุมมากขึ้นด้วย

มันจึงตามมาด้วย bug ที่น้อยลงแน่นอนครับ

วันนี้ไว้แค่นี้ก่อนครับเจอกัน blog หน้าาา

อย่าลืม share ให้มนุษย์ Developerคนอื่นด้วยหละ 😎

Share:

KNOWLEDGE

Related Articles

เข้าใจการทำ Selector แบบ Ripple effect
Nonthawit

Nonthawit

CEO | Engineer | Designer

เข้าใจการทำ Selector แบบ Ripple effect

20 สิ่ง ที่ได้หลังจากเป็น Android developer ที่ Nextzy 3 เดือน
Nonthawit

Nonthawit

CEO | Engineer | Designer

20 สิ่ง ที่ได้หลังจากเป็น Android developer ที่ Nextzy 3 เดือน

บทความนี้แชร์ประสบการณ์ 3 เดือนแรกของการทำงานเป็น Android Developer ที่ Nextzy ครอบคลุมทั้งด้าน technical เช่น MVP architecture, Android Lifecycle, ProGuard, Git workflow และการเขียน Unit Test รวมถึงด้าน soft skill อย่างการสื่อสารกับทีม, การแชร์ความรู้, และการเขียนโค้ดให้ readable และยืดหยุ่น นอกจากนี้ยังสะท้อนวัฒนธรรมองค์กรที่เน้นทีมเวิร์ค การ review โค้ด และบรรยากาศการทำงานที่สนุกสนาน ซึ่งล้วนช่วยลด learning curve และพัฒนาทักษะได้เร็วกว่าการเรียนรู้คนเดียว

[Tip/Trick] วิธีติดต่อกับ WebView ผ่าน JavascriptInterface มันเท่มาก
Nonthawit

Nonthawit

CEO | Engineer | Designer

[Tip/Trick] วิธีติดต่อกับ WebView ผ่าน JavascriptInterface มันเท่มาก

NEXTZY Logo
NEXTZY
48/27 Ratchadaphisek Rd, Samsen Nok, Huai Khwang, Bangkok 10310

Base at Thailand

Thailand

Home

Crews

Success

Download press kits

Knowledges

Chat

Talk with team

SCHEDULE