Integration Test ใน Unity Test Tools by

31
Jan
0

จาก Blog ที่แล้ว เรื่อง Unity Test Tools วันนี้เรามาลงรายละเอียดกันเรื่อง Assertion Component และ Integration Test Tools ก่อนอื่นแนะนำให้ Download Project นี้ไป และ Download Unity Test Tools version ล่าสุดไปดูครับ (แกะ zip แล้วติดตั้ง Unity Test Tools ลงไป) ประกอบตัวอย่างในนี้

Assertion Component อย่างที่บอกไว้ใน blog ที่แล้วคือเราสามารถทดสอบได้โดยไม่ต้องเขียนโปรแกรม สร้างไฟล์ C# ขี้นมาใหม่เลยด้วยซ้ำ มักใช้กับ Integration Test (โดยติ๊กช่อง Suceed on Assertion เอาไว้) ซึ่งการ Test 1 Test จะมีองค์ประกอบต่างๆ ดังนี้

โดยมีตัวอย่างการใช้งาน (Scene Level 1) ดังนี้

integration

  1. FakeInput (When) เพื่อจำลองการใช้งานหรือเล่นเกมของผู้เล่น เช่น เปลี่ยนจาก Input จริงๆ ซึ่งเป็นการกดคีย์บอร์ดปุ่มลูกศรซ้ายค้าง มาเป็นการสั่งให้เซ็ตความเร็วยานอวกาศและเคลื่อนที่โดยอัตโนมัติด้วยทิศทางความเร็วอย่างไรโดยผ่าน Inspector โดยตรง ไม่ต้องรอ user สั่ง ซึ่งเราควรจะสร้าง Interface มาเป็นตัวกลางระหว่าง Class FakeInput และ Class RealInput ให้ทั้งสอง class นี้ implement function เดียวกันก็จะลดโอกาสการลืมแก้ไขไฟล์ใดไฟล์หนึ่งได้ (IUserInputProxy เป็นตัวอย่าง Interface และ Class FakeUserInput กับ RealInput ที่ implement IUserInputProxy ด้วยกันทั้งคู่)
  2. เงื่อนไขการทดสอบที่คาดหวัง (Then) จากรูปด้านบนก็คือตำแหน่งของ x ต้องน้อยกว่าศูนย์ (Compare To Constant Value น้อยกว่า Constant คือ 0) หรือพูดอีกในที่ตัวยานอวกาศต้อง “ขยับออกจากที่เดิมเมื่อมีการใส่ Input เข้าไปเป็นเวลา 1 วินาทีไม่ว่าจะเป็น RealInput หรือ FakeInput ก็ตาม”
    integration2
  3. GameObject ต่างๆ ที่เกี่ยวข้องกับการ Test (Given) อันนี้ก็ตรงไปตรงมา คือ Object ตัวไหนมีผลกับตัวไหนบ้าง การทดสอบยิงจำเป็นต้องมีวัตถุอะไรบ้างในฉาก ใน Project ตัวอย่างนี้จะมีเพียงยาน Spaceship ที่เราใช้ควบคุมไปมาเท่านั้น

เมื่อวางองค์ประกอบครบ ถัดมาเรามาลองรันดูกันดีกว่า เปิดหน้าต่าง  Unity Test Tools -> Integration Test Runner ขึ้นมาจะได้ดังรูป
integration4

integration3

กด Run All เพื่อทดสอบ Test ก็จะพบว่า Test Fail เพราะเรายังไม่ได้แก้ไขให้ยานขยับเมื่อกดปุ่มซ้ายบนคีย์บอร์ดนั่นเอง ดังนั้นหน้าที่ของเราตอนนี้ก็ต้องแก้ไขให้ Test มันทำงานได้ถูกต้องด้วยการเปิดไฟล์ SpaceshipMotor.cs ขึ้นและแก้ไขตาม comment ในไฟล์นั้น (เขียนไว้ค่อนข้างดีอยู่แล้ว) หากแก้ได้ถูกต้องโดยขยับได้ทั้ง MoveHorizontally และ MoveVertically เมื่อ Run All Test อีกรอบจะพบว่า Test รันได้ถูกต้องหมดเรียบร้อย :)

นอกจากนี้หากเราไม่ต้องการใช้ Assertion Component เพราะไม่พบเงื่อนไขการทำงานสำเร็จที่เราต้องการ เราสามารถสร้างเงื่อนไข Integration Test ผ่านโดยไม่ต้องใช้ Assertion Component ก็ได้โดยจะต้อง Coding โดยใส่คำสั่ง “Integration.Pass()” เข้าไปเพื่อบอกว่ารัน Test ผ่านแล้ว เราสามารถใส่ในบริเวณจุดสิ้นสุดของ Code ที่ถ้าถูกรันแล้วจะถือว่า Test ผ่านได้เช่นกัน

หากสังเกตจะพบว่าเรามี Spaceship ใหม่ในแต่ละ Test แยกกันหมดเลย ตรงนี้เอาไว้เหมือนการ Reset ค่า Environment ต่างๆ ให้ทดสอบใหม่โดยเริ่มต้นที่ตำแหน่งนี้ๆ ทำให้เราสามารถแยก Test แต่ละ Test เป็นอิสระต่อกันโดยไม่ขึ้นกับลำดับก่อนหลังการ Test ได้ แต่หากมี Object ที่ต้องใช้ทุกๆ การ Test จริงๆ โดยไม่มีการเปลี่ยนแปลงอะไรเช่น Library กลางเราสามารถสร้าง Object นั้นไว้นอก Test Component ได้ครับ เพียงเท่านี้เราก็จะสามารถใช้ Object เดียวกันในทุกๆ Test ได้ (แต่ต้องระวังเรื่องการเปลี่ยนแปลงค่าที่ Object กลางตัวนี้แทนว่าจะไม่ทำให้เกิดปัญหาเวลา run test สลับลำดับกัน)

จากนี้ไปจะมี Scene ถัดๆ ไปเป็นแบบฝึกหัดให้ลองกัน สามารถลองไปแก้ไขเรื่อยๆ จนกว่าจะใช้การได้เป็นเกมสุดท้ายใน Scene “The Game” ได้เลย แลดูสนุกใช่ไหมครับ น่าจะช่วยให้เข้าใจการใช้งาน Assertion Component กับ Integration Test มากขึ้นนะครับ

Unity Test Tools มาเขียน Test ให้กับเกมของเรากันเถอะ! by

30
Dec
2

ท้าวความก่อนเล็กน้อยสำหรับคนที่ไม่เคยเขียน Test มาก่อน ถามว่าทำไมเราต้องมี Test เหรอ?

  1. เคยไหม สมมติมีคนเล่นเกมเราพร้อมกัน 1 หมื่นคน เรา upload เกมขึ้น Store ปรากฏว่าคนเปิดเกมไม่ได้ Crashed เลย หรือมี Bug ที่ใช้ประโยชน์จากเกมของเราได้ และกว่าเราจะรู้ตัวว่ามี Bug กว่าจะแก้เสร็จและ upload ขึ้น Store กว่าคนเล่นจะกด Download เกมเวอร์ชั่นแก้ Bug ไป รวมๆ แล้วผ่านไปกี่ชม. แล้ว? อ้อ สำหรับคนที่ไม่รู้ App Store ของ iOS ใช้เวลา Approve 7 วันนะครับบบบ เรารอได้ไหม?
  2. แก้ Bug ระบบ A แต่ระบบ B เสือกพัง เห้ยยย เป็นไปได้ไงแว้ ไม่ได้ทดสอบระบบ B ก่อน up ขึ้น Store ซะด้วย
  3. นาย A มาแก้ Code ของนาย B แล้วพัง อ้าวเห้ย จะแก้อันนี้ทำไมไม่บอกกันก่อนวะ ห้ามทำแบบนี้นะเว้ย ต้องทำแบบนี้ๆๆๆ เท่านั้น !@#@$#^%$#

