Tags:

JackPot เป็นชื่อโครงการสำหรับการทำ ReEngineering จาวาซอร์สโคด ที่เริ่มต้นด้วยบิดาแห่งจาวา นาย เจมส์ กอสลิ่ง โครงการนี้ในที่สุดก็ถูกแจ็กพ็อตคลอดออกมาเสียที เพราะว่างานนี้ไม่ใช่เพิ่งคิดกันเป็นเดือน แต่เรียกว่าทำกันมาเป็นปีๆ เลยก็ว่าได้ ตั้งแต่สมัยที่การทำ refactoring ยังไม่ได้ถูกรวมร่างกับ IDE มากนัก จนถึงสมัยนี้ IDE ต้องมาแข่งกันว่าใครทำ refactoring เก่งกว่ากัน

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

สมัยนั้นเค้าว่ากันว่า JackPot จะปฏิรูปวงการ refactoring ที่มีอยู่ทั้งหมด แต่คำพูดนี้ก็ไม่รู้ว่าเก่าเกินไปหรือเปล่า เพราะสมัยนี้ IDE อย่าง IntelliJ ขึ้นชื่อและเก่งกาจมากจนเป็นที่ยอมรับว่าเก่งเป็นอันดับหนึ่ง หาตัวจับไม่ได้เลย

แต่ในเมื่อมันออกมาแล้วก็ต้องมาดูกันถึงความพิเศษของมันกันหน่อย หลังจากที่ผมลองดูหลักการคร่าวๆ ของมันแล้ว สิ่งที่แปลกไม่เหมือนใครเลย นั่นคือ JackPot ยอมให้ผู้ใช้สามารถเขียนกฎในการทำ refactoring ได้เอง วิธีนี้ก็น่าคิดเหมือนกัน เนื่องจากมันเป็นอะไรที่สามารถให้คอมมิวนิตี้ที่มีอยู่ร่วมสร้างสรรและแบ่งปันกันเองได้ ซึ่งอาจจะเป็นสิ่งที่ทำให้คำกล่าวอ้างเรื่องการปฏิรูปเป็นจริงก็ได้ ใครจะไปรู้

ใครที่อยากลองใช้ JackPot สามารถดาว์นโหลดผ่านอัปเดตเซ็นเตอร์ของ NetBeans กันได้ในเร็วๆ นี้

เพิ่มเติม - ได้ข่าวว่า Eclipse 3.2M5 มี refactoring script ด้วยเหมือนกัน ...

ปล. คำว่า refactoring ภาษาไทยคืออะไร?

ที่มา - JackPot

Comments

By: apirak
iPhoneUbuntu
apirak's blog
on 14/03/06 22:25 #4494 toggle
apirak's picture

refactoring คืออะไรหรอครับ... ReEngineering จาว่าซอร์สโคด ในที่นี้คือซอร์สโคดของเราเองหรอครับ แล้วมันช่วยให้ง่ายขึ้นอย่างไรพอจะมีข้อมูลหรือเปล่าครับ

Apirak.com panatkool


Apirak.com panatkool

By: ejel
WriteriPhone
ejel's blog
on 14/03/06 23:24 #4497 Reply to:4494 toggle
ejel's picture

refactor เป็นรูปแบบวิธีการในการปรับปรุงพัฒนาโค้ดของเราเองให้ดีขึ้น ดีขึ้นนี่ก็หมายถึง อ่านง่ายขึ้น แก้ไขปรับปรุงง่ายขึ้น พัฒนาต่อง่ายขึ้น เป็นอีกเทคนิคหนึ่งซึ่งมีประโยชน์มากในการพัฒนาซอฟต์แวร์เชิงวัตถุ

Martin Fowler มีเขียนหนังสือ Refactoring ไว้ดีมากๆ ขอแนะนำอย่างแรง

Refactoring: Improving the Design of Existing Code Refactoring Website

ใครที่เขียนโปรแกรมเชิงวัตถุ เรื่องนี้เป็นอีกหนึ่งหัวข้อที่น่าศึกษาและฝึกฝนทักษะอย่างมาก

By: deans4j
deans4j's blog
on 14/03/06 23:20 #4496 toggle
deans4j's picture

จาก wikipedia นะครับ ตรงไปตรงมาที่สุด คือการที่เรา เขียน/แก้ โคดของเราเพื่อจุดประสงค์บางอย่างเช่น ดีไซน์ให้ดีขึ้น มีประสิทธิภาพที่ดีขึ้น อ่านง่ายขึ้น แต่ทั้งหมดคงไว้ซึ่งผลลัพธ์เหมือนเดิม

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

