Unit Test จากประสบการณ์อันน้อยนิด by

31
May
0

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

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

เขียนคนเดียวเบย ทั้งโค้ด ทั้ง test
รับตำแหน่งทั้งสองบทบาท งานหนักเลยครับ อย่างแรกต้องไปเขียน test ก่อน เพราะคุณการที่จะเขียน test ได้คุณต้องออกแบบโครงสร้างทั้งหมดให้เรียบร้อยก่อน ไมงั้นเขียนไม่ออกแน่ (เหมือนโดนบังคับ) จากนั้นต้องออกแบบว่า function นี้ทำไร input output เป็นอย่างไร
ถึงจะเขียน test ได้ เขียนเสร็จปุ๊บ แนะนำให้เขียน test ที่ละ function แล้วค่อยโค้ดให้เสร็จ แล้วไปต่อ function ถัดไป จะทำให้ไม่ต้องระลึกชาตินานมากกว่าจะนึกออกว่า function นี้มานทำไรบ้าง

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

ข้อเสียก็คือ เสียเวลานั่นแแหละครับ ถ้าคุณเขียนโค้ดอย่างเดียว อาจใช้เวลา 4 วัน แก้เสร็จหาบั๊กเสร็จอีก 1-2 วันถ้าโชคดีเจอครบทั้งหมด ( หรือไปเรื่อยๆ เพราะหาไม่เจอ T T ) แต่ถ้าเขียน test ด้วยเวลา x 2 ไปครับ แต่ลด bug ไปเยอะแน่นอน จนถึงไม่มี แก้อีกนิดหน่อยเสร็จ (มีภูมิคุ้มกันดี) ซึ่งก็ใช้เวลาประมาณก็ 8 วัน แถมมีภูมิคุ้มกัน เวลาแก้ไขโค้ดด้วย นับว่าโอเคเลยครับ ส่วนข้อเสียของการเขียนคนเดียวก็ปวดหัวครับ เหมือนสลับโหมดการทำงานไปมา ตอนเขียน test มองแบบคลอบคลุม พอเขียนโค้ดมองแบบเจาะลึกสลับ ต้องมีสมาธิสูงครับ เหนื่อยมากด้วย

เขียนสองคน คนนึงเขียนโค้ด อีกคนนึงเขียน test
เป็นการทำงาน style pair-programming คนนึงเขียนโค้ด อีกคนเขียน test แล้วสลับตำแหน่งหน้าที่กัน อาจะทุกๆ หนึ่ง ชม. หรืออย่างไรก็แล้วแต่ อย่านานเกินจนดูโค้ดกันไม่รู้เรื่องก็พอ แบบนี้นี่โอเคเลยครับ คนเขียน test ก็เขียน test อย่างเดียว จำ test case ได้หมด คนเขียนโค้ดก็เขียนอย่างเดียว โดยให้คนเขียน test เป็นคนบอกเลยครับ เขียนอะไรยังไงบ้าง เราเขียนอย่างเดียวสบายครับ ไม่งั้นบางทีจะเขียนทีนั่งแช่อยู่คิดไม่ออกว่าเขียนยังไง หรือเขียนไปๆ แก้อยู่ตรงนั้นอ่ะ นาน นั่งคิดอยู่ว่าจะ work ไหม อีกทั้ง คนเขียน test รู้ครับว่าถ้าแก้เรื่องนี้ตรงแก้ที่ใดบ้าง บางทีคนเขียนโค้ดก็จำได้ไม่ค่อยครบหรอกครับ
ข้อดีคือ ทำให้การทำงานเร็วขึ้นกว่าการเขียนคนเดียวแน่นอนครับ เพราะแบ่งกันคิด แบ่งงานกันทำ สมองทำเรื่องๆ เดียว ไม่ปวดหัวมาก และทำงานได้ไว
ข้อเสียก็คือ ถ้าสองคนที่ทำงานด้วยกัน sync ได้ไม่ดีพอ หรือบางคนไม่เต็มร้อย เหม่อๆ ก็เจ๊งครับ ทำงานคนเดียวยังดีกว่าเลยบางช่วงเวลา แล้วถ้าอีกคนที่ทำงานด้วยกันประจำไม่อยู่ ไปไหนไม่รู้ ก็อาจต้องหาคนใหม่ ต้องจูนกันใหม่ หรือกลับไปโหมดอันเหน็ดเหนื่อยทำคนเดียว ในช่วงเวลาที่อีกคนไม่อยู่

ก็ยังมีอีกหลายเรื่องเกี่ยวกับ unit test ทั้งที่นึกออก และนึกไม่ออก ที่ผมไม่ได้เขียนลงไป ถ้าผมเขียนเรื่อง unit test ผิดพลาดยังไง ก็ขอโทษด้วยเพราะไม่ได้ศึกษาค้นคว้าข้อมูลมามากมาย ทั้งเรื่องของ unit test หรือการเขียนโปรแกรมในแบบที่ถูกต้องและควรจะเป็น ได้เรียนรู้นิดหน่อย ที่เหลือก็มาจากประสบการณ์ 2 เดือนนี้เองครับ

นี่ก็คือเรืองราวประสบการณ์ของผมที่มีต่อ Unit Test ครับ ^^

Print PDF หรือ Excel หน้าใหญ่ๆ เป็น A4 หลายแผ่น by

30
May
0

เรื่องของเรื่องมันมีอยู่ว่า ผมอยากจะปริ้นท์ Burndown chart แบบนี้เป็นหน้าใหญ่ๆ เอาไปแปะในออฟฟิศ

