Wednesday 24 December 2008

เป็นไปได้ไหมที่จะสร้าง software โดยปราศจาก Defect

หลังจากที่จบ Lecture ที่ 1 แล้ว The Economy of Software Testing ก็มี Assignment มาให้ลองทำดู โดยโจทย์ที่ได้รับมานั้นไม่ง่ายไม่ยาก "เป็นไปได้ไหมที่จะสร้าง software โดยปราศจาก Defect" ซึ่งงานนี้อาจารย์ได้บอกว่าเนื่องจากพวกเราได้คลุกคลีอยู่ในวงการ programmer มานานย่อมที่พอจะรู้ได้ว่าการสร้าง software ที่ Bug free นั้นเป็นไปได้ไหม และนี่ก็คือความคิดเห็นที่ส่งไปครับ

การสร้างโปรแกรมโดยปราศจาก Bug หรือทำให้มีน้อยเท่าที่จะเป็นไปได้

มันคงเป็นได้ยากที่จะทำให้โปรแกรมที่เราสร้างขึ้นมานั้นไม่มี Bug เลย เพราะว่า Bug กับ Software นี้เป็นของคู่กันที่มี software ก็ต้องมี bug อย่างแยกกันไม่ออก แต่โอกาสที่ไม่มี Bug ก็มีได้หรือว่ามี Bugs น้อยที่สุดก็ขึ้นอยู่กับปัจจัยดังกล่าวต่อไปนี้

ขนาดของ Project

ขนาดของ Project นั้นค่อนข้างที่เกี่ยวข้องกับ Bugs ของ Program โดยตรงเพราะว่ายิ่งขนาดของ Project ยิ่งใหญ่การที่เราจะทำการตรวจสอบในทุกกระบวนการไม่ให้มีข้อผิดพลาดหรือว่าตก หล่นนั้นเป็นไปได้ยากซึ่งต่อให้เราใช้ Tool ต่างๆเข้ามาช่วยในการ Testing ที่ใช้ในการ Test ในส่วนต่างๆแล้วก็อาจจะยังมีการหลุดลอดของแมลงตัวน้อย (Bugs) ได้ และต่อให้เป็น Project ที่มีขนาดเล็กแล้วใช้ว่าจะไม่มี Bugs เสมอไปเพราะว่ายังขึ้นอยู่กับระดับความยากของ Business ด้วยยกตัวอย่างเช่น Business ที่เกี่ยวกับคิด ดอกเบี้ย ซึ่งอัตราดอกเบี้ยนั้นผันผวนอยู่ตลอดเวลาทำให้ช่วงเวลานี้คิดดอกเบี้ยอย่าง หนึ่งอีกช่วงหนึ่งคิดอีกอย่างหนึ่ง หรือการคิดดอกเบี้ยที่มีการใช้ Tree เข้ามาเกี่ยวข้อง เช่น การคิดดอกเบี้ยของธุรกิจพวกสินค้าขายตรง

ระยะเวลา

ระยะเวลานี่เป็นปัจจัยสำคัญเลยว่า Bugs จะเกิดขึ้นมากน้อยแค่ไหนเพราะว่าต่อให้เป็น Project ที่มีขนาดไม่ใหญ่มากแต่ถ้าให้เวลาน้อยก็ทำให้ต้องเร่งทำให้ทัน ทำให้บางครั้งความเร่งรีบทำให้อาจจะมองข้ามสิ่งสำคัญไปทำให้เกิด Bugs ได้ง่ายขึ้น

ภาษาที่ใช้

ภาษาที่ใช้ในการเขียน Software นี่เป็นส่วนสำคัญมากเพราะว่าบางภาษานั้นอาจจะเอื้ออำนวยให้เกิด Bugs ได้ง่ายๆ ยกตัวอย่างเช่น ภาษาที่มีลักษณะที่เป็น Dynamic คือไม่ Strong Type ทำให้ Variable ที่ประกาศขึ้นนั้นสามารถเป็น Type ชนิดอะไรก็ได้ทำให้มีโอกาสที่จะเกิด Error Type Conversion ได้สูงถ้าหากไม่มีการจัดการที่ดี หรือว่าภาษาที่ต้องมีการจัดการกับหน่วยความจำเอง เช่น ภาษา C ที่เราต้องไป allocation memory และ ปลดปล่อยมันเองซึ่งถ้าหากโปรแกรมเมอร์เป็นคนจัดการเองแล้วลืมที่จะปลดปล่อย ออกมา อาจจะทำให้เกิด memory leaks ได้ หรือว่าอาจจะไม่ได้เกิดจากการ Coding ก็ได้อาจจะเกิดจาก Bugs ของการ Compile หรือ Interpreter ของตัวภาษาเองก็ได้ซึ่งต้องศึกษาในแต่ละตัวภาษาที่จะเลือกใช้ว่ามีความ เสถียรขนาดไหน

ขั้นตอนของ SDLC

ขั้นตอนของการทำ SDLC เป็นการบริการจัดการการผลิต Software นั้นถือว่าสำคัญมากเพราะว่าหากผิดพลาดในขั้นตอนใดอาจจะมีผลกระทบส่งมายัง ขั้นตอนอื่นๆได้ดังนั้นถ้าหากว่ามีการจัดการใน SDLC ที่ดีจะช่วยทำให้ Bugs นั้นสามารถลดลงได้เป็นอย่างมากซึ่ง SDLC จะแบ่งเป็น 7 ขั้นตอนย่อยๆดังนี้

  1. Planning - establishing the plans for creating an information system
  2. Analysis - IT specialists collaborate to collect, comprehend, and logistically formalize business requirements
  3. Design - this is where the technical blueprint of the system is created
  4. Development - executing the design into a physical system
  5. Testing - testing the developed system
  6. Deployment - the systems are placed and used in the actual workforce
  7. Maintenance - keeping the system up to date with the changes in the organization and ensuring it meets the goals of the organization

ซึ่งในตามหลักในการเจอ Bugs ที่พบกันบ่อยๆนั้นมักจะพบอยู่ในช่วงของ Analysis มากที่สุดเพราะว่าเป็นช่วงของการเก็บ Requirement ซึ่งการที่จะเก็บข้อมูลให้ครบทุกส่วนหรือว่าถูกต้องตามใจลูกค้านั้นค่อนข้าง จะเป็นไปได้ยากเนื่องจากว่าลูกค้าในบางองค์กรนั้นไม่มีความรู้เรื่องของ IT เลยทำให้การไปเก็บ Requirement และการสื่อสารเพื่อทำความเข้าใจกับลูกค้าว่าสิ่งที่ลูกค้าต้องการจริงๆนั้น คืออะไรจึงเป็นไปได้ยากดังนั้น Bugs มากกว่าครึ่งจึงมักจะเกิดจากการเก็บ Requirement ที่ผิดพลาดทำให้มันลามไปยังส่วนอื่นๆอีกเช่น Design, Development, … ซึ่งการเจอ Bugs ในช่วงหลังๆแล้วจะทำให้การแก้ Bugs ยิ่งมีมูลค่าสูงขึ้น ยกตัวอย่างเช่น การแก้ functional ของ Software ที่เกิดจากการที่เข้าใจผิดมาจากการเก็บ Requirement การแก้นั้นอาจจะไปกระทบในตัว Coding ของหลายๆส่วนทำให้ต้องแก้ functional หลายระบบในส่วนที่กระทบกัน ซึ่งบางครั้งการ Design ในตอนแรกอาจจะต้องเปลี่ยนใหม่เพื่อให้รองรับกับการเลี่ยนแปลง functional

ซึ่งจากหัวข้อด้านบนที่กล่าวมานั้นเป็นความคิดส่วนตัวของผมเท่านั้นซึ่ง ในการผลิต Software ที่ไม่มี Bug นั้นอาจจะจำเป็นต้องมี Environment มากกว่านี้เพื่อที่จะได้มาซึ่ง Software ที่มี Bugs น้อยที่สุด ยกตัวอย่างเช่น Software ที่นำมาใช้ในการ Testing ระบบการติดตามการเกิด Bugs (Bugtracking software) หรือว่าในกรณีที่มีการทำงานเป็นทีมต้องมีเครื่องมือในการควบคุม source code (source control) หรือกลวิธีในการ Test ระบบตั้งแต่การ Test loading การ Test Functional หรือ Test ลงในตัว source code (Software peer review) และอื่นๆอีกมากมาย

ซึ่งถ้าให้ถามผมว่าเคยเขียน Program (เน้นคำว่า Program ไม่ใช่ Software) ที่ไม่มี Bugs ไหมคำตอบคือเคยและคาดว่าทุกคนคงเคยเขียนมาแล้วนั้นก็คือ Program Hello World ถ้าใครเขียนมาแล้วมี Bugs นี่ก็คงแปลกแล้ว


นี่เป็นความคิดเห็นของผมครับถ้าใครมีความคิดเห็นที่เป็นอยากอื่นหรือว่าอยากจะลองทำ Assignment แล้วลองมาแชร์กันก็ได้ครับโดยตอบผ่าน Comment โดยใส่ Link ที่โยงไป Blog ตัวเองแล้วผมจะตามไปอ่านครับ

ปล.1 ลองไปอ่านเพิ่มเติมเกี่ยวกับเรื่องพวกนี้ตาม reference ข้างล่างนี้

ปล.2 ส่วนหนึ่งของเนื้อหาที่เขียนขึ้นมาได้นั้นเอามาจากอาจารย์ในชั้นวิชาเรียน

http://stackoverflow.com/questions/115528/how-to-make-a-program-bug-free-or-with-the-less-possible-bugs

http://my.opera.com/dparnell/blog/show.dml/23784

The Economy of Software Testing(3)

Series The Economy of Software Testing
The Economy of Software Testing (1)
The Economy of Software Testing (2)
The Economy of Software Testing (3)

หลังจากที่เราได้รู้ความเป็นมาของ Software Validation and Verification กันแล้วเราจะมาดูกันว่า Validation และ Verification จริงแล้วมันคืออะไร และคำว่า defect นั้นคืออะไร อะไรที่เรียกว่า defect

Verification and Validation

Verification นั้นคือการ check ว่า software หรือ product ที่เราผลิตนั้นเราได้ตรงการ specification หรือไม่แต่ไม่ได้ check ว่า software ที่ทำมานั้นการทำงานนั้นถูกต้องหรือไม่ (you build it right)

Validation นั้นคือการตรวจสอบ software หรือ product นั้นว่ามีการทำงานที่ถูกต้องไหม มักจะอ้างอิงไปถึง user requirement หรือสิ่งที่ user ต้องการจริงๆว่า software หรือ product นั้นได้ให้ในสิ่งที่ user ต้องการไหม (you build the right thing)

Software Defect (ข้อผิดพลาดของ software)
Software defect นั้นอาจจะหมายถึงได้หลายๆอย่างเช่น Bug, Defect, Fault, Problem, Error, Incident, Anomaly, Variance, Failure, Inconsistency, Feature แม้ว่าหนังสือในหลายๆเล่มนั้นจะบอกว่าคำแต่ละคำนั้นจะใช้ในกรณีที่ต่างกันไปก็ตามแต่ในทีนี่เราจะเรียกทั้งหมดว่า defect และหากสังเกตว่าจะมีคำว่า feature นั้นอยู่ใน defect ด้วยเพราะ feature นั้นต่อให้เลิศหรูอลังการณ์ล้านแปดยังไงก็ตามแต่ถ้า feature นั้นลูกค้าไม่ต้องการมันก็คือ defect ดีๆนั้นเอง โดย software นั้นเป็นไปได้ค่อนข้างยากที่จะไม่มี defect เลย ซึ่งการหา defect นั้นเป็นเรื่องที่ค่อนข้างที่จะต้องใช้เวลาในการหา โดยการที่ยิ่งหาเร็วเท่าไรยิ่งดีเพราะว่า cost ในการ fixed นั้นยิ่งลดลงดังนั้นเราจึงจำเป็นที่จะต้องรู้ว่าในส่วนไหนบ้างที่มีโอกาศจะเกิด defect ได้บ้างซึ่งจะมีดังนี้

  • Requirement Definition เกิดจากการเก็บ requirement ที่ผิดพลาดหรือว่าเข้าใจกันคนละอย่างกับ user ผู้ให้ข้อมูล หรืออาจจะไม่สมบรูณ์
  • Design อาจจะเป็นผลกระทบมาจาก requirement การได้มาซึ่งข้อมูลที่ผิดทำให้การ design นั้นผิดตามไป
  • Implementation การที่ design มาผิดหรือว่าการทำความเข้าใจในตัว design ผิดทำให้การ implement นั้นผิดตามไปด้วย
  • Support System ภาษาที่ใช้ในการ programming ที่ไม่ดีนั้นก่อให้เกิด defect ได้เหมือนกันเช่น Compiler ของตัวภาษานั้นไม่ดีทำให้เกิด defect ได้
  • Inadequate Testing of Software การตั้ง test case ที่ไม่ครอบคลุม ไม่ดีพอ หรือว่าการ test ที่ไม่ครบถ้วนทำให้ defect นั้นหลุดลอดออกมา
  • Evolution การที่พัฒนาขึ้นมาจากตัวเดิมโดยเพิ่มบางสิ่งบางอย่างลงไปทำให้อาจเกิด defect เพิ่มขึ้น
การ test ตัว software แล้วปรากฎว่าไม่มี defect ไม่ได้แสดงว่า software นั้นไม่มี defect เพียงแต่ว่าเราหาไม่เจอ

“if you can’t say it, you can’t do it”

คำพูดที่บอกว่า ถ้าเราไม่รู้ว่ามันคืออะไรเราก็ไม่สามารถทำมันได้ เพราะว่าในการตรวจสอบว่า software นั้นมี defect ปนมาหรือไม่นั้นจะทำไม่ได้ถ้าหากขาดตัว specification (เป็นสิ่งที่บอกในการพัฒนา software เราต้องทำอะไร) ในการนำมาอ้างอิงในการ check ยกตัวอย่างเช่น specification ของ word processor ซึ่งจะแบ่งออกเป็น functional requirement เช่น save, print, check spelling, change font, …. และ Non-functional requirement เช่น security, reliability, user friendly, platform, .… โดยที่เราจะเอา functional และ non-functional ไปใช้ในการ test

Software Bug มันจะเกิด bug ขึ้นก็ต่อเมื่ออยู่ในข้อกำหนดด้านล่างนี้เกิดขึ้นอย่างน้อยหนึ่งข้อ
  1. Software นั้นมี bug ถ้าไม่ได้ทำในสิ่งที่ specification บอกว่ามันควรจะทำ
  2. Software นั้นมี bug ถ้าทำในสิ่งที่ specification บอกว่ามันไม่ควรจะทำ
  3. Software นั้นมี bug ถ้าทำในสิ่งที่ตัว specification นั้นไม่ได้กล่าวถึง (mention) ให้ทำ
  4. Software นั้นมี bug ถ้าไม่ทำในสิ่งที่ specification นั้นไม่ได้กล่าวถึง (mention) แต่เป็นสิ่งที่ควรจะทำ
  5. Software นั้นมี bug นั้นใช้งานยาก ไม่สวย ช้า นั้นเป็นสิ่งที่บ่งบอกว่าลูกค้าคือพระเจ้า ถ้าพระเจ้าไม่ชอบนั้นสิ่งนั้น สิ่งนั้นก็คือ Bug
Bug Locations จากการศึกษาพบว่า Bugs นั้นไม่ได้เกิดจากการเขียน code โดยจะเกิดในส่วนที่ต่างๆดังนี้
  • Specification (ประมาณ 55%) โดยจะพบว่า Bugs อาศัยอยู่ในชั้นนี้อย่างสนุกสนาน
  • Design (ประมาณ 25%)
  • Code (ประมาณ 15%)
  • Other (ประมาณ 5%)
Cost กับการ Fixed Defect

การ fixed defect นั้นมี cost ที่ขึ้นเป็น Exponential คือทีละ 10x โดยสมมติว่า defect ใน specification นั้นมีค่าในการ fixed คือ 1$ แต่ถ้าไปเจอใน Design -> 10 $ แต่ถ้าเรายังไม่เจอใน Design ไปเจอในCode -> 100$ แต่ภ้าไม่เจอใน code ไปเจอใน Software Released -> 1000$
จากข้อเท็จจริงด้าน cost ในการ fixed defect นั้นแสดงว่าการ test defect นั้นจะอยู่ในกระบวนการการพัฒนา software ทุกขั้นที่ต้องคอย test อยู่ตลอด ดังนั้นเป้าหมายหลักในการหา Bugs นั้นก็คือ การหา Bugs ให้เร็วที่สุดเท่าที่เป็นไปได้ แล้วไปแจ้งแก่ developer และคอย check ว่า fixed เรียบร้อยแล้ว

จบแล้วครับสำหรับ Series The Economy of Software Testing เป็นยังไงกันบ้างครับ มีความคิดเห็นยังไงสามารถติชมได้ครับ

ref :
SW Verification and Validation for Practitioner and Manager 2 Ed.
Software Testing Fundamwntals: Method and Metrics
Lecture วิชา SWE613 Software Verification and Validation

เพิ่มเติม
พอดีได้ไปเจอบทความ ของคุณ Siroz แล้วมันมีความคล้ายกันเพียงแต่ว่ามองกันคนละแนวกันโดยบทความของคุณ Siroz นั้นจะเน้นไปในวิวัฒนาการของการทดสอบ software จริงๆ ซึ่งถ้าใครสนใจสามารถเข้าไปดูตาม link ด้านล่างครับ

พัฒนาการของการทดสอบซอฟต์แวร์ ตอนที่ 1
พัฒนาการของการทดสอบซอฟต์แวร์ ตอนที่ 2

The Economy of Software Testing(2)

Series The Economy of Software Testing
The Economy of Software Testing (1)
The Economy of Software Testing (2)
The Economy of Software Testing (3)

นอกเหนือจากวิธีที่ได้กล่าวมาในการแก้ปัญหา software crisis แล้ว เช่น Higher Level Program Language หรือการนำ CASE Tool เข้ามาใช้แต่ยังมีอีกวิธีที่ยังไม่ได้กล่าวถึงคือ กระบวนการ Test เช่น

  • Formal Proof of Correctness เป็นการใช้หลักการทางคณิตศาสตร์เพื่อนำมาใช้ในการพิสูนจ์ว่า program ที่เขียนนั้นถูกต้อง โดยเป็นการสร้าง formal language โดยอาศัย กฎเกณฑ์ semantic และ syntax โดยที่ programming language ถือว่าเป็น formal language อยู่แล้ว ดังนั้นการสร้าง formal language ขึ้นมาเพื่อตรวจสอบ formal language อีกอันนั้นย่อมเป็นไปได้ แต่ข้อเสียอย่างเลวร้ายที่สุดของการใช้วิธีการนี้คือ เราจะยังเริ่มไม่ได้ถ้ายังไม่มีการ implement software และถ้าหากเป็น software นั้นใหญ่การที่จะมาทำ formal proof ทั้งหมดของ ของ source code นั้นยิ่งทำได้ยาก
  • Independent Verification and Validation (IV&V) เป็นการใช้บุคคลที่สามมาทำการ review software ซึ่งเป็นผลดีมากๆเลย ไม่มีความเอนเอียงหรือเข้าข้างกับทีมที่พัฒนา software เพราะไม่มีส่วนได้ส่วนเสีย และเป็นที่ยอมรับ แต่มีค่าใช้จ่ายสูงเพราะว่าต้องจ้างคนภายนอก จึงใช้กับ software ที่สำคัญมากๆ เช่น software ของระบบลงจอดของยานอวกาศ หรือ software ที่เกี่ยวอุปกรณ์ทางการแพทย์และต้องนำไปใช้กับส่วนต่างๆของร่างกาย (peak maker) เช่น เครื่อง X-ray
  • Software Quality Assurance เรียกได้ว่าเป็น In-house IV&V แทนที่จะใช้บุคลที่สามจากภายนอกองค์กร แต่เป็นบุคคลที่สามของหน่วยงานอื่นในองค์กรที่ไม่มีส่วนได้ส่วนเสียของการพัฒนา software มาทำการ review software โดยที่การทำงานคล้าย IV&V มาก ทำให้ได้ IV&V มาใช้ในราคาที่ถูกลง แต่ข้อเสียของ SQA นั้นอยู่ตรงที่ มาตรฐานในแต่ละองค์กรค่อนข้างต่างกัน ทำให้ความเสมอต้น เสมอปลายในการทดสอบนั้น ไม่เท่ากันทำให้คุณภาพที่ได้มาอาจจะไม่เทียบเท่ากับองค์กรที่ทำ IV&V โดยตรง
  • Cleanroom Process เป็นกระบวนการที่รวมการเอา formal verification (formal language) กับ กระบวนการควบคุมโดยใช้สถิติ (statistic process control : SPC) โดยจะเน้นการป้องกันไม่ให้ defect เกิดขึ้น โดยไม่ได้เน้นไปที่การหา defect โดยจะพึ่งพาอาศัยหลักการทางคณิตศาสตร์ที่จะใช้ตัวชี้วัดที่เรียกว่า Mean Time Between Failure แต่ Cleanroom process นั้นเป็นตัวที่ค่อนข้างใหม่ ยังไม่ได้รับการยอมรับให้เป็นที่แพร่หลาย เนื่องจากว่าความใหม่ของตัวมันเอง ถ้ารับนำเข้ามาใช้ในองค์กร ก็ต้องเปลี่ยนแปลง process มากทำให้ยังไม่เป็นที่นิยม ยกตัวอย่างเช่น ATM เป็น backbone ในระบบ Network โดยตอนที่มันเกิดมาใหม่ๆนั้นได้รับการคาดหมายว่าจะมาแทน LAN ด้วยความที่มันมี data rate ในการส่งที่สูงกว่าแต่ว่าในปัจจุบันนั้นไม่เป็นเช่นนั้น ATM ยังใช้แค่เป็น backbone เท่านั้นยังไม่ได้กระจายมาใช้แทน LAN ที่เป็นเช่นนั้นเพราะว่า ค่าใช้จ่ายในการเปลี่ยนระบบใหม่ค่อนข้างสูง และอีกอย่างคือ technology LAN นั้นก็พัฒนาอย่างไม่หยุดทำให้ LAN ก็ยังคงอยู่ ทำให้ ATM จึงนำมาใช้ในส่วนที่เป็น backbone อย่างเดียว ซึ่งก็เหมือนกันกับ Cleanroom process นั้นต่อให้มันดีแค่ไหนแต่ถ้าจะนับมาใช้ต้องเปลี่ยนทั้งระบบ และใช้ค่าใช้จ่ายมากมันก็คงไม่คุ้มที่จะเปลี่ยน