ตอนหลังคุณนึกออกว่า 1+2 ก็เท่ากับ 3 นี่หว่า คุณก็ refactoring การทำงานของคุณใหม่

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

คุณเห็นแล้วว่าระบบเก่า ระบบเดิมนั้นมีข้อเสีย จุดอ่อน ข้อบกพร่องตรงไหน และการไปแก้ไข refactoring บางส่วนของโคดอาจจะไม่พอ เนื่องจากมันซับซ้อนเกินไปที่จะไปแก้ หรือว่าเป็นส่วนที่อ่อนไหว แก้แล้วอาจจะไปกระทบจุดอื่นกลายเป็นการแก้บั๊กที่จุดนึง แต่ไปสร้างบั๊กใหม่อีกจุดนึงก็เป็นได้

ทางออกคือ reengineer โดยคราวนี้คุณรู้อยู่แล้วว่าปัญหาคืออะไร คราวนี้คุณก็สามารถออกแบบมันให้ใช้งานง่ายขึ้น ขยับขยายง่ายขึ้นได้ สะอาดขึ้น

ที่ JackPot อ้างว่าตัวเองสามารถทำ reengineer ได้ ผมว่าเนื่องจากมันยอมให้ผู้ใช้เขียนกฎลงไปเองได้นั่นเอง คงต้องติดตามดูต่อไป ว่าคนจะเอา JackPot ไปเล่นยังไงบ้าง...

refactoring และ reengineering จาก wikipedia

By: sid
Writer
sid's blog
on 14/03/06 23:35 #4498 toggle
sid's picture

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

เทคนิกในการทำ refactor นั้นมีอยู่หลายแบบ ถ้าสนใจแนะนำให้ไปหาหนังสือ Refactoring โดย Martin Fowler อ่านครับ อ่านแล้วจะทำให้รู้สึกว่าโค้ดที่เราเขียนมันแย่จริงๆ :P

ปล. ตอบซ้ำ ขออภัยดันเผลอพิมทิ้งไว้ มีคนตอบก่อนไปตรึมแฮะ

By: deans4j
deans4j's blog
on 16/03/06 3:37 #4499 toggle
deans4j's picture

ผมอธิบาย refactoring เป็นนามธรรมเกินไปหรือเปล่า? ถ้าตัวอย่างที่เป็นรูปธรรมหน่อย ลองนึงตัวอย่างง่ายๆ อย่างถ้าคุณจะแก้ ชื่อ Class จาก A เป็น B คุณเปลี่ยนแล้วปัญหามันไม่จบ เพราะว่าเดิมๆ คงมี Class อื่นๆ มาเรียก A ไปใช้อยู่กระจัดกระจายเต็มพื้นที่ทำงานไปหมด ถ้าคุณมี refactoring tool มันก็สามารถที่จะจัดการตามแก้ให้จนหมดได้ โดยคุณแค่คลิ๊กเมาส์สักสองที

นี่เป็นตัวอย่างการทำ refactoring พื้นฐานทั่วไปครับ

edit : โอ้ คนมาช่วยตอบกันเต็มเลย น่ารักจริงเชียว ^^ โฆษณา หนังสือเล่มเดียวกันด้วย หุหุ

By: keng
WriterAndroid
keng's blog
on 15/03/06 8:43 #4502 toggle
keng's picture

สมัยเรียน

เพื่อนผมเอา refactoring มาใช้แก้โค้ดที่จิ๊กมาส่ง อ.

...

By: ม่อน
ม่อน's blog
on 15/03/06 21:44 #4523 toggle
ม่อน's picture

ไม่ใช้ กระผมนะครับ คุณเก่ง

By: apirak
iPhoneUbuntu
apirak's blog
on 16/03/06 6:58 #4528 toggle
apirak's picture

ขอบคุณทุกคนครับ แต่ก็ยังคิดไม่ออกว่าจะเชื่อถือได้แค่ไหน เวลาสั่งให้มันทำให้นี่เสียวน่าดู ยิ่งถ้าให้มันแก้ code มั่วๆ ของเราด้วย (ถึงจะแก้แค่ตัว call ก็น่ากลัวแล้ว) แสดงว่าเค้ามีเทคนิคบางอย่างที่ทำให้ผู้ใช้มั่นใจได้

Apirak.com panatkool


Apirak.com panatkool