โอเคเหตุการณ์ Basic ทั่วไปของวงการ Software Development ที่ไม่ได้เป็นเฉพาะวงการเกมก็คงจะเคยเจอเหตุการณ์แบบนี้บ่อยๆ จริงไหมครับ ปัญหานี้เราแก้ได้ด้วยการมีระบบ Automate Test ครับ หรือจะ Test Manual เอาก็ได้นะ แต่จะเสียเวลาและแรงงานโดยยังมีโอกาสเกิด Human Error อีกตะหาก

เข้าเรื่อง อาจจะมีคนสงสัยว่า Unity สามารถเขียน Test เกมของเราได้หรือไม่ คำตอบคือได้ครับ! แถมยังทดสอบการทดสอบพวกหน่วงเวลาจะเกิด Action ตามที่ต้องการได้หรือไม่ซึ่งมักเป็นองค์ประกอบหลักของเกมแทบทุกเกมได้เป็นอย่างดี

ทาง Unity ได้ออก library ของตัวเองให้ Download กันได้ฟรี ชื่อว่า Unity Test Tools ถ้าใครใช้ Unity 5.3 เป็นต้นไปจะฝังมากับตัว Unity อยู่แล้ว ไม่ต้องโหลดเพิ่มครับ (เฉพาะส่วนของ NUnit) แต่ถ้าใครยังจำเป็นต้องใช้ version เก่าอยู่ก็โหลดตาม link มาได้ ทำให้เราสามารถทดสอบเกมของเราได้ โดยการทดสอบจะแบ่งออกเป็นสามประเภทหลักๆ

  1. NUnit หรือเทียบได้กับ Unit Test ธรรมดาทั่วๆ ไปของภาษาอื่นๆ เป็นการใช้ Assert ใน Code เพื่อทดสอบการทำงานเป็นราย class หรือ method โดยควรออกแบบให้ไม่ต้องเชื่อมต่อกับระบบด้านนอกเช่น database หรือ web server เพื่อทดสอบเฉพาะ logic การทำงานของ method นั้นจริงๆ และควร Test แค่อย่างเดียวต่อ 1 การทดสอบ (Unit แปลว่าหน่วย 1 หน่วยที่เล็กที่สุด ดังนั้นควรทดสอบแค่หน่วยเดียว อย่าทดสอบหลายๆ หน่วยในการทดสอบ 1 ครั้ง) สำหรับ NUnit นี้เราจะต้องทดสอบภายใน Folder ชื่อ Editor เท่านั้นเป็นข้อบังคับของ Unity โดย Unity จะติด Library NSubstitute ซึ่งเป็น Library สำหรับสร้างพวก Dummy Object, Stub, Test Spy, Mock อย่างง่ายๆ มาให้ในตัวโดยไม่ต้องหาโหลดเพิ่มอีก เพื่อเพิ่มความสะดวกในการทดสอบอย่างสูงสุดครับ

    nunit2 nunit
  2. Assertion Component เป็นการทดสอบโดยไม่ต้องเขียน Code ทดสอบ คล้ายข้อ 1 แต่อาศัยการเปรียบเทียบและใส่ค่าผ่าน Inspector โดยตรงแทน อาจให้คนที่มีความรู้ Coding น้อยๆ ช่วยทำได้ ทำให้สะดวกมาก ไม่ต้องเป็น Programmer ทำเสมอไป โดยสามารถใส่แทรกไปกับระบบการทำงานปกติของเกมได้เลย เพราะเมื่อสั่ง Build แล้วตัว Unity จะตัด component ส่วนนี้ออกให้เองอัตโนมัติ สามารถตั้ง Event ได้ว่าจะทดสอบเมื่อไหร่ เช่นเมื่อ Object ตัวนี้ๆ โดน Destroy หรือเมื่อเกิดเหตุการณ์ใดๆ สามารถเปรียบเทียบค่าระหว่างวัตถุสองชิ้นก็ได้ จุดเด่นคือสามารถแทรกการทดสอบกับ Scene จริงและใช้ช่วยหา Bug ที่ค้นหาได้ยากได้ เวลาใช้กับ Option Error Pauseassertion_component
  3. Integration Test เป็นการทดสอบโดยกำหนดสภาพแวดล้อมและสถานการณ์อย่างหนึ่งขึ้นมาสำหรับการ Test โดยเฉพาะ คิดซะว่า New Scene ขึ้นมา setup ค่าทุกอย่างใหม่หมดทุกครั้งต่อการทดสอบ 1 อย่าง แล้ว reset ค่าทุกอย่างก่อนจะทดสอบลำดับถัดไป เป็นการทดสอบความสัมพันธ์ระหว่าง GameObject หลายๆ ชื้นที่มีปฏิสัมพันธ์ต่อกันว่าดำเนินไปอย่างถูกต้องหรือไม่โดยเฉพาะ เช่นถ้าบอลแตะ Collider ภายในเวลาที่กำหนดให้ผ่าน Test นั้นซะ ถ้าแตะไม่ทันให้ไม่ผ่าน หรือหน้านี้จะต้องโหลดสำเร็จภายในกี่วินาที ซึ่งเราสามารถเขียน Code เสริมเพื่อสั่งว่าการทดสอบผ่านแล้วได้อีกด้วย ไม่จำเป็นต้อง set ผ่าน Inspector เพียงอย่างเดียวintegration_test

