เขียน runtests script ให้เป็น executable document กันเถอะ

เขียน runtests script ให้เป็น executable document กันเถอะ
Photo by Nathan Dumlao on Unsplash

ตอนนี้แล้วผมกล่าวถึงความสำคัญของเอกสารที่สามารถ execute เพื่อตรวจสอบดูว่ามันยังจริงอยู่ไหมได้ในรูปแบบของ unit tests ซึ่งเอาไว้เก็บบริบทของปัญหาที่เรากำลังแก้ หรือเรียกง่าย ๆ ว่า requirement

ตอนนี้เราจะมาพูดถึงเอกสารที่ใช้ในการ build software เช่น build script หรือแม้แต่วิธีการ run unit tests ก็สามารถเขียนในรูปแบบเอกสารได้เช่นกัน

ลองดูตัวอย่าง runtests.md script ด้านล่าง

#!/bin/bash

#### Jump to the folder in which the `runtests.md` script is in. Return if we fail to jump to the expected folder so we do not run tests in the wrong folder.

cd "$(dirname "$0")" || return

#### Run all the tests

npm run test:unit:ci

บรรทัดแรก #!/bin/bash เป็นตัวบอก operating system ว่านี่เป็น file bash script นะ ให้ run file นี้ด้วยโปรแกรม bash แต่เพราะ file เป็นนาสกุล .md ทำให้โปรแกรม editor มองมันเป็น file markdown ซึ่งทำให้ preview ดูเป็น document ได้ตามตัวอย่างด้านล่าง

Captured by Chokchai Phatharamalai

บรรทัดที่ 3 เริ่มต้นด้วย # 4 ตัว ซึ่งเป็นเพียง comment ธรรมดาสำหรับ bash script แต่สำหรับ markdown เป็นการจัด format ให้เป็น heading ระดับ 4 เพื่ออธิบายบรรทัดถัดไป

dirname "$0" คือการ run คำสั่ง dirname เพื่อหา folder ที่ script นี้วางอยู่ที่ไหน เพราะแต่ละเครื่องอาจจะวางคนละที่กัน

cd "$(dirname "$0")" คือการกระโดดเข้าไปใน folder ที่ script นี้อยู่ เพราะเราไม่รู้ว่าคนที่ run script จะ run มาจาก folder ไหน เราจึงอยากกระโดดมาอยู่ที่เดียวกับ script เพื่อให้สามารถ run script นี้จาก folder ไหนก็ได้ผลที่เหมือนกัน

|| return. ด้านหลัง คือการออกจากโปรแกรมถ้าไม่สามารถกระโดดเข้ามาใน folder ที่เราคาดหวังได้ เพื่อป้องกันไม่ให้ script ทำงานต่อถ้าเกิดความผิดพลาดเพื่อป้องกันความเสียหายที่อาจจะเกิดขึ้นหาก script ทำงานต่อไป

เมื่อเราเขียนเสร็จ เราก็เพิ่ม execution mode ให้กับ file นี้ด้วยคำสั่ง chmod +x ./runtests.md

เสร็จแล้วเราก็สามารถ run script นี้บน command line ด้วยคำสั่ง ./runtests.md ก็จะได้ผลตามด้านล่าง

Captured by Chokchai Phatharamalai

ด้วยเทคนิคนี้เราสามารถเขียน script พร้อมกันกับ document ที่อธิบายมันไปด้วยกัน เพื่อถนอมความรู้ที่จำเป็นสำหรับการ run test และ build software เอาไว้ได้

shellcheck

ผมมักจะทดสอบ script ด้วยคำสั่ง shellcheck คำสั่งนี้จะช่วยตรวจถ้า script ที่เราเขียนมีช่องโหว่ที่คนมักจะพลาดบ่อย ๆ เป็น syntaxic check ที่ช่วยกันความผิดพลาดเบื้องต้นได้

bach

และถ้าเราต้องการเขียน unit test สำหรับ bash script ก็มีเครื่องมือที่ชื่อว่า bach ให้ใช้ ซึ่งช่วยในการทำ semantic check เพื่อตรวจสอบว่า script ทำงานได้ตามที่เราคาดหวังได้

อ้างอิง

Unit tests คือ executable document
เคยไหมที่เจอเหตุการณ์ให้ต้องไปอ่านโค้ดคนอื่น แล้วพออ่านเสร็จก็เห็นว่าโค้ดมันผิด เลยไปแก้มันให้ถูก แจ่พอคิดอีกที ไม่แตะมันดีกว่า แล้วก็ undo จนมันกลับไปเป็นเหมือนเดิม ทำไมนะ? ผมเคยลองถามตัวเองดูว่าอะไรเป็นสาเหตุที่ทำให้
ShellCheck – shell script analysis tool
ShellCheck finds bugs in your shell scripts
GitHub - bach-sh/bach: Bach Testing Framework
Bach Testing Framework. Contribute to bach-sh/bach development by creating an account on GitHub.

Read more

จักระกับระบบประสาท

จักระกับระบบประสาท

ครูณาส่งหนังสือที่ครูแปล ชื่อ Becoming super natural มาให้ ผมได้ข้อมูลที่ตื่นตาตื่นใจหลายอย่าง หลายอย่างผมก็ยังต้องใช้เวลาค่อย ๆ ทำความเข้าใจไป แต่วันนี้อยากเอาเรื่อง จักระ ทั้ง 8 จุดมาแบ่งปัน จากในหนังสือ ผมได้ลองนั

By Chokchai
Scrum master focus

Scrum master focus

ครั้งแรกที่ผมได้เรียนว่า สกรัมมาสเตอร์ควรแบ่งโฟกัสการโค้ชของตัวเองเป็น 4 เรื่องคือ 1. องค์กร 2. engineering practice 3. product owner 4. ทีม ผมอดคิดไม่ได้ว่าคนบ้าอะไรจะไปเก่งทั้ง 4 อย่างซึ่งมันใช้ความรู้และทักษะที่แตกต่างกันเหลือเกิ

By Chokchai