Reliability VS Feature and Cost

ต่อในปี 1990s นั้น Computer นั้นเร็วขึ้น ถูกลง ขนาดลดลง ผู้ใช้งานหลากหลายขึ้น PC กลายเป็นสิ่งที่แพร่หลายได้มากขึ้น ทำให้เกิดการเปลี่ยนแปลงระหว่าง hardware และ software ค่อนข้างมาก ทำให้ user กลายเป็นแรงขับเคลื่อนในการผลิต software และตลาดของ software นั้นเปิดกว้างขึ้น ทำให้ software ที่ออกมาในช่วงนี้ค่อนข้างที่จะต้องรีบออกมาอย่างรวดเร็วเพื่อให้ทันกับความต้องการของ user ทำให้ผู้ผลิตนั้นต้องรีบผลิต software ออกมาเพื่อที่จะแข่งขันกับคู่แข่งรายอื่นๆ นั้นก็คือพยายามออก version ใหม่ของ software เพื่อที่จะพยายาม update ตัว software เพื่อให้มี feature ที่นำหน้าคู่แข่งอยู่เสมอ และอีกอย่างหนึ่งก็คือ hardware นั้นมี performance ที่สูงขึ้นทำให้ software ที่ออกมานั้นมีความซับซ้อนขึ้นเป็นตามลำดับ ผลที่เกิดขึ้นทำให้ software vender นั้นต้องรีบออก product ใหม่ให้เร็วๆ จนทำให้ เวลาที่ใช้ในการผลิต software ลดลงดังนั้นการทำการ testing software นั้นลดลงส่งผลต่อคุณภาพของ software และ defect ของ software มีมากขึ้น ถึงแม้ว่าจะออก version ใหม่ออกมาแต่ defect ใหม่ก็มีมากขึ้นเช่นกัน ทำให้ user ต่างๆร้องเรียนเข้ามาทำให้ software vender นั้นต้องทำการ fixed defect เหล่านั้น และค่าใช้จ่ายในการ fixed defect นั้นสูง ทำให้เสียค่า maintain มากเนื่องจากต้องจ่ายค่าส่งไปรษณีย์(สมัยนั้นยังไม่มี internet)ในการ fixed defect แต่ละครั้ง และยังไม่รวมไปถึงค่าใช้จ่ายให้กับที่ต้องไป support ในกรณีที่ต้องแก้ไขทางด้าน technical ยังไม่รวมถึงค่า call center ทำให้การกระทำเช่นนี้เริ่มที่จะแว้งกัดกลับไปยัง software vender เพราะว่า profit ลดลงจากการที่ต้องจ่ายค่าใช้จ่ายในการ support เพื่อที่จะ fixed defect ทำให้เริ่มกลับมาคิดจากการละเลยของคุณภาพ software ทำให้เกิดการมองเรื่องของคุณภาพของ software กับ การแข่งขันทางการตลาด ทำให้เกิดการ shift ไปสู่การเน้นคุณภาพของ software ที่สูงขึ้น

ต่อมาไม่นานหลังจากการ shift ไปสู่การเน้นคุณภาพของ software ก็เกิดนวัตกรรมใหม่ขึ้นมา คือ Internet หรือที่รู้จักกันในชื่อของ www ซึ่งมีผลกระทบต่อการ communication ทำให้ค่าใช้จ่ายในการ fixed defect นั้นลดลงเพราะว่าถ้าเกิด defect ใดๆก็ตามให้แจ้งผ่านเข้ามาทาง mail หรือ track issue ต่างๆเช่น JIRA, Bugzilla อื่นๆเป็นต้น จากนั้นจึงส่ง link เพื่อที่จะ download ตัว update ของ software ทำให้ software vender นั้นพึงพอใจมากกับค่าใช้จ่ายในการ support ที่ลดลง นอกจาก software vender ที่พอใช้แล้ว user เองก็พอใจด้วยเนื่องจากได้รับบริการที่รวดเร็วขึ้นจึงเป็นผลดีทั้งสองฝ่าย ทำให้การออก version ใหม่ให้กับตัวของ software นั้นรวดเร็วเพื่อเพิ่มแข่งขันกันในทางตลาดกลับมาเหนือคำว่า คุณภาพของ software เพราะว่าถูกมองว่าไม่ใช่ความสำคัญต่อความสำเร็จของตัว software ที่ออกมาขาย ไปเน้นเรื่องของ feature ที่ออกมาเตะตาของ user มากกว่าเพื่อแย่งพื้นที่การตลาด

ต่อมาในช่วงปี 2001 – 2002 ซึ่งเป็นช่วงของ ฟองสบู่แตก ความสะพัดของเม็ดเงินนั้นลดลงธุรกิจ dot com หลายตัวที่ต้องล้มละลาย ทำให้การพึ่งพา www ที่จะลดค่าใช้จ่ายในการ support นั้นค่อนข้างที่จะใช้ไม่ได้ผลมากยิ่งขึ้น เพราะว่า user นั้นเริ่มต้องการ software ที่มีคุณภาพที่สูงขึ้น ไม่ต้องการที่จะเสียค่าใช้จ่ายในการมาไล่ตามการ update version เพื่อให้คุ้มกับเม็ดเงินที่ลงทุนไป ทำให้กระแสของ software คุณภาพนั้นได้ย้อนกลับมาอีกครั้ง ทำให้ software vender ต้องปรับตัวในการเพิ่มคุณภาพให้กับ software ซึ่งยุคนี้ก็ได้ดำเนินมาจนถึงยุคปัจจุบัน

พอจะเห็นภาพคร่าวๆกันแล้วใช่ไหมครับว่าความเป็นมาของ V&V นั้นเป็นยังไง แต่ว่าเรื่องราวของ The Economy of Software Testing ยังไม่จบครับลองติดตามต่อในตอนที่สาม ซึ่งจะเริ่มไปเข้า Concept ของ V&V ครับ

ref :
SW Verification and Validation for Practitioner and Manager 2 Ed.
Software Testing Fundamwntals: Method and Metrics
Lecture วิชา SWE613 Software Verification and Validation

เพิ่มเติม
พอดีได้ไปเจอบทความ ของคุณ Siroz แล้วมันมีความคล้ายกันเพียงแต่ว่ามองกันคนละแนวกันโดยบทความของคุณ Siroz นั้นจะเน้นไปในวิวัฒนาการของการทดสอบ software จริงๆ ซึ่งถ้าใครสนใจสามารถเข้าไปดูตาม link ด้านล่างครับ

พัฒนาการของการทดสอบซอฟต์แวร์ ตอนที่ 1
พัฒนาการของการทดสอบซอฟต์แวร์ ตอนที่ 2

The Economy of Software Testing(1)

Series The Economy of Software Testing
The Economy of Software Testing (1)
The Economy of Software Testing (2)
The Economy of Software Testing (3)

ก่อนจะเข้าไปในเนื้อหาเราจะเข้าไปในประวัติศาสตร์ของ software ก่อนว่ามันมีความเป็นมาอย่างไรจะได้ปรับมุมมองและทำความเข้าใจและประเด็นที่มันเกิดขึ้นและตอบคำถามหลายๆ จุด ว่าทำไมศาสตร์ของ Software Validation & Verification (V&V) นั้นมันมีความเป็นมายังไง

ในปี 1970s นั้นได้มีศัพท์คำนึงเกิดขึ้นคือ software crisis โดยในช่วงนั้น software ยังไม่ได้นิยมอย่างแพร่หลายซักเท่าไร โดยการทำงานของเครื่องสมองกลในสมัยนั้นยังทำงานโดยการพึ่งพาของตัว hardware อยู่ โดยเครื่อง Computer ในสมัยนั้นยังเป็นเครื่องที่มีความเทอะทะอยู่และยังจำกัดวงผู้ใช้อยู่ในวงที่แคบๆ โดยคนทั่วไปนั้นแทบจะไม่มีโอกาศในการได้ใช้เครื่อง Computer จะใช้ตามในเฉพาะในหน่วยงานสำคัญๆ และตอนนั้นภาษาที่นำไปใช้ในการเขียน software นั้นยังเป็นภาษาที่ค่อนข้างที่จะใกล้เคียงกับภาษาเครื่องอยู่ คือ Machine Code ทำให้มันเหมาะสมให้กับเครื่องในการตีความแต่ไม่เหมาะสมกับมนุษย์ในการทำความเข้าใจ ทำให้การเขียน software ในสมัยนั้นเป็นไปได้ยากและใช้ค่าใช้จ่ายในการผลิตสูง โดยปัญหานี้เกิดขึ้นตั้งแต่ก่อนปี 1970s เกิดมาตั้งแต่มี Computer เครื่องแรก Univac (ในปี 1960s) ดังนั้นก่อนที่จะสร้าง software ขึ้นมาซักตัว ถ้าหากมีของเก่าอยู่แล้วและสามารถนำไปใช้ได้ก็จะยอมใช้ของเก่าและทำการ maintain ของเดิมที่มีอยู่

แต่ในกลางปีของ 1970 เป็นครั้งแรกที่ cost ของการ develop ตัว software ชุดใหม่นั้นมี cost ที่ถูกกว่าการ maintain software ตัวเก่า ทำให้เริ่มมีการหันเหไปมองการสร้าง software ใหม่ แทนที่ที่จะมา maintain ของเก่าแต่ก็มีคำถามเกิดขึ้น ของใหม่ที่มีนั้นจะเทียบเท่ากับของเก่าหรือไม่ ทำให้เกิดการคำนึงถึงเรื่อง quality ขึ้นมา เพื่อทำให้เกิดความแน่ใจว่า software ที่สร้างมานั้นจะได้ไม่ต้องมีการ maintain บ่อย

แล้วในช่วงเวลานั้นใกล้ๆกันมันมีสัญญาณอีกอย่างหนึ่งได้เกิดขึ้น คือ hardware นั้นราคาได้ลดลงและ แต่มีประสิทธิภาพมากขึ้นและรองรับ software ที่มีความซับซ้อนได้มากขึ้น ทำให้นักพัฒนาสามารถพัฒนา software ที่มีความซับซ้อนมากขึ้นเช่นกัน แต่ว่าเพราะเหตุอะไรไม่ทราบทำให้ software failure (software ที่อยู่ในกระบวนการผลิตนั้นเกิดความล้มเหลว) มากขึ้นด้วย เพราะอะไร ? ทำไมถึงเป็นเช่นนั้น ? จึงได้มีการพุ่งเป้าไปที่ programming language เพราะว่าในตอนนั้นลักษณะการเขียนภาษามันเป็นเหมือน Machine Code (Assembly) ทำให้มีความคิดว่าควรที่จะมีภาษาที่ดีกว่านี้ไหม ภาษาที่เข้าใกล้ภาษามนุษย์

ในปี 1980s Computer นั้นยังเป็นพวก mainframes อยู่ และยังจำกัดอยู่ในหน่วยงานสำคัญ มีราคาแพง ทำให้เมื่อซื้อแล้วต้องพยายามใช้มันให้นาน และต้องใช้ความรู้ความสามารถมาก ดังนั้น software ที่เขียนขึ้นมาต้องมีอายุในการใช้งานได้นานเช่นเดียวกันอย่างน้อย 5 ปี แต่อายุไขของ software นั้นก็ยังน้อยกว่าตัว hardware ดังนั้นทำให้ customer นั้นค่อนข้างที่จะซีเรียสในเรื่องของ reliability และ quality ที่มาก ดังนั้นการ testing เป็นองค์ประกอบที่ไม่สามารถแยกออกจากกันจากการพัฒนา software ได้ ทำให้ในช่วงนั้นศาสตร์ของ V&V ค่อนข้างมีการพัฒนาในยุคนั้นมาก เพราะว่า tester ในสมัยนั้นค่อนข้างต้องมี degree ทางด้าน engineering ที่สูงเพราะว่าต้องมีความเชี่ยวชาญทั้งทางด้าน hardware และ software มาก แต่เมื่อเทียบกับสมัยนี้แล้ว tester โดนลดความสำคัญลงไปมากเมื่อเทียบกับสมัยปัจจุบัน

แต่ถึงแม้ว่าตัว programming language นั้นจะสามารถพัฒนาให้เข้าใกล้ภาษามนุษย์มากที่สุดแล้ว แต่ปรากฎว่ามันไม่ได้ช่วยในการลดลงของจำนวน software failure ได้เลยดังนั้นปัญหาของ software crisis นั้นก็ยังไม่หมดไป จึงมีความพยายามอื่นๆที่ตามมาเพื่อทำให้ software นั้นได้เกิด reliability และ quality ของ software

จึงได้มีความคิดโดยการมองลงไปในส่วนของกระบวนการพัฒนา software ตั้งแต่การเก็บ requirement เพราะว่าการเก็บ requirement นั้นเราต้องเก็บมาเป็นภาษามนุษย์ (natural language) ซึ่งเป็นภาษาที่ดิ้นได้คือ คือมีความกำกวมในของมันอยู่ ดังนั้นเมื่อเราจะนำมาแปลงเป็น code แล้ว ถ้าความกำกวมนั้นทำให้แปลความหมายผิดพลาด ย่อมทำให้ program ที่เขียนมาย่อมผิดพลาดอย่างแน่นอน ทำให้นำไปสู่ความเสื่อมถอยของคุณภาพของ software ในที่สุด ดังนั้น High Programming Language จึงไม่ใช่แนวทางที่แก้ปัญหาจากต้นเหตุ จึงทำให้ได้มีแนวคิดในการกำเนิดภาษาที่ใช้เก็บ requirement และต้องเป็นภาษาที่ไม่เกิดความกำกวม เราเรียกภาษานั้นว่า formal language ยกตัวอย่างของภาษานั้นก็คือ HAL/S, VDM-SL และ Z (ไม่รู้จักซักตัว รอผู้มาอธิบาย + แสดงอายุ 555+)

การใช้ High Programming Language หรือการใช้ Formal Language นั้นก็ยังไม่สามารถที่จะช่วย Software Failure นั้นหายไป มันก็ยังคงมีอยู่ ซึ่งมีด้วยกันหลายประเด็นที่ทำให้มันไม่สามารถขจัดปัญหานี้ได้ เช่น ความยากในการทำความเข้าใจ ความยากในการนำไปใช้งาน และ มันไม่สามารถรองรับปัญหาที่มีความซับซ้อนได้ทั้งหมด

ต่อมาในปี 1985 โดยในปีนั้นอุตสาหกรรม software มีมูลค่าสูงขึ้นแต่ราคาของ hardware นั้นมีราคาลดลง (ราคาต่อชิ้น) ทำให้ความสำคัญในด้านคุณภาพของ software ก็สูงขึ้น ดังนั้นเพื่อที่จะลด software failure จึงมีการมองไปที่กระบวนการของผลิต software เพื่อที่จะลดปัญหาของ software failure ดังนั้นจึงได้มีการนำเอา software engineering เข้ามาใช้ โดยในปีนั้น software engineering ได้เข้ามาเป็นสาขาหนึ่งใน engineer

ในช่วงนั้นเป็นช่วงของ computer workstation กำลังเป็นที่ได้รับความสนใจ และกลายเป็นองค์ประกอบหนึ่งของสถาบันการศึกษาที่สำคัญ ซึ่งการมาของ computer workstation มาพร้อมกับตัวที่จะมาแก้ปัญหาของ software failure คือ CASE Tool (Computer Aided Software Engineering) ที่เข้ามาช่วยในกระบวนการใดกระบวนการหนึ่งในการพัฒนา software

ซึ่งการมาของ CASE Tool นั้นเหมือนจะมาช่วยในการพัฒนา Software แต่ในความเป็นจริงแล้วตัว CASE Tool นั้นยังห่างจากความเป็นจริงในการแก้ปัญหาที่ค่อนข้างมาก จึงมีคำเปรียบเทียบว่า CASE Tool isn’t silver Bullet เนื่องจากว่า CASE Tool นั้นถ้าจะนำไปใช้จริงๆแล้วมันจะเกี่ยวข้องกับกระบวนการ การพัฒนา Software ขององค์กรนั้น โดยที่ส่วนใหญ่องค์กรเหล่านั้นเอา CASE Tool เข้ามาช่วยด้วยก็จริงแต่ก็ไม่รู้วิธีที่จะทำให้ CASE Tool เหล่านั้นผสมผสานเข้ากับองค์กรยังไงถึงจะเกิด performance มากที่สุด ซึ่งหากเลวร้ายที่สุด กระบวนการของ CASE Tool จะไปเกิดการ crash กันกับกระบวนการเดิมทำให้การใช้ CASE Tool นั้นไม่ได้ performance อย่างสูงสุดทำให้ทฤษฎีนี้ยังห่างจากความเป็นจริงอย่างมาก

จบก่อนหละครับยาวมากแล้วเดี๋ยวจะง่วงก่อน ไว้มาติดตามกันในตอนที่สอง

ref :
SW Verification and Validation for Practitioner and Manager 2 Ed.
Software Testing Fundamwntals: Method and Metrics
Lecture วิชา SWE613 Software Verification and Validation

เพิ่มเติม
พอดีได้ไปเจอบทความของคุณ Siroz แล้วมันมีความคล้ายกันเพียงแต่ว่ามองกันคนละแนวกันโดยบทความของคุณ Siroz นั้นจะเน้นไปในวิวัฒนาการของการทดสอบ software จริงๆ ซึ่งถ้าใครสนใจสามารถเข้าไปดูตาม link ด้านล่างครับ

พัฒนาการของการทดสอบซอฟต์แวร์ ตอนที่ 1
พัฒนาการของการทดสอบซอฟต์แวร์ ตอนที่ 2

Thursday 12 June 2008

Uninstall NetBeans แบบ Manual

ในกรณีที่เกิดปัญหากับ NetBeans ไม่ว่าจะ file เสียหายมันดูเพี้ยนๆ แล้วกด Uninstall ออกไม่ได้นั้น ให้จัดการดังนี้เลยครับ

  1. โหลด CCleaner หรือตัว Remove ตัวอื่นก็ได้
  2. ทำการ Remove Netbeans ออก
  3. ทำการลบ Folder ที่อยู่ใน Program files (ที่คุณลง)
  4. ไปที่ Documents and Settings เลือก User ของคุณแล้วทำการลบ .netbeans ทั้งหมด
  5. รวมถึง file ที่นามสกุลเป็น .asadminpass กับ .asadmintruststore ด้วย
  6. ทำการตรวจสอบใน Add/Remove มามี Glassfish หรือ Tomcat หลงเหลือใน Registry ไหมถ้าเหลือทำการ Remove ออกให้หมด
