Monthly Archives: December 2011

มาฟังผมฝอยเรื่อง unit test กัน

ผมเป็นแฟนตัวยงของการเขียน automate test (ต่อไปผมจะย่อสั้นๆ เหลือแค่ test นะครับ) ถึงขั้นใช้เป็นส่วนหนึ่งในการตัดสินใจเลือกเข้าทำงานที่ใดๆ เลยทีเดียว เพราะผมเชื่อว่าการเขียน test อย่างจริงจัง มีประโยชน์มากมาย ทั้งเป็นส่วนหนึ่งที่จะทำให้เราทำงานได้ทันเวลามากขึ้น มีความมั่นใจมากขึ้นเมื่อจะ deploy ขึ้น production แก้ไขปรับปรุงโปรแกรมเราได้อย่างมั่นใจ ว่าไม่ไปทำให้สิ่งที่เคยทำมาพัง …

แต่การเขียน test นั้นไม่ง่ายนัก เพราะมีหลายเรื่องที่ต้องคำนึงถึง หากเขียน test ไม่ดี จะทำให้เสียเวลาการทำงานมากขึ้นโดยเปล่าประโยชน์ และเป็นภาระต่อไปในอนาคต ดังที่ผมได้เคยไปสร้าง bad impression และ code ที่ไม่ค่อยมีประโยชน์เท่าไหร่ไว้ และส่วนตัวผมเคยพยายามเขียนถึงเรื่องการเขียน test ไปแล้วครั้งหนึ่ง แต่รู้สึกว่าทำได้ไม่ดีเท่าไหร่

ช่วงนี้ได้มีโอกาสดูเทปบันทึก RubyConf2011 ถึงมันจะมีตั้ง 65 talk แต่แน่นอน ผมเลือกดูเรื่องเกี่ยวกับ testing เป็นเรื่องแรกๆ

แต่ก่อนที่ผมจะไปเล่าถึงเรื่อง talk ที่ผมได้ดูนั้น อยากจะทำความเค้าใจกันนิดนึง

สำหรับ unit testing ในโลก OOP (test ระดับอื่นไม่เกี่ยวในวันนี้) ปัจจุบันนี้มีสไตล์การเขียนอยู่ 2 แบบ คือ

  1. Interaction testing (mock) คือ การ test message ที่ object ส่งหากัน ด้วยการใช้ mock ไปตรวจสอบการ call method ระหว่าง object อาจจะมองได้ว่าเป็นการทำ white box testing
  2. State testing คือ การเรียก method แล้วตรวจสอบผลลัพธ์ที่ออกมา อาจมองได้ว่าเป็นการทำ black box testing

ใน blog นี้จะกล่าวถึง 2 แบบนี้อยู่เรื่อยๆ นะครับ

Continue reading

Advertisements

Cloudclone – มาใช้กองทัพ Heroku (ฟรีๆ)ยิง server กันเถอะ

ไอ้เจ้า Cloudclone เนี้ย คือ library ภาษา Ruby ที่ใช้สร้างระบบสำหรับทำ load test เว็บของเราง่ายๆ ฟรีๆ บน Heroku

ลองจินตนาการว่าเราสามารถมี server 20-30 เครื่อง ที่พร้อมจะยิง request พร้อมๆ กัน อย่างต่อเนื่องไปหา web application server ที่เรากำลังทำการพัฒนาอยู่ ได้โดยใช้เวลาเตรียมตัว ตั้งค่าเครื่องไม่ถึงช่ัวโมง!!!

Source code ของ Cloundclone อยู่ที่ github เลยครับ

 

วิธีการใช้งาน

ติดตั้ง

gem install cloudclone

จากนั้นใช้ irb หรือ สร้าง ruby file เพื่อรัน code ต่อไปนี้

import 

require ‘cloudclone’

สร้าง cloudclone object 

cloudclone = Cloudclone::Client.new(“heroku_username”, “heroku_password”)

สร้าง cloudclone group โดยระบุจำนวนที่ต้องการไปด้วย (แรกๆ อย่าเพิ่งใส่เยอะนะครับ มันจะนาน)

cloud_group = cloudclone.create(“group_name”, 3)

รอซักพักนึง ขึ้นอยู่กับว่าสร้างกี่ตัว เมื่อเสร็จ ก็พร้อมใช้งานทันที

