ในการทดสอบแบบอิงตามสเปก (black box testing) เราจะไม่สามารถดูรหัสโปรแกรมต้นฉบับได้ เช่น ซื้อส่วนของโปรแกรมมาใช้งาน หรือเรียกใช้งานเว็บเซอร์วิส ดังนั้นเราจะใช้ประโยชน์จากสเปก ผลลัพธ์ที่จะได้ และรายละเอียดการเชื่อมต่อ api โดยทั้งหมดนี้จะช่วยให้เราเข้าใจพฤติกรรมที่ควรจะเป็นของโปรแกรม การทดสอบแบบอิงตามสเปกจะง่ายสำหรับทีมอื่นๆนอกเหนือจากทีมพัฒนาในการทดสอบ เพราะไม่ต้องสับสนกับรายละเอียดของการทำงานของรหัสโปรแกรม ดังนั้นการทดสอบจะมุ่งเน้นที่สิ่งที่ส่งเข้าไป (input) และสิ่งที่ได้รับกลับมา (output) โดยไม่ต้องสนใจว่าโปรแกรมมีการทำงานภายในอย่างไร
ในการทดสอบแบบอิงตามสเปก ขอบเขตในการทดสอบเป็นสิ่งสำคัญ ในบางกรณีเราไม่สามารถทดสอบกับข้อมูลทั้งหมดที่มีได้ เช่น เราต้องการสดสอบโปรแกรมที่เปรียบเทียบเลขจำนวนเต็ม 2 จำนวน การทดสอบโดยใช้เลขจำนวนเต็มทั้งหมดที่ภาษาโปรแกรมรองรับอาจจะหมายถึงเลขจำนวนเต็มตั้งแต่ -2147483648 ถึง 2147483647 ซึ่งอาจจะมากเกินกว่าที่จะสามารถทำการทดสอบได้ ดังนั้นในการทดสอบเราจะต้องกำหนดขอบเขตของการทดสอบที่เล็กลงและเลือกกลุ่มตัวอย่างจากขอบเขตที่กำหนด โดยขอบเขตที่เราเลือกต้องสามารถเป็นตัวแทนของการทดสอบได้เรียกว่าการทำ equivalence class partitioning
ในการทำ equivalence class partitioning สามารถแยกย่อยลงไปได้เป็นการกำหนดขอบเขตของสิ่งที่ส่งเข้าไป (input partitioning) และการกำหนดขอบเขตของสิ่งที่ได้รับกลับมา (output partitioning) ในการกำหนดขอบเขตของสิ่งที่ส่งเข้าไป เราจะสนใจแต่สิ่งที่ส่งเข้าไปเป็นหลักเพื่อให้ครอบคลุมเงื่อนไขตามที่เราทดสอบ เช่น จากตัวอย่างที่ผ่านมา เราอาจจะเลือกเลขจำนานเต็มแค่ -5, -1, 0, 1 ,5 เพื่อเป็นตัวแทนของการทดสอบ ซึ่งเพียงพอต่อการทดสอบการเปรียบเทียบเลขจำนวนเต็ม 2 จำนวน ส่วนการการกำหนดขอบเขตของสิ่งที่ได้รับกลับมา เราจะสนใจแต่ผลลัพธ์ที่ได้โดยไม่สนใจสิ่งที่ต้องส่งเข้าไป เช่น เราต้องการทดสอบโปรแกรมที่แปลงค่าจากมิลลิวินาทีไปเป็นข้อความที่เข้าใจง่าย เช่น 1 ชั่วโมง 10 นาที 23 วินาที 50 มิลลิวินาที ดังนั้นเราอาจจะต้องการทดสอบด้วยค่าเพียงไม่กี่ค่า และไม่ใช่ค่าลบเพื่อให้แน่ใจว่าการแปลงหน่วยนั้นถูกต้อง
นอกจากนี้เรายังต้องคำนึงถึงข้อมูลที่จะถูกนำมาใช้กับโปรแกรมซึ่งอาจจะเป็นข้อมูลที่โปรแกรมไม่ได้เตรียมการรองรับไว้ ดังนั้นการทดสอบด้วยข้อมูลที่โปรแกรมไม่รองรับเพื่อให้แน่ใจว่าโปรแกรมเราทนทาน (robust) และจะไม่หยุดทำงานกลางคัน หรือมีพฤติกรรมตามที่กำหนดไว้ หรือเพื่อดูว่าจะเกิดอะไรขึ้น เราเรียกวิธีการนี้ว่า boundary value analysis ตัวอย่างเช่น หากโปรแกรมเรารับค่าตรรกะเข้ามาประมวลผลคือค่าจริงหรือค่าเท็จ แต่ตัวแปรชนิดตรรกะอาจจะสามารถเก็บค่าอื่นได้ด้วย เช่น ว่าง (null) หรือ ไม่ถูกกำหนด (undefined) ดังนั้นเราต้องทดสอบด้วยค่า null และ undefined ด้วย หรือในกรณีที่โปรแกรมเรารับค่าจำนวนเต็ม เราอาจจะทดสอบด้วยค่าที่น้อยกว่าค่าน้อยที่สุด หรือค่าที่มากกว่าค่าที่มากที่สุดที่ตัวแปรรองรับ ซึ่งจะเกิดการ roll over ซึ่งเรื่องแบบนี้ถ้าไม่ได้ถูกกล่าวถึงในสเปก เราอาจจะถือโอกาสนี้ปรับปรุงสเปกไปด้วย เช่น กำหนดให้แจ้งข้อผิดพลาด (throw exception) ที่เหมาะสม เป็นต้น