เป็นอันเสร็จการ Uninstall แบบ Manual ทั้งหมดครับ

Tuesday 3 June 2008

ปัญหา taglib เรียก core ใน NetBeans

หลังจากที่วันนี้ฝึกงานเป็นวันแรก ก็เลยได้ศึกษา Servlet และ JSP แต่ตอนนี้ก็มีปัญหากับ Tutorial ของ ThaiJavaDev (เป็นแหล่งเริ่มต้นที่ดีเหมือนกัน) แต่เนื้อหามันคงเก่าไปแล้วมั่งบ้างอย่างก็ไม่ได้แก้ บ้างอย่างก็มีปัญหาวันนี้ผมเลยมาพูดถึงบท Tutorial ที่มีปัญหากัน
JSP Application to Display Results Using NetBeans 6.0 (PDF file)
โดยใน Tutorial นี้มันมีที่ผิดอยู่ตรงนี้
<%@taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>
<%@taglib uri=”http://java.sun.com/jsp/jstl/sql” prefix=”sql”%>
ไม่ผิด Syntax ใดๆเลยนะครับแต่พอดี uri มันเปลี่ยนไปแล้ว !! โดยเราต้องเปลี่ยนจาก
http://java.sun.com/jsp/jstl/core เป็น
http://java.sun.com/jstl/core_rt
เอา jsp ออกนะครับแล้วเติม _rt ไปด้านหลังก็ใช้ได้แล้วครับ
โดยปัญหาใน NetBeans ที่เจอจะบอกว่า“The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved”ถ้าเรายังใช้ uri แบบเดิมอยู่ อ๋อถ้ายังไม่ผ่านอีกแปลว่าท่านยังไม่ได้ add JSTL 1.1 เข้าไปใน library วิธี add ใน netbeans ก็ mouse-ขวา ที่โฟลเดอร์ Libraries กด Add Library เรื่อง JSTL 1.1 นะครับแค่นี้ก็ใช้ได้แล้ว ในส่วนของคำสั่ง Database ก็อย่าลืม Add Library เรื่อง MySQL JDBC Driver นะครับแล้วก็เปลี่ยน username password แค่นี้ก็ได้ละ (ควรทำความเข้าใจจาก Tutorial ก่อนหน้านี้ด้วย) หน้า Tutorial ของ NetBeans

Friday 30 May 2008

GWT 1.5 ออกแล้ว !! (Release Candidate 1)

การประกาศเปิดตัว Version 1.5 รุ่นที่ 1 ออกมาใน Google Web Toolkit (GWT) ตอนนี้พร้อมแล้ว โดยการที่ออกความสามารถใหม่ๆที่รองรับ Java 5 Annotations และ Template แทนที่ GWT เมื่อก่อน แล้วยังได้รวม Theme และ Widget อีกมากมาย และก็แก้ไข Bug ต่างๆ

สำหรับคนที่ยังไม่รู้จัก GWT โดยมันคือการเขียน Java Code ปกติและเปลี่ยนส่วนหนึ่งให้เป็น JavaScript โดยเรียนรู้ได้อย่างง่ายสำหรับการทำ Rich Internet Application รวมทั้งยังรวม RPC (Remote Procedure Call) Libary เข้าไว้ด้วย (รวมถึง Ajax) , Widget Library และเปลี่ยนเป็น Java 5 Syntax คือสิ่งที่เปลี่ยนแปลงครั้งใหญ่ของ GWT

Monday 26 May 2008

Groovy CRUD # 1

การเขียน​ groovy ​ให้​ติดต่อ​กับ​ฐานข้อมูล​ ​นั้น​แท้จริง​แล้ว​ groovySQL ​ไป​ใช้​ JDBC API ​ใน​การเชื่อมต่อ​ database ​อีกทีดังนี้
Groovy / Java Application <--> Groovy SQL <--> JDBC API <--> JDBC DriverManager / DataSource <--> Database Server

ข้อมูลที่จำ​เป็น​ต้อง​รู้ก่อนการ​ใช้​งาน​ database

  • database URL
    • jdbc:hsqldb:hsql://server/dbname ​ใช้​เชื่อมต่อ​กับ​ HSQLDB server ​รองรับการ​ client ​หรือ​ process ​ที่มากกว่า​ 1
    • jdbc:hsqldb:file:/dir/dbname ​ใช้​เชื่อมต่อ​กับ​ single-client ​โดย​ HSQLDB ​จะ​ใช​ file ​เป็น​ตัวเก็บข้อมูล
    • jdbc:hsqldb:mem:dbname ​ใช้​เชื่อมต่อ​กับ​ database ​ที่ถูกสร้าง​และ​เก็บ​อยู่​ใน​ memory ​ซึ่ง​จะ​ nonpersistent ​เหมาะ​กับ​การเขียน​ application ​เล็กๆ​ ​เอาทดลองทำ​งาน
  • username / password ​ใช้​ username: sa (sysadmin) ​และ​ password empty ​(​ไม่​มี)
  • driver class name : org.hsqldb.jdbcDriver

ตัวอย่างการเชื่อมต่อฐานข้อมูล​ด้วย​ DriverManager

import groovy.sql.Sql
db = Sql.newInstance('jdbc:hsqldb:mem:GinA', 'sa', '', 'org.hsqldb.jdbcDriver');

DriverManager VS DataSource
ถ้า​ดูตอนการทำ​งานเชื่อมต่อ​กับ​ database ​จะ​เห็นว่ามี​ 2 concept ​คือ​ DriverManager ​และ​ Data Source ​ถ้า​เรา​ใช้​ Sql.newInstance method ​จะ​เป็น​การ​ใช้​ DriverManager ​แต่​ถึง​แม้​เรา​จะ​มี​ DriverManager ​แล้ว​ ​แต่​เพื่อการจัดการประสิทธิภาพที่ดีกว่า​เราควร​ใช้​ DataSource ​เพราะ​มันมีการจัดการการเชื่อมต่อ​กับ​ database ​ที่ดีกว่า​โดย​ใช้​ connect pool (แหล่งเก็บ​ connection ​ที่​ใช้​เชื่อมต่อ​กับ​ database) ​และ​รองรับ​ distributed transaction ​และ​เรา​ยัง​สามารถ​นำ​ connect ​นี้กลับมา​ใช้​ใหม่​ได้​อีก​ (reuse) ​เพราะ​เมื่อแต่ละ​ transaction ​ทำ​งานเสร็จก็​จะ​มีการคืน​ connect ​กลับมาที่​ pool ​แต่​ถ้า​เราลืมคืน​ connection ​ตัว​ Groovy ​จะ​เป็น​คืน​ transaction ​ให้​เอง

DataSource ​จึง​กลายมา​เป็น​ส่วน​สำ​คัญเมื่อ​ต้อง​การจัดการ​กับ​ทรัพยากรที่มี​อยู่​อย่างจำ​กัด​ให้​เกิดประ​โยชน์สูงสุด​ ​เช่น​ใน​ application server ​ก็มีการจัดการทรัพยากร​ใน​ application ​ของตัวเองที่​เป็น​ connection pool

ใน​ Groovy ​เรา​สามารถ​ใช้​ datasource ​ได้​ ​โดย​ขึ้น​อยู่​กับ​ database vendor ​แต่ละ​เจ้า​ซึ่ง​จะ​ implement ​ไว้​ที่​ javax.sql.DataSource ​แต่​ HSQL ​มี​เตรียม​ไว้​ที่​ org.hsqldb.jdbc.jdbcDataSource ​ตัวอย่างการเชื่อมต่อฐานข้อมูล​ด้วย​ DataSource

import groovy.sql.Sql
source = new org.hsqldb.jdbc.jdbcDataSource()
source.database = 'jdbc:hsqldb:mem:GinA'
source.user = 'sa'
source.password = ''
db2 = new Sql(source)

Note: ​ถ้า​เรา​ใช้​ application server ​เรา​สามารถ​เอา​ DataSource ​มา​ได้​โดย​ใช้​ JNDI ​ซึ่ง​ข้อดีของการ​ใช้​วิธีนี้​ ​คือการจัดการเชื่อมต่อ​กับ​ฐานข้อมูล​นั้น​ไม่​ขึ้น​อยู่​กับ​ application ​ของเรา​ ​ใน​ application ​ของเรา​ไม่​ต้อง​ระบุ​ database driver ​หรือ​ DataSource classs ​ซึ่ง​มัน​ช่วย​ให้​เรา​สามารถ​ migrate ​จาก​ฐานข้อมูลหนึ่งไปอีกฐานข้อมูลหนึ่ง​โดย​ไม่​ส่งผลกระทบ​ถึง​ application

Note: ​การ​ให้​ได้​มา​ซึ่ง​ connection ​ถ้า​ใช้​ Datasource ​จะ​ใช้​วิธีส่ง​ DataSource ​เข้า​ไป​ใน​ Sql constructor ​แต่​ถ้า​ใช้​ DriverManager ​จะ​ส่งค่าต่างๆ​ ​เข้า​ไปทาง​ Sql.newInstance

ไม่​ว่า​เรา​จะ​ใช้​ DataSource ​หรือ​ DriverManger ​สุดท้ายก็​จะ​ได้​มา​ซึ่ง​ reference ​ของ​ Sql instance

สุดท้าย​ถ้า​เรา​ต้อง​การ​ clone Sql instance ​ขึ้นมาอีกอัน​สามารถ​ใช้​ new Sql(db) ​ได้​ ​ตอนนี้​เรามี​ sql instance ​ที่พร้อม​จะ​ connect ​กับ​ฐานข้อมูล​แล้ว​ ​และ​เรา​ต้อง​การ​ execute ​บาง​ sql statement

Executing SQL
ใช้​คำ​สั่งง่ายๆ​ db.execute(statement) ​ใน​การติดต่อฐานข้อมูล​โดย​ส่ง​ statement sql ​เข้า​ไป

สร้างฐานข้อมูลนักกีฬา​จะ​ประกอบ​ด้วย​ ​ชื่อ​, ​นามสกุล​, ​วันเกิด​ ​และ​ primary key ​จาก​นั้น​ใส่​ index ​ให้​ตารางที่สร้างขึ้น​ (ฐานข้อมูล​ส่วน​ใหญ่​รวม​ทั้ง​ HSQLDB ​จะ​มีการสร้าง​ index ​ให้​อยู่​แล้ว​โดย​อัตโนมัติ​โดย​จะ​เป็น​ primary ​แต่​เรา​สามารถ​ระบุ​ index ​ที่​ต้อง​การ​จะ​สร้างเพื่อ​ให้​ชัดเจนยิ่งขึ้น​ได้​เช่น​กัน)​

จุดประสงค์ของ​ application ​นี้คือทดสอบการส่งคำ​สั่ง​ sql ​จึง​ไม่​ต้อง​มีการ​ใช้​ข้อมูลของเก่าก็​ได้​ (พยายามยึดหลัก​ agile ​ไว้)​ ​ดัง​นั้น​จึง​ลบ​ table ​และ​ index ​ที่​เราสร้าง​ไว้​ก่อน​แล้ว​ค่อยสร้าง​ใหม่​ (Reconstruct) ​ทุกครั้งที่มีการเรียก​ application ​นี้​ (agile database programming)

db.execute '''
DROP INDEX athleteIdx IF EXISTS;
DROP TABLE Athlete IF EXISTS;
CREATE TABLE Athlete(
athleteId INTEGER GENERATED BY DEFAULT AS IDENTITY,
firstname VARCHAR(64),
lastname VARCHAR(64),
dateOfBirth DATE
);
CREATE INDEX athleteIdx ON Athlete (athleteId);
'''

เพิ่มข้อมูลลง​ใน​ตาราง​ Athelete ​ด้วย​ข้อมูลนักวิ่งมาราธอน

db.execute '''
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES ('Paul', 'Tergat', '1969-06-17');
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES ('Khalid', 'Khannouchi', '1971-12-22');
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES ('Ronaldo', 'da Costa', '1970-06-07');
'''

ถ้า​ใช้​วิธีนี้​ใน​การ​ insert ​ข้อมูล​ทั้ง​โปรแกรมมันยากที่​จะ​อ่าน​และ​จัดการข้อมูล​ทั้ง​หมด​ ​เพราะ​คำ​สั่ง​ sql ​มัน​ซ้ำ​กัน​อยู่​เยอะ​ ​ดัง​นั้น​เรา​จะ​เปลี่ยน​ใหม่​โดย​การ​ใช้​ prepare statement ​เข้า​มา​ช่วย​ prepare statement ​คือมีรุปแบบการเขียนคล้าย​ sql statement ​แต่​จะ​แทนค่าที่รับ​เข้า​มาทางโปรแกรม​ด้วย​เครื่องหมาย​ question mark ​แต่สุดท้ายเครื่องหมาย​ question mark ​จะ​ถูกแทนที่​ด้วย​ค่าที่รับ​เข้า​มาทางโปรแกรม​ ​การ​ใช้​วิธี​เพิ่ม​ reuse ​ได้​ ​ใน​ Java ​มี​ prepare statement ​โดย​ใช้​ java.sql.PreparedStatement interface

String athleteInsert = '''
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES (?, ?, ?);
'''
db.execute athleteInsert, ['Paul', 'Tergat', '1969-06-17']
db.execute athleteInsert, ['Khalid', 'Khannouchi', '1971-12-22']
db.execute athleteInsert, ['Ronaldo', 'da Costa', '1970-06-07']

เขียน​ใหม่​ให้​อยู่​ใน​รูปแบบ​ closure ​โดย​ส่ง​ map ​เข้า​ไป​เป็น​ argument

def athletes = [
[first: 'Paul', last: 'Tergat', birth: '1969-06-17'],
[first: 'Khalid', last: 'Khannouchi', birth: '1971-12-22'],
[first: 'Ronaldo', last: 'da Costa', birth: '1970-06-07'],
]
athletes.each { athlete ->
db.execute "​""
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES (${athlete.first}, ${athlete.last}, ${athlete.birth});
"​""
}

Reference : Groovy in Action

つづく

Saturday 24 May 2008

LibreSource 2.5 โปรแกรม Collaborative เปิดเป็น GPL แล้ว

LibreSource 2.5, ออกแล้ว และตอนนี้ได้เปลี่ยนเป็น GNU GPL V2 LibreSource เป็นโปรแกรมที่ช่วยการทำงานแบบ Collaborative (การทำงานที่มีการเปลี่ยนแปลงจากหลายคน) และถูกนำไปใช้งานในหลายพันชุมชน . LibreSource คือ Web Portal ที่คอยเก็บการสื่อสารที่จำเป็นต่างๆและอุปกรณ์การ Share สำหรับงาน Collaborative

โดยการแก้ปัญหานี้ถูกดัดแปลงมาจากการพัฒนา Software โดยเล็งไปที่ Project Collaborative และลดค่าใช้จ่ายต่างๆ โดยชุมชนแรกที่ได้ใช้ LibreSource คือชุมชนวิทยาศาสตร์ และ European Space Agency (ESA) คือคนแรกที่นำมันไปใช้ใน R&D project และปีที่ผ่านมายังถูกใช้ใน French Ministry of Ecology อีกด้วยโดยใน Version 2.5 นั้นได้นำ version control system อย่าง Subversion และสนับสนุน JOnAS และ JBoss


สามารถ download LibreSource 2.5 ได้เลยที่นี้ครับ

Tuesday 20 May 2008

Spring Web Flow 2 ออกแล้วครับผม !!

Spring Module ตัวนี้ได้มุ่งความสนใจไปที่โครงสร้าง Web Application ตอนนี้ได้รวม Spring Web MVC , Spring Web Flow , Spring Javascript(JS) และ Spring Faces โดยแต่ละอันมีความสัมพันธ์กันยังไงจะอธิบายต่อไปดังนี้

Spring Web MVC
ช่วยในการพัฒนา Web Application ด้วย Paradigm ของ Model View Controller โดยแต่ละ Module ของ Web Flow จะถูกสร้างบนตัวนี้

Spring Web Flow
มันคือ Module ที่เสริมการทำงานของ Controller โดยการใช้ Domain Specific Language ได้ !! โดยภาษานี้ถูกออกแบบเป็นการโต้ตอบกับ User ด้วย Model นั้นต้องการหลายๆความต้องการ เพื่อที่จะได้งานที่สมบูรณ์และอาจจะถูกอ้างจากหลายที่ได้

Spring JavaScript
มันคือ client-side JavaScript Framework แบบ Abstract นั้นคือยอมให้คุณเสริมการกระทำต่างๆของ Web Page โดย Framework ถูกสร้างจาก Dojo Toolkit โดย Spring.js มีเป้าหมายสร้างความง่ายของการใช้งาน Dojo สำหรับงานทั่วๆไปในเรื่องราว Enterprise ในขณะที่ยังมีประสิทธิภาพสูงสำหรับกรณีการพัฒนาขั้นสูง แล้วยังทำงานได้ทั้ง 2 ฝั่งใน Web Flow 2 โดยรวม Spring.js เข้ากับ Spring Web MVC Controller สำหรับการเรียก Ajax Request

Spring Faces
Module ตัวนี้สนับสนุนการทำ Java Server Faces โดยการสนับสนุนครั้งนี้โดยใช้ JSF ในการ View ในสภาพแว้ดล้อมคล้ายๆกับ Spring MVC และ Web Flow Controller ด้วยการทำเช่นนี้ทำให้ผสมผสานข้อดีของแต่ละ Module โดยใช้ JSF UI Component Model กับข้อดีของ Web MVC Architecture โดย Spring Faces ได้รวม JSF Component Library ที่ถูกสร้างบน Sring Javascript สำหรับการเรียกใช้ Ajax และการตรวจสอบฟอร์มจากพฤติกรรมของ client-side ในการทำงานให้ถูกต้อง

ผลประโยชน์สำคัญจากการใช้ Web Flow 2
- พัฒนา Controller ที่สามารถนำมาใช้ใหม่ได้โดยไม่ต้อง Restart Container ใหม่
- แก้ปัญหา Back-button และการ submit ซ้ำโดยไม่ต้องเขียน code แก้
- ใช้ข้อมูลจาก flowScope และ viewScope เพื่อง่ายในการควบคุมเนื้อการจัดการในระหว่างเกิด transaction ใน application
- แก้ไข Manual JPA PersistenceContext
- เสริมความปลอดภัยตอน startup ของ flow การทำงานโดยใช้ Spring Security
- สร้างงานจากการประกาศ Model Binding และ Validation routine ด้วยการสนับสนุนการตรวจสอบแบบ inter-field
- สามารถควมคุมผ่าน URLs และการ bind ของ request parameters
- สร้างส่วนหนึ่งของการตอบสนอง ajax ด้วย JSP และ Tiles หรือ UI JSF
- ได้พลังอย่างเต็มที่จาก JSF UI Component Model รวมถึงสนับสนุน JSF Component Libraries
- ใช้ the Dojo Toolkit ในการสร้างแรงกระตุ้นสำหรับ User Interface
- เสริมความแกร่งด้วยการ cache และการบีดอัด CSS และ JS จาก jar bundle

Web Flow ต้องการ Java 1.4 หรือมากกว่าและ Spring Framework 2.5.4 หรือมากกว่า โดย run อยู่บน Java EE servers สำหรับใครที่ต้องการข้อมูลมากขึ้นหรือดาวโหลด ไปดูเพิ่มได้ที่ Web Flow 2 General Release Announcement

Monday 19 May 2008

การบริหารจัดการโครงการเบื้องต้น

มาต่อจากบทความที่แล้วครับ มาอธิบายถึงการมองโครงการอย่างคร่าวๆ ยังไม่ลงลึกถึงรายละเอียดของขั้นตอนต่างๆ lecture note เหมือนเดิม

