Friday, 31 July 2009

เราจะย้ายไปที่ Blog.Oracle.in.Th(ai)

ช่วงหลายเดือนที่ผ่านมา มีข่าวใหญ่ในวงการ IT คือเรื่องการควบรวมกิจการระหว่าง Oracle กับ Sun
ถึงแม้ปัจจุบันรายละเอียดขั้นตอนในเชิงลึกยังไม่เรียบร้อยดีก็ตาม แต่ deal นี้คงไม่มีข้อผิดพลาดอะไรอีกแล้ว

Sun เป็นผู้ให้กำเนิด Java Platform ซึ่งเป็นส่วนหนึ่งที่ Blog แห่งนี้ให้ความสำคัญ
แต่ถัดจากนี้ไป Java Platform ก็จะถือเป็นส่วนหนึ่งของ Oracle จะถือเป็นอีกหนึ่งภาษาที่ Oracle มีอยู่ในครอบครอง นอกเหนือจาก PL/SQL ที่ Oracle สร้างมาเองกับมือ

ดังนั้น Blog นี้ ที่เคยให้ชื่อว่า Oracle and Java Blog ก็คงจะกลายเป็นเพียงแค่ Oracle Blog เท่านั้น
เพราะนิยามชื่อ Oracle ก็จะรวมถึงทุกอย่างภายใต้อาณาจักรของ Oracle, รวมถึง Java Platform ด้วย

ในที่สุดจากชื่อ Blog ที่จะเปลี่ยนไปเหลือเพียงแค่ Oracle Blog, ในเมื่อมีการเปลี่ยนแปลงทั้งที
ดังนั้นทีมงานของ Blog แห่งนี้จึงต้องการปรับเปลี่ยนโครงสร้างหลาย ๆ อย่าง

การปรับเปลี่ยนที่สำคัญอีกอย่างที่จะตามมาก็คือ เราจะย้าย URL จาก http://blog.middleware.co.th ไปเป็น http://oracle.in.th เพื่อให้เห็น scope ที่ชัดเจน ในสิ่งที่เราสนใจ

ถัดจากนี้ไป contents ใหม่ ๆ เราจะ update ที่ http://oracle.in.th
ส่วน contents เก่า ๆ ที่ดี ๆ เราจะค่อย ๆ ทยอยย้ายไป

ขอให้ผู้ที่ติดตาม Blog นี้ ตามเราไปยังที่ http://oracle.in.th เพื่อดูความเปลี่ยนแปลงถัดจากนี้ไปครับ

Thursday, 25 June 2009

Apache Ant



Apache Ant เป็น project opensource ของ Apache ที่จะช่วยให้ในการ build ในการ compile และทำให้งานของ programmer นั้นง่ายมากขึ้น ซึ่งใน project ในระดับ enterprise ของ java มักจะใช้ ant ช่วยในการ build ยัน deploy และใน IDE Java แทบทุกตัวของ Java ก็ใช้ Apache ant ในการ build, compile, หรือ pack เป็น archive file ซึ่งผมจะเกริ่นเครื่องของ ant คร่าวๆดังดังนี้ครับ

การจะใช้ Apache Ant ได้ต้องติดตั้งดังนี้ครับ

  • Apache Ant : load here

  • Java RE(แนะนำติดเป็น SDK ไปเลย) 1.4 ขึ้นไป


การติดตั้ง java นั้นขอข้ามไปเลยมาพูดเรื่องติดตั้ง apache ant กันเลย ก่อนอื่นนำ apache ant ที่เราโหลดมานำมา extract มาวางไว้ที่ไหนก็ได้แต่ถ้าจะให้สะดวกให้มาวางไว้ที่ drive C: จากนั้นก็ต้อง set environemnt variable ครับ ใน windows ลองตาม link นี้ไปดูครับว่าตั้งยังไงโดยที่สำคัญที่ต้อง set มีสองค่าครับ

  • set ANT_HOME=C:\apache-ant-1.7.0

  • set PATH=%PATH%;%ANT_HOME%\bin;.;


จากนั้นเราลอง test ดูว่าที่เราติด ant ลงไปนั้นสำเร็จมั้ยด้วยคำสั่งนี้

  • ant -version


ถ้าผ่านได้ก็จะได้ผลลัพธ์ออกมาดังนี้

  • Apache Ant version 1.7.0 compiled on December 13 2006


จากนั้นเราลองมาดูกันว่าการจะใช้ ant จริงนั้นต้องมีองค์ประกอบอะไรบ้าง

  • build.xml


build.xml เป็น file ที่เป็นตัว config ว่าจะให้ ant ของเราทำอะไรบ้างเช่น build project, compile, บลา ........ ซึ่งที่ต้องละว่าบลาๆๆๆๆ นั้นเพราะว่า ant นั้นทำได้หลายอย่าง นอกจากจะใช้กับภาษา java ได้แล้วยังต่อ database ต่อ mail เพื่อไปทำอะไรบางอย่างก็ได้ และยังไปทำงานกับภาษาอื่นได้ด้วยเช่น ruby, jython หรือแม้แต่กระทั้ง javascript ต่อมาเรามาดูโครงสร้างของ xml ใน build.xml กันดีกว่าว่าเป็นยังไง โดยปกติแล้วใน build.xml โดยปกติแล้วจะมีหน้าตาแบบนี้
<project name="MyFirstAnt" default="greet">
<property name="name" value="John" />
<target name="greet">
<echo>hello everybody</echo>
<echo>my name is ${name}</echo>
</target>
<target name="bye" depends="greet">
<echo>bye ${name}</echo>
</target>
</project>

