คุณจะโน้มน้าวผู้บริหารให้“ ลงทุน” ในการทดสอบหน่วยได้อย่างไร


44

คุณโน้มน้าวผู้จัดการของคุณให้ทดสอบหน่วยได้อย่างไร

โดย "ใช้" ฉันหมายถึงได้รับอนุญาตให้พัฒนาเช็คอินเพื่อควบคุมแหล่งที่มาและรักษาการทดสอบหน่วยในช่วงเวลาอื่น ๆ

การคัดค้านการจัดการทั่วไปคือ:

  1. ลูกค้าไม่ได้ชำระเงินสำหรับการทดสอบหน่วย
  2. โครงการไม่อนุญาตให้มีเวลาสำหรับการทดสอบหน่วย
  3. หนี้ทางเทคนิค? หนี้สินทางเทคนิคคืออะไร

คุณรู้จักคำคัดค้านอื่น ๆ หรือไม่? คุณมีคำตอบอะไร

ขอบคุณล่วงหน้า!


6
มีทั้งบทในartofunittesting.comเกี่ยวกับหัวข้อนี้มาก
StuperUser

6
อย่าผสมการทดสอบและ TDD โปรด ! มันทำให้คนคิดว่าพวกเขาไม่ต้องการการทดสอบเว้นแต่ว่าพวกเขาจะทำ TDD!
P Shved

1
ผู้ที่ต้องการความเชื่อมั่นนั้นไม่น่าเชื่อ พิจารณาสถานการณ์ของคุณว่าเป็นสาเหตุที่หายไป
Mark Canlas

@Pavel ในตอนแรกฉันคิดว่าคุณเป็นคนวางยา แต่คุณพูดถูก ฉันต้องการมี "การอนุญาต" ในการทดสอบหน่วยระยะเวลา TDD เป็นของฉันเอง
louisgab

6
ทำไมคุณถึงรู้สึกว่าจำเป็นต้องได้รับอนุญาตในการตรวจสอบรหัสของคุณทำงานตามที่คาดไว้?
Jaap

คำตอบ:


25

เมื่อไม่นานมานี้ฉันพบปัญหานี้เมื่อลูกค้าเข้ามามีส่วนร่วมกับวิธีการของเรา แต่การจัดการที่สูงขึ้นทำให้นักพัฒนาใช้เวลาในการทดสอบมากกว่าที่จะพัฒนาและกังวลเกี่ยวกับสิ่งนี้ ฉัน blogged เกี่ยวกับวิธีจัดการกับมันที่นี่:

http://practicalagility.com/show-them-the-numbers-its-results-that-matter/

เพื่อสรุปฉันเปรียบเทียบชั่วโมงโดยประมาณของเรากับเวลาจริงสำหรับโครงการแล้วเปรียบเทียบอัตราข้อบกพร่องของเรากับอัตราข้อบกพร่องของทีมอื่น ในกรณีของเราตัวเลขเหล่านี้เปรียบเทียบได้ดีและไม่มีความกังวลอีกต่อไป

ข้อสรุปของฉันจากประสบการณ์นี้คือ:

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

ในโครงการอื่น ๆ เราได้ทำงานร่วมกับนักพัฒนาลูกค้าที่ไม่ได้สร้างการทดสอบหน่วยหรือทำ TDD และเราต้องทำการทดสอบที่พวกเขาหยุดพัก อย่างไรก็ตามมันกลายเป็นเรื่องง่ายมากที่จะขายวิธีการ TDD ให้กับนักพัฒนาลูกค้าเหล่านั้นเมื่อคุณสามารถบอกพวกเขาได้ว่าพวกเขาทำอะไรแตกในรหัสก่อนที่พวกเขาจะรู้!

ดังนั้นในกรณีของคุณฉันจะทำโดยการซ่อนตัวหากจำเป็น (อาจมีพื้นที่เล็ก ๆ ของรหัสที่คุณสามารถเริ่มทดสอบการเปลี่ยนแปลงที่บ่อยหรือว่าคุณต้องรับผิดชอบ) แต่ติดตามตัวเลขของคุณ - อะไรคือสิ่งที่ ความพยายามในการสร้างแบบทดสอบของคุณ? อัตราความบกพร่องคืออะไร สิ่งนี้เปรียบเทียบกับโครงการ / สมาชิกในทีมอื่น ๆ อย่างไร