รอติดตามตัวอย่างการใช้งานได้ในตอนต่อไปนะครับ :)

ปล. ข้อควรระวัง แม้จะมี Automate Test ก็อย่าละเลย Manual Test ไป คิดซะว่า Automate Test แค่ช่วยลดงานและ Human Error ของ Manual Test เท่านั้น มันยังคงมี Bug บางส่วนที่ Automate Test ไม่สามารถทำได้ หรือทำได้แต่ใช้แรงงานเยอะจนไม่คุ้มอยู่เหมือนกัน เช่นแก้ UI แล้ว UI เบี้ยวจากตำแหน่งที่ควรจะเป็น 10 pixel หรืออะไรทำนองนี้ ถ้าจะเขียนดักให้ครบเคสพวก UI เบี้ยวแถมมือถือยังมีหลากหลายขนาดหน้าจออีกก็อาจจะลำบากหน่อย ซึ่งขึ้นอยู่กับวิจารณาณของทีมว่าสมควรเขียนไหมอีกทีครับ

Link แนะนำ:

http://www.tallior.com/introduction-unity-test-tools/
อธิบายจุดประสงค์และประโยชน์อย่างละเอียดในการทดสอบทั้งสามแบบด้านบน

https://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/test-tools
วิดีโอสาธิตการใช้งาน

http://blogs.unity3d.com/2014/07/28/unit-testing-at-the-speed-of-light-with-unity-test-tools/ (บทความ)
https://github.com/DmytroMindra/TestDoublesBlogpost (Code)
ตัวอย่างการใช้งาน Dummy Object, Stub, Test Spy, Mock และพื้นฐานการเขียน Test (สำหรับคนที่ไม่เคยเขียน Test มาก่อนเลยในชีวิตแนะนำให้อ่านก่อนเลยครับ)

https://bitbucket.org/Unity-Technologies/unitytesttools/wiki/Home
Manual การใช้งาน Tools ตัวนี้และ Source Code

https://github.com/DmytroMindra/GrowingGamesGuidedByTests
Code ตั้งต้นเป็นแบบฝึกหัดสนุกๆ สำหรับการเริ่มต้นหัดเขียน Test สำหรับเกม สำหรับใครที่นึกภาพไม่ออกว่าควรจัดโครงสร้าง Object สำหรับ Test ยังไงบ้างแนะนำให้โหลดไปเล่นได้ครับ

Collaboration Tools by

30
Jun
0