Project Management Definitions

  • project (โครงการ)​​ ​​​​​​​คือสิ่งที่​​​​​​​​​​​เกิดขึ้นชั่วคราว​​​​​​​ ​​​​​​​มีกำ​​​​​​​​​​​หนดวันเริ่มต้น​​​​​​​​​​​และ​​​​​​​​​​​วันสิ้นสุดที่​​​​​​​​​​​แน่นอน (ad-hoc)​​​​​​​ ​​​​​​​แต่การ​​​​​​​ organization ​​​​​​​จะ​​​​​​​​​​​เกิด​​​​​​​​​​​และ​​​​​​​​​​​ไม่​​​​​​​​​​​มีวันจบ​​​​​​​ ​​​​​​​โครงการ​​​​​​​​​​​จะ​​​​​​​​​​​ต้อง​​​​​​​​​​​มี​​​​​​​ ​​​​​​​วัตถุประสงค์​​​​​​​ (objective) ​​​​​​​ซึ่ง​​​​​​​​​​​ต้อง​​​​​​​​​​​วัด​​​​​​​​​​​ได้​​​​​​​ ​​​​​​​ถ้า​​​​​​​​​​​วัด​​​​​​​​​​​ไม่​​​​​​​​​​​ได้​​​​​​​​​​​นั่นคือโครงการที่ผิดพลาด​​​​​​​ ​​​​​​
  • subproject ​​​​​​​เป็น​​​​​​​​​​​โครงการย่อยๆ​​​​​​​ ​​​​​​​ที่​​​​​​​​​​​อยู่​​​​​​​​​​​ใน​​​​​​​​​​​โครงการหลักอีกที
  • program ​​​​​​​คือหลายโครงการที่มี​​​​​​​​​​​ความ​​​​​​​​​​​สัมพันธ์ต่อ​​​​​​​​​​​กัน​​​​​​​ ​​​​​​​ที่ทำ​​​​​​​​​​​งานร่วม​​​​​​​​​​​กัน​​​​​​​ ​​​​​​​เช่น​​​​​​​ ERP ​​​​​​​ที่มีหลายโครงการ​​​​​​​​​​​อยู่​​​​​​​​​​​ภาย​​​​​​​​​​​ใน​​​​​​​ ​​​​​​​และ​​​​​​​​​​​สัมพันธ์​​​​​​​​​​​ซึ่ง​​​​​​​​​​​กัน​​​​​​​​​​​และ​​​​​​​​​​​กัน​​​​​​​​​​​อยู่
  • project management (การบริหารโครงการ​​​​​​​) ​​​​​​​คือการนำ​​​​​​​​​​​ความ​​​​​​​​​​​รู้​​​​​​​ ​​​​​​​เครื่องมือ​​​​​​​ ​​​​​​​เทคโนโลยีต่างๆ​​​​​​​ ​​​​​​​นำ​​​​​​​​​​​มา​​​​​​​​​​​ใช้​​​​​​​​​​​เพื่อ​​​​​​​​​​​ให้​​​​​​​​​​​โครงการสำ​​​​​​​​​​​เร็จ​​​​​​​ ​​​​​​​ตาม​​​​​​​​​​​ความ​​​​​​​​​​​ต้อง​​​​​​​​​​​การ​​​​​​​ (requirement)
  • Portfolio management ​​​​​​​เป็น​​​​​​​​​​​การรวบรวมข้อมูลต่างๆ​​​​​​​ ​​​​​​​ของโครงการ​​​​​​​ ​​​​​​​เพื่อเก็บ​​​​​​​​​​​ไว้​​​​​​​​​​​ใช้​​​​​​​​​​​ใน​​​​​​​​​​​โครงการถัดไป​​​​​​​ ​​​​​​​การเก็บข้อมูลต่างๆ​​​​​​​​​​​เอา​​​​​​​​​​​ไว้​​​​​​​​​​​ยัง​​​​​​​​​​​มีประ​​​​​​​​​​​โยชน์​​​​​​​​​​​ใน​​​​​​​​​​​กาทำ​​​​​​​​​​​มาตรฐาน​​​​​​​ CMMI ​​​​​​​ที่​​​​​​​​​​​จะ​​​​​​​​​​​ต้อง​​​​​​​​​​​มีข้อมูล​​​​​​​​​​​จาก​​​​​​​ project ​​​​​​​เก่าๆ​​​​​​​ ​​​​​​​ที่​​​​​​​​​​​เรา​​​​​​​​​​​เก็บข้อมูล​​​​​​​​​​​ไว้​​​​​​​ ​​​​​​​เช่น​​​​​​​​​​​จะ​​​​​​​​​​​สร้าง​​​​​​​ program ​​​​​​​แบบนี้ต้อ​​​​​​​​​​​ใช้​​​​​​​ module ​​​​​​​อะ​​​​​​​​​​​ไรเทคนิคไหน​​​​​​​ ​​​​​​​ซึ่ง​​​​​​​​​​​ถ้า​​​​​​​​​​​เรา​​​​​​​​​​​ใช้​​​​​​​ module ​​​​​​​ที่​​​​​​​​​​​เคยสร้าง​​​​​​​​​​​ไว้​​​​​​​​​​​แล้ว​​​​​​​​​​​ยัง​​​​​​​​​​​ช่วย​​​​​​​​​​​ให้​​​​​​​​​​​ลดเวลา​​​​​​​​​​​ใน​​​​​​​​​​​การพัฒนา​​​​​​​ (development) ​​​​​​​และ​​​​​​​​​​​ทดสอบ​​​​​​​ (Testing) ​​​​​​​หรือ​​​​​​​​​​​เรา​​​​​​​​​​​สามารถ​​​​​​​​​​​พัฒนา​​​​​​​​​​​เทคนิค​​​​​​​​​​​ให้​​​​​​​​​​​ดีขึ้นกว่า​​​​​​​​​​​เดิม​​​​​​​​​​​ได้​​ ​​เป็น​​​เหมือนองค์​​​ความ​​​รู้ขององค์กร
  • Portfolio ​​​​​​​เป็น​​​​​​​​​​​กลุ่มของโครงการ​​​​​​​​​​​หรือ​​​​​​​​​​​โปรแกรม​​​​​​​​​​​และ​​​​​​​​​​​งาน​​​​​​​​​​​อื่นๆ​​​​​​​ ​​​​​​​ที่​​​​​​​​​​​เกี่ยวข้อง​​​​​​​​​​​กับ​​​​​​​​​​​การบริหารโครงการ​​​​​​​ ​​​​​​​เพื่อสนับสนุนประสิทธิภาพการบริหารจัดการ​​​​​​​ ​​​​​​​ตามเป้าหมายของธุรกิจ​​​​​​​​​​​นั้นๆ
  • Progressive Elaboration ​​​​​​​เป็น​​​​​​​​​​​การพัฒนา​​​​​​​ software ​​​​​​​แบบวน​​​​​​​​​​​ซ้ำ​​​​​​​ (loop) ​​​​​​​ไปเรื่อยๆ​​​​​​​ ​​​​​​​เพื่อ​​​​​​​​​​​ให้​​​​​​​ software ​​​​​​​ที่​​​​​​​​​​​ได้​​​​​​​​​​​ประสิทธิ์ภาพ​​​​​​​ ​​​​​​​ความ​​​​​​​​​​​คืบหน้า​​​​​​​​​​​และ​​​​​​​​​​​ความ​​​​​​​​​​​ถูก​​​​​​​​​​​ต้อง​​​​​​​​​​​ดีขึ้น
  • Project Management Office (PMO) ​​​​​​​เป็น​​​​​​​​​​​การบอกว่าคนที่​​​​​​​​​​​เกี่ยวข้อง​​​​​​​​​​​กับ​​​​​​​​​​​โครงการ​​​​​​​​​​​นั้น​​​​​​​​​​​ใครทำ​​​​​​​​​​​หน้าที่อะ​​​​​​​​​​​ไรบ้างSponsor ​​​​​​​คือคนที่สนับสนุนด้านการต่างๆ​​​​​​​ ​​​​​​​เช่นการเงิน​​​​​​​​​​​ให้​​​​​​​​​​​กับ​​​​​​​​​​​โครงการของเรา​​​​​​​ ​​​​​​​ซึ่ง​​​​​​​​​​​ก็คือลูกค้า​​​​​​​​​​​เรา​​​​​​​​​​​นั้น​​​​​​​​​​​เอง
  • Stakeholder คือ​​​ผู้​​​มี​​​ส่วน​​​ได้​​​ส่วน​​​เสียต่อโครงการ​​ ​​ซึ่ง​​​​​​​​ที่มีผลต่อ​​​​​​​​​​​ความ​​​​​​​​​​​สำ​​​​​​​​​​​เร็จ​​​​​​​​​​​หรือ​​​​​​​​​​​ล้มเหลวของโครงการ
  • Estimate คือประมาณก่อนจะเริ่มทำยิ่งมีโครงการที่เคยทำมากเท่าไหร่ (Portfolio management) ก็จะประมาณได้ว่าโครงการใหม่จะพัฒนาอย่างไร
หลัก​​​​​​​​​​​​​​​ใน​​​​​​​​​​​​​​​การบริหารโครงการคือ​​​​​​​​ ​​​​​​​​เวลา​​​​​​​​ (time) ​​​​​​​​เงิน​​​​​​​​ (cost) ​​​​​​​​คุณภาพ​​​​​​​​ (quality) ​​​​​​​​โดย​​​​​​​​​​​​​​​ทั้ง​​​​​​​​​​​​​​​หมดเรา​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​ควบคุม​​​​​​​​ (control) ​​​​​​​​และ​​​​​​​​​​​​​​​วัด​​​​​​​​ (monitor) ​​​​​​​​ได้​​​​​​​​ ​​​​​​​​เช่นถามว่า​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​วัด​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​อย่างไรว่า​​​​​​​​ software ​​​​​​​​เสร็จเมื่อไหร่​​​​​​​​ ? ​​​​​​​​คำ​​​​​​​​​​​​​​​ตอบ​​​​​​​​​​​​​​​นั้น​​​​​​​​​​​​​​​เรา​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​รู้ว่า​​​​​​​​ software ​​​​​​​​มีขนาด​​​​​​​​​​​​​​​เท่า​​​​​​​​​​​​​​​ไหร่​​​​​​​​ ​​​​​​​​ทำ​​​​​​​​​​​​​​​แค่​​​​​​​​​​​​​​​ไหน​​​​​​​​​​​​​​​และ​​​​​​​​​​​​​​​ทำ​​​​​​​​​​​​​​​ออกมา​​​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​​​ตัววัด​​​​​​​​ ​​​​​​​​ยิ่ง​​​​​​​​ software ​​​​​​​​มี​​​​​​​​​​​​​​​ความ​​​​​​​​​​​​​​​ซับซ้อนมาก​​​​​​​​​​​​​​​เท่า​​​​​​​​​​​​​​​ไหร่​​​​​​​​ ​​​​​​​​เรายิ่ง​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​วัดมากยิ่งขึ้น

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ช่วงชีวิตของการบริหารโครงการ​​​​​​ (project life cycle) ​​​​​​กับ​​​​​การวรจรชิวิตการพัฒนาซอร์ฟแวร์​​​​​​ (software development life cycle) ​​​คือเรื่องเดียว​​​​​กัน​​​​​แต่คนละมุมมอง​​​!! project management ​​​เป็น​​​​​เรื่องของการบริหาร​​​​​และ​​​​​ควบคุมการพัฒนา​​​ software ​​​อีกที
​​​​​​​​
​​​​​​​การบริหารโครงการจำ​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​สนใจว่ามี​​​​​​​ process ​​​​​​​อะ​​​​​​​​​​​​​ไรบ้าง​​​​​​​​​​​​​และ​​​​​​​ process ​​​​​​​เหล่า​​​​​​​​​​​​​นั้น​​​​​​​​​​​​​เกี่ยวข้อง​​​​​​​​​​​​​กัน​​​​​​​​​​​​​อย่างไร

Project Life Cycle Model
​​​​​​​​​​​​​​​​​​​​​​​​​​​​วงรอบชีวิตของโครงการ​​​​​​​ ​​​​​​​ซึ่ง​​​​​​​​​​​​​แบ่งออก​​​​​​​​​​​​​ได้​​​​​​​ 4 ​​​​​​​ขั้นตอนแต่ละขั้นตอน​​​​​​​​​​​​​จะ​​​​​​​​​​​​​มีกิจกรรม​​​​​​​ (Activity) , ​​​​​​​ทรัพยากร​​​​​​​ (Resource) {เงิน​​​​​​​ , ​​​​​​​คน​​​​​​​, ​​​​​​​เวลา​​​​​​​, ​​​​​​​สถานที่} ​​​​​​​มากน้อยแตกต่าง​​​​​​​​​​​​​กัน​​​​​​​​​​​​​ดังรูป​​​


Typical Activities by Phase
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​กิจกรรมที่ต้องทำในแต่ละขั้นตอนของโครงการ (คร่าวๆนะ)

Concept
  • รวบรวมข้อมูลทุกอย่างที่​​​​​​​​​​​​​​​เกี่ยวข้อง​​​​​​​​​​​​​​​กับ​​​​​​​​​​​​​​​โครงการ
  • กำ​​​​​​​​​​​​​​​หนด​​​​​​​​​​​​​​​ความ​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​การของโครงการนี้
  • กำ​​​​​​​​​​​​​​​หนด​​​​​​​​:
    • เป้าหมาย​​​​​​​​, ​​​​​​​​วัตถุประสงค์​​​​​​​​ ​​​​​​​​ซึ่ง​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​วัดผล​​​​​​​​​​​​​​​ได้
    • เงิน​​​​​​​​ ​​​​​​​​ดูว่ามี​​​​​​​​​​​​​​​เงินพอไหมที่​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​ทำ​​​​​​​​​​​​​​​โครงการนี้
    • คนที่​​​​​​​​​​​​​​​เกี่ยวข้อง​​​​​​​​​​​​​​​กับ​​​​​​​​​​​​​​​โครงการนี้​​​​​​​​ ​​​​​​​​เช่น​​​​​​​​ programmer, user, project manager
    • ความ​​​​​​​​​​​​​​​เสี่ยงของโครงการ​​​​​​​​ ​​​​​​​​ซึ่ง​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​บอก​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​ว่า​​​​​​​​​​​​​​​อยู่​​​​​​​​​​​​​​​ใน​​​​​​​​​​​​​​​ระดับไหน​​​​​​​​​​​​​​​และ​​​​​​​​​​​​​​​อย่างไร​​​​​​​​ ​​​​​​​​ต้อง​​​​​​​​​​​​​​​มีการวางแผนสำ​​​​​​​​​​​​​​​รองแต่​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​คุ้ม​​​​​​​​​​​​​​​ด้วย​​​​​​​​ ​​​​​​​​เพราะ​​​​​​​​​​​​​​​ว่า​​​​​​​​​​​​​​​แผนสำ​​​​​​​​​​​​​​​รองที่​​​​​​​​​​​​​​​เตรียม​​​​​​​​​​​​​​​นั้น​​​​​​​​​​​​​​​มีค่า​​​​​​​​​​​​​​​ใช้​​​​​​​​​​​​​​​จ่ายที่​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​ใช้​​​​​​​​​​​​​​​อยู่​​​​​​​​​​​​​​​เช่น​​​​​​​​​​​​​​​กัน​​​​​​​​ ​​​​​​​​การวัดว่า​​​​​​​​​​​​​​​แผนสำ​​​​​​​​​​​​​​​รอง​​​​​​​​​​​​​​​นั้น​​​​​​​​​​​​​​​คุ้ม​​​​​​​​​​​​​​​หรือ​​​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​ดูว่า​​​​​​​​​​​​​​​แผนสำ​​​​​​​​​​​​​​​รอง​​​​​​​​​​​​​​​นั้น​​​​​​​​​​​​​​​ลด​​​​​​​​​​​​​​​ความ​​​​​​​​​​​​​​​เสี่ยงลง​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​ถึง​​​​​​​​​​​​​​​จุดไหน
    • กลยุทธ์
    • วางทีม​​​​​​​​​​​​​​​ไว้​​​​​​​​​​​​​​​คร่าวๆ
  • ประ​​​​​​​​​​​​​​​เมินทรัพยากร​​​​​​​​ (เงิน​​​​​​​​ , ​​​​​​​​คน​​​​​​​​, ​​​​​​​​เวลา​​​​​​​​, ​​​​​​​​สถานที่) ​​​​​​​​ไว้​​​​​​​​​​​​​​​คร่าวๆ
  • วางแผนสำ​​​​​​​​​​​​​​​รอง​​​​​​​​ ​​​​​​​​ซึ่ง​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​มี​​​​​​​​​​​​​​​เสมอ
  • เตรียมนำ​​​​​​​​​​​​​​​เสนอ​​​​​​​​ ​​​​​​​​และ​​​​​​​​​​​​​​​รออนุมัติ​​​​​​​​​​​​​​​เพื่อไปขั้นตอนถัดไป
Develop
  • กำ​​​​​​​​​​​​​​​หนดคนที่สำ​​​​​​​​​​​​​​​คัญต่อโครงการ​​​​​​​​ ​​​​​​​​ใครสำ​​​​​​​​​​​​​​​คัญต่อโครงการ​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​บอก​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​รู้ตัวเสมอ​​​​​​​​ ​​​​​​​​เพื่อ​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​รู้ตัว​​​​​​​​​​​​​​​อยู่​​​​​​​​​​​​​​​เสมอว่าตัวเองคือ​​​​​​​​​​​​​​​ความ​​​​​​​​​​​​​​​เสี่ยง​​​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​​​ปัจจัยต่อ​​​​​​​​​​​​​​​ความ​​​​​​​​​​​​​​​สำ​​​​​​​​​​​​​​​เร็จของโครงการ​​​​​​​​ ​​​​​​​​และ​​​​​​​​​​​​​​​เพื่อ​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​เรารู้ว่า​​​​​​​​​​​​​​​ความ​​​​​​​​​​​​​​​เสี่ยงคืออะ​​​​​​​​​​​​​​​ไรเช่น​​​​​​​​ programmer ​​​​​​​​คนไหนทำ​​​​​​​​​​​​​​​งาน​​​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​ตามที่สั่งงาน​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​รีบบอก​​​​​​​​ ​​​​​​​​อย่าบอกวันสุดท้าย
  • เริ่มเรียนรู้ระบบ
  • กำ​​​​​​​​​​​​​​​หนด​​​​​​​​ baseline:
    • จุดสิ้นสุดของ​​​​​​​​ product
    • มาตราฐาน
    • ทรัยากร​​​​​​​​ (เงิน​​​​​​​​ , ​​​​​​​​คน​​​​​​​​, ​​​​​​​​เวลา​​​​​​​​, ​​​​​​​​สถานที่)
    • กิจกรรมที่​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​เกิดขึ้น​​​​​​​​ ​​​​​​​​เริ่มลงลึก​​​​​​​​​​​​​​​ถึง​​​​​​​​​​​​​​​รายละ​​​​​​​​​​​​​​​เอียด
  • กำ​​​​​​​​​​​​​​​หนด​​​​​​​​:
    • วิ​​​​​​​​​​​​​​​เคราะห์การเงินเช่นเรา​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​รู้ว่า​​​​​​​​​​​​​​​เมื่อทำ​​​​​​​​​​​​​​​โครงการนี้​​​​​​​​​​​​​​​เสร็จคุ้มไหม​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​เงิน​​​​​​​​​​​​​​​เท่า​​​​​​​​​​​​​​​ไหร่​​​​​​​​ ​​​​​​​​ถ้า​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​ดีน่า​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​บอก​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​ว่าจุดคุ้มทุน​​​​​​​​​​​​​​​อยู่​​​​​​​​​​​​​​​ที่ตรงไหน
    • ใน​​​​​​​​​​​​​​​โครงการ​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​มี​​​​​​​​ work / task / activity ​​​​​​​​อะ​​​​​​​​​​​​​​​ไรบ้าง​​​​​​​​ (งานที่​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​ทำ​​​​​​​​​​​​​​​ทั้ง​​​​​​​​​​​​​​​หมด)
    • นโยบาย
  • ต้อง​​​​​​​​​​​​​​​ทำ​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​ทุกคน​​​​​​​​​​​​​​​ใน​​​​​​​​​​​​​​​ทีม​​​​​​​​ ​​​​​​​​มองไป​​​​​​​​​​​​​​​ใน​​​​​​​​​​​​​​​ทิศทางเดียว​​​​​​​​​​​​​​​กัน
  • ต้อง​​​​​​​​​​​​​​​บอก​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​ว่า​​​​​​​​​​​​​​​เสร็จเมื่อไหร่​​​​​​​​ ​​​​​​​​และ​​​​​​​​​​​​​​​อย่างไร​​​​​​​​​​​​​​​ถึง​​​​​​​​​​​​​​​เรียกว่า​​​​​​​​​​​​​​​เสร็จ