cloud_group.request(“http://www.yourserver.com”)

หลังจากนี้ server ทุกตัวจะทำการยิง request ไปที่ url ที่เราระบุพร้อมๆ กัน

 

สิ่งที่ต้องการก่อนการใช้งาน

  • Ruby
  • Heroku account ที่ทำการติดตั้ง ssh key แล้ว
  • git version control

 

ขอให้สนุกนะครับ 🙂

 

Update 18 มีนาคม 2555: หยุดทำต่อเพราะค้นพบว่า

  • ใช้การสร้าง Heroku app ขึ้นมาใช้ไม่กี่ชั่วโมง แล้ว set dyno เป็น 20+ ก็ทำงานแทนได้ และฟรีเหมือนกัน
  • http://blitz.io/ ก็มีฟรีให้ใช้ตั้ง 60 วิ กับ 250 concurrent user ก็เยอะกว่าของเราแล้ว

กำลังจะเริ่มอ่านหนังสือเล่มนึง

ผมกำลังจะเริ่มอ่านหนังสือเล่มนี้ The Passionate Programmer (2nd edition): Creating a Remarkable Career in Software Development พอดีอ่านคำนำแล้ว รู้สึกโดนใจ

ในคำนำของหนังสือเล่มนี้ กล่าวถึงการทำงานให้มีความสุข เพราะเราหลีกเลี่ยงไม่ได้ที่จะต้องมีงานเป็นส่วนหลักในชีิวิตของเรา ซึ่งตรงกับสิ่งที่ผมคิดมาตลอดช่วง 2-3 ปีหลังมานี้

ถ้าถามผมว่าสิ่งสำคัญที่เราควรทำก่อนเรียนจบมหาวิทยาลัยคืออะไร ผมจะตอบว่า หาสิ่งที่อยากทำ สิ่งที่เรามีความสุขที่จะทำ (แน่นอนต้องมีรายได้ด้วยนะ) แล้วเมื่อเรียนจบมาแล้วไปทำงาน คุณจะเหมือนกับได้ของขวัญอยู่ตลอดเวลา เพราะจะมีความสุขอยู่ตลอดเวลา ระดับการบ่นว่าเหนื่อยจากการทำงานจะแตกต่างจากเพื่อนๆ คนอื่นๆ ที่ไม่ได้ทำในสิ่งที่ชอบอย่างชัดเจน

หนังสือเล่มนี้มีตัวอย่างให้อ่านด้วย ผมเลยแปลส่วนของคำนำ (ตั้งแต่หน้าที่ 4 ย่อหน้าที่ 2 ของไฟล์นี้ ถึงหน้าที่ 5 ย่อหน้าที่ 3) ไว้ให้ลองอ่านกันว่าคุณจะคิดแบบเดียวกับผมหรือเปล่า ถ้าอ่านแล้วงงๆ แนะนำให้อ่านต้นฉบับนะครับ บางส่วนตอนแปลก็รู้สึกไม่มั่นใจว่าเข้าใจถูกหรือเปล่า

คนจำนวนมากใช้เวลาที่ตื่นนอนของชีวิตในช่วงผู้ใหญ่ไปกับการทำงานมากกว่าสิ่งอื่นใด จากการสำรวจในปี ค.ศ. 2006 โดย U.S. Bureau of Labor Statistics พบว่าครึ่งหนึ่งของเวลาตื่นของชาวอเมริกันโดยเฉลี่ยถูกใช้ไปในการทำงาน การพักผ่อนและออกกำลังกายนั้นเพียงแค่ 15% นี่เป็นสิ่งที่แสดงให้เห็นว่างานแทบจะเป็นชีวิตของพวกเรา

ถ้าชีวิตถูกใช้ไปในการทำงานแล้ว การมีความรักให้กับงานจึงเป็นสิ่งที่สำคัญที่สุดที่จะแสดงว่าเรารักชีวิตของเรา งานที่เต็มไปด้วยความท้าทาย แรงกระตุ้น และรางวัล เป็นสิ่งที่ทำให้คุณอยากตื่นเช้า มากกว่างานที่น่าเบื่อทั่วๆไป ถ้าหากคุณสามารถทำงานได้ดี นั่นหมายความว่าคุณใช้ 50% ของเวลาชีวิตได้อย่างมีประโยชน์ ในทางกลับกันถ้าคุณทำงานได้ไม่ดีหมายความว่า เวลาส่วนมากในชีวิตของคุณถูกใช้ไปกับความรู้สึกผิด รู้สึกไม่ได้ทำเต็มที่เต็มความสามารถ

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

“ฉันจะมีความสุขกว่านี้ถ้าฉันมีเงินมากกว่านี้” “ผมจะมีความสุขมากกว่านี้ หากมีคนเห็นประโยชน์จากสิ่งที่ผมทำ” “ฉันจะมีความสุขกว่านี้ถ้าฉันได้รับการเลื่อนตำแหน่งหรือโ่ด่งดัง” มันจะเป็นไปได้มั้ยที่เราจะมีความสุขมาก ถึงแม้ว่าจะจน และไม่ได้ทำงานที่วิเศษอะไรแต่ ถ้าหากเป็นไปได้ เราควรหางานที่ได้รับรายได้สูงขึ้น หรือว่าหางานใหม่แปลงานใหม่ที่ดีกว่าเดิมจริงๆ หรอ

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

[ไปฟังมา] How to start using Scrum?

Meetup ประจำเดือนพฤศจิกายน ของ Agile Singapore ครับ คราวนี้ตัว Stanly contributor หลัก ที่เป็นทั้งคนจัดหาสถานที่และคนพูดในแต่ละเดือนๆ เป็นคนพูดเอง

Stanly ทำงานเป็น Agile coach เพราะฉะนั้นเค้าก็จะมีประสบการณ์ทั้งความสำเร็จและล้มเหลว จากการไปช่วยบริษัทของลูกค้าพัฒนาทีม agile อยู่พอสมควร

วันนี้เค้าพูดเรื่อง การเริ่มต้น Scrum ตั้งแต่ต้นว่ามีอะไรที่เราต้องทำบ้าง

slide อยู่นี่ครับ How to start using Scrum?

ส่วนตัวชอบ quote ปิด presentation ของเค้าครับ ที่เอามาจาก hendrik kniber

perfection is a direction, not a place

ไม่ขออธิบายละกันนะครับว่าตีความได้ว่าอย่างไร เดี๋ยวชักจูงความคิด quote เท่ๆ ต้องอย่าแปลครับ เดี๋ยวไม่ขลัง 🙂

Continue reading