เมื่อวันที่ 3 มิถุนาผมได้ไปงาน Collaboration Tools ที่ NE8T มาครับ (ดอง blog มานานมาก ฮ่าๆ) ซึ่งมีการพูดคุยกันว่าในบริษัทๆ หนึ่งมักจะมีปัญหามากมายเช่น

  • มีช่องทางติดต่อพูดคุยระหว่างฝ่ายที่สะเปะสะปะ
  • programmer คุยกับ designer ไม่รู้เรื่อง
  • อีเมล์แจ้งงานคุยกัน สุดท้ายก็ตกหล่น
  • อยากได้ Solution Project Management ในรูปแบบต่างๆ

ก่อนจะเข้าเรื่อง Tools ทุกตัวไม่ได้เหมาะกับคนทุกคน เราต้องระบุปัญหาให้ได้ว่าทีมของเรามีปัญหาอะไร (ไม่ใช่เรามีปัญหาอะไร หรือคิดว่าทีมมีปัญหาอะไรนะ แต่ต้องเป็นเราถามทีมมาแล้วว่ามีปัญหานี้เกิดขึ้นจริง คือเราไม่ได้คิดแทนทีมนั่นเอง)

ภายในงานระบุชื่อ Tools ที่แนะนำอยู่หลักๆ ดังนี้ เนื่องจากผมสนใจพวก Project Management Tools เป็นพิเศษ เลยมานั่งฟังพี่ใหม่พูดต่อหลังเวทีใหญ่พูดจบ เลยได้รายละเอียดส่วนนี้ค่อนข้างมาก ดังนี้

Trello

ข้อดี: เป็น Tools สำหรับกำหนด Task งานต่างๆ สามารถใช้แทนกระดาน Post-it ที่แปะๆ กันได้อย่างดีเยี่ยม คุณสมบัติเด่นคือ Visualize หรือสามารถเห็นทุกอย่างได้พร้อมกันหมด เห็น Process การทำงานว่าอยู่ที่ Step ไหนอยู่ คอขวดอยู่ที่ไหน กำหนดงานที่ต้องส่งต่อๆ กัน เป็น Dependency ได้อย่างดีเยี่ยม เหมาะอย่างยิ่งกับทีมขนาดเล็ก และข้อดีที่สำคัญที่สุดคือใช้งานง่ายมากกกก ไม่ถึงชม.ก็สามารถใช้งานระดับทั่วๆ ไปได้แล้ว Learning Curve ต่ำ การบังคับให้คนมาใช้จึงเป็นเรื่องง่ายตามมา

ข้อเสีย: คือเป็นระบบเปิด ใครก็ทำอะไรนั่นนี่ได้ตามใจชอบ ไม่มี Permission ที่ชัดเจน และสร้าง subtask หรือดู overall งานหลายๆ โปรเจคได้ไม่สะดวกนัก

Asana

ข้อดี: เป็น Tools ที่เหมาะสำหรับงานที่ใหญ่จาก Trello ขึ้นมา มีระบบ Permission เป็นตัวเป็นตนมากขึ้น Assign งานให้คนอื่นได้อย่างชัดเจน (เหมาะกับคนที่ชอบสั่งงานให้คนอื่นว่างั้นเถอะ) ดูหลายๆ โปรเจคพร้อมกันได้ สร้าง subtask ได้ และเหมาะที่สุดคือใช้ระหว่างเจ้านายกับเลขา เพราะเลขาจะ assign สิ่งที่เจ้านายต้องทำในวันถัดไปมา และเจ้านายทำอะไรไปแล้วบ้างก็ต้องมากด Done เพื่อ track ว่าเหลืองานอะไรอีกบ้างได้สะดวก ตอนเริ่มใช้ครั้งแรกจะมีให้เลือกว่าเราจะเอาไปทำงานประเภทไหน เหมือนมี Template ตั้งต้นมาให้ เช่นเอาไปบริหาร CRM ก็ได้ ซึ่งจะมี Timeline เอาไว้ให้ทีมงานคุยกันโดยเฉพาะ แบ่งทีม Sale กับทีม Dev ได้สะดวก