​Execute
  • ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ลงรายละ​​​​​​​​​​​​​เอียดการประชุม​​​​​​​, ​​​​​​​ประชุมครั้งที่​​​​​​​​​​​​​เท่า​​​​​​​​​​​​​ไหร่​​​​​​​, ​​​​​​​หัวข้อที่ประชุม​​​​​​​ ​​​​​​​ฯลฯ
  • ต้อง​​​​​​​​​​​​​มีการประ​​​​​​​​​​​​​เมินเวลา​​​​​​​ ​​​​​​​รู้ว่าตอนนี้​​​​​​​​​​​​​โครงการ​​​​​​​​​​​​​อยู่​​​​​​​ ​​​​​​​ณ​​​​​​​ ​​​​​​​จุดไหน​​​​​​​, delay ​​​​​​​ได้​​​​​​​​​​​​​แค่​​​​​​​​​​​​​ไหน​​​​​​​, ​​​​​​​จำ​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​หรือ​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​ที่​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ต้อง​​​​​​​ delay (บางครั้งอาจประ​​​​​​​​​​​​​เมินเวลามากเกินไป​​​​​​​ ​​​​​​​และ​​​​​​​​​​​​​คนที่​​​​​​​​​​​​​เสียหายคือลูกค้า​​​​​​​​​​​​​เพราะ​​​​​​​​​​​​​งานทำ​​​​​​​​​​​​​เสร็จ​​​​​​​​​​​​​เร็ว​​​​​​​​​​​​​กว่า​​​​​​​​​​​​​เวลาที่กำ​​​​​​​​​​​​​หนด)
  • มีการลงรายละ​​​​​​​​​​​​​เอียดด้าน​​​​​​​ technology ​​​​​​​ที่​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ใช้
  • ลงมือทำ
  • สั่งการ​​​​​​​ / ​​​​​​​ดู​​​​​​​​​​​​​แล​​​​​​​ / ​​​​​​​คาดการณ์​​​​​​​ / ​​​​​​​ควบคุม​​​​​​​:
    • ​​​​​​​​​​​​​​​​​​​​​ขอบเขต​​​​​​​​​​​​​ทั้ง​​​​​​​​​​​​​หมด​​​​​​​ (ห้ามเกิน​​​​​​​ ​​​​​​​ห้ามขาด)
    • คุณภาพ
    • เวลา
    • งบประมาณ
  • ​​​​แก้ปัญหาที่​​​​​​​​​​​​​เกิดขึ้น​​​​​​​​​​​​​ได้
Finish
  • ​ Review software ​​​​​​​ที่พัฒนาขึ้น
  • ส่งมอบระบบ​​​​​​​​​​​​​ให้​​​​​​​​​​​​​แก่ลูกค้า
  • ประ​​​​​​​​​​​​​เมินโครงการ
  • ส่งมอบเอกสาร
  • คืนทรัพยากร​​​​​​​ (คน) ​​​​​​​ที่ดึงมา​​​​​​​​​​​​​ใช้​​​​​​​ ​​​​​​​กลับไป
  • เตรียมรับงานโครงการ​​​​​​​​​​​​​ใหม่

Project Management Processes
​​​​​​​โครงการจริงๆ​​​​​​​ ​​​​​​​แล้ว​​​​​​​​​​​​​คือการรวมหลายๆ​​​​​​​ process ​​​​​​​การ​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ให้​​​​​​​​​​​​​ได้​​​​​​​ process ​​​​​​​มา​​​​​​​​​​​​​เรา​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​รู้ว่า​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ทำ​​​​​​​​​​​​​อะ​​​​​​​​​​​​​ไร​​​​​​​ ​​​​​​​เพื่อ​​​​​​​​​​​​​ให้​​​​​​​​​​​​​ได้​​​​​​​ output ​​​​​​​อะ​​​​​​​​​​​​​ไรออกมา​​​​​​​​​​​​​แล้ว​​​​​​​​​​​​​ให้​​​​​​​​​​​​​ย้อนนึกกลับไปเรื่อยๆ​​​​​​​ ​​​​​​​ก็​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ได้​​​​​​​​​​​​​กระบรวนการพัฒนา​​​​​​​​​​​​​ทั้ง​​​​​​​​​​​​​ระบบ​​​​​​​ ​​​​​​​เช่นสเต็ก​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ได้​​​​​​​​​​​​​ก็ต่อเมื่อ​​​​​​​ ​​​​​​​มี​​​​​​​​​​​​​เนื้อ​​​​​​​, ​​​​​​​ซอส​​​​​​​ ​​​​​​​จะ​​​​​​​​​​​​​มี​​​​​​​​​​​​​เนื้อ​​​​​​​​​​​​​ได้​​​​​​​​​​​​​ก็​​​​​​​​​​​​​ต้อง​​​​​​​… ​​​​​​​คือการคิดย้อนกลับไปเรื่อยๆ​​​​​​​
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
​​​​​​​​​​​​​​​​​​​​​​​​​​การพัฒนา​​​​​​​ software ​​​​​​​จะ​​​​​​​​​​​​​เกี่ยวข้อง​​​​​​​​​​​​​กับ​​​​​​​ 3 ​​​​​​​อย่างดังนี้
  • คน​​​​​​ ​​​​​​เป็น​​​​​​​​​​​สิ่งที่ควบคุม​​​​​​​​​​​ไม่​​​​​​​​​​​ได้​​​​​​ (การดึงตัว​​​​​​​ ​​​​​​​ลาออก​​​​​​​ ​​​​​​​อุบัติ​​​​​​​​​​​​​เหตุ​​​​​​​ ​​​​​​​ความ​​​​​​​​​​​​​ขัดแย้งภาย​​​​​​​​​​​​​ใน​​​​​​​​​​​​​ต่างๆ​​​​​​​)
  • เทคโนโลยี​​ ​​เป็น​​​สิ่งที่ควบคุม​​​ไม่​​​ได้​​ ​​เพราะ​​​มีสิ่ง​​​ใหม่ๆ​​ ​​เกิดขึ้นตลอดเวลา​​ ​​​​​​​​​ไม่​​​​​​​​​​​​​​​​​มี​​​​​​​​​​​​​​​​​ไครู้ว่า​​​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​​​มี​​​​​​​​​ technology ​​​​​​​​​อะ​​​​​​​​​​​​​​​​​ไร​​​​​​​​​​​​​​​​​ใหม่ๆ​​​​​​​​​ ​​​​​​​​​ออกมา​​​​​​​​​​​​​​​​​หรือ​​​​​​​​​​​​​​​​​ไม่​​​ทำ​​​ได้​​​แค่การคาดเดา​​​เหตุการณ์
  • Process ​​​​​​​เป็น​​​สิ่งที่ควบคุม​​​ได้​​ ​​เป็น​​​​​​​​​​​​​ตัวกำ​​​​​​​​​​​​​หนดกระบรวนการพัฒนา​​​​​​​ software ​​​​​​​ต้อง​​​​​​​​​​​​​มีการเก็บ​​​​​​​ record ​​​​​​​ไว้​​​​​​​​​​​​​ตลอดเลา​​​​​​​​​​​​​เพื่อว่า​​​​​​​​​​​​​เมื่อมีคน​​​​​​​​​​​​​เข้า​​​​​​​​​​​​​มา​​​​​​​​​​​​​ช่วย​​​​​​​​​​​​​พัฒนา​​​​​​​ software ​​​​​​​ต่อ​​​​​​​​​​​​​จาก​​​​​​​​​​​​​คนเก่า​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ได้​​​​​​​​​​​​​ทำ​​​​​​​​​​​​​ต่อ​​​​​​​​​​​​​ได้​​​​​​​​​​​​​เลย​​​​​​​ ​​​​​​​ใน​​​​​​​ CMMI ​​​​​​​มองที่​​​​​​​ process ​​​​​​​เป็น​​​​​​​​​​​​​หลัก​​​​​​​​​​​​​ด้วย​​​​​​​​​​​​​ความ​​​​​​​​​​​​​คิดที่ว่า​​​​​​​​​​​​​ถ้า​​​​​​​ process ​​​​​​​ดี​​​​​​​ software ​​​​​​​ย่อมดี​​​​​​​​​​​​​ด้วย​​
CMMI ​​​​​​​​​คือมาตรฐาน​​​ใน​​​การพัฒนา​​​​​​​​​ software ​​​​​​​​​ก้​​​เหมือนๆ​​​​​​​​​ ​​​​​​​​​กับ​​​​​​​​​ iso ​​​​​​​​​ตรงที่​​​​​​​​​ iso ​​​​​​​​​สนใจว่า​​​ใครทำ​​​อะ​​​ไรหน้าที่อะ​​​ไร​​​​​​​​​ ​​​​​​​​​แต่​​​ไม่​​​สนหรอกว่าทำ​​​ออกมา​​​แล้ว​​​จะ​​​ดี​​​หรือ​​​ไม่​​​​​​​​​ (สนใจที่​​​​​​​​​ process) cmmi ​​​​​​​​​ก็​​​เหมือน​​​กัน​​​ที่​​​เรา​​​จะ​​​ใช้​​​เอกสารต่างๆ​​​​​​​​​ ​​​​​​​​​เพื่อบอกรายละ​​​เอียดขั้นตอนต่างๆ​​​​​​​​​ ​​​​​​​​​เขียนถูก​​​หรือ​​​เปล่าก็​​​ไม่​​​รู้​​​แต่ว่า​​​ต้อง​​​มี​​​​​​​​​ CMMI ​​​​​​​​​บางทีก็ทำ​​​ให้​​​เรา​​​เข้า​​​ใจ​​​ได้​​​ว่า​​​เมื่อเราพัฒนา​​​​​​​​​ software ​​​​​​​​​ตามมาตรฐานแบบนี้​​​​​​​​​ ​​​​​​​​​ผลลัพธ์ที่​​​ได้​​​ก็​​​จะ​​​เป็น​​​แบบเดิมอย่างนี้ตลอดไป​​​ไม่​​​ว่า​​​จะ​​​เวอร์ชั่นไหน​​​​​​​​​ ​​​​​​​​​หรือ​​​​​​​​​ software ​​​​​​​​​อะ​​​ไร​​​​​​​​​ ​​​​​​​​​มาตรฐานที่​​​ใช้​​​บริหารต่างๆ​​​จะ​​​มอง​​​กัน​​​ที่​​​​​​​​​ process ​​​​​​​​​เป็น​​​หลัก
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
​เรื่องของการบริหารโครงการคือเรื่องของคน​ ​ไม่มีใครบอกได้ว่าเราจะใช้คนให้เหมาะกับงานได้อย่างไร​ ​ขึ้นอยู่กับเราอ่านคนออกแบบไหน​ ​ก็มีหลายทฤษฏีพูดถึงเรื่องของการใช้คนไว้ว่า​ ​คนทุกคนล้วนมีความต้องการ​​ ​​การจะใช้คนเราจำต้องตอบสนองความต้องการของเค้าให้ได้​​ ​​แต่เมื่อคนได้ถึงความต้องการ​​ ​​ณ​​ ​​จุดหนึ่งก็ต้องมีความต้องการของตัวเองสูงขึ้น​​ ​​เช่นต้องการการยอมรับ​​ ​​ต้องการความเข้าใจ​ ​​ผู้บริหารต้องมองความต้องการของแต่ละคน​ ​และให้ในสิ่งที่เค้าต้องการในจุดที่เหมาะสม​​ ​​เช่นตำแหน่งหน้าที่​​ ​​ความมีเกียรติ​​ ​​และสุดท้ายคือให้ทำในสิ่งที่เค้าต้องการอยากจะทำ​​ ​​หรือให้เค้าเข้ามาเป็นส่วนหนึ่งของบริษัท​ ​เช่นแกรมมี่​

อีกทฤษฏีนึงบอก​​​​​​​ถึง​​​​​​​ความ​​​​​​​ต้อง​​​​​​​การของคน​​​​ ​​​​มี​​​​ 3 ​​​​อย่าง
  • achieve คือทำ​​​​​​​งานใฝ่สัมฤทธิ​ ​​​ทำ​​​​​​​งาน​​​​​​​ให้​​​​​​​มีผลงาน​​​​ ​​​​ทำ​​​​​​​งาน​​​​​​​แล้ว​​​​​​​มีคนยกย่องงานที่ทำ
  • power ​​​​คือทำ​​​​​​​งาน​​​​​​​แล้ว​​​​​​​อยาก​​​​​​​ได้​​​​​​​อำ​​​​​​​นาจ
  • affection ​​​​คือทำ​​​​​​​งาน​​​​​​​แล้ว​​​​​​​อยาก​​​​​​​ได้​​​​​​​ความ​​​​​​​รัก​​​​ ​​​​ความ​​​​​​​เข้า​​​​​​​ใจ​​​​ ​​​​จาก​​​​​​​เพื่อนร่วมงาน
ยัง​​​​​​​มีอีกหลายทฤษฏีที่บอก​​​​​​​ถึง​​​​​​​การ​​​​​​​ใช้​​​​​​​คน​​​​ ​​​​ดัง​​​​​​​นั้น​​​​​​​เป็น​​​​​​​เรื่องสำ​​​​​​​คัญที่​​​​​​​ต้อง​​​​​​​มองคน​​​​​​​ให้​​​​​​​ออก​​​​ ​​​​เพื่อ​​​​​​​ใช้​​​​​​​คน​​​​​​​ให้​​​​​​​เป็น​​​​​​​ให้​​​​​​​เหมาะ​​​​​​​กับ​​​​​​​แต่ละบุคคล​​​​ ​​

Plan – Do – Check – Act Cycle
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​วางแผน ​​​​​​ – ​​​​​​ทำ​​​​​​ – ​​​​​​ตรวจสอบ​​​​​​ – ​​​​​​แก้สิ่งที่ผิดแล้วเริ่มวางแผนใหม่เป็นวนซ้ำไปเรื่อยๆ เพื่อให้ปรับปรุงแผนงานไปเรื่อยๆ เพื่อความถูกต้องที่มากขึ้น (ใช้เวลาสั้นลง)


Project Management Process Groups
จริงๆ​​​​​​​​ ​​​​​​​​แล้ว​​​​​​​​​​​​​​​การบริหารจัดการ​​​​​​​​ process ​​​​​​​​ของโครงการก็​​​​​​​​​​​​​​​เหมือนๆ​​​​​​​​ ​​​​​​​​กัน​​​​​​​​​​​​​​​ที่​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​เริ่มต้นก่อนว่า​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​ได้​​​​​​​​ output ​​​​​​​​อะ​​​​​​​​​​​​​​​ไรออกมา​​​​​​​​ ​​​​​​​​จาก​​​​​​​​​​​​​​​นั้น​​​​​​​​​​​​​​​วางแผนก่อนที่​​​​​​​​ ​​​​​​​​ลงมือทำ​​​​​​​​ ​​​​​​​​ตรงนี้​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​วน​​​​​​​​​​​​​​​ซ้ำ​​​​​​​​​​​​​​​ไปเรื่อยๆ​​​​​​​​ ​​​​​​​​เพื่อ​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​ผลลัพธ์ที่ดีที่สุดออกมา

Process Groups Interact in a Project

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​แต่ละช่วงของ​​​​​​ process ​​​​​​ก็​​​​​​​จะ​​​​​​​มีงาน​​​​​​ ​​​​​​และ​​​​​​​เวลาที่​​​​​​​แตกต่าง​​​​​​​กัน​​​​​​ ​​​​​​ตามรูป​​​​​


Key Competencies of a Successful Project Manager
​​​​​​​​​​​​​​​​​​โครงการ​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ประสบ​​​​​​​​​​​​​ความ​​​​​​​​​​​​​สำ​​​​​​​​​​​​​เร็จ​​​​​​​​​​​​​ได้​​​​​​​​​​​​​นั้น​​​​​​​​​​​​​ PM ควรจะมีคุณสมบัติดังนี้
  • ​ มองการณ์​​​​​​​​​​​​​ไกล
  • ​เผชิญหน้า​​​​​​​​​​​​​กับ​​​​​​​​​​​​​อุปสรรค​​​​​​​ ​​​​​​​ซึ่ง​​​​​​​​​​​​​อาจ​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​สิ่งที่​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​
  • ​เคยเกิดขึ้นมาก่อน​​​​​​​ ​​​​​​​หรือ​​​​​​​​​​​​​เรื่องที่​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​คาดคิดมาก่อน
  • ​ ระบุ​​​​​​​​​​​​​เป้าหมาย​​​​​​​​​​​​​ให้​​​​​​​​​​​​​ชัดเจน​​​​​​​!!
  • ​ คิดสิ่ง​​​​​​​​​​​​​ใหม่ๆ​​​​​​​ ​​​​​​​และ​​​​​​​​​​​​​สร้างสรรค์
  • ​ ต้อง​​​​​​​​​​​​​แก้ปัญหาที่​​​​​​​​​​​​​เจอ​​​​​​​​​​​​​ได้
  • ​ คิดอย่าง​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​ระบบ​​​​​​​ ​​​​​​​และ​​​​​​​​​​​​​วางแผนจัดการทีม​​​​​​​​​​​​​ได้
  • ​พัฒนาทีม​​​​​​​​​​​​​ได้
  • ทำ​​​​​​​​​​​​​ให้​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​ไปตามเป้าหมายที่วาง​​​​​​​​​​​​​ไว้​​​​​​​​​​​​​เพื่อ​​​​​​​​​​​​​ให้​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​หลง
  • ​ มีมาตราฐาน
  • ​ รู้ว่า​​​​​​​​​​​​​ใครทำ​​​​​​​​​​​​​อะ​​​​​​​​​​​​​ไร​​​​​​​ ​​​​​​​แจกจ่ายงาน​​​​​​​​​​​​​ได้​​​​​​​​​​​​​ถูกคนถูกงาน
  • ​ เข้า​​​​​​​​​​​​​ใจสมาชิก​​​​​​​​​​​​​ใน​​​​​​​​​​​​​ทีมมี​​​​​​​​​​​​​ความ​​​​​​​​​​​​​สามารถ​​​​​​​​​​​​​แค่​​​​​​​​​​​​​ไหน
Proverb สุภาษิต
  • ​​​​​​​​​​ การเพิ่มคน​​​​​​​​​​​​​เข้า​​​​​​​​​​​​​ไป​​​​​​​​​​​​​ใน​​​​​​​ project ​​​​​​​ที่ช้า​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​ทำ​​​​​​​​​​​​​ให้​​​​​​​​​​​​​เร็ว​​​​​​​​​​​​​ขึ้น (เพราะต้องเสียเวลา train งานให้พนักงานใหม่อีก)
  • เงิน​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​ได้​​​​​​​​​​​​​แก้ปัญหาทุกอย่าง
  • ​​​​​​​เข้า​​​​​​​​​​​​​ใจกระบรวนการของ​​​​​​​ project ​​​​​​​รู้ว่าปัญหา​​​​​​​​​​​​​อยู่​​​​​​​​​​​​​ที่​​​​​​​ process ​​​​​​​ไหน
ของแถมๆ
Web application project management ลองเล่นกันดูนะเผื่อชอบ ใช้แล้วเป็นไงมาบอกกันบ้างนะ

Seam 2.0.2 GA ออกแล้ว !!

เราพึงประกาศออกไปว่า Seam 2.0.2 ถึงที่หมายแล้ว การออกมาในครั้งนี้ทำมีการทำ Bugfix มากกว่า 150 ตัวใน Seam 2 (ที่ออกไปในเดือนพฤศจิกายน) และถูกดาวโหลดไปมากกว่า 70,000 ตั้งแต่ออกมา Seam 2 ดูท่าทางมีแนวโน้มที่ดี

เอกสารที่ถูกพัฒนาและรวมรูปลักษณ์ที่ดี ความรู้สึกดี และเนื้อหาที่ใส่บทการทำงานกับ JBoss Tool ด้วยโดยทำให้ Tutorial นั้นเป็นสากลสำหรับ App ของคุณรวมถึงการใช่ Seam สำหรับหลายๆ Application Container ด้วย

หน้าแรกของ Seam Framework

หน้าดาวโหลด

Tuesday 13 May 2008

Determyne ออก Open Source J2EE Performance Monitoring Tool

Determyne Inc. ได้ประกาศเทคโนโลยี Open Source สำหรับการดูแลประสิทธิภาพสำหรับ J2EE Application ข้างใน Apps จะเป็นแบบ End to End transaction โดยระบบรายงานได้ว่ายังสามารถใช้งานได้หรือไม่อย่างอัตโนมัติ สำหรับ J2EE Apps.