จาก code ด้านบนอาจจะงงแต่จะขออธิบายโครงสร้างหลักๆของ ant ดังนี้ ใน build.xml 1 อันจะมี project อยู่ 1 project โดยที่ภายใน project นั้นมี target ได้หลายๆ target และในแต่ละ target ก็จะมี task อยู่ และสามารถมี task ได้หลาย task โดยที่บางครั้งเราอาจจะมีค่าบางค่าที่ใช้หลายๆที่ เราก็จะประกาศเป็น property เพื่ออ้างถึงในหลายๆส่วน ตามรูปด้านล่าง




  • target : โดย target นี้เรามองเป็นเหมือนเป็น procedure ที่ด้านในจะประกอบไปด้วยงานย่อย (task) ที่มาร้อยเรียงกันกลายกันเป็น procedure

  • task : คือการทำงานใดการทำงานหนึ่งที่มีลักษณะเป็นงานย่อยๆ ที่สามารถนำประกอบกันแล้วกลายเป็น procedure (target)

  • property : ตัวนี้เป็นการกำหนดค่าคล้ายการประกาศ variable ที่ต้องประกาศชื่อและ assign value ลงไป ประกาศไว้เพื่อความสะดวกในบางทีค่าบางค่านั้นถูกเรียกใช้ในหลายๆที่ ทำให้การแก้ไขภายหลังนั้นได้เพราะว่าแก้แค่ที่เดียวเท่านั้น


พอจะเข้าใจโครงสร้างบ้างแล้วนะครับที่นี้เราจะอธิบายเข้าไปในการทำงานของ xml นะครับ

ในหนึ่ง build.xml เราสามารถการ config สั้นสุดเท่านี้ครับ
<project >
</project>

คือใน project นั้นไม่มี task หรือว่า target ใดๆทั้งสิ้น ดังนั้นตอนเราลอง run ant ก็จะไม่มีการทำงานใดแต่ถ้าเราต้องลองเขียน build.xml เพื่อให้ ant ลองทำงานดูก็ง่ายๆครับลองเปลี่ยน config ดังด้านล่างครับ
<project name="MyFirstAnt" default="greet">
<echo>hello world</echo>
</project>

การเรียก task echo นั้นก็เหมือน System.out.println("hello world"); ใน java ครับซึ่งจะมี task อย่างเดียวโดยที่ไม่มี target ก็ได้ครับ ต่อมาเราจะมาดู build.xml ที่เต็มสูบกันดูครับ
<project name="MyFirstAnt" default="greet">
<property name="name" value="John" />
<target name="greet">
<echo>hello everybody</echo>
<echo>my name is ${name}</echo>
</target>
<target name="bye" depends="greet">
<echo>bye ${name}</echo>
</target>
</project>

ในนี้จะมี target อยู่ 2 target คือ greet และ bye ครับโดยที่เราสามารถให้ target แต่ละ target นั้นมี dependency ได้ครับคือก่อนที่จะรัน target อะไรต้องทำ target อะไรก่อนเช่นในตัวอย่างนี้ ก่อนจะทำ target bye เราต้องทำ target greet ก่อนครับ และในตัวอย่างนี้มีการใช้ property ด้วย เนื่องจากว่า ชื่อของ John นั้นอ้างมากกว่าหนึ่งที่เราเลย set property เพื่อที่จะอ้างถึงได้ง่าย

***สังเกตุนะครับว่าตรง project ครับเรามีการกำหนด default โดย set target greet เป็น default

การ run

การ run นั้นต้อง run ใน command promt แล้วต้องเข้าไปอยู่ใน directory ที่มี build.xml อยู่ด้วยและต้อง set environment ตามด้านบนก่อนจากนั้นในคำสั่ง ant ดังนี้

  • ant


ก็จะได้ผลลัพธ์ดังนี้
BUILD SUCCESSFUL
Total time: 0 seconds
D:\test>ant
Buildfile: build.xml

greet:
[echo] hello everybody
[echo] my name is John

BUILD SUCCESSFUL
Total time: 0 seconds

สังเกตว่า มันจะ run target greet เพราะว่าตรง <project name="MyFirstAnt" default="greet"> ตั้ง default เป็น target greet แต่ถ้าเราต้องการจะ run target bye ตอน run เราสามารถระบุ target ได้ว่าจะเอา target อะไรดังนี้

  • ant bye


ก็จะได้ผลลัพธ์ดังนี้
Buildfile: build.xml

greet:
[echo] hello everybody
[echo] my name is John

bye:
[echo] bye John

BUILD SUCCESSFUL
Total time: 0 seconds

จะพบว่าจะ run target greet ก่อน bye เพราะว่าตรง <target name="bye" depends="greet"> มีการ set dependency ก่อน run target bye ต้อง run target greet ก่อน

การเปลี่ยนค่าของ property นั้นสามารถเปลี่ยนตอน run time ได้ไม่จำเป็นต้องเปลี่ยนใน xml เสมอไปดังตัวอย่างด้านล่าง

  • ant bye -Dname=Jack


ได้ผลลัพธ์ดังนี้
D:\test>ant bye -Dname=Jack
Buildfile: build.xml

greet:
[echo] hello everybody
[echo] my name is Jack

bye:
[echo] bye Jack

BUILD SUCCESSFUL
Total time: 0 seconds

syntax การเปลี่ยน property ดังนี้ -D<property-name>=<new-value>

จากด้านบนนี้เป็นไงบ้างครับแต่ว่า task นั้นไม่ได้มีแค่ echo เท่านั้นลองไปดูใน document ของ apache ต่อได้ครับ

ปล. หนังสือ apache ant ภาษาไทยของ ดร.วีระศักดิ์ ซึงถาวร เยี่ยมมากครับ

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