ข้อเสีย: ยังไม่สามารถทำ Project Management ระดับใหญ่ๆ เช่นตั้ง MileStone ของบริษัท การใช้งานค่อนข้างยุ่งยากกว่า Trello มาอีกขั้น ต้องใช้เวลาศึกษาระดับหนึ่งจึงเริ่มใช้งานได้คล่อง

ต่อไปด้านล่างจะเป็น Tools อื่นๆ ที่ไม่ใช่ Project Management นะครับ

Podio

ข้อดี: เป็น Tools ที่ทำได้ทุกอย่างบนโลก (เค้าว่างั้น) โดยจะมีคล้ายๆ App Store ของตัวเอง ซึ่งมีคนทำ Plugin ทั้งฟรีและขายมาให้ในทุกๆ ระบบ สามารถนำระบบโน้นมาผสมกับระบบนี้ได้อย่างอิสระ Custom ได้ทุกรายละเอียด และสามารถทำ Projection ระดับ Milestone ของบริษัท, ตั้งงบประมาณของ Project และแจ้งว่าใช้ไปเท่าไหร่แล้วได้ ใช้ได้ทุกทีมทุกสาขาตั้งแต่ Dev, Sale, Marketing สามารถออกแบบได้ตามใจหมด

ข้อเสีย: Learning Curve สูงที่สุดจากทั้ง 3 ตัวคือ Trello, Asana,Podio ใช้เวลาศึกษานานอาจหลายสัปดาห์หรือเป็นเดือน กว่าจะได้ออกมาเป็นสิ่งที่ต้องการ เนื่องจาก Custom ได้ทุกอย่าง ดังนั้นเราจะต้องจัดวาง ตั้งค่าเองทุกอย่าง ซึ่งกินเวลามากกว่าจะได้ใช้งานตามวัตถุประสงค์

Tools สามตัวบนนี้สามารถ integrate กับ Dropbox, Google Drive, One Drive ได้ทั้งหมด ดังนั้นไม่ต้องกังวลเรื่องการเชื่อมต่อกับไฟล์ที่มีอยู่แล้วในองค์กร ซึ่งสุดท้ายแล้วไม่จำเป็นต้องเลือกแค่ตัวใดตัวหนึ่ง อาจใช้ผสมกันก็ได้ตามความเหมาะสมของงาน จบส่วนของ Project Management Tools มาต่อกับ Tools อื่นๆ บ้าง

Slack

ตัวนี้เป็น Tools สำหรับใชัแทน Facebook Group, Email, Chat ต่างๆ สามารถพิมพ์ # เพื่อสร้าง tag ไว้แบ่งห้องสนทนาได้ โดยสมาชิกแต่ละคนจะสามารถเลือก follow tag ที่เกี่ยวข้องกับตนเองได้ เวลามีคนพิมพ์มาแล้วใส่ tag เช่น “#programmer #sale” คนสองกลุ่มนี้ก็จะเห็นทั้งคู่ ส่งเสริมประสิทธิภาพการทำงานได้อย่างดีเยี่ยม และมี API ให้เราเขียน bot ประจำออฟฟิศเวลาเกิด event ต่างๆ เพื่อแจ้งสมาชิกได้ทีมได้อีกด้วย เค้าว่า Slack มาช่วยดึงคนออกจาก Facebook Group ซึ่งหากบริษัทไหนใช้ Facebook Group อยู่ก็อาจโดน interrupt จากสิ่งต่างๆ ภายใน Facebook ได้ง่าย จึงแยก tools ตัวนี้ออกมาสำหรับด้านทำงานโดยเฉพาะ ส่วน Facebook เค้าอยากให้เอาไว้สำหรับเป็นพื้นที่ส่วนตัวอย่างเดียว ไม่มีเรื่องงานมาเกี่ยวข้อง

Sketch

