อะไรคือความแตกต่างระหว่างการทดสอบหน่วยการใช้งานการยอมรับและการรวมระบบ (และการทดสอบประเภทอื่น ๆ ที่ฉันไม่ได้พูดถึง)
อะไรคือความแตกต่างระหว่างการทดสอบหน่วยการใช้งานการยอมรับและการรวมระบบ (และการทดสอบประเภทอื่น ๆ ที่ฉันไม่ได้พูดถึง)
คำตอบ:
คุณจะได้รับคำตอบที่แตกต่างกันเล็กน้อยขึ้นอยู่กับที่คุณมอง ฉันอ่านเรื่องนี้เยอะและนี่คือการกลั่นของฉัน อีกครั้งเหล่านี้มีขนเล็กน้อยและอื่น ๆ อาจไม่เห็นด้วย
ทดสอบหน่วย
ทดสอบหน่วยการทำงานที่เล็กที่สุดโดยทั่วไปจะเป็นวิธี / ฟังก์ชั่น (เช่นให้คลาสที่มีสถานะเฉพาะการเรียกใช้เมธอด x ในคลาสควรทำให้ y เกิดขึ้น) การทดสอบหน่วยควรจะเน้นไปที่คุณสมบัติเฉพาะอย่างใดอย่างหนึ่ง (เช่นการเรียกวิธีป๊อปเมื่อสแต็กว่างเปล่าควรจะโยนInvalidOperationException
) ทุกสิ่งที่สัมผัสควรกระทำในหน่วยความจำ นี่หมายความว่ารหัสทดสอบและรหัสที่อยู่ภายใต้การทดสอบไม่ควร:
การพึ่งพาใด ๆ ที่ช้า / ยากที่จะเข้าใจ / เริ่มต้น / จัดการควรถูก stubbed / mocked / อะไรก็ตามที่ใช้เทคนิคที่เหมาะสมเพื่อให้คุณสามารถมุ่งเน้นไปที่หน่วยของรหัสที่ทำ
กล่าวโดยย่อการทดสอบหน่วยนั้นง่ายที่สุดง่ายต่อการดีบักเชื่อถือได้ (เนื่องจากปัจจัยภายนอกที่ลดลง) รวดเร็วในการดำเนินการและช่วยพิสูจน์ว่าหน่วยการสร้างที่เล็กที่สุดของฟังก์ชันโปรแกรมของคุณตามที่ตั้งใจไว้ก่อนที่จะรวมเข้าด้วยกัน ข้อแม้คือแม้ว่าคุณสามารถพิสูจน์ได้ว่าทำงานได้อย่างสมบูรณ์ในการแยกหน่วยของรหัสอาจระเบิดขึ้นเมื่อรวมกันซึ่งนำเราไป ...
การทดสอบบูรณาการ
การทดสอบการรวมสร้างจากการทดสอบหน่วยโดยการรวมหน่วยของรหัสและการทดสอบว่าชุดค่าผสมที่ได้นั้นทำหน้าที่ได้อย่างถูกต้อง นี่อาจเป็นอวัยวะภายในของระบบเดียวหรือรวมหลายระบบเข้าด้วยกันเพื่อทำสิ่งที่มีประโยชน์ อีกสิ่งหนึ่งที่ทำให้การทดสอบการรวมเข้าด้วยกันแตกต่างจากการทดสอบหน่วยคือสภาพแวดล้อม การทดสอบการรวมสามารถและจะใช้เธรดเข้าถึงฐานข้อมูลหรือทำสิ่งที่จำเป็นเพื่อให้แน่ใจว่ารหัสทั้งหมดและการเปลี่ยนแปลงสภาพแวดล้อมที่แตกต่างกันจะทำงานได้อย่างถูกต้อง
หากคุณสร้างรหัสซีเรียลไลซ์เซชั่นและหน่วยทดสอบเครื่องในโดยไม่ต้องสัมผัสดิสก์คุณจะรู้ได้อย่างไรว่ามันจะทำงานเมื่อคุณโหลดและบันทึกลงดิสก์ บางทีคุณลืมที่จะล้างและกำจัดความฝัน บางทีการอนุญาตไฟล์ของคุณไม่ถูกต้องและคุณได้ทดสอบเครื่องในที่ใช้ในสตรีมหน่วยความจำ วิธีเดียวที่จะทราบได้อย่างแน่นอนคือการทดสอบว่า 'จริง' โดยใช้สภาพแวดล้อมที่ใกล้เคียงกับการผลิตมากที่สุด
ข้อได้เปรียบหลักคือพวกเขาจะพบข้อบกพร่องที่การทดสอบหน่วยไม่สามารถเช่นการเดินสายบั๊ก (เช่นอินสแตนซ์ของคลาส A โดยไม่คาดคิดได้รับอินสแตนซ์ที่ว่างของ B) และข้อผิดพลาดของสภาพแวดล้อม เครื่องหลัก 4 ของเพื่อนร่วมงานไม่สามารถผ่านการทดสอบ) ข้อเสียเปรียบหลักคือการทดสอบการรวมแตะรหัสมากขึ้นมีความน่าเชื่อถือน้อยลงความล้มเหลวยากต่อการวินิจฉัยและการทดสอบนั้นยากที่จะรักษา
นอกจากนี้การทดสอบการรวมเข้าด้วยกันไม่จำเป็นต้องพิสูจน์ว่าคุณสมบัติที่สมบูรณ์นั้นใช้งานได้ ผู้ใช้อาจไม่สนใจรายละเอียดภายในของโปรแกรมของฉัน แต่ฉันทำ!
การทดสอบการใช้งาน
การทดสอบการทำงานตรวจสอบคุณสมบัติเฉพาะสำหรับความถูกต้องโดยเปรียบเทียบผลลัพธ์สำหรับอินพุตที่กำหนดเทียบกับข้อมูลจำเพาะ การทดสอบตามหน้าที่ไม่เกี่ยวข้องกับผลกลางหรือผลข้างเคียงเพียงผล (พวกเขาไม่สนใจว่าหลังจากทำ x วัตถุ y มีสถานะ z) พวกมันถูกเขียนขึ้นเพื่อทดสอบส่วนหนึ่งของสเปคเช่น "การเรียกฟังก์ชัน Square (x) พร้อมอาร์กิวเมนต์ของ 2 คืน 4"
การทดสอบการยอมรับ
การทดสอบการยอมรับดูเหมือนจะแบ่งออกเป็นสองประเภท:
การทดสอบการยอมรับมาตรฐานเกี่ยวข้องกับการทดสอบในระบบเต็มรูปแบบ (เช่นการใช้หน้าเว็บของคุณผ่านเว็บเบราว์เซอร์) เพื่อดูว่าการทำงานของแอปพลิเคชันตรงตามข้อกำหนดหรือไม่ เช่น "การคลิกที่ไอคอนซูมควรขยายมุมมองเอกสาร 25%" ไม่มีผลลัพธ์ต่อเนื่องที่แท้จริงเพียงผลลัพธ์ผ่านหรือล้มเหลว
ข้อได้เปรียบคือการทดสอบจะอธิบายเป็นภาษาอังกฤษล้วนและทำให้มั่นใจว่าซอฟต์แวร์โดยรวมนั้นมีคุณสมบัติครบถ้วน ข้อเสียคือคุณได้เลื่อนระดับพีระมิดทดสอบไปอีกระดับหนึ่ง การทดสอบการยอมรับจะสัมผัสกับรหัสที่เป็นภูเขาดังนั้นการติดตามความล้มเหลวอาจเป็นเรื่องยุ่งยาก
นอกจากนี้ในการพัฒนาซอฟต์แวร์แบบว่องไวการทดสอบการยอมรับของผู้ใช้นั้นเกี่ยวข้องกับการสร้างการทดสอบเพื่อสะท้อนเรื่องราวของผู้ใช้ที่สร้างขึ้นโดย / สำหรับลูกค้าของซอฟต์แวร์ระหว่างการพัฒนา หากการทดสอบผ่านหมายความว่าซอฟต์แวร์ควรตอบสนองความต้องการของลูกค้าและสามารถพิจารณาเรื่องราวได้อย่างสมบูรณ์ ชุดการทดสอบการยอมรับนั้นเป็นข้อมูลจำเพาะที่สามารถดำเนินการได้ซึ่งเขียนในภาษาเฉพาะโดเมนที่อธิบายการทดสอบในภาษาที่ใช้โดยผู้ใช้ของระบบ
ข้อสรุป
พวกเขาทั้งหมดเสริม บางครั้งมันก็เป็นประโยชน์ที่จะมุ่งเน้นไปที่ประเภทหนึ่งหรือที่จะหลีกเลี่ยงพวกเขาทั้งหมด ข้อแตกต่างที่สำคัญสำหรับฉันคือการทดสอบบางอย่างมองสิ่งต่าง ๆ จากมุมมองของโปรแกรมเมอร์ในขณะที่คนอื่นใช้การมุ่งเน้นลูกค้า / ผู้ใช้ปลายทาง
สิ่งสำคัญคือคุณรู้ว่าคำเหล่านั้นมีความหมายต่อเพื่อนร่วมงานของคุณอย่างไร กลุ่มที่แตกต่างกันจะมีคำจำกัดความที่แตกต่างกันเล็กน้อยของสิ่งที่พวกเขาหมายถึงเมื่อพวกเขาพูดว่าการทดสอบ "เต็มไปจบ" เช่น
ฉันเพิ่งเจอระบบการตั้งชื่อของ Google สำหรับการทดสอบของพวกเขาเมื่อเร็ว ๆ นี้และฉันชอบมันมาก - พวกเขาข้ามการโต้แย้งโดยใช้ขนาดเล็กปานกลางและใหญ่ สำหรับการตัดสินใจเลือกหมวดหมู่การทดสอบพวกเขาพิจารณาปัจจัยสองสามประการ - ใช้เวลานานแค่ไหนในการรันมันเข้าถึงเครือข่ายฐานข้อมูลระบบไฟล์ระบบภายนอกและอื่น ๆ
http://googletesting.blogspot.com/2010/12/test-sizes.html
ฉันนึกภาพความแตกต่างระหว่างขนาดเล็กขนาดกลางและขนาดใหญ่สำหรับสถานที่ทำงานปัจจุบันของคุณอาจแตกต่างจากของ Google
อย่างไรก็ตามมันไม่ได้เป็นเพียงเกี่ยวกับขอบเขต แต่เกี่ยวกับวัตถุประสงค์ จุดสำคัญของ Mark เกี่ยวกับมุมมองที่แตกต่างกันสำหรับการทดสอบเช่นโปรแกรมเมอร์กับลูกค้า / ผู้ใช้ปลายทางนั้นสำคัญมาก
http://martinfowler.com/articles/microservice-testing/
โพสต์บล็อกของ Martin Fowler พูดเกี่ยวกับกลยุทธ์ในการทดสอบโค้ด (โดยเฉพาะในสถาปัตยกรรมบริการไมโคร) แต่ส่วนใหญ่จะใช้กับแอปพลิเคชันใด ๆ
ฉันจะอ้างอิงจากสไลด์สรุปของเขา:
- การทดสอบหน่วย - ออกกำลังกายซอฟต์แวร์ทดสอบที่เล็กที่สุดในแอปพลิเคชันเพื่อตรวจสอบว่ามันทำงานตามที่คาดไว้หรือไม่
- การทดสอบการรวม - ตรวจสอบเส้นทางการสื่อสารและการโต้ตอบระหว่างส่วนประกอบเพื่อตรวจหาข้อบกพร่องของอินเตอร์เฟส
- การทดสอบส่วนประกอบ - จำกัด ขอบเขตของซอฟต์แวร์ที่ออกกำลังกายไว้ที่ส่วนหนึ่งของระบบภายใต้การทดสอบจัดการระบบผ่านอินเตอร์เฟสรหัสภายในและใช้การทดสอบสองเท่าเพื่อแยกรหัสภายใต้การทดสอบจากส่วนประกอบอื่น ๆ
- การทดสอบสัญญา - ตรวจสอบการมีปฏิสัมพันธ์ที่ขอบเขตของบริการภายนอกที่ยืนยันว่าเป็นไปตามสัญญาที่คาดไว้โดยบริการที่ต้องใช้
- การทดสอบแบบครบวงจร - ตรวจสอบว่าระบบตรงตามข้อกำหนดภายนอกและบรรลุเป้าหมายทดสอบทั้งระบบตั้งแต่ต้นจนจบ
การทดสอบหน่วย - ตามชื่อที่แนะนำวิธีนี้จะทดสอบที่ระดับวัตถุ ส่วนประกอบซอฟต์แวร์แต่ละรายการได้รับการทดสอบเพื่อหาข้อผิดพลาด จำเป็นต้องมีความรู้เกี่ยวกับโปรแกรมสำหรับการทดสอบนี้และมีการสร้างรหัสทดสอบเพื่อตรวจสอบว่าซอฟต์แวร์ทำงานตามที่ตั้งใจหรือไม่
การทดสอบเชิงหน้าที่ - ดำเนินการโดยไม่มีความรู้เกี่ยวกับการทำงานภายในของระบบ ผู้ทดสอบจะพยายามใช้ระบบโดยทำตามข้อกำหนดโดยให้อินพุตที่ต่างกันและทดสอบผลลัพธ์ที่สร้างขึ้น การทดสอบนี้เรียกอีกอย่างว่าการทดสอบแบบปิดกล่องหรือกล่องดำ
การทดสอบการยอมรับ - เป็นการทดสอบครั้งสุดท้ายที่ดำเนินการก่อนที่ซอฟต์แวร์จะถูกส่งมอบให้กับลูกค้า มีการดำเนินการเพื่อให้แน่ใจว่าซอฟต์แวร์ที่พัฒนาขึ้นตรงตามความต้องการของลูกค้าทั้งหมด การทดสอบการยอมรับมีสองประเภท - ประเภทหนึ่งดำเนินการโดยสมาชิกของทีมพัฒนาเรียกว่าการทดสอบการยอมรับภายใน (การทดสอบอัลฟ่า) และอีกประเภทหนึ่งที่ดำเนินการโดยลูกค้าหรือผู้ใช้ปลายทางที่รู้จักกันในชื่อ (การทดสอบเบต้า)
การทดสอบบูรณาการ - โมดูลส่วนบุคคลที่อยู่ภายใต้การทดสอบหน่วยแล้วรวมเข้าด้วยกัน โดยทั่วไปแล้วทั้งสองแนวทางมีดังนี้:
1) จากบนลงล่าง
2) จากล่างขึ้นบน
ง่ายมาก
การทดสอบหน่วย: นี่เป็นการทดสอบที่ทำโดยนักพัฒนาที่มีความรู้เกี่ยวกับการเข้ารหัส การทดสอบนี้เสร็จสิ้นขั้นตอนการเข้ารหัสและเป็นส่วนหนึ่งของการทดสอบกล่องสีขาว เมื่อซอฟต์แวร์มาเพื่อการพัฒนาซอฟต์แวร์จะถูกพัฒนาเป็นชิ้นส่วนของรหัสหรือส่วนหนึ่งของรหัสที่รู้จักกันในชื่อหน่วย และการทดสอบแต่ละหน่วยของสิ่งเหล่านี้เรียกว่าการทดสอบหน่วยที่ทำโดยนักพัฒนาเพื่อค้นหาข้อผิดพลาดของมนุษย์บางชนิดเช่นการขาดการรายงานข่าว ฯลฯ
การทดสอบตามหน้าที่: การทดสอบนี้ดำเนินการในขั้นตอนการทดสอบ (QA) และเป็นส่วนหนึ่งของการทดสอบกล่องดำ การดำเนินการจริงของกรณีทดสอบที่เขียนไว้ก่อนหน้านี้ การทดสอบนี้ทำจริงโดยผู้ทดสอบพวกเขาค้นหาผลลัพธ์ที่แท้จริงของการทำงานใด ๆ ในเว็บไซต์และเปรียบเทียบผลลัพธ์นี้กับผลลัพธ์ที่คาดหวัง หากพวกเขาพบความแตกต่างใด ๆ นี่เป็นข้อผิดพลาด
การทดสอบการยอมรับ: รู้ว่าเป็นเอือด และสิ่งนี้ทำได้จริงโดยผู้ทดสอบรวมถึงนักพัฒนาทีมผู้บริหารผู้แต่งนักเขียนและทุกคนที่เกี่ยวข้องในโครงการนี้ เพื่อให้แน่ใจว่าโครงการจะพร้อมส่งข้อบกพร่องในที่สุด
การทดสอบการรวม: หน่วยของรหัส (อธิบายในจุดที่ 1) ถูกรวมเข้าด้วยกันเพื่อทำให้โครงการเสร็จสมบูรณ์ หน่วยของรหัสเหล่านี้อาจถูกเขียนด้วยเทคโนโลยีการเข้ารหัสที่แตกต่างกันหรืออาจเป็นรุ่นที่แตกต่างกันดังนั้นนักพัฒนาจึงทำการทดสอบเพื่อให้แน่ใจว่ารหัสทั้งหมดสามารถใช้งานร่วมกับอุปกรณ์อื่นได้และไม่มีปัญหาใด ๆ ในการรวม
แนวคิดล่าสุด (ค่อนข้าง) บางประการเกี่ยวกับการเยาะเย้ยและการทดสอบหน่วยที่บริสุทธิ์
ฉันจะอธิบายให้คุณทราบด้วยตัวอย่างที่ใช้งานได้จริงและไม่มีทฤษฎี:
นักพัฒนาเขียนรหัส ยังไม่มีการใช้งาน GUI การทดสอบในระดับนี้จะตรวจสอบว่าฟังก์ชันทำงานอย่างถูกต้องและชนิดข้อมูลนั้นถูกต้อง การทดสอบระยะนี้เรียกว่าการทดสอบหน่วย
เมื่อ GUI ได้รับการพัฒนาและแอปพลิเคชันได้รับการกำหนดให้กับผู้ทดสอบเขาจะตรวจสอบความต้องการทางธุรกิจกับลูกค้าและดำเนินการตามสถานการณ์ต่าง ๆ สิ่งนี้เรียกว่าการทดสอบการใช้งาน ที่นี่เราทำแผนที่ความต้องการของลูกค้าด้วยแอพพลิเคชั่น
การทดสอบบูรณาการ: สมมุติว่าแอปพลิเคชันของเรามีสองโมดูล: ทรัพยากรบุคคลและการเงิน โมดูล HR ได้รับการส่งมอบและทดสอบก่อนหน้านี้ ตอนนี้การเงินได้รับการพัฒนาและพร้อมที่จะทดสอบ คุณลักษณะการพึ่งพาซึ่งกันและกันมีอยู่ในขณะนี้ดังนั้นในขั้นตอนนี้คุณจะทดสอบจุดการสื่อสารระหว่างทั้งสองและจะตรวจสอบว่าคุณลักษณะเหล่านี้ทำงานได้ตามที่ร้องขอในข้อกำหนดหรือไม่
การทดสอบการถดถอยเป็นอีกช่วงที่สำคัญซึ่งจะเกิดขึ้นหลังจากการพัฒนาหรือแก้ไขข้อผิดพลาดใหม่ มีวัตถุประสงค์คือเพื่อตรวจสอบฟังก์ชั่นการทำงานก่อนหน้านี้
การทดสอบหน่วย: การทดสอบแต่ละโมดูลหรือส่วนประกอบอิสระในแอปพลิเคชันเป็นที่รู้จักกันว่าเป็นการทดสอบหน่วยการทดสอบหน่วยจะทำโดยนักพัฒนา
การทดสอบการรวม: การรวมโมดูลทั้งหมดและการทดสอบแอปพลิเคชันเพื่อตรวจสอบการสื่อสารและการไหลของข้อมูลระหว่างโมดูลทำงานอย่างถูกต้องหรือไม่การทดสอบนี้ยังดำเนินการโดยนักพัฒนา
การทดสอบแบบฟังก์ชั่นการตรวจสอบฟังก์ชั่นการใช้งานของแอพพลิเคชั่นนั้นหมายถึงการทดสอบการทำงาน
การทดสอบการยอมรับนี้ทำโดยผู้ใช้หรือลูกค้าว่าแอปพลิเคชันบิลด์เป็นไปตามความต้องการของลูกค้าหรือไม่และข้อมูลจำเพาะของลูกค้าเป็นที่ทราบกันดีว่าเป็นการทดสอบการยอมรับ