2005/Oct/18

แหม.. เรื่องนี้ค่อนข้างใหม่สำหรับเราเพราะเราไม่ค่อยได้ใช้มากเท่าไหร่ในการทำงาน แต่ก็ค่อนข้างมั่นใจว่าโปรแกรมเมอร์หลายคนในบ้านเราก็ไม่ค่อยรู้จักกันมากนัก (จริงๆ ก็ดูเอาจากเพื่อนๆ ตัวเองนั่นแหละ --"-- ) และตอนนี้จำเป็นต้องทำ presentation เกี่ยวกับไอ้เรื่องนี้ซะด้วยสิ ไหนๆ ก็ไหนๆ แล้ว เลยเอามาเล่าสู่กันฟังดีกว่าเนอะ ใครอยากเสริมอะไรตรงไหน ว่ากันมาได้เลยนะคะ (แต่ให้เดาบล็อกวันนี้ต้องเป็นอันที่ไม่ค่อยมีคนอ่านแน่ๆ ฮะๆ)

Extreme Programming (XP) ถือกำเนิดขึ้นช่วงประมาณปี 1990 มีชายผู้หนึ่งนามว่า Kent Beck พยายามคิดค้นวิธีที่จะสร้างโปรแกรมดีๆ ออกมา (และ bug น้อยๆ) ก็ได้ช่วยกันคิดกับเพื่อนอีกคนคือ Ward Cunningham ว่าอยากให้มันเป็นแนวความคิดที่ง่ายๆ แต่มีประสิทธิภาพสูง ใครๆ ก็สามารถทำได้ จึงร่วมกันทำโปรเจ็คอันนึงและก่อให้เกิดการโปรแกรมแบบ Extreme Programming ขึ้นมา

การเขียนโปรแกรมโดยถือทางแบบ XP นี้ มีหลักการย่อยๆ อยู่นิดเดียว

1. Pair Programming ก็คือการเขียนโปรแกรมเป็นคู่หรือเป็นกลุ่มนั่นเอง (แต่เป็นกลุ่มคงทะเลาะกันตาย เป็นคู่ดีกว่าเนอะ)
2. Test-Driven Development ซึ่งคือ การเขียนโปรแกรมโดยมีการ test ก่อนโปรแกรมทีหลัง (ฟังแล้วงงๆ)

การทำ pair-programming จะมีผลดีในแง่ที่ว่า จะช่วยลดความผิดพลาดง่ายๆ ที่อาจเกิดขึ้นจากการโปรแกรมคนเดียว (เคยป่าว คิดอะไรคนเดียวแล้วเดินทางผิดมาตลอด เจ้าตัวเองยังไม่รู้) ป้องกันการมองอะไรด้านเดียวและความไม่รอบคอบ จะทำให้การทำงานมีประสิทธิภาพมากขึ้น แต่ทั้งนี้ทั้งนั้น การทำ pair-programming นั้นต้องใช้ resource เยอะในช่วงแรกๆ แน่นอนว่าตอน pair กันใหม่ๆ งานจะกระดึ๊บๆ เดินช้ามากกกก.. แต่เมื่อทั้งสองคนจูนกันติดแล้ว การทำงานจะเร็วขึ้น มองอะไร เข้าใจไอเดียของกันและกันได้เร็วขึ้น (ถ้าไม่ตีกันตายไปซะก่อน) งานช่วงหลังๆ ก็จะเร็วขึ้นติดจรวด

ลองคิดดูว่า ถ้าเราโปรแกรมคนเดียว คิดคนเดียว ออกแบบคนเดียว ต่อให้เดินทางมาผิด เราก็จะไม่รู้ว่าผิดตั้งแต่ตรงไหน และจะไม่รู้จนกระทั่ง เราเจอทางตันหรือ error ตัวแดง สิ่งที่จำใจต้องทำก็คือ การรื้อโค้ด การแก้ แก้ แก้ แก้ จนโค้ดมันเริ่มมั่ว แก้ตรงนั้น กระทบตรงนี้ สรุป.. ก็ต้องใช้เวลาแก้นานอยู่ดี --"-- การทำ pair-programming จะช่วยให้ลดความเสี่ยงตรงนี้ลงได้มากทีเดียว

อีกสิ่งหนึ่งที่ควรทราบคือ การโปรแกรมโดยใช้หลักการ Test-driven development (TDD) เป็นการโปรแกรมโดยมีการทำ test เป็นสิ่งที่ช่วยนำไปสู่เป้าหมายที่เรากำหนด (abstract จัง อ่านเองยังไม่รู้เรื่อง) มีคนให้คำจำกัดความโปรแกรมที่ใช้วิธี TDD เขียนว่า CLEAN CODE THAT WORKS ความหมายก็ตรงตัว คือ โปรแกรมที่เรียบง่ายและทำงานได้สมบูรณ์ วิธีการเขียนโปรแกรมแบบ TDD มีหลักการดังนี้

เมื่อเราลิสต์สิ่งที่เราต้องการออกมา (interface, features, functions/methods,...)

1. เขียนเทสต์ออกมาเพื่อที่จะเทสต์สิ่งที่อยู่ในลิสต์ (ทีละอันก่อน)
2. compile/run โปรแกรมและมันก็จะเทสต์ไม่ผ่าน (ก็ยังไม่ได้เขียนอะไรเลยอ่ะ ผ่านก็ผีหลอกแล้ว)
3. เขียนโค้ดง่ายๆ เข้าไป (เน้นว่าง่าย) ถ้าเป็น function จะ return ค่าคงที่หรืออะไรก็ได้เข้าไปก่อนก็ได้ ขอแค่ให้ test ผ่านก็พอ
4. จากนั้นก็ run โปรแกรมซึ่งก็ควรจะผ่าน
5. กลับไปดู function หรือโค้ดใดๆ ที่เพิ่งแก้ไปในข้อ 3 เขียนมันให้สมบูรณ์แล้วจึง compile ใหม่ (และก็ควรจะผ่าน) ถ้ามันเป็น function ที่ซับซ้อนมากนัก ก็แตกออกมาให้ย่อยลงมาอีกหน่อย จากนั้นก็ย้อนกลับไปทำที่ข้อ 1 โดยก้าวไปสู่ข้อที่ 2 ในลิสต์ของเราที่ทำไว้

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

public class MyApp() {
public MyApp() {
plus(1,2);
}
}

จากข้างบน เราเริ่มจากเขียนเรียก interface ที่เราอยากมี(เมื่อโปรแกรมเสร็จ) และก็ compile ซึ่งก็จะไม่ผ่านเพราะมันไม่มี method Plus() ซักหน่อย --"-- ก็ทำตามข้อ 3 เขียนโค้ด

public class MyApp() {
public MyApp() {
plus(1,2);
}

public plus(int i, int j) {
return 0;
}

}

ใส่ function นั้นเข้าไปแล้ว return อะไรซักอย่างออกมาก่อนก็ได้ compile ผ่านและกลับไปเขียนโค้ดให้สมบูรณ์ ได้ออกมาเป็นว่า

public class MyApp() {
public MyApp() {
plus(1,2);
}

public plus(int i, int j) {
int sum = 0;
sum = i + j;
return sum;

}
}

ก็จะเป็นการสมบูรณ์(ในระดับหนึ่ง)สำหรับ method Plus() หาต้องการให้มันเช็ค null หรือค่าอะไรได้มากกว่านี้ก็ทำการเพิ่มเทสต์เข้าไปและเริ่มต้นวงจรใหม่ที่ข้อ 1 ทำอย่างนี้ไปเรื่อยๆ จนทำ feature ต่างๆ ในลิสต์จนครบ การเขียนเทสต์ย่อยๆ ขึ้นมาแต่ละข้อนั้น ก็ทิ้งไว้และเขียนเพิ่มไปเรื่อยๆ จนกว่าคิดว่าเทสต์ข้อนั้นไม่จำเป็นต้องมีแล้วหรือเป็นการเทสต์ซ้ำกับข้ออื่น ก็ให้ลบได้

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

ตัวอย่างที่เคยอ่านจากหนังสือของ Kent Beck ชื่อหนังสือ Test-Driven Development ตรงตามตัวเลย เค้ามีตัวอย่างการเขียนจากไม่กี่บรรทัดอย่างที่ยกตัวอย่างให้ดู เขียนไปเรื่อยๆ จนสร้าง super class สร้างinterface สร้างอะไรต่างๆ เป็นเรื่องเป็นราว สิ่งที่คนใช้ TDD ควรรู้เป็นอย่างดีก็ได้แก่การทำ OOP และหลักการ programming ต่างๆ ทั้งหลายนั่นเอง (อันนี้แหละที่ย๊ากยาก) ดังนั้น การทำ TDD จึงควรทำเป็น pair-programming ด้วย (ลำพังเดี๊ยนคนเดียว ไปไม่รอดแน่)

ข้อดีมากๆ ของการทำ XP คือนั่นแหละ CLEAN CODE THAT WORKS โปรแกรมที่ใครอ่านก็เข้าใจง่าย (เกิดใครมาเอาไปทำต่อ จะได้ไม่งงตาแตก) และทำงานได้ตรงอย่างที่เราต้องการอยากให้ทำ การทำ TDD จะเป็นการออกแบบโปรแกรมออกมาในเชิง Top-Down คือ design ออกมาจากผลลัพธ์ที่เราอยากจะได้ สิ่งที่ได้ออกมาก็จะตรง requirement มากกว่า และโค้ดก็จะไม่รกรุงรัง

โดยส่วนตัวแล้ว เราเคยลองเฉพาะ pair-programming ยังไม่เคยใช้ TDD เขียนโปรแกรมเลย แต่เดี๋ยวคงจะต้องได้ทำแล้วแหละ (โดนบังคับ แงๆ) จริงๆ มีเรื่องราวอีกเยอะที่อยากพูดเกี่ยวกับ TDD แต่แค่นี้ก็แทบไม่มีคนเข้ามาอ่านแล้วกระมัง (ーー;)ถ้ามีคนสนใจ ไว้เดี๋ยวจะกลับมาเขียนใหม่ละกันนะจ้ะ ~♪

Comment

Comment:

Tweet


Hi there! I could have sworn I've been to this blog before but after checking through some of the post I realized it's new to me. Nonetheless, I'm definitely happy I found it and I'll be bookmarking and checking back frequently! geedebakabecadeg
#109 by (197.210.252.44|148.251.92.48, 197.210.252.44) At 2014-07-01 18:41,
#108 by (212.123.20.88|148.251.92.48, 212.123.20.88) At 2014-06-29 13:30,
#107 by (212.123.20.88|148.251.92.48, 212.123.20.88) At 2014-06-29 13:29,
#106 by (212.123.20.88|148.251.92.48, 212.123.20.88) At 2014-06-29 13:29,
I've read some excellent stuff here. Definitely price bookmarking for revisiting. I surprise how much effort you place to create this type of great informative site. egddkcdakaebbeef
#105 by (109.99.150.2|148.251.91.38, 109.99.150.2) At 2014-06-24 14:42,
#104 by (121.166.114.7|148.251.92.48, 121.166.114.7) At 2014-06-22 13:25,
#103 by (121.166.114.7|148.251.92.48, 121.166.114.7) At 2014-06-22 13:25,
#102 by (121.166.114.7|148.251.92.48, 121.166.114.7) At 2014-06-22 13:24,
#101 by (171.100.59.30|178.63.0.194, 171.100.59.30) At 2014-06-19 13:37,
#100 by (171.100.59.30|178.63.0.194, 171.100.59.30) At 2014-06-19 13:36,
#99 by (171.100.59.30|178.63.0.194, 171.100.59.30) At 2014-06-19 13:35,
#98 by (110.173.49.18|148.251.92.48, 110.173.49.18) At 2014-06-18 13:37,
#97 by (41.220.28.51|148.251.92.48, 127.0.0.1, 41.220.28.51) At 2014-06-17 14:46,
#96 by (41.220.28.51|148.251.92.48, 127.0.0.1, 41.220.28.51) At 2014-06-17 14:31,
#95 by (41.220.28.51|148.251.92.48, 127.0.0.1, 41.220.28.51) At 2014-06-17 14:30,
#94 by (199.119.123.44|199.119.123.44) At 2014-06-12 13:40,
#93 by (199.119.123.44|199.119.123.44) At 2014-06-12 13:34,
#92 by (181.48.213.42|148.251.92.48, 181.48.213.42) At 2014-06-08 13:22,
#91 by (162.144.76.10|148.251.92.48, 162.144.76.10) At 2014-06-07 13:27,
#90 by (167.88.112.43|178.63.0.194, 167.88.112.43) At 2014-06-06 13:41,
#89 by (167.88.112.43|178.63.0.194, 167.88.112.43) At 2014-06-06 13:40,
#88 by (167.88.112.43|178.63.0.194, 167.88.112.43) At 2014-06-06 13:40,
#87 by (200.105.159.66|148.251.91.38, 127.0.0.1, 200.105.159.66) At 2014-06-01 14:49,
#86 by (201.90.134.50|148.251.91.38, 201.90.134.50) At 2014-05-30 05:43,
#85 by (201.90.134.50|148.251.91.38, 201.90.134.50) At 2014-05-30 05:42,
#84 by (201.90.134.50|148.251.91.38, 201.90.134.50) At 2014-05-30 05:42,
#83 by (91.196.230.66|148.251.92.48, 91.196.230.66) At 2014-05-28 11:51,
Hello! bgcbdde interesting bgcbdde site! I'm really like it! Very, very bgcbdde good!
#82 by (179.43.144.26|179.43.144.26) At 2014-02-07 00:50,
Hello! edgdeef interesting edgdeef site! I'm really like it! Very, very edgdeef good!
#81 by (121.199.7.67|121.199.7.67) At 2014-02-07 00:49,
Hello! ageddde interesting ageddde site! I'm really like it! Very, very ageddde good!
#80 by (72.38.225.82|72.38.225.82) At 2014-02-07 00:49,
Hello! cgddege interesting cgddege site! I'm really like it! Very, very cgddege good!
#79 by (87.229.236.50|87.229.236.50) At 2014-01-31 03:19,
Hello! cgecded interesting cgecded site! I'm really like it! Very, very cgecded good!
#78 by (118.18.246.84|118.18.246.84) At 2014-01-31 03:19,
Hello! kfgbffa interesting kfgbffa site! I'm really like it! Very, very kfgbffa good!
#77 by (158.129.159.22|158.129.159.22) At 2014-01-31 03:19,
Very nice site!
#76 by iiroteyp (103.7.57.18|218.148.114.103) At 2013-05-07 03:04,
Hello! cbkgceg interesting cbkgceg site! I'm really like it! Very, very cbkgceg good!
#75 by uuuoreoo (103.7.57.18|78.46.235.148) At 2013-05-07 02:57,
Very nice site!
#74 by tepueiui (103.7.57.18|95.50.33.115) At 2012-11-26 17:20,
Hello! dkaecbg interesting dkaecbg site! I'm really like it! Very, very dkaecbg good!
#73 by oieyeyro (103.7.57.18|202.152.228.75) At 2012-11-26 17:14,
Hello! eaggdba interesting eaggdba site! I'm really like it! Very, very eaggdba good!
#72 by eiewytuw (103.7.57.18|217.220.32.103) At 2012-06-17 22:50,
comment6, xanax, cheap vermox, cipro online, nolvadex, neurontin constipation, antabuse alcohol, camel crush cigarettes, nexium online, lipitor, 600mg neurontin, lexapro generic, cipro 250mg, neurontin abuse, generic valium, xanax, tamone, vermox 60 pills, levaquin.com, ambien amnesia, meridia, camel cigarettes, lasix and urial, lexapro, prozac and lexapro, side effect of effexor, buy paxil, ambien, purpose of xanax, levaquin 750 mg, neurontin 900, cytotechnology hospital job, 4allfree.com cgi gb.id net order propecia site, propecia merck, camel cigarette pack, menthol cigs, levaquin joint aches, lexapro, dirt cheap cigarettes, lipitor 40mg picture, nexium,
#71 by pill price propecia (140.147.6.203) At 2010-10-20 01:07,
comment1, klonopin drug, diflucan, diazepam without prescription, reductil.com,, comma delimited, cost of paroxetine, what is benicar, order propranolol, alternative female viagra, paxil generics, diazepam, allopurinol, propranolol, female viagra, late ovulation with clomid, drug glucophage loss weight, cymbalta drug effects side, cheap diazepam, can cymbalta diet i pill take, order fluoxetine, baclofen, alprazolam online, cymbalta fibromyalgia, 5 after clomid lining thin uterine,
#70 by edta tetracycline (193.137.203.231) At 2010-10-19 22:14,
comment5, Viagra, adult sex dating, Online Dating, Cialis, Viagra, cigs, Cialis, acomplia aventis sanofi, Adult Dating, Dating Sites, buy adipex-p, generic cialis, Viagra, Rimonabant, free dating sex sites, columbian dating services, viagra cialis levitra, phentermine 37 5mg, Gay Dating,
#69 by Adipex (193.251.160.120) At 2010-10-19 13:31,
comment6, viagra and alcohol, free adults dating, online dating services, buy cialis, cigarettes discount cheap, viagra soft tabs 50 mg, Cigarettes, cialis levitra sales viagra, top adult dating websites, dating sites, adipex, cialis bloody nose, buy rimonabant, buy viagra french, Sex Dating, Dating Services, levitra, buy phentermine no prescriptions, gay dating boston,
#68 by cialis 90 pills (195.168.109.60) At 2010-10-19 11:58,
comment6, free adults dating, Cialis, interracial online dating, cigarettes online, Viagra, Cigarettes, prescription medication acomplia, cialis discount, adult sex dating, cheap adipex-p, cialis 20 pills, 0 add by comment plog popl powered viagra, acomplia rimonabant, Sex Dating, dating services jack, cheap levitra,
#67 by Viagra (140.142.35.133) At 2010-10-19 10:26,
comment1, Viagra, adult dating au, cialis lowest price, Discount Cigarettes, discount online viagra, newport cigarettes online cheap, buy acomplia, Cialis, adult dating, Dating Sites, find adipex 37.5 no perscription, cialis levitra, Rimonabant, generic viagra, sex dating, phentermine prescription, Levitra,
#66 by viagra (195.170.219.67) At 2010-10-19 05:54,
comment2, cigarettes, Acomplia, adult dating site, discount adipex, cialis, nebraska dating services,
#65 by Viagra (216.225.158.65) At 2010-10-19 04:26,
comment4, Viagra, cialis side effects, Online Dating, Discount Cigarettes, buy viagra usa, newport cigarettes, order cialis, Acomplia, Adult Dating, free biker dating sites, cialis soft tab, herbal viagra, diet pill rimonabant, phentermine without a prescription, cialis levitra,
#64 by rimonabant short term (119.82.243.122) At 2010-10-19 02:56,
comment4, free adult dating, buying fake viagra, Cialis, Adipex, Viagra, rimonabant 60 pills, sex dating, Phentermine,
#63 by online dating sites (92.255.66.65) At 2010-10-19 01:26,
ololololo!, http://mail.com
#62 by oxxxCPmkQxaVPFu (95.215.0.195) At 2010-10-18 23:46,
Hrfmiq <a href="http://bbryaymhzten.com/">bbryaymhzten</a>, [url=http://gysbqxjqreos.com/]gysbqxjqreos[/url], [link=http://lrizfgssjoxk.com/]lrizfgssjoxk[/link], http://yvjnnqkvrbuc.com/
#61 by AueTABtWuhTSHkqSn (95.215.0.195) At 2010-10-18 23:16,
comment4, bboy, cialis, US and Canadian Cyclists, levitra 30 pills,
#60 by US and Canadian Cyclists (203.154.19.136) At 2010-10-18 19:21,