เป็น Tools สำหรับช่วยออกแบบ UI ที่ดีเยี่ยม ใช้ง่ายมาก พี่ที่ทำ StockRadar บอกว่าขนาดตัวเองเป็นโปรแกรมเมอร์ยังใช้ Sketch ทำ UI ออกมาได้เร็วกว่า Designer ที่ใช้ Photoshop หรือโปรแกรมอื่นๆ ข้อเสียคือมันมีแต่บน Mac เท่านั้นจ้าาา

ทริคเล็กน้อยอื่นๆ

  • harvest ใช้ track เวลาที่ทำแต่ละ taskᅠ
  • quib สำหรับทำ story board
  • เค้าแนะนำให้ดู ted talk เรื่อง post it (ผมยังหา link ไม่เจอ)
  • line เหมาะกับคุย investor เพราะแสดงอารมณ์ได้ชัด ทำให้สนิทกันได้เร็วขึ้นᅠ
  • วิธีทำให้คนใช้ tools คือควรใช้ tools ที่เค้าคุ้นเคยก่อน แล้วค่อยๆ ปรับเปลี่ยนไปใช้ tools ที่ advance มากขึ้นเรื่อยๆ คนจะยอมรับง่ายขึ้นᅠและบอก impact ให้เห็นให้ชัด เพื่อสร้างเสริมความเข้าใจ
  • วิธีทำให้คนใช้ tools อีกวิธีคือให้คนที่มีอำนาจสูงสุดมาใช้ก่อนแล้วจะเกิดการโอนถ่ายข้อมูลจากระบบเก่ามาใช้ในระบบใหม่แล้วพอใช้ๆ ไปสักพัก บอกให้คนข้างล่างรายงานผ่านระบบ โดยที่หัวหน้าก็ monitor อยู่เรื่อยๆสักพักถึงจะมีคนใช้ตามครบ แล้วเกิดประโยชน์สูงสุด หลังจากนั้นหัวหน้าจะหายตัวไปก็ได้ ระบบก็จะรันของมันไปเองแล้ว
  • culture ถ้าเราไม่ manage มัน มันจะ manage เราᅠ
  • No blame culture เป็นสิ่งที่ควรทำ

9 เครื่องมือตรวจสอบสถานะ server by

26
Feb
2