ปริ้นเตอร์ที่ออฟฟิศก็ปริ้นท์ได้แต่A4ด้วยสิ วิธีการง่ายๆก็คือปริ้นท์ออกมาให้เป็นภาพใหญ่ๆ ลงไปบน A4 4แผ่น แล้วค่อยเอามาต่อกัน
ว่าแล้วก็เริ่มเลยดีกว่า

ปริ้นท์จาก PDF
ก็ตั้งค่าตามในรูปเลยครับ ปรับ Scaling Type เป็น Tile Large Pages จะมีเส้นประๆมาให้ดูด้วยว่ามันใช้ A4 กี่แผ่น
อยากได้ A4 4แผ่น ก็ปรับขนาดที่ Page Zoom เป็น 192% ถ้ามากกว่านี้มันจะเด้งเป็น 6 แผ่นให้ครับ
อยากได้เท่าไรก็ปรับเอา

ปริ้นท์จาก Microsoft Excel
เลืิอก Print Preview ครับ แล้วกดที่ Page Setup
ปรับ Adjust to 200%

อย่าลืมเอา margin ออกครับ

แต่ถ้าปริ้นท์จาก Excel อาจมีปัญหาเรื่องขอบบ้างครับ ก็ไปตัดๆเอาละกัน

[Character Design] ตะบองเพชร และสาวน้อย by

29
May
1

ได้ทำมอนในทะเลทราย

เลยคิดโจทย์มาตัวนึงว่าเป็น มอนตะบองเพชร

แต่ภาพแรกที่คิดที่ไม่มีทางสลัดออกจากหัวไปได้ คือมอนตะบองเพชรของ FF

หัวหน้างานจึงแนะนำให้ทำดเป็นสาวน้อยลงไป ซึ่งเป็นแนวที่ถนัด

ผลที่ได้จึงออกมาอย่างรวดเร็ว อย่างน่าประทับใจ(มั้ง)

การออกแบบทั้ง 5 ร่างมีวิธีทำโดยคิดง่ายๆ

แล้ววาดมาก่อน 2 ร่างก่อน  จะร่าง 1 กับ 4 หรือ 2 กับ5 หรือ 1กับ5 หรือะไรก็ก็แล้วแต่

จากนั้นก็วาด ช่วงนระหว่างนั้นซอยลงไป คล้ายๆกับการทำ inbetween ใน animation

ลดทอนในรายละเอียดเพื่อได้ที่อ่อนกว่า หรือเพิ่มรายละเอียดที่มากขึ้นกับร่างที่เก่งกว่าไป

จากภาพบน วาด 1 กับ 5 ก่อน จากนั้น ค่อยคิดแทรก 2-4 เพิ่มเข้าไป

เราก็จะได้สาวน้อยตะบองเพชรมา1 set  ทั้งความฟินก็สามารถได้รับจากงาน งานก็เสร็จ

การใส่สิ่งที่ชื่นชอบลงไปในงานนี่มันเจ๋งชะมัด

วาดพื้นทราย [Ai] by

28
May
0

พื้นทราย! ชายหาด! new แ้ล้ววาดฉาก เทสีน้ำตาล + Gradient ไล่สีค่ะ

จากนั้นวาดสี่เหลี่ยมซ้อนขึ้นมาอีกชั้น ให้สีดำ = 50

ใช้ Mesh Tool (U) จิ้มตำแหน่งตามตัวอย่าง

เพิ่ม+ลดสีดำโดยใช้ Direct Selection Tool (ลูกศรสีขาว) จิ้มตามจุดเพื่อเปลี่ยนสีนะคะ

เสร็จแล้วใช้ Mesh Tool (U) จิ้มตำแหน่งตามขวางอีกรอบ (ดูตัวอย่างประกอบ)

แล้วใช้ Direct Selection Tool (ลูกศรสีขาว) เลื่อนจุดขึ้นหรือลงค่ะ

เราจะวาดคลื่นทรายกันแล้ววว

จากนั้นก้อปปี้ชิ้นส่วนสีดำที่ทำเสร็จ เอามาวางให้เต็มฉากเลยค่า

เลือก Transparency เป็น Overlay

เรียบร้อยค่ะ ได้ชายหาดแสนงามแล้ว น่าลงไปวิ่งเล่น :D

เรียนรู้คุณสมบัติการปรับโหมด+Texture โดยการเปลี่ยนรูปแจกันดอกไม้ธรรมดาๆ ให้กลายเป็นแจกันดอกไม้หิน!!! [Ps] by

24
May
0

รูปต้นฉบับ

ทำการลบพื้นที่เป็นสีขาวออก ไปที่คำสั่ง Select>Color Range

ต่อมาให้ไปที่คำสั่ง Create new fill or adjustment layer>Hue/Saturation

ปรับ Saturation = -100

คลิกที่ Create new fill or adjustment layer>Levels

ตั้งค่าให้ทุกส่วนมีสีที่ใกล้เคียงกัน

Set foreground color

กด G (Paint Bucket Tool) แล้วเปลี่ยน Layer เป็น Hard Light

ใส่ Texture หิน

ปรับโหมด Layer ที่เป็น Texture เป็น Overlay ปรับ Opacity=40

ไปที่ Set foreground color อีกที

กด G (Paint Bucket Tool) แล้วเปลี่ยน Layer เป็น Lighten เพื่อลด Contrast ส่วนที่เป็นเงาลง

ตกแต่งส่วน แสงเงา

 เราชนะรอบ 4 | ยืมเงิน 3000 ด่วน | แอพกู้เงิน | แอพเงินด่วน | สินเชื่อออนไลน์อนุมัติทันที | Site Map | กู้เงินก้อน | กระเป๋าตัง | thisshop และ ยืมเงินฉุกเฉิน 5000 ด่วน