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