จากบทความที่แล้ว Newrelic เครื่องมือสำหรับ monitor server บน Cloud ขั้นเทพ เรามาดูกันต่อด้วย tools ที่เจาะลึกมากขึ้นผ่านทาง shell ดังนี้ครับ

  1. top เครื่องมือหากินที่มีติดมากับ server ทุกตัว ใช้ดู CPU, Memory ของแต่ละ process ได้ เพื่อสังเกตถึงความผิดปกติของ process และยังสั่ง kill process ได้อีกด้วย
  2. prstat -Z ตัวนี้คล้าย top แต่เอาไว้ใช้บน Solaris ครับ จะให้ข้อมูลที่เที่ยงตรงกว่า top แต่ถ้าเป็น linux ตระกูลอื่นก็ใช้ top นั่นแหละ
  3. ps -elf มี process อะไรรันอยู่บ้างด้วย command อะไร
  4. uptime ตรวจสอบว่าเครื่องนี้รันมาโดยไม่ล่มเป็นเวลากี่วันแล้ว
  5. df -h ใช้เช็คพื้นที่ harddisk ที่เหลือ เอาไว้ดูว่าเครื่อง server หรือเครื่อง database ของเราพื้นที่ใกล้เต็มหรือยัง
  6. apachetop -f <access_log_path> ใช้เช็คว่ามี URL ไหนที่ถูกรันถี่เป็นพิเศษ หรือมีการส่งข้อมูลมากเป็นพิเศษในขณะนั้น อันนี้รวมไปถึงถ้าโดนใครยิงถล่ม server ก็สามารถ monitor ได้เช่นกันว่ายิงมาจาก IP ไหน
  7. mysql -u<username> -p แม้แต่ตัวคำสั่ง mysql เองก็สามารถใช้ตรวจสอบสถานะของ Database ได้เช่นกัน หลังจากเราพิมพ์ mysql -uroot -p เข้ามาแล้ว สามารถรันคำสั่งต่างๆ ได้ เช่น
    1. SHOW PROCESSLIST; ใช้ดูสถานะ Query ของ mysql ในขณะนั้น ถ้า table โดน Lock บ่อยมากๆ เราจะเห็นสถานะ LOCK ค้างตอนรันคำสั่งนี้เป็นจำนวนมาก
    2. SHOW STATUS; ใช้ดูสถานะค่าต่างๆ ของ mysql ซึ่งมีอยู่มากมายมหาศาล อ่านรายละเอียดของค่าแต่ละตัวได้ที่นี่
  8. mytop -u <username> -p <password> -d <database_name> เมื่อเรามี top ใน server ก็ต้องมี mytop ใน mysql ตัวนี้เอาไว้ monitor สถานะปัจจุบันของ mysql ได้ทั้ง Query per sec, mysql รันมากี่วัน กี่ชั่วโมงโดยที่ไม่ล่มแล้ว, มีปริมาณ Select/Insert/Update/Delete ในขณะนั้นมากน้อยเพียงใด, มี slow query ไหม, Bytes per sec ฯลฯ มีประโยชน์มากครับ
  9. dtrace อันนี้มีเฉพาะใน Solaris แต่ขอบอกว่าเป็น Tools ที่เทพมากๆ ครับ โดยหากจะใช้เราควรไป Download Dtracetoolkit มา ถ้าใครเคยใช้ Firefox ก็คิอซะว่า Dtrace คือ greasemonkey และ Dtracetoolkit คือชุดของ script สำหรับรันจำนวนมากนั่นเอง ซึ่งภายใน toolkit จะมีหลากหลายภาษาการเขียนโปรแกรมมาให้เป็นจำนวนมาก วิธีใช้จะต้องลง extension ของภาษานั้นๆ เช่นจะใช้งาน dtrace สำหรับ php ต้องลง pecl install dtrace เสียก่อน จึงจะสามารถรัน script ที่ download มาได้ เมื่อรันแล้วจะมีข้อมูลหลายอย่างที่น่าสนใจเช่น function อะไรที่ class ไหนใช้เวลารันไปกี่วินาที รันไปกี่รอบ หรือแม้แต่กิน memory ไปเท่าไร ช่วยให้การหา bottleneck ของโปรแกรมว่าส่วนไหนของโปรแกรมทำงานช้าทำได้ง่ายมากๆ เพราะลงไปถึงระดับ function กันเลยทีเดียว อ่านรายละเอียดเพิ่มเติมได้ที่นี่

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

HTML+CSS Tools by

1
Jul
0

ก็ขอ re-use ของเก่านิดนึงละกันนะครับ
พอดีได้มีโอกาสไปพูดในงาน comkucamp#1 ซึ่งเป็นกิจกรรมของ
ชุมนุมนิสิตภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์
รูปแบบงานก็คล้ายๆ barcamp นั่นแหละครับ แต่เป็นเวอร์ชั่น ม.เกษตร

หัวข้อที่ผมเอาไปพูดก็คือ Web design Tips & Technique 1.5
(ที่ต้องเป็น1.5 เพราะว่าทำ2ไม่ทัน ในslideเป็นของครั้งแรกที่พูดใน barcampbkk2 ซะครึ่งนึง)

ทีนี้ในslideก็จะมีหัวข้อนึงน่ะครับ ที่เกี่ยวกับเครื่องมือในการทำงานกับhtmlและcss
ซึ่งเดี๋ยวผมจะพูดต่อไปนี่แหละครับ ว่ามันมีเครื่องมืออะไรที่น่าใช้บ้าง
(ตกลงที่แพล่มไปตั้งนานนี่ไม่ได้เกี่ยวเลยใช่ไหม…. -_-”)

ก่อนอื่นเลยครับ ผมขอแบ่งเครื่องมือออกเป็น3ประเภทหลักๆคือ

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