ในความแตงต่างของจุดประสงค์ของการเก็บและแสดงผลสำหรับหลายๆ System Component ภายใน Apps ตัวนี้ให้ความสำคัญของการดูแล Applications จาก Transaction มากกว่า ด้วยการที่ไม่ต้อง Config เลยแม้แต่น้อยและค่าใช้จ่ายที่น้อยนิด แถมซ้ำ Apps ตัวนี้ยังมองการกินทรัพยากรและเวลา สำหรับแต่ละ Transaction ได้ไม่ว่าจะเป็นจาก HTTP , J2EE Container หรือ Database Layers ของโครงสร้างพื้นฐานของระบบ และยังสามารถวิเคราะห์เป็นจุดๆได้อีกด้วย โดยเจ้านี้เป็น Open Source อย่างสมบูรณ์และฟรีโดยอยู่ภายใต้ LGPL open source license.

ลิงค์ต่างๆ
Sourceforge project page :http://sourceforge.net/projects/insideapps
demo:http://76.191.185.136/iaconsole
papers :http://www.determyne.com/white_papers.html
datasheet:http://www.determyne.com/images/insideApps_datasheet.pdf
feedback:http://sourceforge.net/forum/?group_id=225534

สำหรับเนื้อหาเพิ่มเติมเชิญที่ http://www.determyne.com/

Thursday 8 May 2008

ประกาศจากทาง Oracle

เรายินดีที่จะประกาศว่าทาง Oracle นั้นได้รวบกิจการ BEA Systems, Inc. โดยสมบูรณ์แล้ว และตอนนี้ BEA ได้มาเสริมกำลังทัพของ Oracle ทั้งหมด ด้วยข่าวนี้ เราอยากจะพูดซ้ำถึงความรับผิดชอบของเราที่มีต่อคุณและลูกค้าของคุณ ในการลงทุนในสินค้า Oracle Fusion Middleware

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

ด้วยกันนี้ Oracle และ BEA ขอนำเสนอแผนที่สมบูรณ์ , โดยสิ่งที่ดีที่สุดในประวัติของ Middleware นั้นคือ Java Application Servers , Transaction Processing Monitors , SOA , Business Process Management , User Interaction and Web 2.0 , Identity Management , Business Intelligence และ Enterprise Content Management

เราได้สร้างช่องทางต่างๆสำหรับคุณและลูกค้าของคุณที่จะติดต่อสอบถามและนำเสนอผลตอบรับ คุณจะได้รับการเชิญเข้ารวม Webcast สำหรับลูกค้าและหุ้นส่วน Oracle และ BEA เราส่งเสริมให้คุณเข้าไปชม Oracle PartnerNetwork (OPN) ได้ที่ partner.oracle.com และดูการสื่อสารจาก OPN เพื่อที่จะรับรู้ข่าวสารปัจจุบันเกี่ยวกับการเพิ่มเติมโอกาสด้วย Oracle's Middleware และข้อเพิ่มเติมเราจะมีงาน Oracle OpenWorld ในช่วง 21-25 กันยายนนี้ที่ San Francisco , เราวางแผนที่จะนำเสนอ Oracle Fusion Middleware ในหลายๆช่วงนั้นรวมถึงเนื้อหาของ BEA ด้วย ต้องการข้อมูลเพิ่มเติมำสำหรับแผนที่เราได้รวมไว้ สามารถเข้าไปดู "คำถามที่ลูกค้าถามบ่อยๆ" ได้ที่ oracle.com/bea

ขอบคุณที่สนับสนุนตลอดมา จากรองประธาน Judson AlthoffGroup , Worldwide Alliances and ChannelsOracle

Wednesday 7 May 2008

SqlSheet 0.1.0 ค้นหาข้อมูลใน Excel ด้วย SQL

SqlSheet คือ JDBC Driver ซึ่งยอมให้คุณทำงานกับ Excel ด้วยภาษา SQL ได้โดยมีคุณสมบัติหลักๆดังนี้

  • Java ล้วนๆ (ไม่ต้องมี native component)
  • เร็ว (การทำงานเกิดขึ้นที่ spreadsheet โดยตรงไม่ต้องไปพึง memory ของ database)
  • คำสั่งอ่านและเขียน
  • สนับสนุน PreparedStatement

ตอนนี้ถ้าคุณต้องการจัดการกับ Spreadsheets เฉยๆแค่ใช้ Apache's POI มันเจ๋งมาก แต่ทำไม SqlSheet ถึงมีประโยชน์กว่า ? หลักๆแล้วการเข้าไปจัดการกับ Spreadsheets ภายใต้เครื่องมืออื่นๆนั้นจะใช้ database-oriented ดังนั้น SqlSheet จะจัดการให้คุณเพียงแค่คุณให้ URL ของ jdbc:xls แล้วก็ทำอะไรต่างๆที่คุณต้องการได้ทันที

สรุปก็คือถ้าต้องการส่ง Data จาก Excel ไปยังเครื่องมืออื่นๆที่ใช้ Database-Oriented แล้ว SqlSheet จะทำให้เรื่องพวกนี้เป็นเรื่องง่ายเพราะไม่ใช่เพียงแต่จัดการ Data ใน Excel ได้อย่างเดียวยังส่งข้อมูลเข้าไปยังเครื่องมือที่ใช้ Database-Oriented ได้อีกด้วย คุณสามารถ Download SqlSheet 0.1.0 ได้เลยครับ

Monday 5 May 2008

มองเชิงเปรียบเทียบ: การสร้างสะพานกับการบริหารจัดการ software

สวัสดีครับ​​ ​​หายไปนานมาก​​​กับ​​ blog ​​นี้​​​เหตุ​​​เพราะต้อง​​​ไปทำงานที่​​ไซต์ลูกค้าครับ​​​กับ​​​คุณ​​ Mr.Invert Prahs (ชื่อนี้มันพิมพ์ยากพิลึก​​​เพราะ​​​ผม​​​ต้อง​​​คิดมุมกลับทุกครั้งที่พิมพ์ชื่อนี้​​ 555) ​​ช่วงแรกก็ชิว ๆ​​ ​​แต่หลัง ๆ​​ ​​ระทึกครับ​​ ​​เปลี่ยน​​ requirement ​​กัน​​​แทบวันต่อวัน​​ ​​เอา​​​เป็น​​​ว่า​​​ไม่​​​พูดเรื่องงานดีกว่า​​​ เดี๋ยวคนที่​​​โน้นแอบ​​​เข้า​​​มาอ่าน​​ 555 ​​แต่สิ่งที่​​​ได้​​​เป็น​​​ประสบการณ์ต่าง ๆ​​ ​​ที่มีค่า​​​เป็น​​​การเปิดมุมมอง​​​อื่นๆ​​ ​ด้วย​​​ครับ​​

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ช่วงนี้กำ​ลังเปิดภาคเรียน "ป.โท" พอดี​ ​เลยคิดว่าอยากมา​แชร์อะ​ไรที่​อยู่​ใน​ห้องเรียนซักหน่อยหวังว่า​จะ​ไม่​เบื่อ​กัน​นะครับ​ ​เรา​จึง​จะ​เปิดตัว​ tag ​ใหม่​กัน​ด้วย​ [​lecture notes]​ ​ทักทาย​​​กัน​​​เล็ก​​​น้อยพอประมาณนะครับ​เข้า​เรื่อง​กัน​เลย

​​​​​​​​​​​​​​บท​ความ​แรกหลัง​จาก​หายไปนานผม​จะ​เขียนเรื่อง​ ​การบริหารจัดการ​ software ​ก็​เหมือน​กับ​การสร้างสะพาน
บางทีการพัฒนา​ software ​ก็​เหมือน​กับ​การที่​เรา​จะ​ต้อง​สร้างสะพานขึ้นมา​ ​เหมือนตรงที่​เรา​ไม่​รู้หรอกว่าข้างหน้า​จะ​ต้อง​เจอ​กับ​อะ​ไรบ้าง​ ​โดย​อาจารย์​จะ​มีกฏ​ให้​ดังนี้
​​​​​​​- ให้จับกลุ่ม กลุ่มละ 5 คนสุ่มจับ
- ​ให้​ 1 ​คน​เป็น​ลูกค้า​ ​โดย​เลือก​จาก​คนที่มีประสบการณ์การทำ​งานเยอะสุด​ ​(​จะ​คอยถาม​ถึง​ความ​คืบหน้า​เรื่อยๆ และตรวจสอบคุณภาพของงานที่ทำออกมา​)
- ​ให้​ 1 ​คน​ใน​กลุ่ม​เป็น​ PM ​เพื่อไปสรุปหน้าชั้น​ ​(​แล้ว​สุดท้ายลูกค้า​จะ​ไปสรุปปิดท้ายอีกที)
- model ​กระดาษที่​ใช้​ประกอบ​กัน​เป็น​สะพานที่​ยัง​ไม่​ตัด​ 4-5 ​แผ่น​
- ​กรรไกร​ ​และ​กาว​ ​อย่างละ​ 1 ​ต่อ​ 1 ​กลุ่ม
- ​ให้​แต่ละกลุ่มประ​เมินเวลาที่​จะ​ทำ​เสร็จ

จาก​นั้น​ก็ลงมือทำ​ครับ​ ​ถ้า​มองอย่าง​ไม่​คิดอะ​ไรนี่ก็​เกมส์ต่อโมเดลกระดาษสะพานสนุก ๆ​ ​อันนึงนี่​เอง​ ​แต่บรรยากาศทำ​ให้​ผม​ต้อง​คิดเปรียบเทียบ​ถึง​ขั้นตอนการพัฒนา​ software ​ตลอด​ ​และ​คิดเตรียมคำ​ตอบ​ให้​กับ​ user ​ตลอดเวลา​ ​แต่ละคนมีการแบ่งหน้าที่​กัน​อย่างชัดเจน​ ​แล้ว​ระหว่างที่​เริ่มลงมือทำ​ก็มีการสับคน​ใน​กลุ่มที่​ไม่​ใช่​ PM ​ออกไปแลกเปลี่ยน​กับ​อีกกลุ่มนึง​ ​(​ใน​กรณีสร้างสะพานนี้งาน​ไม่​ซับซ้อนมาก​จึง​สามารถ​เริ่มงานต่อ​จาก​คนก่อน​ได้​เลย​ ​แต่​ถ้า​งานซับซ้อนมากคง​ต้อง​เสียเวลา​ train ​งาน​กัน​อีกเยอะ) ​เวลาที่ทีมเราประ​เมิน​ไว้​คือ​ 20 ​นาที​ ​เพราะ​เราประ​เมิน​กัน​เอา​ไว้​ว่าช่วงเวลาตัดกระดาษ​ไม่​นาน​เท่า​ไหร่​ ​ที่นานคือตอนประกอบรวมคร่าวๆ​น่า​จะ​ซัก​ 10 ​นาที​ ​แต่​เรากำ​หนดเวลา​เกิน​ไว้​เล็ก​น้อย​เป็น​ 20 ​นาที​ ...

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​แต่พอทำเข้าจริงๆปรากฏว่าใช้เวลาไปถึง 32 นาที เพราะเวลาที่เสียไปนานที่จริงคือช่วงรอกาวแห้ง เพราะตอนที่ประกอบกันนั้น กระดาษที่ต่อไม่สามารถประกบกันกับอีกฝั่งได้พอดีมีความคลาดเคลื่อนกันเล็กน้อย ทำให้โครงสร้างยังอ่อนแออยู่จึงต้องค่อย ๆ ปรับกันทีละบล็อก (ซึ่งตอนที่ประเมินไม่ได้มองถึงจุดนี้อย่างละเอียดถี่ถ้วนดีนัก) จากนั้นได้มีการเสริมความแข็งแรงของสะพาน ก็เพิ่มกระดาษแผ่นยาวมาแปะกาวข้างใต้เพื่อยึดติดบล็อกทั้งหมดเข้าด้วยกัน (ส่วนนี้แก้ปัญหาเฉพาะหน้า) ระหว่างการสร้างสะพานคนที่ทำหน้าที่แต่ละส่วนจะทำงานในส่วนของตัวเองเร็วขึ้นด้วย (ความชำนาญมากขึ้น) และสิ่งที่ขาดไม่ได้คือความเป็นทีม ทำให้สะพานออกมาเสร็จสมบูรณ์ ^^ หลังจากทำเสร็จเรียบร้อยมีการทดสอบความแข็งแรงของสะพานกันเล็กน้อย - -'

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

สรุปหลัง​จาก​บทเรียนนี้
- ​การทำ​งานเราควรมีการแบ่งหน้าที่​กัน​อย่างชัดเจน​ ​เลือกคน​ให้​ถูกงาน​ด้วย
- ​ทีม​เป็น​สิ่งสำ​คัญที่สุด​ ​ฟัง​ความ​คิดเห็น​ใน​ทีม​ ​และ​ช่วย​กัน​อย่างเต็มที่​ (อย่าอู้งาน​ ​เดี๋ยวโดนแบน)
- ​เมื่อมีปัญหาที่​เกิดขึ้นเฉพาะหน้าขึ้น​ ​ต้อง​ใจเย็น​และ​มีสติ
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​- การทำในแต่ละส่วนเราควรตั้งใจและทำมันให้ดีที่สุด เพราะองค์ประกอบต่างๆล้วนแต่มีความสำคัญด้วยกันทั้งสิ้น และบางครั้งมันไม่มีโอกาสทำครั้งที่ 2 (เช่นตอนตัดกระดาษตัดพลาดไม่ได้เพราะไม่มีสำรอง)
- ​พยายามคิด​ถึง​เหตุการณ์ต่างๆ​ ​ที่มี​โอกาสเกิดขึ้น​ให้​มากที่สุด​ ​และ​เตรียมพร้อมรับ​กับ​เหตุการณ์ข้างหน้า​นั้น (อ่านเกมส์ให้ออก)
​​​​- ควรมีแผนสำรอง 1, 2, 3
​​- เข้าใจเรื่องการต่อโมเดลสะพานมากขึ้นเยอะ
​​​​​​​- ก่อนออกไปพูดสรุปหน้าชั้นเราควร list เฉพาะหัวข้อที่เป็น key จริงๆ

Security Testing ตอนที่ 2

ห่างหายไปจากตอนที่หนึ่งนานมากๆ เรามาพบกันในตอนที่สองเลยครับ

Broken Access Control

คือ การที่เราสามารถเข้าไปใช้สิทธิของผู้อื่นได้ โดยเพียงแค่รู้ url ของเค้า เช่น สมมุติเรา login โดยใช้ role user ซึ่งจะไม่เห็น link สำหรับสร้าง user แต่เราไปรู้ว่าใช้ url อะไรใจการเข้า module นั้น เราก็จะสามารถเข้าไปจัดการ user โดยใช้แค่ role user
วิธีทดสอบ
ให้เปิด IE 2 หน้าต่าง โดยหน้าต่างแรก login เป็น user ธรรมดา อีกหน้าต่างหนึ่ง login เป็น user ที่มีสิทธิสูงกว่าเช่น admin จากนั้น copy link ใน module ซึ่งมีใน admin แต่ไม่มีใน user มารันใน หน้าจอของ user ถ้าสามารถเข้าได้ แสดงว่าเกิด Broken Access control
วิธีแก้ไข
ควรจะเช็คสิทธิของผู้ใช้ในทุกหน้าจอ ไม่ใช่แค่ซ่อน url เอาไว้


Error Handling

ระบบต้องไม่เปิดเผยข้อมูล Technical Error Code ที่หน้าเว็บให้ client เห็นควรมีการดักจับ แล้ว แสดงเป็นข้อความเฉพาะที่จำเป็นเพื่อสื่อให้ผู้ใช้เข้าใจ
วิธีทดสอบ
ทดสอบทำให้เกิด error ขึ้นใน web application เพื่อดูว่าจะแสดงข้อความ error แบบใด
วิธีแก้ไข
1. ควรทำหน้า error กลางที่ดักจับ error แล้วแสดงเป็นข้อความที่ผู้ใช้เข้าใจ โดยไม่แสดง error code ใดๆ ที่หน้าจอ แต่อาจจะเขียนลงไฟล์แทน
2. สำหรับ .NET เมื่อนำขึ้น production ควรปิดข้อความ error โดยสร้าง page มารับ error แล้วแก้ web.config เป็นดังด้านล่าง

defaultRedirect= “[ชื่อerror page].aspx”/>



Web server configuration

ควรจะป้องกันเรื่อง Directory traversal คือ ไม่ควรให้สามารถเข้าเว็บไปยัง directory อื่นๆ ได้
วิธีทดสอบ
ทดลองเข้าเว็บโดยระบุ url จนถึงแค่ชื่อ directory ไม่ระบุชื่อไฟล์ web page หรือ ชื่อ action path เช่น แทนที่จะเข้า ด้วย url แบบนี้ http://www.test.com/document/index.html ก็เข้าโดยใช้ แบบนี้แทน http://www.test.com.document/ เพื่อดูว่าสามารถ browse ไฟล์ใน directory นั้นได้หรือเปล่า
วิธีแก้ไข
1. สำหรับ .NET นั้นใน IIS จะมี option ให้ set ได้ว่าจะให้ directory สามารถ browse ผ่านเว็บได้หรือไม่ ดังรูป ซึ่งเราไม่ควรติ๊กเลือกให้มัน สามารถ browse ได้
2. สำหรับ SunOne สามารถ Disable Directory browsing ได้โดยเข้าไปที่ Web Admin จากนั้นเลือก manage web ที่ต้องการ แล้วเลือก tab Virtual Server Class-> แล้วคลิ๊ก ปุ่ม Manage จากนั้นคลิ๊ก tab Content Mgmt->Document Preferences-> แล้วเลือก Directory Indexing เป็น None โดยต้องใส่ชื่อไฟล์ในช่อง “File to use for error response when indexing is none:” ด้วย

Encryption

- ระบบต้องเข้ารหัสข้อมูลที่เป็นความลับ เช่น รหัสผ่าน, Connection Strings และ ข้อมูลอยู่ในระดับ Confidential หรือ Secret
- Salted Hash Techniques – ถ้าต้องมีการส่งผ่าน password หรือข้อมูลสำคัญจากระบบหนึ่งไปยังอีกระบบหนึ่งนอกจากการ encrypt ข้อมูลแล้ว ควรเพิ่มอักขระพิเศษใส่เข้าไป โดยตกลงกันในตอนส่งและตอนรับ
วิธีทดสอบ
Password ใน database ต้องถูกเข้ารหัสในแบบที่อ่านไม่เข้าใจ
วิธีแก้ไข
- ควรเข้ารหัส password
- ใช้ salt hash techniques กับ password ที่ส่งผ่านข้ามระบบ

Sunday 4 May 2008

NetBeans IDE 6.1 ออกแล้ว !

NetBeans IDE 6.1 ออกมากับหลาย Features ใหม่ๆและการปรับปรุงหลายอย่างให้ดีขึ้นอย่าง เช่น Rich Javascript Editing features , สนับสนุนการใช้กับ Spring Web Framework , รวม MySQL ให้ใกล้ชิดยิ่งขึ้น และรวมถึงพัฒนาให้ดีขึ้นในการใช้งานร่วมกันของ Libraries ต่างๆระหว่าง Project ที่ต้องใช้งาน แล้วเราได้สนับสนุน Ruby/JRuby พร้อม Editor ตัวใหม่ , ตัดจัดการ Ruby Platform , Debug ได้เร็วสนับสนุนให้กับ JRuby และอื่นๆอีกมากมาย

จากความต้องการที่เป็นที่ต้องการ , Bean Pattern และ JSF CRUD ยุคใหม่ที่เราขาดหายไปใน version 6.0 ได้กลับมาแล้ว ในส่วนเพิ่มเติมการออก version ก่อนหน้านี้ของ Module ใหม่ๆอย่างเช่น ClearCase Support จะมาอยู่ในรูปแบบของ Plugin

การออกมาในครั้งนี้ยังพัฒนาประสิทธิภาพมากขึ้น โดยเฉพาะ Startup ที่เร็วขึ้น (มากถึง 40%) กิน Memory น้อยลงและการตอบสนองที่ดีขึ้นในการทำ Project ใหญ่ๆ สุดท้ายมาดู Feature เด่นๆที่เข้ามาใน Version นี้กัน

