เขียน 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

การสร้างทีม

การสร้างทีม

เคยไหม ที่เรามารวมตัวกับทีมเพื่อทำอะไรสักเรื่องที่ยาก ๆ แล้วพอทำ ๆ ไปก็เริ่มกังวลว่า เอ๊ะ นี่ทุกคนยังอยากทำสิ่งนี้อยู่ไหมนะ ทุกคนในทีมเต็มในทำมันหรือเปล่า ความลังเลตรงนี้มักจะทำให้เราไม่กล้าใส่แรงสุดกับงานนั้้น แล้วเริ่มแบ่งกำลั

By Chokchai
Long lived team

Long lived team

ทุกวันนี้สกรัมเป็นที่นิยมมากในทีมพัฒนาซอฟต์แวร์ จากประสบการณ์ที่ผมพบเจอทีมหลากหลาย มีน้อยทีมนักที่จะทราบว่า สกรัมออกแบบมาให้ทีมอยู่กันเป็น long lived team และน้อยคนยิ่งกว่านั้นที่จะเข้าใจทั้งความหมายของคำว่า long lived และคำว่าทีม Team ทีมไม่ใช่

By Chokchai
เสน่ห์ของ ScrumMaster

เสน่ห์ของ ScrumMaster

บางครั้งผมจะได้ยินคำถามเวลาไปงานแลกเปลี่ยนความรู้กับวง ScrumMaster ว่า ทำไงดี ทีมไม่เปิดใจให้ เข้าถึงทีมยาก ตอนผมนั่งในวงนั้น ผมก็ไม่รู้จะตอบยังไง เพราะผมไม่มีปัญหานี้ วันก่อน มีเพื่อนร่วมงานให้ feedback ผมว่า ผมมีพลังพิเศษ ทำให้คนไว้ใจ อยากเข้ามาปรึ

By Chokchai
ความหมายของที่ซ่อนอยู่ใน Just In Time

ความหมายของที่ซ่อนอยู่ใน Just In Time

วันหนึ่ง มีเด็กน้อยคนหนึ่ง กำลังจะขึ้นเครื่องบิน เด็กน้อยร้องไห้กระจองอแง อยู่ตรง security check เพราะว่าปลาทองที่เค้าจับมาได้ 2 ตัวนั้น ไม่สามารถเอาขึ้นเครื่องได้ เพราะมีน้ำอยู่ ยิ่งเด็กร้องนาน พ่อแม่ก็ยิ่งเครียด แล้วก็

By Chokchai