ถ้าเราเขียนโปรแกรมคอมพิวเตอร์ แล้วเราเขียนผิดไวยากรณ์ ตัวแปลภาษาก็จะฟ้องว่าเราเขียนผิดไวยากรณ์ อันนี้เรียกว่า Syntax Error

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

แต่ตัวแปลภาษาเหล่านั้นก็ไม่เคยมาแนะนำเราว่าเราเขียนโปรแกรมยังงดงามไม่พอ เราเขียนแล้วอัลกอริทึมยังเจ๋งไม่พอ หรือเราเขียนแล้วเยิ่นเย้อจริง ๆ ควรเขียนให้กระชับได้มากกว่านี้ … คอมพิวเตอร์มันจะไม่่บอกเรา มันจะเฉย ๆ ประมาณว่าเรื่องของมรึง แค่เขียนให้ถูกไวยากรณ์กรูก็พอ!!!

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

เราไม่มีทางรู้ว่าจะเกิด Runtime Error ยกเว้นว่าเราจะมีประสบการณ์สูง ที่จะคาดเดาได้ว่ามีโอกาสอันใดบ้างที่จะเกิด Runtime Error เราก็เขียนโปรแกรมดักเอาไว้ก่อน เพื่อไม่ให้เกิด Runtime Error ดังกล่าวขึ้นมา

แต่ถ้าดักด้วยอัลกอริทึมหรือหนทางที่คิดว่าใช่ทั้งหมดแล้ว ก็ยังเกิด Runtime Error ขึ้นมาอีก เราควรจะทำยังไงดี???

ก็อาจจะเป็นเรื่องโชคดี ที่ภาษาคอมพิวเตอร์ยุคหลัง ๆ มีคำสั่ง try … except มาให้ เพื่อให้เรามาครอบบริเวณโปรแกรมที่เราเดาหรือคะเนว่าต้องเกิด Runtime Error แน่ ๆ แต่ว่าเราจนด้วยเกล้าจริง ๆ เพราะไม่รู้ว่าจะเกิด  Runtime Error ตรงไหน ก็เอา try … except ไปครอบมันเอาไว้ซะเลย หมดเรื่อง

ดังนั้นโดยสรุปแล้ว การจะเกิด Syntax Error หรือเกิด Runtime Error ที่มนุษย์เราหลงหูหลงตาไปได้นั้น ก็ด้วยเพราะตัวแปลภาษาหรือคอมพิวเตอร์มาบอกเรา ถูกแมะ???

ผมเคยเจอเรื่องปัญญาอ่อนเรื่องนึง ที่คิดแล้วขำไม่ออก เรื่องมันมีอยู่ว่าตามกระบวนการพัฒนาซอฟต์แวร์นั้น เมื่อพัฒนาเสร็จแล้วก็จำเป็นต้องทดสอบ ซึ่งก็แสดงว่าทีมพัฒนากับทีมทดสอบควรจะทำงานแยกกัน ทีมพัฒนาก็พัฒนาไป พอพัฒนาเสร็จแล้วก็ให้ทีมทดสอบมาทดสอบ

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

ผมมานั่งนึก ๆ ๆ แล้วก็คิด ๆ ๆ แล้วก็ปิ๊งขึ้นมาว่า ถ้าทีมพัฒนารู้ Runtime Error ที่ไม่ได้ถูกดักเอาไว้ได้ทั้งหมด แล้วผมจะมีทีมทดสอบไว้หาพระแสงอะไรล่ะครับเนี่ย ผมก็ให้ทีมพัฒนาอุด Runtime Error ทั้งหมดไว้ไม่ดีกว่าเหรอ?

เพราะจริง ๆ แล้วหน้าที่หลักของทีมทดสอบ ก็คือการค้นหา Runtime Error ที่ไม่ได้ถูกดักเอาไว้ในโปรแกรมนั่นเอง!!!

เอ๊ะ!!! หรือที่ผมคิดมันไม่ถูกต้องวะเนี่ย?