Feature เด่น :

  • สนับสนุน Javascript
    • Highlight คำต่างๆใน Javascript
    • การวิเคราะห์การพิมพ์และโค๊ดสำเร็จ
    • แก้ไขด่วนและตรวจสอบความหมาย
    • สนับสนุนการ Refactor
  • ประสิทธิภาพ
    • เร็วขึ้นถึง 40%
    • กิน memory น้อยลง
    • การทำ Code Completion เร็วขึ้น
  • สนับสนุนSpring Framework
    • นำ Spring Framework 2.5 library เข้ามา
    • มี Wizard สำหรับการแก้ไข XML configuration และ Spring Web MVC Controllers
    • Spring Web MVC Framework สนับสนุนใน Web Project
  • การหา Database ใน MySQL
    • ลงทะเบียน MySQL servers
    • ดู , สร้าง , ลบ database ได้
    • ง่ายที่จะเรียกเครื่องมือจัดการของ MySQL
  • สนับสนุน Java Beans
    • Bean Pattern ใน Navigator
    • สร้าง Bean Property ได้
    • BeanInfo Editor
  • ตัวสร้าง JSF CRUD
  • สนับสนุน Ruby / JRuby
  • Javadoc Code Completion
  • สนับสนุน Web API ที่โด่งดัง
    • สร้าง Mashup อย่างง่ายดาย
    • สนับสนุนลากวางใน POJO , Servlets , JSP และ RESTful web service และ NetBean IDE สร้างโค๊ดในการเข้าถึง Service ให้เอง
    • สนับสนุน Web API เช่น Google , Facebook , Yahoo , YouTube
  • สนับ Web Service แบบ RESTful
  • การทำ Sharing Project
  • มี Plugin ใหม่ๆ
    • ClearCase Version Control
    • สนับสนุน AXIS
    • สนับสนุน SOAP UI
    • สนับสนุน Hibernate Framework
  • Java Mobility

สามารถ Download NetBeans เวอร์ชั่น 6.1 Final กันได้เลยที่นี้ครับ Download

Friday 2 May 2008

JavaRebel 1.1 ออกแล้ว

Java 6 ออกแล้วสำหรับ Intel Macs 64 bit

ย้อนกลับไปเมื่อปี 2007 เมื่อ Apple ปล่อย Mac OS X 10.5 Leopard ออกมา มีเสียงวิพากษ์วิจารณ์มากมายเกี่ยวกับการขาดการสนับสนุน Java 6 โดย Leopard ถูกส่งไปด้วย Java version เก่าคือ Java 1.5 แล้ว 1.6 ได้ออกมาได้เกือบปีแล้วโดยทาง Sun ได้ออก Java 1.6 สำหรับ Linux และ Windows แต่ไม่ได้ทำสหรับ Mac OS X ตั้งแต่ Apple ยืนยันจะพัฒนา Java ในแบบของตัวเองให้สอดคล้องกับทาง Sun

แล้วตอนนี้ 6 เดือนให้หลัง , Mac Java Programmers สามารถปลื้มกับผลงานอันนี้ Apple ได้ออก Java 6 สำหรับ Leopard แต่เรารู้ดีว่ามันสามารถทำงานได้บน Intel 64 bit ของ Apple OS เท่านั้น ดังนั้นคนที่ใช้ Intel Macs หรือ PowerPC ก่อนหน้านี้จะไม่ได้รับประโยชน์ใดๆทั้งสิ้น ของการพัฒนาครั้งนี้ แม้แต่คุณมี G5 Quad ก็ไม่มี Java 6 สำหรับคุณ



Java สำหรับ Mac OS X 10.5 Update 1 ได้เพิ่ม Java SE 6 เวอร์ชั่น 1.6.0_05 ไปใน Mac แล้วการอัพเดตครั้งนี้จะไม่เป็นการทับกับการ Install J2SE 5.0 หรือเปลี่ยนแปลง version ของ Java


ปล. นั้นหมายความว่า Version ใหม่นี้ไม่ได้ออกจากทาง Sun แต่ออกโดยผลงานของชาว Mac Java Programmers นั้นเอง

Wednesday 30 April 2008

Apache CXF 2.1 ออกแล้วพร้อมกับสนับสนุน JAX-WS 2.1

พึงเข้าไปเป็น 1 ใน Project ของ Apache อย่างเต็มตัวได้ไม่นานออก Version ใหม่มาในทันทีโดย
Apache CXF คือ Open Source Services Framework ซึ่งจะช่วยในการเขียน Programming ผ่าน API อย่างเช่น Jax-ws โดยสามาถพูดคุยได้หลาย Protocal อย่างเช่น SOAP , XML / HTTP , RESTful HTTP หรือ COBRA และทำงานผ่านทาง HTTP , JMS หรือ JBI ได้. CXF ยังรวมคุณสมบัติต่างๆที่ยังถูกใช้งานในสิ่งที่ติดตามคือ

  • สนับสนุนมาตรฐาน Web Standard : CXF สนับสนุนมาตรฐานของ Web Service หลายอย่างเช่น SOAP , the WSI Basic Profile , WSDL , WS-Addressing , WS-Policy , WS-ReliableMessaging และ WS-Security
  • Frontends : CXF ยังสนับสนุนการทำ Frontend ด้วย programming model ต่างๆ. CXF สนับสนุน JAX-WS 2.1 แล้วด้วยยังมี Simple frontend ซึ่งรวมอยู่ในการสร้าง Client และ Endpoint โดยไม่ต้องใช้คำอธิบายมาสร้าง. CXF ยังสนับสนุนทั้ง Contract First Development กับ WDSL and Code First Development ที่เริ่มจาก Java
  • ความสะดวกในการใช้ : CXF ถูกออกแบบมาให้ใช้งานง่าย มี API แบบเรียบง่ายและเร็วในการสร้าง Service , Maven plug-ins จะทำให้การรวมระบบง่ายขึ้น , รองรับ JAX-WS API , สนับสนุน Spring 2.0 XML ที่จะทำการ Configuration และอื่นๆอีกมากมาย.

มีอะไรใหม่ใน CXF 2.1 :

  • รองรับ JAX-WS 2.1
  • สามารถพัฒนา JAX-RS 0.6 ได้แล้ว
  • รองรับ Javascript ที่เกิดขึ้นใหม่ - โดยพื้นฐาน SOAP สามารถมี javascript client ที่สร้างขึ้นอัตโนมัติจาก ?js URL. และยังมีคำสั่ง command line ด้วย.
  • ยึดรวม CORBA ด้วย Yoko - JAX-WS Clients/Servers สามารถคุยด้วย IIOP และยอมให้สื่อสารกับ CORBA processess อื่นๆ. โดยใช้เครื่องมือ IDL->WSDL , WSDL->IDL, และอื่นๆที่สนับสนุนมัน
  • ของใหม่ java2ws เครื่องมือที่ทำให้การทำ java first development ดีขึ้น
  • สนับสนุน xmlbeans runtime โดยยอมให้ใช้ XmlBeans เป็น data model.
  • Bug Fixes ไปอย่างมากมายทั้งด้านเติม Performance อื่นๆมากมายกว่าที่จะ List จากคนๆเดียวได้

สุดท้ายนี้ขอตบท้ายด้วยคุณสมบัติหลักอันใหม่ "Non-Code" :

  • อันนี้เป็นการเปิดตัวครั้งแรกหลังจากที่เราสำเร็จในการมาเป็นหนึ่งในอันดับตนๆของ Apache Project. และนี้คือการออกครั้งแรกที่ "ไม่ได้อยู่ภายใต้ระยะฟักตัว"

ท่านสามารถ Download CXF ได้จาก : http://cxf.apache.org/download.html

Sunday 27 April 2008

QuipuKit 1.4.3 กับการพัฒนาเย็บรอยต่อความเข้ากันได้กับ JBoss

QuipuKit 1.4.3 เป็น Component Library ทางการค้าสำหรับ JSF ในครั้งนี้ได้มีส่วนในการบำรุงรักษาในสิ่งที่เราได้รู้จากการปล่อย version ก่อนออกมา ที่มีปัญหากับการใช้ JBoss Seam's Link และปุ่มภายใน component ของ QuipuKit DataTable Component. การออกมาในครั้งนี้ยังแก้อีกหลาย bug และแก้ปัญหาอื่นๆที่เราได้รับจากลูกค้า. โดยปัญหาที่เราแก้ทั้งหมดดูได้จากหน้านี้

การพัฒนา :

  • DataTable กับ JBoss Seam: แก้ปัญหา JBoss Seam's Link กับ Component DataTable.

ปัญหาที่ถูกแก้ไข :

  • Calendar: icon กดไปเดือนถัดไปหายไปเวลาที่เรากำลังเลือกเดือนอยู่
  • TreeTable: Javascript Error ถ้าใช้ “bodyOddRowStyle”/“bodyOddRowClass” โดยไม่เรียงลำดับใน TreeTable ก่อน.การกรอง Drop-down list ของ "dropDownField" ที่ทำให้การจัดเรียงเพี้ยนไปในการเปิดครั้งแรกใน Firefox 2.0
  • DataTable:
    “bodyOddRowStyle” มีสิทธิ์เหนือกว่าเงื่อนไขของรูปแบบของแถว
    NullPointerException เมื่อ DataTable's ใช้ “rendered” ในการเปลี่ยนแปลง component อื่นจากการใช้ valueChangeListener
  • ปุ่มหมายเลขหน้า “go to last page” ไม่ทำงานในบางกรณี
  • HintLabel:
    ตำแหน่งของ HintLabel ไม่ถูกต้องใน Liferay 4.3.3 Portal.
    HintLabel ถูกแสดงผลไม่ถูกในต้องใน HTML table ของ Opera และ Liferay 4.2.2 Portal.
  • PopupLayer: หน้านั้นจะถูกเลื่อนได้ไม่มีวันจบเมื่อใช้ PopupLayer ถูกโชว์ใน Mozilla.
  • DateChooser: ค่าใน input field และใน calendar แตกต่างกันในบางกรณี
  • DateChooser/DropDownField: Popup การจัดเรียงเพี้ยนไปใน JBoss Portal และ Opera 9.
  • TwoListSelection: ValueChangeListener ถูกเรียกเมื่อ list ที่วางเปล่าถูก submit ไปในครั้งที่สอง
  • ความเข้ากันได้กับ JBoss Portal Server: ไม่มี teamdev.jsf.portlet.QuipuKitPortlet class ใน quipukit.jar
  • Validation: FloatingIconMessages อยู่ผิดตำแหน่งเมื่อใช้ใน Liferay Portal.

QuipuKit version ใหม่สามารถ download ได้ในหน้านี้เลยครับ

Sunday 20 April 2008

jOpenDocument : Java library สำหรับจัดการไฟล์ ODF

jOpenDocument เป็น Free Java libary ที่เอาไว้จัดการกับไฟล์ Open Document Format (ODF) โดยเหมาะสำหรับ Developer ที่จะใช้ ODF แต่ไม่อยากลง OpenOffice โดยสนับสนุนทั้งการสร้างและการจัดการข้อมูล โดยคุณสามารถนำ jOpenDocument ไปใช้ใน

  • สร้างเอกสารที่เป็นแบบ Dynamic จาก Java , XML หรือ Database
  • แสดงผลและพิมพ์ได้โดยมี Viewer(ตัวแสดงผล) มาในตัวเลย
  • แยก, รวม, จัดการหน้าต่างๆ
  • ใส่ Template ได้เองแบบอัตโนมัติ
  • ใช้ภาษาที่คุณต้องการเองได้ด้วย Interface มาตรฐาน ScriptEngine
  • และอื่นๆอีกมากมาย
เพึ่งเปิดตัว Version 1.0 ไป 18 เมษายน ค.ศ. 2008 ที่ผ่านมานี้เองด้วยโหลดไปใช้ได้เลยที่หน้านี้ครับ

GridGain 2.5: The Road Map (แผนกลยุทธ์)

เรากำลังเริ่มที่จะทำคุณสมบัติของเวอร์ชั่น 2.5 และมันจะเป็นรูปเป็นร่างมากขึ้นกว่าคราวก่อนที่เรามีใน GridGain 2.0 นี้คือรายการหลักๆที่จะมาเสริมใน GridGain 2.5

  • สนับสนุน Multi-SPI
  • เพิ่มตัวเชื่อมต่อ SPI ด้วย REST/JSON และ TCP
  • สามารถใส่ marshalling/demarshalling ได้
  • สนับสนุนการสื่อสารและการค้นพบให้ถูกทำไปในทางเดียวกับและการยกเลิก Grid
  • ยอมรับ SPI แบบ “ondemand”(ความต้องการแบบทันที) โดยรวมเข้ากับ Amazon EC2 ได้แบบไร้ที่ติ
  • Advanced monitoring (การสังเกตุแบบมือโปร) และ Management capabilities (การจัดการความสามารถ)
ตอนนี้คุณสามารถเอา GridGain 2.0.2 ไปใช้ได้ Link นี้เลย Download

Saturday 19 April 2008

Apache CXF อยู่ใน ASF Project อย่างเป็นทางการแล้ว

Apache CXF คือ open source services framework. CXF ช่วยสร้างและพัฒนา services โดยใช้ frontend programming APIs เช่น JAX-WS. โดย Service เหล่านี้สามารถพูดได้หลาย Protocals อย่างเช่น SOAP, XML/HTTP, RESTful HTTP หรือ CORBA และงานอีกหลายอย่างที่ทำงานผ่าน HTTP , JMS หรือ JBI.

กลุ่มประธานบอร์ด ASF พึงยอมรับการผ่านการมาตรฐานการศึกษาของ CXF ซึ่งหมายถึง Project นี้ถูกอนุญาติอย่างสมบูรณ์แบบจาก ASF (ซึ่งได้รับเงินมาลุยได้อย่างเต็มที่นั้นเอง)

ในการพัฒนาหลัก version ต่อไป (2.1) ใกล้จะเสร็จแล้วจะออกมาในเร็วๆนี้ โดยคุณสมบัติหลักๆของ 2.1 คือเป็น JAX-WS 2.1 โดยสมบูรณ์ (CXF 2.0 ใช้ JAX-WS 2.0) และสนับสนุน JAX-RS , CORBA รวมถึง javascript และอีกมากมาย ซึ่งผมไปดูคร่าวๆมาการใช้งานไม่ยากมาก แต่วิธีลงน่าจะไม่หมูซะทีเดียว

Thursday 17 April 2008

CSS ความสำคัญสำหรับทุก Browser

ในที่นี้ใครต่อใครหลายคนคงรู้จัก CSS(Cascading Style Sheets) กันมาบ้างแล้ว แต่สำหรับคนที่ไม่รู้ผมจะสรุปง่ายๆคือมันเป็นการปรับแต่ง หน้าตาของ Website ให้ดูดีมีโครงสร้าง ไม่ต้องมาดู HTML ที่เต็มไปด้วย attribute มากมาย แถมยังทำให้ website โหลดช้า ดังนั้นเลยเกิด CSS ขึ้นมาช่วย แต่วันนี้ผมจะมาพูดถึงปัญหาของมัน ซึ่งจริงๆไม่ใช่ความผิดของ HTML หรือ CSS เลยเป็นความผิดที่ Browser แต่ละอันมีมาตรฐานไม่เหมือนกัน เช่น Firefox , IE , Opera , Safari ดังนั้นเวลาเราทำ Web แบบ Default โดยไม่ค่อยได้กำหนดค่าอะไรมาก เช่น ไม่ได้กำหนด Font-size เป็น 14 , Font-family เป็น Tahoma

เวลาไปเปิดใน IE ก็แบบหนึ่ง Firefox ก็แบบหนึ่ง แล้วไหนจะเรื่อง Margin กับ Padding สำหรับคนที่ยังไม่รู้ลองไปศึกษาเพิ่มเติมนะครับ โดยเรื่อง Default นั้นเคยเป็นปัญหาโลกแตกของผมมาแล้วครับ วิธีแก้ทำให้ทุกๆ Browser อ่านเหมือนกัน ถ้าพูดเป็นภาษาไทยให้เข้าใจง่ายก็คือ "จงบอก อย่าให้เขาคิดเอง" เขาที่หมายถึงคือ Browser นั้นเองไม่งั้นมันจะคิดของมันไปเอง ดังนั้น มีวิธีบอกง่ายๆดังนี้

body {
margin-top:0px;
margin-left:0px;
font-size:14px;
font-family:Tahoma;
}

หมายถึงในส่วนของ body ทั้งหมดให้ margin-top , margin-left เป็น 0 แล้วบอกว่าให้มันใช้ font tahoma ที่มีขนาด 14px ซึ่งถ้าไม่ทำเวลาเราไปเปิดใน Browser มันจะแสดงผลต่างกัน หวังว่าบทความนี้จะพอเป็นแนวทางให้ท่านสร้าง Web Page ที่ Run ได้ทุก Browser นะครับโดยหลักการทำง่ายๆครับ "เริ่มจากรากฐานแล้วค่อยไปส่วนอื่น" ดังนั้นทำ Default ก่อนเป็นเรื่องสำคัญมาก


Thursday 10 April 2008

JRuby 1.1 ออกแล้วครับผม !!

JRuby 1.1 ออกแล้วครับด้วยการออกมาครั้งนี้เน้นไปในเรื่องประสิทธิภาำพล้วนๆ (Performance) ใน โน๊ตที่ออกมา พูดถึงการทำงานที่เร็วกว่า CRuby 1.8.6 และ CRuby 1.9 ในบางส่วนรวมถึงการ Compile เป็น Java bytecode ถูกแก้ไขหลายจุดสำหรัับความเข้ากันได้ , ทำการเขียน IO implementation ใหม่เพื่อให้เข้าใจได้ง่ายขึ้น และปรับปรุงประสิทธิภาพการกิน Memory ให้ดีขึ้น (ไม่ใช่มากขึ้นนะ)

ช่วงนี้ Java กำลังพัฒนาไปได้สวยรวมถึง Microsoft ก็ยังต้องพยายามซื้อ Yahoo ใ้ห้ได้เพื่อต่อกรกับ Google เมื่อหันหลังกลับมา Java ก็กำลังพัฒนาในทุกๆด้าน Microsoft จะทำอย่างไรเพื่อไม่ให้โดน Open-Source ช่วงชิงตลาดของตัวเองไป ?

Monday 7 April 2008

GridGain 2.0.2 ออกแล้วครับ !

ใน Version ใหม่นี้ได้มีการแก้ไข Bug ต่างๆแล้วก็ทำเอกสารการใช้งานให้ดีขึ้น หนึ่งในสิ่งที่พัฒนาไปคือการเปลี่ยนแลง P2P Class Loading ให้สนับสนุนกับการใช้ร่วมกับ Groovy/Grails เราได้รับเสียงตอบรับที่ดีอย่างไม่เป็นทางการจากลูกค้าของเรา

GridGain 2.0.2 อาจจะไม่ใช่ตัวสุดท้ายที่จะออกมา ก่อนที่เราจะออก GridGain 2.5 มาใน Summer นี้ ! ที่จะนำพา SPIs (ในที่นี้น่าจะหมายถึง Service Provider Interface)ใหม่ๆและ function ใหม่ๆเข้ามา ไป Download GridGain ตัวใหม่ได้เลยที่นี้

http://www.gridgain.org/downloads.html

Sunday 6 April 2008

JBoss Webservices 3.0.1 ออกแล้ว !

JBossWS 3.0.1 GA รวม Native 2.0.4 (มีการรองรับเต็มที่ื JAX-WS web services ซึ่งทำให้เกิดผล ), Metro 1.0.1 และ CXF 1.0.1 รวมเข้าไปด้วย

Native run อยู่บน jboss-5.0.0.Beta4, jboss-4.2.2 และ jboss-4.2.1. ทั้ง Metro และ CXF run อยู่บน jboss-5.0.0.Beta4 และ jboss-4.2.2.

JAXWS นำ Web Service EJB3 นำ EJB. ทำให้ Programming Model เข้าใจง่ายและมีการเพิ่ม functional ของมันแทนที่ JAX-RPC web service ตัวก่อน

Download และ Sample อยู่ที่นี้ :
http://labs.jboss.com/jbossws/downloads/

วิธีการ Install :
http://jbws.dyndns.org/mediawiki/index.php/Main_Page

แนะนำการใช้งาน :
http://jbws.dyndns.org/mediawiki/index.php/Quick_Start
http://jbws.dyndns.org/mediawiki/index.php/JAX-WS_User_Guide

ถ้าคุณไม่รู้จักมันมาก่อนคุณจะ Surprise กับการทำ Web Service ได้ง่าย

