4 สาเหตุสำคัญที่ทำให้ Automated Testing ล้มเหลว

Posted by kannique On January - 30 - 20107 COMMENTS
1 Star2 Stars3 Stars (No Ratings Yet)
Loading ... Loading ...

ความเดิม

ความเดิมจากบทความที่ผมขอให้เพื่อนๆร่วมแชร์ประสบการณ์ว่าทำไม Automated Testing ล้มเหลวนั้น ต้องขอบคุณคุณ AMp และคุณ zyracuze ที่ช่วยออกความคิดเห็นที่ผมก็เห็นด้วยว่าเป็นสาเหตุที่สำคัญของความล้มเหลวที่เกิดขึ้นเลยหละครับ ผมเองก็รวบรวมข้อมูลจากแหล่งอื่นๆด้วยก่อนสรุปมาเป็น 4 สาเหตุสำคัญที่ทำให้ Automated Testing ล้มเหลวพร้อมทั้งแนวทางป้องกันปัญหา

Comments_from_members


1. หนุ่ม-สาว QA ไม่ใช่ Developer

คงไม่ใช่เรื่องยากเท่าไรที่จะเขียน Test Script ที่สั่งให้โปรแกรมเปลี่ยนจากหน้าหนึ่งไปอีกหน้าหนึ่ง หรือตรวจสอบดูว่ามีข้อความนี้อยู่บนหน้าจอหรือไม่ แต่มันไม่ง่ายเท่าไรครับในการที่จะเขียน Test Script ที่ฉลาดพอที่จะทดสอบ input ได้ทุกรูปแบบและวนไปทุก field ที่มีบนหน้านั้นๆ รวมไปถึงการเขียน Test Script ที่เื้อื้อต่อการ reuse และ maintenance ครับ


ซึ่งคุณ zyracuze ก็ได้แสดงความเห็นไว้อย่างชัดเจนครับว่า Programming Skills เป็นปัจจัยสำคัญที่จะช่วยให้ QA ทำ Automated Testing ได้สำเร็จครับ

แนวทางป้องกันปัญหา:

  • หา Developer จริงๆมาเป็นพี่เลี้ยงในช่วงแรกๆเพื่อแนะนำให้ QA วางโครงสร้างของ Test Script ได้อย่างถูกต้อง (reusability และ maintainability)
  • QA ที่รับผิดชอบ Test Script ควรจะมี Programming Skills ด้วย
  • จัดเวลาให้ QA หาความรู้เิพิ่มเติมเกี่ยวกับ Programming Practices


2. Automated Test นั้นเปราะบาง

การดูแลรักษา (maintenance) Test Script นั้นเป็นงานที่เสียเวลามากเพราะว่า Automated Test Script นั้น “เปราะบาง” และ “โง่” ครับ การแก้ User Interface นิดเดียว เช่น ชื่อปุ่ม หรือ warning message อาจจะทำให้ Test ทั้งหมดของเรา Fail ได้เลยครับ ถ้าอยากจะใช้งานมันได้ต่อไป เราก็ต้องมาคอยแก้ Test Script เรื่อยๆ


นึกภาพว่า QA ต้องสร้าง Test Cases, เตรียม Test Scripts, ตรวจสอบผลการ Test, และแก้ Test Scripts ทุกครั้งที่ระบบมีการเปลี่ยนแปลง กระบวนการตรงนี้เสียเวลามากกว่าทำ Manual Testing แน่ๆครับ

แนวทางป้องกันปัญหา:

  • แก้ไข Test Script ให้ตรงกับการทำงานจริงๆของระบบอยู่เรื่อยๆ พยายามฝึกให้เป็นนิสัยครับ มันง่ายกว่ามากที่เราจะแก้วันละ 1 Test เมื่อเทียบกับการรอให้เวลาผ่านไป 1 สัปดาห์แล้วค่อยมานั่งแก้ทีเดียวเป็น 10-20 Test ครับ
  • ตกลงกับ Developer ว่ากรุณาอย่าแก้ Interface (ไม่ว่าจะเป็น User Interface หรือ API Interface) ทุกๆวัน … หรือถ้าจะแก้จริงๆก็ให้บอกกันก่อนครับ


