โดย Tom White
ได้เขียน guidelines พวกนี้ไว้สำหรับตอนที่เราสร้าง data pipeline ก็จะทำให้ pipeline ของเราดูดี น่าเชื่อถือ และแข็งแกร่ง
Build an End-to-End Test of the Whole Pipeline
ที่จุดนี้ยังไม่ต้องไปดูว่า pipeline นั้น ๆ ทำอะไรมาก ให้ดูที่ infrastructure ดูว่าเราถ้าเราให้ input เข้าไป เกิด transformation เสร็จแล้ว output ตรงตามที่เราคาดหวังหรือเปล่า ใช้ JUnit หรือ pytest ในการเขียนเทส
Use a Small Amount of Representative Data
ใช้ข้อมูลในขนาดที่พอเหมาะต่อการทดสอบ เพื่อให้เทสไม่รันนานจนเกินไป ถ้าเป็นไปได้ ก็ใช้ข้อมูล production เลย (ที่ anonymized แล้วนะ)
Prefer Textual Data Formats over Binary
ไฟล์ข้อมูลควรจะดูความแตกต่างได้ (diff-able) จะได้เห็นว่าอะไรทำให้เทสพัง ซึ่งเราสามารถเอา input และ output เข้า version control ได้เลย แล้วก็ track changes
ซึ่งถ้า pipeline ของเราพ่น binary ออกมา (เช่น Parquet) ก็ให้เราเขียนให้สามารถพ่น text ออกมาให้ได้ด้วย สำหรับเพื่อการทดสอบ
Ensure That Tests Can Be Run Locally
การที่เรารันเทสบนเครื่องได้ (locally) จะทำให้เราสามารถ debug ได้ง่าย และเร็วขึ้นมาก ๆ ถ้าใช้ Spark ก็ใช้ local mode ถ้าใช้ HBase ก็เซต mini cluster เพื่อให้สามารถรันบนเครื่องได้ ซึ่งแน่นอนว่าของพวกนี้ เราสามารถเอาขึ้นไปรันบน CI ได้เช่นกัน
Make Tests Deterministic
หลีกเลี่ยงความ random ที่เกิดขึ้นในเทส ให้เราควบคุมมันให้ได้ เช่น อาจจะใช้ seed มาช่วย เพื่อให้ผลลัพธ์เหมือนเดิมทุกครั้งตอนที่เรารันเทส หรืออาจจะใช้ mock ก็ได้เช่นกัน พวกควบคุมตัวแปรบางตัว เช่น เวลา เป็นต้น
Make It Easy to Add More Tests
ถ้าเราเริ่มมีเทสที่ซ้ำ ๆ กัน ก็ลองหาวิธีทำ parameterized tests ดู ก็จะทำให้เราเพิ่มเทสเข้ามาได้ง่ายมากขึ้น โค้ดไม่ซ้ำกันเยอะ พวกเทสต่าง ๆ เราควรกลับมารีวิวอยู่เรื่อย ๆ นะ ไม่ใช่เอาแต่เขียนเพิ่มเข้าไปอย่างเดียว