<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TDD &#8211; Few Steps &#8211; ก้าวสั้นๆ แต่ไปเรื่อยๆ</title>
	<atom:link href="https://myifew.com/tag/tdd/feed/" rel="self" type="application/rss+xml" />
	<link>https://myifew.com</link>
	<description></description>
	<lastBuildDate>Tue, 22 May 2018 04:32:21 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://myifew.com/wp-content/uploads/2018/07/cropped-logo6-ts-32x32.png</url>
	<title>TDD &#8211; Few Steps &#8211; ก้าวสั้นๆ แต่ไปเรื่อยๆ</title>
	<link>https://myifew.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ATDD &#8211; จะทำอย่างไรให้ชี้นกเป็นนก ชี้ไม้เป็นไม้</title>
		<link>https://myifew.com/4017/atdd/</link>
					<comments>https://myifew.com/4017/atdd/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Fri, 09 Jun 2017 16:11:24 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[ATDD]]></category>
		<category><![CDATA[TDD]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=4017</guid>

					<description><![CDATA[สรุปแนวคิด ATDD หรือ Acceptance Test Driven Development 
ที่เอาความต้องการของทีม Business หรือลูกค้าเป็นตัวตั้งต้น จากนั้นขับเคลื่อนกระบวนการทดสอบให้มาเป็นระบบที่ตรงตามความต้องการ]]></description>
										<content:encoded><![CDATA[<h2>ปัญหาโลกแตก ชี้นกเป็นไม้</h2>
<p>ให้คิดกันเล่นๆ ก่อนจะไปเนื้อหาหลัก ถ้าเราเป็นทีม Business ที่จะทำซอฟต์แวร์ขึ้นมาสักตัวหนึ่ง อย่างแรกที่ทำคืออะไรครับ?</p>
<p>&#8230; (2 วินาที)</p>
<p>โอเค ทุกคนน่าจะตอบว่า ก็ต้องเก็บ Requirement สิ ว่าต้องทำอะไรบ้าง (ส่วนใครไม่ได้ตอบตามนี้ ผมจะมโนไปว่าตอบก็แล้วกันนะ)</p>
<p>แล้ว Requirement ที่ว่า ก็ต้องมีคุณสมบัติต่างๆ ที่ประกอบกันเป็นซอฟต์แวร์ของเราใช่ไหม หรือที่เรียกกันว่า Feature เช่น อัพโหลดรูปได้ ส่งอีเมลได้ ล็อกอินด้วยเฟสบุ๊กได้ เป็นต้น</p>
<p>ซึ่งในแต่ละ Feature ที่เราเขียนๆกันมา เราต้องคิดต่อใช่ไหมครับว่าจะมีการทำงานอย่างไร?<br />
ใครตอบว่าไม่คิด ก็ให้ลองนึกดีๆ เพราะบางทีเราก็คิดแบบเร็วๆ หรือเห็นภาพตัวอย่างระบบที่เคยเห็นมาก่อน<br />
แต่ถ้าใครคิดละเอียดๆหน่อย จะเขียนไว้หรือวาดรูปออกมาอย่างชัดเจน บางทีเราก็เรียกมันว่า Business Flow, Business Logic ก็แล้วแต่สะดวก แต่ในที่นี้ผมขอเรียกรวมๆ ว่า Flow ก็แล้วกัน<br />
ซึ่งเราเขียนมันออกมาเพื่อให้เห็นการไหลของข้อมูล (Input) เงื่อนไขต่างๆ (Process) และผลลัพธ์ตอนจบ (Output)</p>
<p>โดยที่กล่าวมาทั้งหมด เป็นกระบวนการทาง Business เพื่อตอบว่า เรา &#8220;<strong>จะทำอะไร (What)</strong>&#8221;</p>
<p>ตัดฉากมาดูของฝั่งทีม Developer บ้าง, ทุกวันนี้เราสนใจเรื่องของฝั่ง Business หรือไม่?</p>
<p>&#8230; (2 วินาที)</p>
<p>ส่วนใหญ่ ถ้ายังทำงานแบบเดิมๆ ซึมๆ ก็มักไม่ค่อยสนใจว่า Business จะทำ Feature พวกนี้ไปเพื่ออะไร ทำไปทำไม หรือมันมีการเชื่อมโยงข้อมูลอย่างไรบ้าง<br />
เพราะเขาเหล่านั้นมักตีขอบเขตตัวเองไว้ว่า ฉันมีหน้าที่แค่หาวิธี &#8220;<strong>ทำอย่างไร (How)</strong>&#8221; ที่จะทำ Task งานนั้นให้เสร็จ แล้วก็ก้มหน้าก้มตาเขียนโค้ดให้ได้ตามที่  Business ต้องการ ก็จบ..</p>
<p>การทำงานแบบนี้ มันเลยเกิดปัญหาตามมา คือ ทีม Developer ไม่เห็นหรือไม่สนใจภาพรวมทั้งหมดของซอฟต์แวร์ ไม่มีเป้าหมายร่วมกับทางทีม Business<br />
และพบว่า บ่อยครั้งเมื่อไม่เข้าใจกันของทั้งสองทีม ก็เกิดความไม่ลงรอยกัน เพราะตีความ Requirement ไม่เหมือนกัน</p>
<p>และผลลัพธ์ของมัน คือ ซอฟต์แวร์ (แม้จะทำออกมาดีแค่ไหน) ไม่ตอบโจทย์ทาง Business, ไม่ตรงตาม Requirement และถูกตีกลับมาแก้ไขอยู่ร่ำไป<br />
เสียทั้งเงิน ทั้งเวลา ทั้งอารมณ์ ความสัมพันธ์ของทั้งสองทีม และซอฟต์แวร์ก็อาจทำงานผิดพลาดอีกด้วย</p>
<h2>คุยกันสิ ว่าอะไรคือนก อะไรคือไม้</h2>
<p>ซึ่งถ้าคุณอ่านมาถึงตรงนี้ แล้วคิดว่า &#8220;เออ เจอปัญหาแบบนี้จริงๆ&#8221; และอยากหาทางปรับปรุงมันให้ดีขึ้น เราจะทำอย่างไรดี?<span id="more-4017"></span></p>
<p><img fetchpriority="high" decoding="async" class="alignnone size-medium wp-image-4025 aligncenter" src="https://myifew.com/wp-content/uploads/2017/06/atdd-triangle-1024x867-1.png" alt="" width="1024" height="867" /></p>
<p>มันเลยเป็นที่มาของแนวคิด ATDD หรือ Acceptance Test Driven Development<br />
ที่เอาความต้องการของทีม Business หรือลูกค้าเป็นตัวตั้งต้น จากนั้นขับเคลื่อนกระบวนการทดสอบให้มาเป็นระบบที่ตรงตามความต้องการ</p>
<blockquote><p>บางทีอาจมีการก็สับสนระหว่าง ATDD และ BDD (Behaviour Driven Development) กันบ้าง<br />
ซึ่งตรงนี้พี่ปุ๋ย Somkiat.cc ได้อธิบายไว้ว่า &#8220;BDD มีเป้าหมายเพื่อช่วยให้เราค้นพบสิ่งที่เราไม่รู้ ที่อยู่ในบริบทที่เราสนใจด้วย Scenario และ Example ต่าง ๆ จึงใช้คำว่า Should และ Behaviour เนื่องจากคำว่า Test มันใช้กับสิ่งที่เรารู้อยู่แล้ว&#8221; (<a href="http://www.somkiat.cc/atdd-bdd-sbe/" target="_blank" rel="noopener noreferrer">Somkiat.cc &#8211; ATDD, BDD, SbE มันต่างกันอย่างไร ?</a>)</p></blockquote>
<p>ย้อนกลับไปฝั่งของทาง Business ที่ได้ออกมาเป็นชุด Feature แล้ว สิ่งที่จะทำให้ Developer ทำงานได้ตรงตามความต้องการ ก็คือ &#8220;การคุยกัน (<strong>Discuss</strong>)&#8221; ซึ่งคุยในที่นี้ไม่ใช่คุยพร่ำเพื่อหรือประชุมถกเถียงกันจนไม่เกิดอะไรขึ้นมานะ แต่สิ่งที่ต้องคุยร่วมกัน คือ Flow การทำงานของ Feature และกำหนดร่วมกันว่าอะไรที่เรียกว่าทำ Feature นี้เสร็จ หรือ &#8220;<strong>DoD (Definition of Done)</strong>&#8221;</p>
<p>ที่ต้องบอกว่ากำหนดร่วมกันถึง DoD เพราะนิยามคำว่าเสร็จของทีม Business กับทีม Developer และทีมอื่นๆ อาจไม่เหมือนกัน ดังนั้นต้องคุยกันว่า แต่ละทีมให้ความสำคัญกับเรื่องอะไร เช่น ข้อผิดพลาดต้องเป็น 0, ต้องผ่านการ UAT, ต้องใช้งานได้บน Server Production, ต้องเปิดได้ทุกเว็บเบราเซอร์ เป็นต้น</p>
<p>และสิ่งต่อมาที่ต้องคุยร่วมกันอีก คือ ในแต่ละ Feature มี &#8220;<strong>Acceptance Criteria</strong>&#8221; อะไรบ้าง หรือถ้าให้แปลไทยตรงๆ คือ เกณฑ์การตรวจรับงานของ Feature นี้ มีอะไรบ้าง<br />
เช่น ใส่รหัสได้ 6 ตัวอักษรเท่านั้น, ชื่อสมาชิกต้องอักษรภาษาอังกฤษตัวพิมพ์ใหญ่และตัวพิมพ์เล็กเท่านั้น, ต้องชำระเงินด้วยบัตรเครดิต VISA ได้เท่านั้น เป็นต้น</p>
<p>ซึ่ง &#8220;Acceptance Criteria&#8221; โดยทั่วไปมักโยนไปให้ทีม Business ทำ แต่ในความเป็นจริงแล้ว ทางทีม Developer ต้องมาร่วมคุยด้วย เพราะมันเป็นสิ่งที่ Developer สามารถให้คำแนะนำได้<br />
เหมือนกับเราซื้อบ้าน หรือ Condominium แล้วเราจะทำการตรวจรับ เราก็ต้องไปอ่านวิธีตรวจรับมาก่อน แต่ถ้าเราไม่ชำนาญทางนี้หรือไม่มีเวลาหาข้อมูล เราก็ต้องจ้างวิศวกรหรือสถาปนิกมาร่วมดูกับเรา เพื่อป้องกันทีม Developer หลอกลวงว่ามันเสร็จ มันสมบูรณ์ อย่างไรก็อย่างนั้นเลย</p>
<p>ดังนี้แล้ว &#8220;Acceptance Criteria&#8221; จะต้องสัมพันธ์กันกับ &#8220;Definition of Done&#8221; ด้วยนะ เพราะถ้ามันไม่ผ่านบาง Criteria แปลว่า Feature นี้มันไม่เสร็จ เอาขึ้น Production ไม่ได้ คนเป็นฝั่ง Business จะต้องไม่ยอมรับให้ขึ้น (ยกเว้นมีการต่อลองกัน แต่ก็นั่นแหละ ไม่ควรปล่อยล่วงเลยจนถึงตอนจะขึ้น Production นะ)</p>
<p>อ่ะๆ เลยเถิดไปไกล กลับมาเรื่องของ ATDD, ดังนั้น เมื่อ Developer รู้ว่า &#8220;Acceptance Criteria&#8221; มีอะไรบ้าง มันก็เหมือนรู้คำตอบของซอฟต์แวร์แล้วใช่ไหม ว่าจะโค้ดอย่างไรถึงจะถูกต้อง<br />
ก็ไปเริ่มกระบวนการพัฒนาซอฟต์แวร์ (<strong>Develop</strong>) และทำการตรวจสอบ (<strong>Demo</strong>) ต่อไป</p>
<p><img decoding="async" class="alignnone size-medium wp-image-4024 aligncenter" src="https://myifew.com/wp-content/uploads/2017/06/atdd-circle-1024x581-1.png" alt="" width="1024" height="581" /></p>
<p style="text-align: center;">ถ้าดูไม่รู้เรื่อง ดูรูปล่างแทนนะฮะ แหะๆ</p>
<p><img decoding="async" class="alignnone size-full wp-image-4023 aligncenter" src="https://myifew.com/wp-content/uploads/2017/06/screen-shot-2012-02-06-at-2-58-23-pm-1.png" alt="" width="986" height="670" /></p>
<h2>สรุปทิ้งท้าย</h2>
<p>เมื่อทีม Developer รู้ Requirement ก็จะได้ Feature</p>
<p>เมื่อได้ Feature ก็ควรจะลงไปคุยกันถึง Flow</p>
<p>เมื่อได้ Flow ทีม Developer และทีม Business ก็จะรู้ว่าจะเกิดกรณีอะไรบ้าง (Case)</p>
<p>เมื่อรู้ Case ก็จะรู้ว่าทีม Developer ต้องมีทำ Task อะไรบ้าง และสามารถประเมินเวลาทำงานได้ (Work Break Down)</p>
<p>เมื่อรู้ Case ก็จะรู้ว่าทีม Business มี Acceptance Test อย่างไรบ้าง (UAT)</p>
<p>เมื่อรู้  Acceptance Test ทีม Developer และทีม Business ก็จะรู้ว่า Acceptance Criteria มีอะไร และต้องใช้ข้อมูล (Data) หรือจำลองสถาการณ์ (Scenarios) อย่างไรบ้าง</p>
<p>เมื่อรู้ Acceptance Criteria ก็จะเสริม Definition of Done ให้สมบูรณ์ขึ้น ไม่หลุด</p>
<p>เมื่อได้ Acceptance Criteria และ Definition of Done ทีม Developer ก็จะส่งมอบ Feature ให้กับทีม Business ได้ตรงตามความต้องการ และลดข้อผิดพลาด</p>
<p>&#8230;.</p>
<p>ทิ้งท้ายจริงๆ ขอบคุณ พี่ปุ๋ย <a href="http://www.somkiat.cc" target="_blank" rel="noopener noreferrer">somkiat.cc</a> ที่พูดให้ฟังอยู่บ่อยๆ</p>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/4017/atdd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