3. Automated Test ที่ซับซ้อนและเกี่ยวพันกันมากเกินไป

เป็นเรื่องง่ายครับที่จะเขียนให้ 1 Automated Test Case สามารถตรวจสอบได้หลายๆ Feature ของระบบ แต่แย่หน่อยครับ…ทำไมหนะหรอ? หนึ่งเป็นเรื่องยากมากๆเลยที่จะดูแลรักษา Test Case ที่ว่านี้ถ้าระบบมีการเปลี่ยนแปลงบ่อยๆ สองถ้า Test Case นี้ fail มันจะยากมากขึ้นในการหาสาเหตุว่าทำไมถึง fail ครับ และสามมันจะกลายเป็นฝันร้ายเลยครับถ้าเราเขียน Automated Test Case ไปขึ้นกับ Test Case ก่อนหน้าและก่อนหน้าครับ


เหตุผลที่จุดนี้เป็นปัจจัยอีกอย่างที่ทำให้ Automated Testing ล้มเหลวก็เพราะว่าเราต้องเสียเวลาอย่างมากในการทำ maintenance, และการหา reproducing steps เมื่อ fail จนสุดท้ายกลับกลายเป็นว่าทำ Manual Testing คุ้มค่ากว่าครับ ดังนั้นเราจึงควรทำให้ Automated Test Case นั้นไม่ซับซ้อนและเป็นอิสระต่อกันให้มากที่สุดครับ มีคนพูดไว้ว่า “ถ้าคุณไม่สามารถอธิบายจุดประสงค์ของ Test Case ได้ด้วยคำ 5 คำหละก็ Test Case ของคุณซับซ้อนเกินไปแล้ว” Test Case ของเพื่อนๆตอนนี้ซับซ้อนเกินไปรึเปล่าครับ?

แนวทางป้องกันปัญหา:

  • เขียน 1 Automated Test Case เพื่องาน 1 งานเท่านั้น ห้ามขาดห้ามเกิน
  • เขียน Automated Test Case ให้เป็นอิสระต่อกัน นั่นจะทำใ้ห้เราสามารถ Run Test Case ไหนก็ได้และเมื่อไรก็ได้ ผลจะออกมา Pass หรือ Fail ก็จะไม่ขึ้นกับ Test Case อื่นๆด้วย
  • แตก Feature ให้ย่อยๆลงมาเพื่อง่ายต่อการเขียน Test Case และเตรียม Test Data ไว้ให้แต่ละ Test Case เลย


4. Automated Test ที่ไม่ค่อยมีประโยชน์

ทั้งคุณ AMp และคุณ zyracuze มีความเห็นตรงกันว่าปัจจัยนี้เป็นหนึ่งในสาเหตุสำคัญที่ทำให้ Automated Testing ของเราล้มเหลวครับ ผมขอขยายความนิดนึงเกี่ยวกับคำว่า “ไม่่ค่อยมีประโยชน์” นั้นหมายถึงว่า เราไปทำ Automated Test Case สำหรับส่วนงานที่ไม่สำคัญ และไม่ถูก Retest บ่อยๆนั่นเองครับ

แนวทางป้องกันปัญหา:

  • เลือก Test ในส่วนที่สำคัญก่อน ถ้ามีเวลาเหลือจริงๆค่อยมาพิจารณาส่วนอื่นๆ
  • ต้องเตรียมแผนที่ชัดเจนเกี่ยวกับ Test Coverage


สรุป

