ความแตกต่างของ Unit Test และ Integration Test

Unit Test คือ การทดสอบ Code ในส่วนที่เล็กที่สุดของ Developer เพื่อทดสอบว่าสิ่งที่เขียนมามันใช้ได้จริงนะ และมี Test ตามที่ผู้พัฒนาเห็นว่ามันสำคัญ (พยายามทำให้ได้เยอะที่สุดครับ) Test ควรทำได้ง่าย เขียนสั้น และกระชับ เพราะกลุ่มคนหลักๆที่ใช้ คือ ตัว Developer เองครับ สิ่งที่เป็นหัวใจหลักของ Unit Test คือ ทำให้มันอยู่ได้ด้วยตัวมันเอง ไม่มี Dependency ไปยุ่งกับ Code ตัวอื่นๆ ถ้าจำเป็นต้องใช้จริงๆ ให้ Mock มันเข้ามาให้หมด เพราะจุดประสงค์ของ Unit Test ดูเฉพาะ Logic การทำงานในส่วนที่เราสนใจจริงๆ ไม่จำเป็นต้องสนใจสภาพแวดล้อมภายนอก อย่างที่คนกลุ่มอื่นๆสนใจ ได้แก่ Tester หรือ User สนใจครับ ถัดมาเป็น Integration Test ระดับการทดสอบนี้มีไว้ เพื่อแสดงภาพรวมของระบบ ควรมีความใก้ลเคียงกับ Production มากที่สุด ห้ามมี Mock ถ้าไม่จำเป็นต้องใช้จริงๆ ว่าระบบมันสามารถทำงานได้จริงในทุกส่วน ต้องเขียน Test ให้คลุม อาจจะทำเป็น UI Test เป็นต้น โดยการเทสแบบนั้น พยายามให้สภาพแวดล้อมเหมือนจริงที่สุดครับ เช่น ถ้ามีการเชื่อมต่อกับ DB จริงๆ ก็ต้องมี DB เอาไว้เทส หรือถ้ามี API เปิดไว้ ก็ควรมีเจ้า API สำหรับ Test เหมือนกันครับ เป้าหมายของ Integration Test คือ ให้คนที่ไม่ใช่ Develop เข้าใจภาพรวมการทำงานครับ จะว่าไปส่วนใหญ่ ผมก็พยายามทำ Integration Test มากกว่า Unit Test นะ เผางานให้รีบทันส่ง

เมื่อสลากออมสินหมดอายุลง

ห่างจากการเขียน Blog ไปหนึ่งเดือนเต็มๆ เนื่องจากกำลังปั่นงาน และแก้ Change ของ Site เจ้าของสลากนี่แหละ และพอดีวันที่ 1 เมษายน ของทุกๆปี เป็นวันสถาปนาธนาคารออมสิน ผมก็เลยนำสลากของเดิมไป Rollover (ต่ออายุต่อ) หวังลมๆแล้งๆว่าจะถูกรางวัลตอบแทนการทำโมดูล DataSet, DataFile ที่ส่งข้อมูลให้ BOT ครับ 55555 จากรูปข้างต้น ผมฝากไป 3 ปี ทุน 5,000 บาท ได้ 100 หน่วย ดอกเบี้ย 2.75 บาท ต่อหน่วย เมื่อครบ 3 ปี ก็จะได้ดอกเบี้ยรวม 275 บาทครับ คราวนี้มาลองมุมกลับกัน ถ้าผมเอาเงิน 5,000 บาทนี่ไปทำอย่างอื่นหละ ฝากออมทรัพย์ เอามาจากเว็บนี้นะครับ ฝากประจำ 36 เดือน มองเฉพาะเงินงวดแรกที่ไปฝากประจำนะครับ โดยผมใช้เว็บของ ME by TMB ในการคิด ลองกองทุนตราสารหนี้ อันนี้ผมลงทุนกองทุน T-TSB ของ TFUND ใช้ข้อมูลจาก WealthMagik นะครับ โดยใช้ Feature Simport รู้สึกกำไรน้อย 5555 ลองกองทุนหุ้น อันนี้ผมลงทุนกองทุน KTSE ของ KTAM ใช้ข้อมูลจาก WealthMagik นะครับ โดยใช้ Feature Simport นะครับ แต่อาจจะต้องมีคิดเพิ่มบางส่วนนะครับ เพราะตัวเว็บไม่ได้ตอบโจทย์ของ Blog ตอนนี้ เงิน 3,000 บาทได้หน่วยลงทุนจำนวน 183.5513 หน่วย ราคาหน่วยละ 16.3442 บาท ได้ปันผล (688.31) 12/04/2556 หน่วยละ 2 บาท ได้เงิน 367.10 บาท 11/09/2557  หน่วยละ 1 บาท…