WSO2 ออก Web Service Framework สำหรับ Spring

WSO2 ได้ประกาศเปิดตัว WSO2 Web Service Framework for Spring 1.0 ซึ่งรวม Apache AXIS2 เข้าไปยัง Spring ด้วย Code ตัวนี้ Developer สามารถทำได้ทั้ง เขียน Code ก่อน (Code-First) หรือสรุปก่อน (contract-first) ในการพัฒนา Web Service (โดย Spring ได้ให้ึความสำคัญกับการสรุปก่อน)

WSO2 Web Services Framework for Spring 1.0 ถูกออกมาภายใต้ Apache License 2.0 และมันมีพื้นฐานบนตัว Open Source Apache Axis2/Java Web Services engine ที่จัดหาให้สำหรับ developers แล้วก็ถูก test เรียบร้อยแล้วพร้อมใช้สำหรับงานสำหรับ ฎnterprise-class Web services นั้นพร้อมใช้. โดยมีจุนเด่นหลักๆใน WSF/Spring 1.0 คือ

  • สนับสนุนการทำ WS-* จำนวนมากรวมถึงการ WS-Addressing,WS-Policy,WS-Security,WS-SecurityPolicy,WS-ReliableMessaging,WS-Eventing, และ SOAP Message Transmission Optimization Mechanism (MTOM).
  • สนับสนุน Inversion of Control (IOC) container – WSF/Spring สามารถรับ Spring service เปิดเผยให้ IOC container. เพิ่มเติม, มันสนับสนุนการแก้ไข Axis2 ในระหว่างที่ boot อยู่ได้ด้วยการ config ผ่าน IOC Container
  • ทำการสร้าง WSDL อัตโนมัติผ่าน Axis2/Java code โดย Tool จะทำหน้าที่สร้าง code ทั้ง WSDL 1.1 and WSDL 2.0. Data binding มีอยู่เรียกว่า Axis Data Binding (ADB).
  • สนับสนุน Querying service – WSF/Spring สนับสนุน querying service’s WSDL ด้วย "?wsdl", schema ด้วย "?xsd", และนโยบายด้วย "?policy".
  • Method ออกมาใน Spring beans – WSF/Spring ยอมให้ developers ควบคุมความละเอียดผ่านทาง methods ที่ถูกแยกออกมาในสถานะ Web service operations.
มันไม่มีมูลค่าสำหรับ Grails ในการใช้สิ่งนี้ในการจัดทำ web services สร้องคลองกับความเห็นของ Graeme Rocher.

Wednesday 2 April 2008

ออกแล้ว Vintela Single Sign-On for Java version 3.3

Vintela Single Sign-On for Java (VSJ) คือ Component ที่จัดมาสำหรับรวมในการยืนยันตัวตนใน Windows และการทำ Microsoft Active Directory ที่เป็น Single Sign-On สำหรับ Java SE และ Java EE platforms.

VSJ ประกอบด้วย :

  • การ Implement Java ด้วย Kerberos , GSSAPI และ SPNEGO ที่รวมฝั่งลึกลงไปใน Microsoft's Active Directory , รวมถึงการสนับสนุน Cross Domain และ Cross Forest Authentication และ Active Directory sites สำหรับความซ้ำซ้อนและย่อขยายได้
  • Java based command line สำหรับการสร้าง Java Kerberos และ Single Sign-On applications รวมทั้งการ Integrated เข้าด้วยกัน
  • สนับสนุน Microsoft ADFS (Active Directory Federation Services)
ความสามารถใหม่ๆใน Version นี้
  • เพิ่มประสิทธิภาพในการ Config VSJ Kerberos service เพื่อที่จะได้ Setup ได้ง่ายขึ้น
  • สนับสนุน Windows Server 2008 Active Directory domain controllers และ Kerberos AES encryption types (การเข้ารหัสแบบหนึ่ง)
  • สนับสนุนและมีตัวอย่างสำหรับการบังคับให้มีตัวแทน (S4U2Proxy) และการส่งผ่าน Protocol (S4U2Self).
Download the Evaluation

More Information / VSJ Webpage

แปลมาจาก TheServerSide.com

Friday 28 March 2008

iText จะจัดการ PDF ด้วย Java ง่ายๆนี้ไง

iText เป็น library สำหรับสร้าง PDF โดยจุดประสงค์จริงๆของ iText คือการที่ทำให้ Developer ที่พัฒนา Web Application หรือ application ต่างๆนั้นได้สร้าง file PDF ในรูปแบบ Dynamic ซึ่งทำให้การปรับเปลี่ยนแก้ไข เป็นได้ง่ายขึ้น iText ไม่ใช่สำหรับ end-user แล้วคงไม่ได้เอาไว้ใช้บน Desktop เพราะใช้ Arcrobat ซึ่งง่ายกว่าแต่กระนั้นการใช้ iText จะทำเกิดการ update file PDF นั้นอย่างอัตโนมัติได้โดยที่เราไม่ต้องแก้ไขเองเลยก็ทำได้ โดยเราสามารถใช้ iText ทำได้ดังนี้

  • ส่ง PDF ขึ้น Web Browser ได้
  • สร้าง Dynamic Content จาก XML หรือ Database
  • ใช้ PDF กับ Feature ต่างๆได้มากมาย
  • เพิ่ม bookmarks , เลขหน้า , ลายน้ำ etc. ได้
  • แยก , รวม , จัดการ หน้า PDF ได้
  • จัดการเติม PDF Form ได้
  • ทำ Digital Signature กับ PDF ได้
  • และอื่นๆ
iText นั้นยังมี Tutorial ที่ดูแล้วเข้าใจง่ายลองไปดูกันเลยที่นี้ http://itextdocs.lowagie.com/tutorial/ สำหรับคนใช้ JAVA โดยเฉพาะลองไปใช้ดูกันนะครับ

Download Page

Monday 10 March 2008

Security Testing ตอนที่ 1

Security Testing(ตอนที่ 1)

สวัสดีครับผม Mr. Invert prahs กลับมาเขียน blog แล้วครับหลังจากที่หายหน้าหายตาไปกันตั้งนานเพราะว่าไปลง Project กับคุณ tofu เลยไม่มีเวลาว่างมาเขียน blog (ปล. จริงๆก็อู้ด้วยส่วนหนึ่ง) แต่เชื่อแล้วจริงๆว่าถ้าคิดจะเขียน blog ก็เหมือนมีลูกจริงๆ เพราะว่าต้องค่อยป้อนบทความใหม่ๆเข้ามาเรื่อยๆ เหมือนมีห่วงผูกคอ เอาหละเริ่มออกทะเลไปไกลแล้วมาเข้าเรื่องกันดีกว่า ซึ่งอย่างที่ผมบอกไปว่าได้ไปลง project จริงๆจังๆกับคุณ tofu ซึ่งถือเป็น project แรกของผมกับคุณ tofu ทำให้ผมผู้ซึ่งเป็นเด็กจบใหม่ (จากปีที่แล้ว) ได้เห็นมุมมองเกี่ยวกับด้านการทำ Web Application ที่กว้างขึ้นและได้เรียนรู้หลายๆสิ่งหลายๆอย่างมากมายซึ่งถ้ามีเวลาว่างๆจะมานั่งเขียน blog มาเล่าให้ฟังว่าป็นยังไง ซึ่งเรื่องแรกที่ผมจะนำมาเล่าก็คือ Security Testing ผมเองก็เพิ่งจะรู้ว่าเวลาเขียน Web Application เกี่ยวกับเงินๆทองๆนี่มันยุ่งยากมันจุกจิกอย่างนี้นี่เอง
ในการทดสอบ Application ที่เราพัฒนานั้นนอกจากเราจะต้องทำการทดสอบ bug ของ Application แล้ว ถ้าหาก Application นั้นมีส่วนที่เกี่ยวข้องกับระบบการเงิน เราอาจจะต้องมีการทดสอบด้าน security ด้วยซึ่งการทดสอบ security นี้ไม่ว่าจะเป็น Windows Application (หรือบางคนจะเรียกว่า Desktop Application) หรือ Web Application นั้นจะมีลักษณะการทดสอบที่คล้ายๆกันเพียงการทดสอบ Web Application นั้นอาจจะมีเรื่องที่ยุ่งยากหรือจุกจิกกว่ากันเยอะ ซึ่งการทดสอบหลักๆจะแบ่งออกเป็น 7 หัวข้อหลักๆดังนี้

URL & Parameter Manipulation

เป็นการ check ว่าในการส่ง parameter แบบ get ที่ส่งผ่าน URL หรือส่งผ่าน Hidden field นั้นมีข้อมูลที่สำคัญส่งมากับ URL parameter หรือไม่เพราะว่าอาจจะเป็นจุดบอดที่สามารถให้บรรดาเหล่า Hacker นั้นใช่จุดบอดเหล่านี้สาวเข้าไปถึงข้อมูลสำคัญของเราได้
ซึ่งถ้าหากว่าจำเป็นจริงๆที่จะต้องทำการส่งผ่าน URL parameter หรือ hidden field จริงๆก็ควรที่จะทำการ encrypt ข้อมูลที่ส่งผ่าน URL parameter หรือ hidden field เพื่อเพิ่มความปลอดภัยแต่ว่าถ้าเลี่ยงได้ก็ควรไปใช้ Session ในการเก็บข้อมูลเหล่านี้แทน
ข้อแนะนำเกี่ยวกับการ encrypt data เนื่องจาก algorithm ในการ encrypt data มีมากมายก็จริงแต่ algorithm ส่วนใหญ่มักจะมีคนแก้ได้แล้วเป็นส่วนมากดังนั้นในการหา algorithm encrypt data มาใช้ในงานที่ serious จริงๆ ควรที่จะหา encrypt data ที่มี salted hash techniques โดยสามารถเพิ่มความปลอดภัยของข้อมูลได้มากขึ้นเป็นร้อยเป็นพันเท่าครับ โดยการใส่ keyword เข้าไปผสมลงใน data ก่อนจะผ่านกรรมวิธีการ encrypt data เพื่อให้แก้ไขได้ยากยิ่งขึ้นซึ่งเราเรียก keyword ที่เราไปผสม data นี้ว่า salt (ซึ่งเป็นตัวเดียวกันกับคำว่า เกลือ ครับ ก็เหมือนเวลาที่เรากินอาหารแล้วอยากให้อาหารอร่อยขึ้นเราก็เหยาะเกลือลงไป แต่ในที่นี้เพื่อที่จะทำให้การถอด data ยากขึ้น) โดยถ้าสนใจอยากลองเล่นก็ลองไปดูตัวอย่างและวิธีการในเวบนี้ครับ http://www.securitydocs.com/library/3439 หรือถ้าต้องการดูอย่างมุมมองกว้างๆก็แนะนำเวบนี้เลย http://www.developerfusion.co.uk/show/4679/1/%20
หรือจะเป็นอีกวิธีคือเก็บข้อมูลที่เป็น URL Parameter ทั้งหมดลงไปใน hidden field ทั้งหมดจากนั้นก็ใส่ script ป้องกันการ view source ลงไปในหน้า page นั้น (เช่นที่เราเห็นกันบ่อยคือกันห้าม click ขวา) เพื่อป้องกันการรู้ชื่อ parameter ของ hidden field ในหน้านั้นๆ แต่ขอบอกว่าวิธีนี้ไม่ค่อยจะใช้ได้ผลสักเท่าไร เพราะว่าถ้าหากผู้ใช้ไปปิดความสามารถในการ run javascript ที่ browser แล้วก็ไม่สามารถกันได้อยู่ดี และ script ส่วนใหญ่จะไม่รองรับทุก browser ด้วยครับคือบางครั้งกัน IE กับ firefox ได้แต่อาจจะกัน Opera ไม่ได้ถ้าคนเขียนไม่ได้เขียนรองรับทุก OS

สรุป ถ้าจะกันปัญหาทางด้าน URL & Parameter Manipulation มีสองวิธีที่แก้ได้แน่นอนคือ เก็บข้อมูลที่เป็นความลับใส่ session หรืออีกวิธีก็ทำการ encrypt data เพื่อป้องกันไม่ให้แก้ข้อมูลออกได้ง่ายๆ

SQL Injection

เป็นการใส่คำสั่ง sql เพื่อรันให้ทำงาน โดยกรอกเข้าไปในช่องของ text box เพื่อทำอะไรบางอย่าง เช่น สามารถ login เข้าไป, หรือ รันคำสั่งเพื่อ drop table เป็นต้น ปัญหาแบบนี้จะเจอบ่อยครับในกรณีที่ programmer เขียน SQL ที่ใช้ใน program แบบไม่ได้ดักจับ escape characters บางตัว เช่น double quote (“), single quote (‘) เป็นต้น ซึ่งการที่เราไม่ได้ดักจับหรือจัดการ escape characters นั้นอาจจะทำให้เกิดผลดังตัวอย่างด้านล่างดังนี้

String sql = “select * from user where password = ‘” + password + ”’ ”;

ซึ่ง variable ที่ชื่อว่า password นั้นเป็นตัวรับค่าข้อมูลมาจาก user สมมติว่า user คนนั้นกรอกค่าลงไปดังนี้

Pwd12345’ or ‘1’=’1

ซึ่งหากลองแทน variable password ลงใน variable sql ดูผลที่ได้ก็จะเป็นดังนี้

select * from user where password = ‘Pwd12345’ or ‘1’=’1’

ซึ่งถึงแม้ว่า password จะผิดแต่ว่า user ก็สามารถ login เข้าไปเพราะว่า or ‘1’=’1’ มันเป็นจริงเสมอนอกจาก SQL Injection จะเกิดขึ้นกับคำสั่ง SQL แล้วบางครั้งการเรียกใช้ store procedure ก็เกิด SQL Injection เหมือนกันถ้าหากว่าไม่ได้ระมัดระวังเรื่อง escape characters

วิธีป้องกัน ในบาง DB นั้นมี security ที่รองรับการป้องกัน SQL Injection อยู่แล้วเช่น MySQL ที่เพิ่งเริ่มมีใน version 5.0 โดยต้องใช้ method ชื่อ real_escape_chars() เพื่อช่วยในการจัดการเกี่ยวกับ escape characters หรือในบางภาษาก็มีการจัดการ escape characters ใน SQL ให้เรา เช่น ภาษา Java ซึ่งในภาษา Java นั้นก็จะมี Prepare Statement ที่ช่วยจัดการในเรื่องของการทำ Query แต่สำหรับภาษาไหนหรือ DB ตัวไหนที่ไม่ได้รองรับการป้องกัน SQL Injection ก็ควรที่จะต้องเขียน program ในส่วนที่จัดการ escape characters กันเอาเองซึ่งผมก็มีตัวอย่าง code ของ Java มาให้ดู

http://pastebin.com/f30a7a3be

ที่ผมให้ตัวอย่างมาให้ที่เป็นในกรณีของ Java นั้นไม่ได้หมายความว่าให้ใช้ตัวนี้แทน prepare statement นะครับยกตัวอย่างเพื่อเป็นแนวทางการเขียนเพื่อนำไปดัก Escape Characters ในภาษาอื่นครับ แต่ว่าการดัก Escape Characters นั้นส่วนใหญ่จะดักกันตรงที่เครื่องหมาย double quote (“), single quote (‘) และ semicolon (;) มากกว่าครับส่วนที่เหลือถ้าอยากจะดักเพิ่มก็แล้วแต่ความเหมาะสมครับ เช่น ใน MS SQL นั้นมี “--” แทน comment ซึ่งเราควรที่จะดักเพิ่ม เป็นต้น ซึ่งนอกจากวิธีที่ผมได้กล่าวมาแล้วนั้นยังมี trick เล็กๆน้อยๆอีกครับ คือการกำหนดสิทธิ user ให้มี role ตามที่ได้ใช้จริงๆเท่านั้นเพื่อป้องกันว่า เช่น บางครั้งการเขียน program เราอาจจะฝั่ง business process ใน store procedure ของฝั่ง DB ก็ได้ ซึ่งบางทีใน store procedure นั้นอาจจะมี business process ที่ต้องไปรัน command ของ OS ได้ ดังนั้น store procedure นั้นควรที่จะมอบสิทธิให้กับ user ที่ใช้จริงๆเท่านั้น เพราะว่าในตอนทดลองเราอาจจะขี้เกียจมานั่งกำหนดสิทธิให้สิทธิทุกอย่างหมดเลย ดังนั้นก่อนนำเข้าสู้ระบบนำไปใช้จริงก็อย่าลืมกำหนดสิทธิใหม่ด้วยครับ
ปล. Code ด้านบนนั้นที่จริงใช้ Regular Expression น่าจะดีกว่าครับในการตรวจจับแต่ว่าผมไม่เคยลองเล่น Regular Expression ของ Java ซักทีเคยเล่นแต่ javascript ครับใครที่เคยเล่นแล้วช่วยแนะนำผ่าน comment ได้ครับ

Cross-site scripting (XSS)

เป็นใส่ script บางอย่างเข้าไปในเว็บ เช่น อาจจะใส่ javascript เข้าไปในช่อง text box ดังนี้ <script>alert(“Hello World -Popup”)</script> เพื่อสร้าง popup window แต่ว่าบางครั้ง hacker อาจจะนำ script บางอย่างเข้าไปเพื่อหวังผลบางอย่าง เช่น ดึงข้อมูล cookie ออกมาจาก client site โดยใช้ javascript, vbscript หรือภาษา script อื่นๆ

วิธีแก้ไข ใช้วิธีการ Convert HTML Tags ซึ่งผู้ที่กรอกเข้ามาถ้าหากมีส่วนหนึ่งส่วนใดให้แปลงตามรูปแบบในตารางด้านล่างนี้ก่อนค่อยนำเข้า database



ซึ่งวิธีนี้ข้อเสียเราต้องมานั่งเขียน program เพื่อแปลง code เองซึ่งค่อยข้างจะยุ่งยากนิดนึงแต่ก็อาจมีทางเลือกอีกในการกัน XSS คือใช้ Lightweight Markup Language หลายคนคงงงอาจจะยังไม่รู้แต่ถ้าผมบอกว่าตัวอย่างของ Lightweight Markup Language (LML) ที่เราได้เห็นนั้นก็คือ BB code นั้นเองซึ่งของ Java นี้ที่ผมลองหาดูก็ไปเจอตัวนี้เข้า PLink Textile ครับ น่าสนใจดีลองไปดูตัวอย่างตาม url นี้ครับ http://hobix.com/textile/ แต่วิธีนี้ค่อนข้างที่จะยุ่งยากครับเหมาะสำหรับช่องที่มีการกรอกข้อมูลยาวๆอย่างเช่นกระทู้ใน webboard ครับ แต่วิธีแก้ง่ายๆที่แนะนำคือ ให้ใช้ JSTL แทน JSP scriptlets เข้ามาช่วยในการแสดงผลลงในหน้า web คือใช้ <c:out> แทน <%= %> ครับเพราะว่าจะกันไว้ให้อยู่แล้วครับ Code Convert HTML Tags (ไว้เป็นแนวทางสำหรับภาษาอื่นครับแต่ว่ามันเป็น source ของ java นะครับ ที่ผมลองเขียนเอง) เข้าไปโหลดได้ที่นี่ครับ

http://pastebin.com/f7249386c

จากตัวอย่าง Code ด้านบนนั้นที่จริงใน Apache นั้นมี Opensource ที่รองรับ Convert HTML Tags อยู่ครับชื่อว่า class StringEscapeUtils อยู่ใน package Apache Commons ครับ http://commons.apache.org/lang/api/org/apache/commons/lang/StringEscapeUtils.html

ซึ่งจะทำให้เราไม่ต้องมาเขียน code ให้เหนื่อย (อันที่จริงผมลองค้นหาใน apache commons แล้วนะแต่ว่าตอนแรกไม่เจอเลยต้องมานั่งเขียนเองเพิ่งมาเจอที่หลัง) โดยใช้ method escapeHtml() มันก็จะจัดการให้เราโดยที่เราไม่ต้องไปเขียน code เองแล้วก็อย่างที่บอกไปด้านบนครับมันมี method escapeSql() ที่ไว้ใช้แก้ SQL Injection ด้วย เหอะๆๆ เพิ่งไปเจอครับตอนแรกที่ผมลองค้นดูนึกว่ามันแยกเป็น class แต่ว่าที่จริงมันเอาไปรวมอยู่ใน class เดียวกันแล้วแบ่งแยกเป็น method ครับ