ในความคิดของฉันไม่มีใครควรขออนุญาตหรือขอโทษที่ต้องการทำงานของพวกเขาอย่างถูกต้องและนักพัฒนามืออาชีพใด ๆ ควรพยายามทดสอบรหัสของพวกเขาด้วยการทดสอบอัตโนมัติทุกที่ที่เป็นไปได้และในทางปฏิบัติ หวังว่ามันเป็นทั้งสองอย่างนี้ในกรณีของคุณ โชคดี!


ขอบคุณสำหรับคำตอบ ฉันลองใช้ลิงค์ แต่มันใช้งานไม่ได้ ฉันคิดว่าฉันจะสนุกกับการอ่านถ้ามี
Joe J

โจขอโทษเกี่ยวกับการเชื่อมโยง ฉันโพสต์สิ่งนี้ใหม่ในบล็อกส่วนตัวของฉันดังนั้นลิงก์ควรใช้งานได้ในขณะนี้
Paddyslacker

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

@JimmyJames ฉันยอมรับว่าคุณไม่สามารถเปรียบเทียบกับโครงการอื่นได้เสมอและฉันเห็นด้วยกับการเปรียบเทียบของคุณเกี่ยวกับการทำบัญชีรายการสองรายการ ฉันคิดว่าถ้าคุณเริ่มใช้การทดสอบหน่วยบน codebase ที่มีอยู่โดยไม่มีการทดสอบคุณสามารถเปรียบเทียบอัตราข้อบกพร่องของรหัสฐานและตัวชี้วัดอื่น ๆ ระหว่างส่วนที่ครอบคลุมโดยการทดสอบหน่วยและรหัสที่ไม่ได้เปิดเพื่อให้คุณมีข้อมูลจริง แนวทางของคุณด้วย
Paddyslacker

@ Paddyslacker ฉันไม่เห็นด้วย มันเป็นเรื่องไก่และไข่นิดหน่อย หากคุณต้องการสิทธิ์ในการเริ่มเขียนการทดสอบหน่วยมันยากที่จะใช้เพื่อแสดงหลักฐานว่าควรได้รับอนุญาต มันไม่ใช่อย่างใดอย่างหนึ่งหรือ การเปรียบเทียบกับข้อมูลจริงเป็นข้อโต้แย้งที่แข็งแกร่งกว่ามาก อาร์กิวเมนต์ทางเลือกนี้จะอ่อนแอ แต่ติดตั้งได้ง่ายกว่า
JimmyJames

20

แสดงผลตอบแทนการลงทุน (ROI)

การเขียนการทดสอบอัตโนมัติต้องใช้เวลา ครั้งหนึ่ง การรันการทดสอบอัตโนมัติใช้เวลาเป็นศูนย์เพราะคุณสามารถทำอย่างอื่นได้ในขณะที่กำลังทดสอบ

ตัวอย่าง: คุณสมบัติการทดสอบด้วยตนเอง X ใช้เวลา 30 นาที การเขียนการทดสอบอัตโนมัติจะใช้เวลา 1 ชั่วโมง แม้ว่าเราจะไม่มีข้อบกพร่องก็ตามเราจะต้องทดสอบฟีเจอร์ X สิบครั้งในระหว่างการทำโปรเจคเนื่องจากเลเยอร์และส่วนประกอบที่ขึ้นอยู่กับการแก้ไข ดังนั้นการทดสอบฟีเจอร์ X โดยอัตโนมัติจะช่วยเราได้ 4 ชั่วโมงตลอดอายุการใช้งานของโครงการ

ในความเป็นจริงก็คือเมื่อคุณมีข้อผิดพลาดที่การทดสอบอัตโนมัติจ่ายจริง - ก่อนพวกเขาพบข้อบกพร่องในช่วงต้นและราคาถูกซึ่งช่วยประหยัดเวลาและความลำบากใจ ประการที่สองหากคุณมีข้อผิดพลาดที่ยากและผ่านรอบหลายของการสร้างรหัสทดสอบเพื่อคิดออกเวลาที่บันทึกไว้ในการทดสอบด้วยตนเองเพิ่มขึ้นอย่างรวดเร็วเป็นพิเศษ

ธุรกิจเข้าใจประหยัดเวลาและเงิน นั่นคือวิธีขายมัน


