JackPot เป็นชื่อโครงการสำหรับการทำ ReEngineering จาวาซอร์สโคด ที่เริ่มต้นด้วยบิดาแห่งจาวา นาย เจมส์ กอสลิ่ง โครงการนี้ในที่สุดก็ถูกแจ็กพ็อตคลอดออกมาเสียที เพราะว่างานนี้ไม่ใช่เพิ่งคิดกันเป็นเดือน แต่เรียกว่าทำกันมาเป็นปีๆ เลยก็ว่าได้ ตั้งแต่สมัยที่การทำ refactoring ยังไม่ได้ถูกรวมร่างกับ IDE มากนัก จนถึงสมัยนี้ IDE ต้องมาแข่งกันว่าใครทำ refactoring เก่งกว่ากัน
สาเหตที่ทำกันมาอย่างยาวนาน อย่าเพิ่งคิดว่ามันเป็นเมก้าโปรเจ็คแต่อย่างใด เพราะจริงๆ แล้วมันไม่ใช่เลย เวลาส่วนใหญ่เสียไปกับการที่โปรเจ็คถูกหยุดพัก และรื้อเขียนใหม่่ จนกระทั่งเมื่อไม่นานมานี้เองก็ถูกนำมาปัดฝุ่นทำกันอย่างจริงจังเสียที ตอนแรกผมนึกว่าล่มไปแล้ว จนกระทั่งไปสัมนา NetBeans day ถึงได้รู้ว่ามันยังไม่ตาย
สมัยนั้นเค้าว่ากันว่า JackPot จะปฏิรูปวงการ refactoring ที่มีอยู่ทั้งหมด แต่คำพูดนี้ก็ไม่รู้ว่าเก่าเกินไปหรือเปล่า เพราะสมัยนี้ IDE อย่าง IntelliJ ขึ้นชื่อและเก่งกาจมากจนเป็นที่ยอมรับว่าเก่งเป็นอันดับหนึ่ง หาตัวจับไม่ได้เลย
แต่ในเมื่อมันออกมาแล้วก็ต้องมาดูกันถึงความพิเศษของมันกันหน่อย หลังจากที่ผมลองดูหลักการคร่าวๆ ของมันแล้ว สิ่งที่แปลกไม่เหมือนใครเลย นั่นคือ JackPot ยอมให้ผู้ใช้สามารถเขียนกฎในการทำ refactoring ได้เอง วิธีนี้ก็น่าคิดเหมือนกัน เนื่องจากมันเป็นอะไรที่สามารถให้คอมมิวนิตี้ที่มีอยู่ร่วมสร้างสรรและแบ่งปันกันเองได้ ซึ่งอาจจะเป็นสิ่งที่ทำให้คำกล่าวอ้างเรื่องการปฏิรูปเป็นจริงก็ได้ ใครจะไปรู้
ใครที่อยากลองใช้ JackPot สามารถดาว์นโหลดผ่านอัปเดตเซ็นเตอร์ของ NetBeans กันได้ในเร็วๆ นี้
เพิ่มเติม - ได้ข่าวว่า Eclipse 3.2M5 มี refactoring script ด้วยเหมือนกัน ...
ปล. คำว่า refactoring ภาษาไทยคืออะไร?
ที่มา - JackPot
refactoring
apirak Tue, 14/03/2006 - 22:25
refactoring คืออะไรหรอครับ... ReEngineering จาว่าซอร์สโคด ในที่นี้คือซอร์สโคดของเราเองหรอครับ แล้วมันช่วยให้ง่ายขึ้นอย่างไรพอจะมีข้อมูลหรือเปล่าครับ
Apirak.com panatkool
refactor
ejel Tue, 14/03/2006 - 23:24
In reply to refactoring by apirak
refactor เป็นรูปแบบวิธีการในการปรับปรุงพัฒนาโค้ดของเราเองให้ดีขึ้น ดีขึ้นนี่ก็หมายถึง อ่านง่ายขึ้น แก้ไขปรับปรุงง่ายขึ้น พัฒนาต่อง่ายขึ้น เป็นอีกเทคนิคหนึ่งซึ่งมีประโยชน์มากในการพัฒนาซอฟต์แวร์เชิงวัตถุ
Martin Fowler มีเขียนหนังสือ Refactoring ไว้ดีมากๆ ขอแนะนำอย่างแรง
Refactoring: Improving the Design of Existing Code
Refactoring Website
ใครที่เขียนโปรแกรมเชิงวัตถุ เรื่องนี้เป็นอีกหนึ่งหัวข้อที่น่าศึกษาและฝึกฝนทักษะอย่างมาก
จาก wikipedia
deans4j Tue, 14/03/2006 - 23:20
จาก wikipedia นะครับ ตรงไปตรงมาที่สุด คือการที่เรา เขียน/แก้ โคดของเราเพื่อจุดประสงค์บางอย่างเช่น ดีไซน์ให้ดีขึ้น มีประสิทธิภาพที่ดีขึ้น อ่านง่ายขึ้น แต่ทั้งหมดคงไว้ซึ่งผลลัพธ์เหมือนเดิม
เช่นถ้าเราต้องการผลลัพธ์ออกมา ให้เท่ากับ 3 แต่วิธีที่ทำมันก็มีหลายวิธีด้วยกัน ตอนแรกที่อะไรมันยังไม่ชัดเจนอยู่ คุณอาจจะนึกวิธีง่ายๆ ไม่ได้ นึกออกแต่วิธี ถอดรากที่สองของ 9
ตอนหลังคุณนึกออกว่า 1+2 ก็เท่ากับ 3 นี่หว่า คุณก็ refactoring การทำงานของคุณใหม่
ส่วนคำว่า reengineering คือคุณมีระบบอยู่่แล้ว แล้วคุณต้องการรื้อทำใหม่โดยใช้วิธีการใหม่ๆ เพื่อที่แก้ปัญหาที่ไม่สามารถเกาจุดที่คันได้โดยตรง อาจจะเป็นเพราะออกแบบระบบมาไม่ดีตั้งแต่แรก ต้องไปแก้อ้อมๆ แทน และเป็นปัญหาเรื้อรังมานานจนระบบไ่ม่สามารถที่จะขยับขยายต่อไปอย่างมีแบบแผน และประิสิทธิภาพ
คุณเห็นแล้วว่าระบบเก่า ระบบเดิมนั้นมีข้อเสีย จุดอ่อน ข้อบกพร่องตรงไหน และการไปแก้ไข refactoring บางส่วนของโคดอาจจะไม่พอ เนื่องจากมันซับซ้อนเกินไปที่จะไปแก้ หรือว่าเป็นส่วนที่อ่อนไหว แก้แล้วอาจจะไปกระทบจุดอื่นกลายเป็นการแก้บั๊กที่จุดนึง แต่ไปสร้างบั๊กใหม่อีกจุดนึงก็เป็นได้
ทางออกคือ reengineer โดยคราวนี้คุณรู้อยู่แล้วว่าปัญหาคืออะไร คราวนี้คุณก็สามารถออกแบบมันให้ใช้งานง่ายขึ้น ขยับขยายง่ายขึ้นได้ สะอาดขึ้น
ที่ JackPot อ้างว่าตัวเองสามารถทำ reengineer ได้ ผมว่าเนื่องจากมันยอมให้ผู้ใช้เขียนกฎลงไปเองได้นั่นเอง คงต้องติดตามดูต่อไป ว่าคนจะเอา JackPot ไปเล่นยังไงบ้าง...
refactoring และ reengineering จาก wikipedia
คือการปรั
sid Tue, 14/03/2006 - 23:35
คือการปรับซอร์สโค้ดเราเองครับ เหตุผลที่ต้องมีการปรับก็มีอยู่หลายอย่าง เช่นถ้าเราเห็นว่ามี method บางตัวที่มีขนาดใหญ่ยากต่อการเข้าใจ เราก็ควรจะแยกออกมาเป็น method ย่อย เพื่อง่ายต่อความเข้าใจ และการนำไปใช้ใหม่ก็ง่ายขึ้นด้วย การทำ Refactoring เราจะไม่ได้ทำไปให้โปรแกรมมีฟีเจอร์เพิ่มขึ้น แต่เป็นการปรับเรื่องการดีไซน์โค้ดมากกว่า
เทคนิกในการทำ refactor นั้นมีอยู่หลายแบบ ถ้าสนใจแนะนำให้ไปหาหนังสือ Refactoring โดย Martin Fowler อ่านครับ อ่านแล้วจะทำให้รู้สึกว่าโค้ดที่เราเขียนมันแย่จริงๆ :P
ปล. ตอบซ้ำ ขออภัยดันเผลอพิมทิ้งไว้ มีคนตอบก่อนไปตรึมแฮะ
ผมอธิบาย
deans4j Thu, 16/03/2006 - 03:37
ผมอธิบาย refactoring เป็นนามธรรมเกินไปหรือเปล่า? ถ้าตัวอย่างที่เป็นรูปธรรมหน่อย ลองนึงตัวอย่างง่ายๆ อย่างถ้าคุณจะแก้ ชื่อ Class จาก A เป็น B คุณเปลี่ยนแล้วปัญหามันไม่จบ เพราะว่าเดิมๆ คงมี Class อื่นๆ มาเรียก A ไปใช้อยู่กระจัดกระจายเต็มพื้นที่ทำงานไปหมด ถ้าคุณมี refactoring tool มันก็สามารถที่จะจัดการตามแก้ให้จนหมดได้ โดยคุณแค่คลิ๊กเมาส์สักสองที
นี่เป็นตัวอย่างการทำ refactoring พื้นฐานทั่วไปครับ
edit : โอ้ คนมาช่วยตอบกันเต็มเลย น่ารักจริงเชียว ^^ โฆษณา หนังสือเล่มเดียวกันด้วย หุหุ
สมัยเรียน
keng Wed, 15/03/2006 - 08:43
สมัยเรียน
เพื่อนผมเอา refactoring มาใช้แก้โค้ดที่จิ๊กมาส่ง อ.
...
ไม่ใช้
ม่อน Wed, 15/03/2006 - 21:44
ไม่ใช้ กระผมนะครับ คุณเก่ง
ขอบคุณทุก
apirak Thu, 16/03/2006 - 06:58
ขอบคุณทุกคนครับ แต่ก็ยังคิดไม่ออกว่าจะเชื่อถือได้แค่ไหน เวลาสั่งให้มันทำให้นี่เสียวน่าดู ยิ่งถ้าให้มันแก้ code มั่วๆ ของเราด้วย (ถึงจะแก้แค่ตัว call ก็น่ากลัวแล้ว) แสดงว่าเค้ามีเทคนิคบางอย่างที่ทำให้ผู้ใช้มั่นใจได้
Apirak.com panatkool