Code Mania 11: Raise the Bar

เมื่อวันเสาร์ที่แล้ว ผมได้ไปงาน Code Mania 11 โดยมีเรื่องน่าสนใจ ดังนี้ Session ตอนเช้า – Wongnai Engineering Story ในช่วงนี้เป็นการเล่าถึงการจัดการด้าน Infrastructure ของ Wongnai ว่าตั้งแต่เริ่มต้นจาก Mac เพียง 1 เครื่องทีตั้งไว้ที่ CAT จนมีปัญหาที่ละ เรื่อง และทำให้ย้ายไปใช้ Cloud ในแต่ละชั้น ดังนี้ครับ 1. ระบบเมล์ 2. App Server 3. อีกส่วนเป็นปัญหาของ DB ที่ใช้ MySQL ซึ่งก็รู้ๆกันอยู่ว่า 4. Searching – Like Behaviour on Facebook Pages อันนี้เป็นงานวิจัยของนิสิต ป.เอก ของ ม.จุฬา ที่สนใจข้อมูลของการ like โดยทำ bot เพิ่มเก็บข้อมูล โดยใช้ Graph API ที่ทาง Facebook เตรียมไว้ให้ครับ และใช้ Tool ชื่อ Tableau มาทำ Data Virtualization ให้เห็นภาพมาขึ้นว่าแต่ page แต่ละหมวด มีพฤติกรรมอย่างไร แล้วมีช่วง peak time ในเวลาไหนบ้าง – Hello! Functional Programming – เปิดตัวสมาคมโปรแกรมเมอร์ไทยครับ คั่นเวลาด้วยอาหารเที่ยงกันครับ อิอิ (ถ้าใครติดตาม Instagram ผม จะรู้ว่ามีแต่อาหาร 5555) Session ตอนบ่าย – Test Double Patterns with Python ดูตาม Youtube เลยครับ…

การจัดการเมื่อต้อง Query กับฐานข้อมูลที่ขนาดใหญ่

บางครั้งเรามี Query ที่ Join Table เยอะๆ และมีผลลัพธ์มหาศาลประมาณหลายแสนรายการครับ เราอาจจะมีการปรับจูน DB เช่น ทำ Index หรือทำ Query Cache เป็นต้น แต่ในมุมของ Dev เราสามารถปรับโปรแกรมได้เหมือนกัน โดยปรับ Query จากเดิมที่ Join กับหลายๆ Table มา Query ตรงๆที่ละ Table แล้วนำข้อมูลมา Process ใน App แทนครับ

UAT Test Script ควรทำขึ้นมาจากอะไร

หลังจากที่ได้ไปงาน CodeMania 11 ได้ไปฟัง Session ของพี่รูฟนะครับ ในหัวข้อ ATDD (Acceptance Test Driven Development) ครับ จากแนวคิด Zero Defect ก่อนเข้าเรื่องมาอารัมภบทกันก่อน เกิดจากความเข้าใจของ User, BA, SA และ DEV มีความเข้าใจที่ไม่ตรงกัน Zero Defect มันบอกตรงตัวอยู่แล้วว่า ข้อผิดพลาดทุกอย่างเป็นศูนย์ แล้วมันทำได้อย่างไร ? สำหรับบางที่อาจจะเกิดปัญหาว่า User ไม่เข้าใจกระบวนการพัฒนาระบบ เราอาจจะต้องมีการ Guide ด้วยนะครับ ไม่งั้นความต้องการจะบิดเบี้ยวไปหมด

[IT] (แปล) ทำไม Microsoft ถึงสร้าง Data Center ใต้มหาสมุทร ?

คำกล่าวแรกสำหรับ Project นี้ของ Microsoft ครับ “50% of us live near the coast. Why doesn’t our data?” หลายคนอาจจะได้อ่านข่าวไอทีที่ว่า Microsoft เปิดตัว Data Center ใต้น้ำ ตัวแรกของโลก โดยใช้ชื่อโครงการ Project Natick และสร้างตัวแบบชื่อ Leona Philpot ซึ่งผ่านการทดสอบมาแล้วจำนวน 105 วัน เรามาดูกันว่าทำไมยักษ์ใหญ่ด้าน IT อย่าง Microsoft ถึงคิดเช่นนั้นครับ เมื่อมีเหตุผลในการสร้าง แล้วก็ต้องมีข้อจำกัดครับ เพราะ ปกติงานทาง IT กับ Data Center จะอยู่บนบก คราวนี้ไปอยู่ใต้น้ำ ที่มา : The Hacker News , Project Natick

[DB2] Query ตรวจสอบการ Set Automatic Storage ของ Table Space

IBM DB2

เมื่อวานได้ลองขึ้น DB สุดท้ายแล้ว พอทดสอบ Run App มันแจ้ง SQL0289N Error นี้ครับ SQL0289N Unable to allocate new pages in table space “USERSPACE1”. SQLSTATE=57011 สาเหตุของ SQL0289N DB2 มันจัดสรรพื้นที่ให้ไม่ได้ แต่การที่เราจะแก้อะไร ควรจะดู Config เก่าก่อน Query Check Table Space Automatic Storage สำหรับ Query ที่เอาไว้ตรวจสอบ Automatic Storage ของแต่ละ Table Space มีการกำหนด (YES หรือ NO) สามารถดูได้จาก Query ดังนี้ ผลลัพธ์จากการ Query นะครับ ส่วนปัญหาที่แท้จริงในตอนต้น Blog เกิดจากไป Restore DB ผิดที่ครับ พื้นที่เลยไม่พอ T__T

[UI] เปลี่ยน UI นิดเดียว แต่ความรู้สึกมันต่างกัน

จริงๆ ผมว่า Blog ตอนนี้ อาจจะไม่เกี่ยวกับ UX UI โดยตรงนะครับ มี screen อันนึง ที่ระบบเดิมมีเจ้าตัว Progress Bar เอาไว้แสดงสถานะการทำงาน ซึ่งระบบมันทำงานประมาน 2-3 ชั่วโมง แต่พอปรับเปลี่ยนระบบใหม่ มีการปรับอัลกอริทึมใหม่ และแก้ตาม Requirement ที่เพิ่มเติมมา ปรากฏว่ามันเร็วขึ้นจนเหลือ 30 วินาที ทาง DEV เลยตัดเจ้าตัว Progress Bar ออกไป มาทางฝั่ง BA /Marketing และ User บ้าง พอตัดออกเสร็จ มองว่าระบบมันไม่มี Process การประมวลผลเลยซะงั้น เซงเลยยย กลายเป็นว่าพอมีปรับแก้อะไรคิดว่าไม่ได้รับผลกระทบ T__T สุดท้ายอยากจะสรุปว่า ถ้าปรับอะไร ควรมองภาพรวมด้วย เหมือนการปรับ UX/UI มันทำให้ feeling ของหน้าจอเปลี่ยนไป จนอาจจะทำให้คนอื่นๆ ที่ไม่ใช้คนทำเข้าใจผิด คิดว่ามันไม่ยากและขอแก้เปลี่ยนโน่นนี่เพิ่ม  

เมื่อฉันซื้อ LTF ครั้งแรก

ปลายปีที่ผ่านมาครั้ง หลายจากที่รอมาทั้งปี ผมได้ตัดสินใจซื้อ LTF โดยเลือกใช้บริการของธนชาตครับ กองทุน T-LTFD ครับ สาเหตุที่เลือกกองนี้ รูปแบบการลงทุนเน้นไปทางสายกลางไม่ได้เน้น Sector ใดหนักเกินไปครับ มีปันผล เป็นการลดความเสี่ยงจากการถือหน่วยลงทุนในระยะยาวครับ สำหรับแนวทางการเลือกกองทุน ผมขอไม่อธิบายนะครับ เว็บอื่นๆมีแนะนำเยอะเลย สิ่งที่ผมสนใจ คือ LTF กับการยื่นภาษีมากกว่า เพราะสิ่งที่หลายๆเว็บสอน คือ การเลือกซื้อ แต่ไม่ได้บอกว่า เราจะใช้ลดภาษีได้อย่างไรครับ ผมเคยเจอคนรุ้จักที่พลาดกันมาหลายคนแล้วที่ซื้อ LTF ตอนสิ้นปี แล้ว Key ยื่นภาษีออนไลน์ทันทีครับ สิ่งที่เราต้องรอ เมื่อซื้อ LTF คือ เอกสารยืนยันการซื้อครับ เพราะถ้ายื่นไปก่อน แต่ไม่มีหลักฐานกาซื้อ LTF กว่าจะได้เงินภาษีคืนอีกทีนี่รอกันยาวเลยนะครับ

[AOP] Aspect Oriented Programming

พอดีได้รื้อพื้นความรู้เก่าๆ และก็เจอเรื่องน่าสนใจมาเขียน blog พอดีเลย เข้าเรื่องกันเลยดีกว่า AOP เนี่ย หรือ ชื่อทางการของมัน คือ Aspect Oriented Programming โดยเจ้า AOP เป็นแนวคิดนึง ที่เป็น Guideline ที่ช้วยในการพัฒนาระบบครับ เหมือนกับ OOP ที่มองทุกอย่างเป็น Object ครับ !!! AOP ไม่ได้มาแทนที่ OOP นะครับ !!! หลายคนที่อ่านมาถงตรงนี้อาจจะงงกัน มองง่ายๆว่าเป็นส่วนเสริมของ OOP ครับ เพราะ OOP เนี่ย ถ้าเรานำมา Implement พัฒนาระบบ ระบบหนึ่ง มันมีเรื่องที่เราต้องสนใจมากมาย ไม่ได้สนใจแต่ตัว Business เพียงอย่างเดียวนะครับ อาทิ เช่น เรื่อง Security และ Log เป็นต้นนะครับ ตัวอย่าง เช่น การที่เราสร้าง Class หนึ่งขึ้นมา มีหน้าที่ในการตัดจ่ายสินค้าในโกดังนะครับ โดยหน้าที่ของ Class มีหน้าที่คร่าว ดังนี้ ตัดจ่ายสินค้า ตรวจสอบสินค้าคงเหลือ บันทึก Log การทำงาน ตรวจสอบสิทธิการใช้งาน จากตัวอย่างข้างต้น สิ่งที่ Class นี้ความมีจริงๆ ควรเป็นสิ่งที่อธิบายในเรื่องของ Business ครับ พวกตัดจ่ายสินค้า, ดูยอดคงเหลือ ส่วนเรื่องบันทึก Log (ตัดออกได้ แต่พอโปรแกรมมีปัญหานี่ ยาวเลยนะกว่าจะ Tracking ได้ และตรวจสอบสิทธินั้นไม่จำเป็น แต่ก็เอาออกไม่ได้ 555 ซึ่งก็แล้วแต่การเก็บ Requirement และการออกแบบระบบ ไอ้สองส่วนหลังเนี่ยแหละ มันคือ Cross cutting concern เรียกแบบที่ผมเข้าใจนะ มัน คือ สิ่งที่เราต้องสนใจ แต่มันเกี่ยวพันกับสิ่งในสิ่งที่เราสนใจจริงๆ ลองมาดูที่ Code กับมันมีส่วนของ…