3
นอกจากนี้เมื่อมีการปรับใช้แอปพลิเคชันและมีคนขอให้มีการเปลี่ยนแปลงจะง่ายกว่ามากที่จะเห็นว่าคุณกำลังทำลายอะไรกับการเปลี่ยนแปลงของคุณหรือไม่
m4tt1mus

4
@mattimus: อย่างแน่นอน - ชุดทดสอบอัตโนมัติจ่ายออกเหมือนเงินรายปี; ในความเป็นจริงแล้วการประกัน
Steven A. Lowe

15

หากคุณเคยเผชิญหน้ากับพวกเขามาแล้วและพวกเขาก็ไม่ตกลงกับมัน แต่คุณรู้สึกไม่สบายใจที่จะเขียนโค้ดหากไม่มีพวกเขา ... จากนั้นอย่าถามอีก เพียงแค่เขียนพวกเขาและอย่าตรวจสอบพวกเขามา

ฝ่ายบริหารจะไม่นับจำนวนบรรทัดของรหัส แต่พวกเขาจะเห็นว่าเช็คทั้งหมดของคุณมีอัตราการส่งผ่านที่สูงขึ้นจาก QA (หรือลูกค้า) และในที่สุดพวกเขาจะถามว่าทำไม ... แล้วคุณจะชอบ "BAM! TDD !"

คุณไม่ได้ยุ่งกับโครงการกระบวนการหรือแหล่งที่มา ... ดังนั้นฉันไม่เห็นเหตุผลเชิงลบ สุจริตฉันไม่เห็นเหตุผลว่าทำไมมันถึงเวลาที่แตกต่างกันกว่าการเรียกใช้คู่มือทั้งหมดของคุณ + อินพุต + ตรวจสอบผลการทดสอบ


4
+1: คุณต้องทดสอบต่อไป เพียงแค่เขียนการทดสอบหน่วยแทนที่จะพูดคลุมเครือเกี่ยวกับวิธีการทดสอบ "ควร" จะทำ
S.Lott

1
เพียงแค่ให้พวกเขาในพื้นที่ทำงานได้ไม่ดีในสภาพแวดล้อมของทีมที่มีฐานรหัสที่ใช้ร่วมกันคนอื่น ๆ จะทำการทดสอบของคุณกับการเปลี่ยนแปลงของพวกเขา
Alb

3
@ อัล: นั่นคือราคาที่คุณจ่ายเมื่อผู้บริหารไม่ได้ขึ้นเครื่อง - ดีกว่าไม่มีการทดสอบ
Steven Evers

3
ไชโย การทดสอบใด ๆ ดีกว่าการไม่ทดสอบ หากการทดสอบผิดพลาดเนื่องจากมีการเปลี่ยนแปลงของบุคคลอื่นเป็นเหตุผลที่ดีที่จะถามว่าเพราะเหตุใด API จึงเปลี่ยนโดยไม่มีการประกาศใด ๆ
S.Lott

"การจัดการจะไม่นับบรรทัดของรหัส" ซึ่งเป็นเรื่องจริงมาก ขอบคุณสำหรับคำตอบ!
louisgab

7

1) ลูกค้าไม่ได้ชำระเงินสำหรับการทดสอบหน่วย

ลูกค้า (คิดว่าพวกเขา) จ่ายเงินสำหรับวิธีการทำงาน ทั้งนี้ขึ้นอยู่กับสัญญาแก้ไขข้อบกพร่องอาจจริงผลกำไรให้กับ บริษัท ของคุณ หากมีล็อคเพียงพอดังนั้นจะกลับไปจ่ายเงินสำหรับการแก้ปัญหาการทำงาน TDD ควรช่วยเหลือเป้าหมายนั้น

2) โครงการไม่อนุญาตให้มีเวลาสำหรับ TDD

TDD ใช้เวลาไม่นาน ควรลดจำนวนรหัสภายนอกหรือฟุ่มเฟือยและมุ่งเน้นรหัสฐานในสิ่งที่ทำให้การทดสอบผ่าน การทดสอบทั้งหมดที่ผ่านขึ้นอยู่กับคุณภาพการทดสอบและความเหมาะสมหมายถึงการทำรหัส

3) หนี้ทางเทคนิค? หนี้สินทางเทคนิคคืออะไร

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