ทั้ง 4 ข้อนี้คือสาเหตุหลักๆที่ทำให้ Automated Testing ล้มเหลวหรือไม่ประสบความสำเร็จตามที่เราคาดหวังไว้ครับ หวังว่าจะเป็นประโยชน์กับเพื่อนๆทุกคนที่สนใจหรือประยุกต์ใช้ Automated Testing อยู่นะครับ


Related posts:

  1. ทางเลือกในการทำ Automated Testing ใน Agile Project
  2. Automated Testing vs. Manual Testing เลือกอะไรดี
  3. ร่วมแชร์ความเห็น…ทำไม Automated Testing ถึงล้มเหลว
  4. Chapterpiece.Meeting.5: The Future of Software Testing
  5. Chapterpiece.Meeting.5.5: The Future of Software Testing (again)

7 Responses to “4 สาเหตุสำคัญที่ทำให้ Automated Testing ล้มเหลว”

  1. AMp says:

    แวะมาคุยอีกรอบครับ (งวดที่แล้วกะจะพิมพ์ยาวๆ หน่อย แต่พอจะตอบจริง ดันลืมไปหมดเลย ^^’)

    โดยปกติแล้วในส่วนงานที่ผมทำนั้น พูดได้ว่าแทบจะไม่มีการเทสจริงๆ จังๆ เลยครับ
    เทสแค่พอเป็นพิธีเท่านั้นครับ ดังนั้นปัญหาที่มักจะเจออยู่บ่อยๆ ก็คือ
    1. แก้จุดนึงไปกระทบอีกจุดนึงโดยที่ไม่รู้ตัว (และไม่ได้ทำ impact analysist อย่างละเอียดพอ)
    2. เทส operation เดิมๆ บ่อยๆ ก็เบื่อ ทำให้การเทสแบบ manual ครั้งหลังๆ นั้น
    ถูกบิดเบือนด้วย “ความเคยชินในการเทส” อาจจะทำให้ไม่เจอ defect อย่างที่ควรจะต้องเจอ

    ซึ่งเท่าที่ผมลองศึกษา automated test นั้น ในผมเข้าใจเองว่า
    automated test นั้นคือ automated unit test
    และถ้ามันเป็นดังที่ผมคิด การทำ automated test นั้นจะมี cost สิ้นเปลืองค่อนข้างมาก
    เพราะถ้าไม่มีใครมาคุมว่า อะไรควรเทส อะไรไม่ควรเทสเนี่ย จะเขียนเทสกันตะบี้ตะบันเลยทีเดียว

    ผมก็เลยมองว่า ถ้าเอา automated test มาใช้เพียงแค่ในระดับ business test
    น่าจะช่วยลด defect ที่เกิดขึ้นได้เยอะพอสมควร(ในขณะที่เสียเวลาไปไม่มากนัก)
    ยิ่งเป็นระบบที่เกี่ยวข้องกับตัวเลข หรือเรื่องเงินๆ ทองๆ นั้น
    ผมรู้สึกว่า defect ส่วนใหญ่จะเกิดขึ้นที่ระดับ business มากกว่า technical ครับ

    ดังนั้น ถ้าระบบเราถูกออกแบบมาเป็น n-Tier ที่แยก business layer ออกมาชัดเจนแล้ว
    การทำ automated test ในระดับ business นั้น น่าจะคุ้มค่า
    มากกว่าไปทำ automated ในระดับ unit function หรือ ui ครับ

    ป.ล. แนวคิดผม ผิดถูกแนะนำด้วยนะครับ เพราะโดยประสบการณ์
    ยังไม่เคยเจอโปรเจกที่มีทีมเทสที่รับผิดชอบงานโดยตรงครับ (เทสกันเองด้วย …. ลูกทุ่งมากๆ :P )

  2. kannique says:

    คุณ AMp ขอบคุณมากครับสำหรับความคิดเห็น

    คุณAMpมีความเข้าใจที่ถูกต้องแล้วครับเกี่ยวกับความจริงที่ว่า “Automated Testing ต้องลงทุนสูงและไม่เหมาะกับการ Test ในทุกๆรูปแบบ” ผมขออนุญาตให้ความเห็นเพิ่มเติมดังนี้ครับ

    1. Automated Testing นั้นสามารถประยุกต์ใช้ได้กับทั้งการทำ Test โดย Developer เช่นพวกงาน Unit Testing และ Functional Testing และการทำ Test โดย Quality Assurance (QA) เช่นงานที่เกี่ยวข้องกับ Performance Testing, และ Regression Testing ครับ ลองอ่านข้อมูลเพิ่มเติมจากบทความนี้ดูนะครับ
    2. ผมเห็นด้วยเลยครับที่จะลองประยุกต์ใช้ Automated Testing กับ Business Layer โดยเฉพาะส่วนที่เกี่ยวกับเงินๆทองๆ ทำไมผมถึงเห็นด้วย? เพราะผมคิดว่าคุณ AMp ได้วิเคราะห์มาอย่างดีแล้วว่างานส่วนนี้คือส่วนที่สำคัญที่สุดในระบบครับ
    3. ผมมองว่าการทำ Automated Testing สามารถประยุกต์ใช้กับงานที่เป็น Unit Testing ได้ค่อนข้างลงตัวนะครับ ทั้งในส่วนที่เป็นทฤษฎี (การเทสส่วนที่เล็กที่สุดที่เป็นอิสระจากกัน) และในส่วนที่เกี่ยวกับเทคโนโลยี (มีตัวช่วยมากมายครับ เช่น xUnit family สำหรับ java programming) จากประสบการณ์ของผมเอง ส่วนใหญ่แล้วการทำงานผิดพลาดของระบบก็มาจากการทำ Unit Testing ที่ไม่ค่อยครอบคลุมนี่แหละฮะ ตัวอย่างเช่นพวก Boundary Testing ต่างๆ [if (x<=0) then... อะไรแบบนี้ครับ] ถ้าเป็นไปได้ลองพิจารณาถึงความคุ้มค่าในการประยุกต์ใช้ Automated Testing กับ Unit Testing ดูนะครับ
    4. เห็นด้วยอย่างยิ่งครับว่า Automated Testing กับ User Interface คือหายนะดีๆนี่เอง ฮ่าๆๆ เพราะว่านอกจาก UI จะเปลี่ยนบ่อยๆแล้ว การใ้ช้ตาคนมองมันจะละเอียดและจับผิดได้ดีกว่าคอมพิวเตอร์เยอะครับ นอกจากนี้การใช้ Manual Testing กับ UI เราจะสามารถทำ Usability Test (ทดสอบความสะดวกในการใช้งานของระบบ) ไปในตัวด้วย
    5. ผมคิดว่าปัญหาทั้งสองข้อที่เกิดขึ้นกับคุณ AMp นั้นก็สามารถแก้ได้ด้วย Automated Testing บวกกับ Regression Test Technique ซึ่งเป็นการตรวจสอบว่าระบบยังใช้งานได้อย่างถูกต้องถึงแม้เราจะแก้ไขหรือเพิ่มเติม feature อะไรลงไป อย่าง Automated Testing ที่เราเตรียมไว้สำหรับ Business Layer เป็นจุดเริ่มต้นที่ดีครับในการที่จะเอามา Reuse ทำเป็น Regression Test Suite ครับผม … เรื่องทำซ้ำๆ คอมพิวเตอร์เก่งกว่าเราแน่นอนครับ เราเอาเวลาไปทำอย่างอื่นที่ไม่น่าเบื่อดีกว่าครับ

    หวังว่าความเห็นผมจะช่วยได้นะครับ

  3. AMp says:

    โอ้วววว ขอบคุณมากครับ ที่ช่วยแนะนำสิ่งดีๆ ให้ :D

  4. deans4j says:

    ปัญหาคือเราไปให้ QA ทำ black box testing กับ system test โดยไม่จำเป็น
    ทำให้สุดท้าย boundary อยู่ที่ UI พอ test จาก UI เข้ามาตัว UI นั่นแหละคือ dependency ที่ mock ทิ้งไม่ได้และอ่อนไหวที่สุด
    คนแก้ UI ก็ไม่ใช่เรา คนแก้ code ก็ไม่ใช่เรา แต่คนซวยคนเหนื่อยกลับเป็นเรา ฟังดูเป็นอาชีพที่น่าสงสารนะครับ
    มา automate test เอาตอน level บนสุด มันยากมากที่จะ test ได้อย่างเต็มประสิทธิภาพ เพราะทั้งเสียเวลา และก็ไม่ได้หา bug ได้ง่ายเหมือน level ที่อยู่ล่างกว่า
    ผมยังเชื่อว่า automate testing ทำได้ดีในระดับ system test ที่ QA ดูอยู่ ได้ดีในระดับหนึ่ง
    Test case ที่ล้มเหลวจากการ maintain ไม่ได้เพราะตัว test case เองนั่นแหละที่ยุ่งยากและซับซ้อนเกินไป (ต้องมี test case สำหรับ test case อีกไหม?)
    ทำงานเกินตัว หรือ dependency ผูกเต็มไปหมด สุดท้ายพอบางอย่างเปลี่ยน การเปลี่ยนให้ test case sync ตามกลับเป็นว่า effort ที่ใช้แก้ ไม่ได้ scale ตามเลย
    สุดท้าย automated test case ก็ถูกทอดทิ้ง
    พยายามทำ gray box testing ถ้าเป็นไปได้ละกันครับ พยายาม vertical เอา tester ไปอยู่ใน project นั้น นั่งรวมกลุ่มกับ developer ไม่ใช่นั่งรวมกลุ่มกันเองกับ tester
    พอเราเป็นส่วนหนึ่งของทีมที่พัฒนา สิทธิ์ access และ loop feedback มันเร็วกว่าเยอะครับ ตัดปัญหา เขา vs เรา ไปได้ด้วย
    บริษัทเดียวกัน ทำโปรเจ็กต์เดียวกันก็นั่งอยู่ใกล้ๆ กันแหละครับ จัดทัพแบบ vertical ผสมหลาย role ให้หลากหลาย การ test จะได้ง่ายขึ้นเร็วขึ้น จะได้ไม่ต้องรอให้ไปให้ถึงบนสุดเพื่อให้รู้ว่ามันพัง

  5. kannique says:

    deans4j says:

    พยายามทำ gray box testing ถ้าเป็นไปได้ละกันครับ พยายาม vertical เอา tester ไปอยู่ใน project นั้น นั่งรวมกลุ่มกับ developer ไม่ใช่นั่งรวมกลุ่มกันเองกับ tester

    เป็นข้อแนะนำที่ดีมากครับ “พูดกันมากขึ้น เข้าใจกันมากขึ้น” การทำงานร่วมกันระหว่าง Developer และ QA เป็นปัจจัยสำคัญที่ช่วยให้เรากรอง bugs ออกจากระบบได้เร็วขึ้น ทีมที่ผมทำงานอยู่ก็ใช้หลักการเดียวกันนี้โดยทำงานร่วมกันตั้งแต่ Requirement Analysis – Product Release เลยครับ ได้ผลดีมากฮะ คอนเฟิร์ม!!!

    อ้อ … ขอบคุณที่ช่วยเพิ่มเติมข้อมูลเกี่ยวกับสาเหตุที่ทำให้ Automated Testing ล้มเหลวด้วยครับ

  6. [...] Link: 4 สาเหตุสำคัญที่ทำให้ Automated Testing ล้มเหลว [...]

  7. [...] จากบทความก่อนหน้าที่ผมได้รวบรวมปัจจัยหลัก 4 [...]

Leave a Reply