nitip.at

nitip.at

สรุปคลาส Agile for software development วันที่ 2/3

สรุปคลาส Agile for software development วันที่ 2/3

Nitipat Lowichakornthikun's photo
Nitipat Lowichakornthikun
·Apr 4, 2018·

2 min read

วันนี้เราเปิดวันด้วยการทำ Coding Dojo ซึ่งคือกิจกรรมที่ทุกคนในทีมต้องมาอยู่ที่หน้าจอคอมพิวเตอร์เครื่องเดียวกัน แก้โจทย์ข้อเดียวกัน แต่มีกติกาคือจะต้องมีคนมาเวียนกันเป็นคนเขียนให้คนในห้องช่วยรีวิวโค๊ดกันสด ๆ เหมาะกับการสร้างบรรยากาศในการแชร์ความรู้อย่างยิ่ง ซึ่งในวันนี้เราจะพาทำในส่วนของการนำเอาแนวคิดของ Test driven development (TDD) มาใช้ในการพัฒนา

เริ่มแรกโจทย์ของเราคือ FizzBuzz โจทย์นี้จะเหมือนการฝึกเด็กนับเลข มันพิเศษอยู่ที่ว่าถ้าเลขหาร 3 ลงตัวมันจะบอกว่า Fizz, หารด้วย 5 ลงตัวจะบอกว่า Buzz ,ถ้าหารด้วย 3 และ 5 ลงตัวคือ FizzBuzz และสำหรับเลขอื่น ๆ นอกเหนือจากนี้ให้แสดงเลขนั้น ๆ ออกมา

สิ่งที่เราต้องถอดออกมาให้ได้จากโจทย์นี้คือ อะไรบ้างที่เป็น Business rules นึกภาพว่า Requirements ส่วนมากมักมาแบบประโยคข้างต้น เราต้องแยกออกมาให้ได้ว่ามันมีเงื่อนไขอะไรบ้าง?

Business rules ที่ถอดออกมาได้

จากนั้นเรานำเอาข้อมูลนี้มาสร้างเป็นตาราง Test cases

จากช่องแรก Number คือค่าที่ส่งเข้าไปในโปรแกรมนี้ และ Say คือค่าที่โปรแกรมต้องส่งกลับมา

สำหรับ 3 ช่องสุดท้าย พี่แจ่มแนะนำให้เพิ่มขึ้นเพื่อทำให้เรารู้ว่า Test case ข้อนี้ ไปตอบตัว Business rule ข้อใด ทำให้เป็นตัวตัดสินใจได้ว่าเราจะทดสอบไปเพื่ออะไร และ มันช่วยตอบข้อไหนบ้าง

หลังจากที่เราได้ตารางนี้ออกมา สิ่งที่เราทำต่อมาคือลงมือเขียนโปรแกรมขึ้นมาครับ แต่เราจะทำการเริ่มทีละเคส ไล่จากอันแรกไปเรื่อย ๆ และ ต้องเริ่มจากการเขียน Test ขึ้นมาก่อน เพราะ ทำให้เราจะได้โฟกัสที่ปัญหาตรงหน้าจากสิ่งที่เราออกแบบ ไม่คิดมากเกินไป หรือ ลงมือทำขั้นตอนที่ใหญ่จนเกินไป

นี่คือ TDD Cycle เราเริ่มที่ Think นั้นคือการคิดก่อนว่าเราต้องทดสอบอะไรบ้าง จากนั้นมาที่ Red นั่นคือการเริ่มเขียน Test ขึ้นมา จากนั้นทำให้เป็น Green โดยการพัฒนาโปรแกรมขึ้นมาให้ตอบโจทย์ Test case นั้น ๆ ถ้าสามารถผ่านการทดสอบได้ เราก็ต้องกลับมาดูโค๊ดของเราว่ามันทำให้ดีขึ้นได้อีกไหม? อ่านง่ายแค่ไหน? ด้วยขั้นตอนการทำ Refactor ซึ่งหลังจากที่เราแก้ไขจนพอใจแล้ว เราก็เริ่มจากการนำเอา Test case ถัดมา มาเขียน Test แล้วก็วนไปตาม Cycle เรื่อย ๆ ผลที่ได้คือ Code ของเราถูกปรับปรุงให้ดีขึ้นเรื่อย ๆ ตลอดเวลา และ การทุกการแก้ไขก็สามารถทดสอบได้เพราะเรามีการเขียน Test ประกบ

อันนี้คือตัวอย่าง Code ที่ทำกันวันนั้นครับ สามารถลองไปศึกษาดูได้ครับ

หลังจากช่วงบ่าย เรากลับมาที่การทำงานที่เราค้างไว้จากวันแรกครับ นั้นคือการทำ E-wallet สิ่งที่เราขาดคือการออกแบบในส่วนด้านของ Customer Invisible อาทิ API อะไรบ้าง? spec หน้าตาเป็นยังไง? เชื่อมต่อ Database schema ยังไง? ทุกสิ่งต้องถูกเขียนและวางแผนลงบนกระดาษแบบนี้ครับ

การออกแบบทุกอย่างอยู่ในแผนเดียว

มีสิ่งที่ต้องตกลงร่วมกันว่างานที่เสร็จต้องประกอบว่าอะไรบ้าง

วางแผนและเตรียมพร้อมซอฟแวร์ต่าง ๆ ที่ต้องใช้ในการพัฒนา ก่อนเข้ารอบการทำงาน

ซึ่งทีมนี้เลือกใช้ PHP เชื่อมต่อ MySQL และทำให้เป็น API เพื่อให้ฝั่ง Front-end มาเชื่อมต่อผ่าน JavaScript

สิ่งที่ทีมทำในวันนี้คือสามารถนำเอา Source code ขึ้นไปรันบน Server เปล่า ๆ ที่เราเตรียมไว้ให้ได้ ซึ่งหลักการคือทุกคนสามารถเข้ามาทำงานกันบน Repository เดียวกันซึ่งเราเลือกใช้ Github ในการเก็บโค๊ด จากนั้นการนำเอาขึ้นไปยัง Server ก็ต้องมีการทดสอบก่อนว่าสามารถทำงานได้ไหม จากนั้นไฟล์เอาไปวางที่ Server ในโฟลเดอร์ที่สามารถทำงานได้ เช่น ทีมนี้ใช้ Apache ไฟล์ที่ไปวางก็จะไปอยู่ที่ /var/www/html

ตอนนี้เราก็ได้ขั้นตอนที่เป็นการทำแบบ Manual ในการเอาขึ้น Server แล้วดังนี้

  1. ดึงโค๊ดจาก Github
  2. สั่งงานทดสอบ ซึ่งภาษา PHP จะใช้ Test framework ที่ชื่อว่า PHP Unit ครับ
  3. นำเอาโค๊ดไปวางที่ /var/www/html

เราจบวันด้วยกิจกรรม Reflect เช่นวันแรกครับ เพื่อ ให้บอกเล่าว่ามีหัวข้อไหนที่น่าสนใจ และ อยากนำเอากลับไปใช้กับน้อง ๆ นักศึกษาด้วยครับ

Reflect สิ่งที่เรียนรู้และลงมือทำในวันที่ 2

 
Share this