ฉันไม่แนะนำให้เขียนการทดสอบอย่างไรก็ตามอย่างที่ Snorfus แนะนำ มันฟังดูดีในทฤษฎี แต่การทดสอบหน่วยสามารถและทำเปลี่ยนแปลงตลอดเวลา เมื่อมีการเปลี่ยนแปลงข้อกำหนดคุณสมบัติใหม่จะถูกเพิ่มเข้าไปในการทดสอบหน่วยต้องได้รับการอัพเดต หากคุณทำงานเป็นส่วนหนึ่งของทีมการทดสอบหน่วยของคุณจะล้าสมัยเนื่องจากผู้อื่นเพิ่มคุณสมบัติ / การแก้ไข

ฉันกำลังพูดถึงประเด็นเฉพาะที่คุณพูดถึงไม่ใช่เพิ่มประเด็นใหม่ ๆ เพราะมีความคืบหน้าหรือเข้าใจว่าทำไมมันถึงถูกปิดกั้น


5
"ฉันไม่แนะนำให้เขียนการทดสอบต่อไป" - ฉันเคยไปที่ตำแหน่งนี้มาก่อน เป็นการยากที่จะรักษาการทดสอบด้วยตัวเอง หากภาระนั้นหนักเกินไปให้ทิ้งการทดสอบ อย่างน้อยคุณก็มีพวกเขาเมื่อคุณทำงานอย่างแข็งขันใน codebase ซึ่งจะช่วยในการออกแบบ / แก้ไขเริ่มต้นหากไม่ได้รับการถดถอย ฉันพบคุณค่ามหาศาลในการทดสอบหน่วยเพื่อการออกแบบ แต่ฉันพบว่าการถดถอยไม่มากพอเมื่อการทดสอบไม่ได้รับการบำรุงรักษาในระดับเดียวกับรหัส
Steve Jackson

1
ใครก็ตามที่เพิ่มคุณสมบัติ / แก้ไขและไม่อัปเดตการทดสอบหน่วยไม่เข้าใจแนวคิดของการทดสอบหน่วย
อากิระยามาโมโตะ

อันที่จริงอากิระนี่เป็นหนึ่งในปัญหาที่สับสนที่สุดที่มีผลต่อความมีชีวิตของ TDD หรือกระบวนการที่เกี่ยวข้อง โปรดจำไว้ว่าเห็นได้ชัดว่าฉันเขียนเมื่อ 7 ปีที่แล้วยังมีความเกี่ยวข้องอยู่มาก การทดสอบการเขียน (ดี, มีวัตถุประสงค์, รัดกุม) นั้นยาก การเขียนการทดสอบสำหรับ codebase ที่ไม่ยากมาก การทำให้การจัดการที่ไม่ใช่ด้านเทคนิคเห็นประโยชน์เป็นเรื่องยาก (เว้นแต่พวกเขาจะอ่านบทความเกี่ยวกับเรื่องนี้ซึ่งในกรณีนี้คุณจะได้รับ "metric'ed" ถึงตายแม้แต่แนวคิดของหน่วยคืออะไรยากฉันเป็นคนคลาสสิก ความคิดของฉันของหน่วยไม่ได้เป็นเช่นเดียวกับ Mockist ของ (เป็นตัวอย่างที่มี 30 ตัวอักษรซ้าย).
เอียน

4

สำหรับลูกค้าทุกคนที่ประสบปัญหาการผลิต

  1. เขียนการทดสอบหน่วยและส่งอีเมลไปยังผู้จัดการบอกว่าคุณได้เพิ่มการทดสอบหน่วยเพื่อให้ครอบคลุมสถานการณ์

  2. และบอกเขาว่าปัญหานี้จะไม่เกิดขึ้นอีกในการผลิตเพราะการทดสอบหน่วยของเรากำลังทำงานทุกคืนและเราจะได้รู้ก่อนที่โค้ดจะไปสู่การผลิตโดยดูการทดสอบหน่วยนี้ล้มเหลว

  3. บอกเขาว่าถ้าเรามีการทดสอบหน่วยนี้แล้วก่อนที่รหัสจะเริ่มผลิตปัญหาการผลิตนี้จะไม่เกิดขึ้น

ทำสิ่งนี้อย่างสม่ำเสมอและต่อเนื่องและในไม่ช้าเขาจะมั่นใจ ผู้จัดการไม่ชอบให้ลูกค้าเผชิญกับปัญหาการผลิตและเขาจะซื้อเข้าสู่แนวคิดการทดสอบหน่วย โชคดี.


นี่เป็นสิ่งที่ดี :-)
BVengerov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.