[tags]คอมพิวเตอร์, ซอฟต์แวร์, การสร้างซอฟต์แวร์, syntax error, runtime error[/tags]

Related Posts

13 thoughts on “Syntax Error กับ Runtime Error

  1. เอ๊ะ ! หรือเอก็งงๆ มาตลอด

    ถ้างั้นไปเป็น tester น่าจะสบายกว่านะครับเนี้ย :p

  2. อันนี้ออกแนว Tester โบ้ยงานรึเปล่าครับเนี่ย – -”

    เพราะว่างานหา Error / Exception น่าจะเป็นงานหลักของ Tester มากกว่า

  3. เอ่อ.. ถ้ารู้ว่ามี แล้วจะปล่อยไว้ทำไม – -”

    runtime error ที่พบได้บ่อยคือ.. divided by zero
    โปรแกรมตัวไหนมีการคำนวณก็แทบจะเจอทุกตัว 😀

    อีกอันที่เจอในขั้น dev คือ ลืม create instance
    ประกาศ object ไว้งั้นแหละ แต่ไม่ได้ยัด instance ลงไปให้
    พอเรียกใช้ก็บึ้ม เหอๆ

  4. ” ทีมทดสอบบอกว่าขอให้ทีมพัฒนารวบรวม Runtime Error ที่ไม่ได้ถูกดักเอาไว้ในโปรแกรมทั้งหมดให้ด้วย ”

    น่าจ้างทำงานมากครับ และคงเป็น QA Team ที่อยากทำงานด้วยมากครับ 🙁

    ถามกลับได้ไหมครับ ว่า เราจ้างคุณมาเพื่ออะไร งานคุณคืออะไร
    ทำงานสบายจังครับ 🙂

    แบบนี้ไง บ้านเราเลยไม่ไปไหนไกลไงครับ เพราะมีคนแบบนี้เยอะครับ

    พี่คิดถูกแล้วครับ 101% และควรคิดต่อไปว่าเราน่ารับสมัคร QA Team ดีไหม 🙂

  5. อัลกอริทึม เรายังไม่งามพอ?

    คงต้อง

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

  6. นั่นดิคุณเอ 555 ผมเคยสมัครตำแหน่ง tester นะ แต่เขาไม่รับเพราะเขาคะยั้นคะยอให้รับตำแหน่งนักพัฒนาซอฟต์แวร์แทน

    ถูกกกกกกกก…ต้องนะคร้าบบบบบบบบบคุณ Ekarin

    ขนาดมืออาชีพอย่างคุณ iPAtS ยังมีพลาดเลยเหรอครับเนี่ย อือม สร้าง object แล้วลืมประกาศ instance ให้ เป็นอะไรที่เจอกันบ่อยจริง ๆ ด้วยแฮะ

    ผมบ้องกระโหลกทีมทดสอบไปเรียบร้อยแล้วครับคุณ guru อิอิ แล้วก็ให้ทำงานต่อไป

    สงสัยต้องเขียนให้สั้น ๆ เล็ก ๆ แต่ทำงานเร็ว ๆ แล้วได้ผลลัพท์ที่ถูกต้องและเยอะ ๆ กระมังครับคุณ pete

    แลกกันดู ชมกันไปชมกันมา ลอยกันทั้งคู่พอดีครับคุณ SoftGanz อิอิ ^-^

  7. ผมอยากให้พี่ไืท้ มีfeed คอมเม้นด้วยจัง

    พี่ไท้คิดถูกแล้วครับ ถ้างั้นจะจ้างมาทำไมกัน ??

  8. พี่ไท้ เข้าใจถูกครับ แต่ไม่ครบ

    Testing จริงๆ แล้วไม่ใช่แค่นั้งหา Runtime Error ครับ
    Testing นั้นหา Bug/Defect ของโปรแกรมครับ

    Runtime Error นั้นแค่เป็น Defect อันนึง (ระดับร้ายแรง) ของโปรแกรม
    ยังมีส่วนอื่นๆ เช่น ความถูกต้อง Functional, ประสิทธิภาพ Performance, การวัดระดับ Benchmarking, Integration, Regression, ฯลฯ อีกมากมายที่ต้อง Test ครับ

    แล้วจู่ๆ เราก็โบ้ยโปรแกรมอะไรก็ไม่รู้ไปให้ Tester ก็ไม่ได้ครับ
    ใครจะไปทำงานได้ล่ะคับ
    จะให้มานั่ง Test สุ่มสี่สุ่มห้ามันก็มั่นใจไม่ได้ว่าครบถ้วน และสมบูรณ์

    ปกติเค้าจะทำ Test Specification มาก่อน ซึ่งเขียนมาจาก Design Document ของโปรแกรม
    เพิ่มตรวจหาว่า “เราทำแบบนี้ ต้องได้ผลลัพธ์แบบนี้” เขียนเป็นข้อๆไว้ (อาจจะมากเป็นพันๆ ข้อก็ได้ ในโปรแกรมใหญ่ๆ)

    หลังจากตรวจทานว่า เีขียนได้ครบถ้วน สมบูรณ์แล้ว เราจึงเริ่มทำการทดสอบ (Testing Runing) ตามที่เราคิด (และเขียนลงใน Test Spec.) ดังกล่าวครับ

    อย่างงี้เราถึงจะมีการทดสอบระบบที่สมบูรณ์ได้ครับ

  9. การดัก Run Time Error มันมีทั้งทำก่อนหรือหลังก็ได้ครับ เช่น หากเราต้องการให้ user ป้อนข้อมูลเฉพาะตัวเลข เราก็บังคับการกดแป้นคีย์บอร์ด ให้ล็อคไว้เฉพาะตัวที่เราต้องการ ไม่อย่างงั้นก็ต้องเจอ Run time – Type Mismatch
    หรือ หากเราเล่นกับพวกไฟล์ เราสามารถดัก Error ทีหลังโดย Try – Except อย่างที่ว่ามา และโอกาสจะเกิด Run time error ได้ เช่น Bad filename,File not found,Device I/O Error,Permission denied,Disk Full,Disk not ready,Path not found และอื่นๆอีกเยอะเลย

    สิ่งที่ผมอยากจะบอกก็คือว่า เราคนเขียน เราก็ต้องคาดการณ์เอาไว้ก่อนล่วงหน้าแล้ว ว่าจะมีโอกาสมากน้อยแค่ไหน ที่จะเกิด Error แบบนี้ได้ โอกาสที่เกิดจะอยู่จุดสำคัญของการประมวลผลแทบทั้งนั้น ดังนั้นการครอบ Try – Except เอาไว้ ก็เพื่อแจ้งทั้ง Tester และ ย้อนกลับมาที่ตัวเราด้วย ว่ามันผิดตรงไหน โดยผ่านทาง MessageBox และระบุตำแหน่งโปรแกรมย่อยเอาไว้ด้วย เพราะบางครั้ง tester ก็ลืมได้ล่ะ
    สิ่งสำคัญของ tester ต้องตรวจสอบผลลัพธ์ความถูกต้องเป็นหลักใหญ่ก่อน ส่วน Run time น่ะของแถม เพราะหากได้ Programmer ประสบการณ์สูง โอกาสเกิด Error นี้จะต่ำลงไป แต่ถ้าหากโปรแกรมประมวลผลพลาด ได้คำตอบผิดไปจากความเป็นจริง ก็จะกลายเป็น Logical Error หนักยิ่งกว่าทุกๆ Error จัดเป็นระดับร้ายแรงสูงสุด เพราะกว่าจะงมหาว่ามันผิดที่ตรงไหนได้เนี่ย มันกินเวลานาน เพราะไม่มี Compiler สักกะตัวที่มันจะบอกได้

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *