การจัดการกับนักพัฒนาอย่างต่อเนื่องโดยไม่สนใจเคสที่เป็นขอบในงานของเขา


25

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

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

ฉันไม่รู้จะทำอย่างไรกับเขาและจะช่วยให้เขาเอาชนะปัญหานี้ได้อย่างไร บางทีคนที่มีประสบการณ์มากกว่าสามารถให้คำแนะนำได้?


11
ถามคนที่จะครอบคลุมรหัสของเขาด้วยการทดสอบหน่วย
งาน

8
ผู้ที่มีคุณสมบัติเหมาะสมที่สุดในการทดสอบรหัสคือผู้เขียน

16
@Developer Art: ไม่เห็นด้วยอย่างสิ้นเชิง บุคคลที่แย่ที่สุดที่จะทำการทดสอบโค้ดคือผู้พัฒนาโค้ดนั้น ทุกคนมีจุดบอด แต่คนที่ทำการสร้างมีจุดบอดที่ใหญ่ที่สุดในการอ้างอิงถึงรหัสของเขา
James P. Wright

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

19
คุณอธิบายว่าเขาเป็น "นักพัฒนาที่ยอดเยี่ยม", "การผลิต", "วิศวกรที่ดี" และการผลิต 'รหัสที่มีคุณภาพดี' แต่ QA ยังคงค้นหาปัญหาเกี่ยวกับงานของเขาคุณจะใช้คำเหล่านี้เพื่ออธิบายคนที่สม่ำเสมอและสม่ำเสมอ ฉีดข้อบกพร่องลงในรหัสของพวกเขาหรือไม่ฉันสงสัยว่ามีเรื่องนี้อีกหรือไม่เนื่องจากคำอธิบายของแต่ละคนว่าเป็นมืออาชีพและงานที่พวกเขาทำไม่ตรงกันเลย
Thomas Owens

คำตอบ:


29

กำหนดให้เขาต้องเขียนการทดสอบหน่วยอัตโนมัติสำหรับรหัสของเขา การเขียนการทดสอบหน่วยบังคับให้คนหนึ่งคิดผ่านกล่องขอบ

รายละเอียดบางอย่าง:

  1. เพื่อให้แน่ใจว่าเขาจะไม่รู้สึกแยกออกจากกันสิ่งนี้ควรได้รับการจัดตั้งให้กับทีมของคุณทั้งหมด กำหนดให้ทุกคนต้องเขียนการทดสอบหน่วยโดยอัตโนมัติสำหรับรหัสใหม่หรือรหัสที่แก้ไข
  2. ต้องการชื่อหน่วยการทดสอบที่จะอธิบายเป็นกรณีที่พวกเขากำลังทดสอบ
  3. ครอบคลุมการทดสอบหน่วยอัตโนมัติในการตรวจสอบรหัสในระดับสูง ให้ผู้ตรวจสอบค้นหากรณีทดสอบที่ไม่ได้รับ (เช่นกรณีขอบที่เขาพลาดเป็นประจำ) หลังจากได้รับคำติชมจากทีมของเขาเกี่ยวกับคดีที่ไม่ได้รับจำนวนหนึ่งเขาอาจจะเรียนรู้ที่จะต้องพิจารณาคดีเหล่านั้นก่อนการพิจารณา
  4. บังคับใช้กฎนี้สำหรับทีมทั้งหมด: หาก QA พบข้อบกพร่องนักพัฒนาซอฟต์แวร์ที่รับผิดชอบจะต้องทำการทดสอบอัตโนมัติเพื่อยืนยันความล้มเหลวและพิสูจน์ว่าพวกเขาได้ทำการแก้ไขแล้ว (ก่อนที่พวกเขาจะทำงานอื่นใด)

สาธุยิ่งกว่านั้นทุกคนต้องเขียนโค้ดทดสอบก่อน การใช้เฟรมเวิร์ก BDD มักจะช่วยลดความเจ็บปวดนี้
George Mauer

@ George ความคิดที่ดี TDD จะช่วยได้มากขึ้นที่นี่
Matthew Rodatus

3
การทดสอบหน่วยไม่ได้เกี่ยวกับการค้นพบข้อบกพร่อง - blog.stevensanderson.com/2009/08/24/...
Dainius

1
@Dainius ฉันเห็นด้วย การทดสอบหน่วยอำนวยความสะดวกในการคิดของนักพัฒนาผ่านกรณีขอบซึ่งสามารถดักคอ (แต่ไม่ระบุ) ข้อบกพร่อง
Matthew Rodatus

After some amount of feedback from his team about missed edge cases, he will probably learn to consider thoseนักพัฒนาซอฟต์แวร์ที่มีการปฏิบัติที่ไม่ดีมักจะโต้แย้งความไม่เกี่ยวข้องของความพยายามเพิ่มเติมที่จำเป็นสำหรับการฝึกฝนที่ดี (เพราะพวกเขาไม่เห็นประโยชน์ของการทำเช่นนั้น) ในขณะที่นักพัฒนาอาจยอมรับเมื่อคุณเพิ่มกรณีขอบเพิ่มเติมนั่นไม่ได้หมายความว่าเขาคิดว่ามันเกี่ยวข้องหรือว่าเขาจะเพิ่มพวกเขาเอง
Flater

23

ให้รายการตรวจสอบแก่เขาเช่น

  • อินพุตว่าง
  • อินพุตที่ช่วงปลายขนาดใหญ่สุดขีด
  • อินพุตที่ส่วนท้ายเล็กสุดของช่วง
  • อยู่รวมกัน
  • อินพุตที่ละเมิดค่าคงที่สมมติว่า (เช่นถ้า x = y)

กลุ่มควบคุมคุณภาพสามารถช่วยจัดทำรายการตรวจสอบ

มอบรายการตรวจสอบให้กับนักพัฒนาทั้งหมดไม่ใช่แค่คนนี้


1
จุดที่ดีที่นักพัฒนาซอฟต์แวร์ทุกคนควรใช้รายการตรวจสอบโดยใช้นักพัฒนาซอฟต์แวร์คนเดียวอาจทำให้รู้สึกไม่ดี และสามารถช่วยปรับปรุงคุณภาพรหัสของทุกคน
FrustratedWithFormsDesigner

ความคิดที่ดีแม้ว่าฉันอยากรู้ว่าวิธีการที่สามารถดูได้จากมุมมอง devs ฉันไม่เคยเจอการฝึกฝนนี้ในฐานะนักพัฒนาซอฟต์แวร์เลยยากที่จะวัดปฏิกิริยา มีข้อมูลเชิงลึกใด ๆ
Alex N.

@Alex: รายการตรวจสอบเป็นกิจวัตรประจำวันสำหรับผู้พัฒนาบางคนและเป็นการดูถูกที่น่ากลัวสำหรับผู้อื่น ลองและดูว่าเกิดอะไรขึ้น ถ้าเขาจบการทำงานคุณภาพของโค้ดของคุณจะดีขึ้น ;-)
Steven A. Lowe

4
ผู้พัฒนาของคุณจะไม่ใช้รายการตรวจสอบ? หากรายการตรวจสอบสามารถช่วยชีวิตพวกเขาจะใช้หรือไม่ แพทย์หลายคนทำไม่ได้และผู้ป่วยต้องทนทุกข์ทรมาน อ่านสิ่งนี้: newyorker.com/reporting/2007/12/10/071210fa_fact_gawande
Barry Brown

1
@ แบรี่ฉันไม่ได้บอกว่าพวกเขาจะไม่ รายการตรวจสอบในกรณีนี้เสียง IMHO เช่นวิธีการรักษาอาการของปัญหาไม่ใช่ปัญหาเอง ปัญหาเรื่องวินัยและความขยันในกรณีนี้ เมื่อปัญหาคือความซับซ้อนของระบบที่ต้องการการบำรุงรักษาฉุกเฉินที่มีความรับผิดชอบสูงและมีความเครียดที่เกี่ยวข้องนั้นส่งผลให้ระดับความสนใจในรายละเอียดลดลงจากนั้นใช่รายการตรวจสอบ ftw (นักบินแพทย์ ฯลฯ ) จากการถกเถียงทางปรัชญาฉันเดาว่านอกเหนือขอบเขตของคำถามนี้
Alex N.

17

วิศวกรที่ดี

ถูก

แต่มีปัญหากับเขา - บ่อยครั้งที่เขาล้มเหลวในการแก้ไขปัญหาขอบในรหัสของเขา

มันเป็นวิศวกรที่มีคุณภาพที่ดีไม่แชร์


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

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

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

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


6
+1 นี่คือทักษะที่บางคนมีบางคนต้องเรียนรู้ที่จะเป็นโปรแกรมเมอร์ที่ดี อย่างไรก็ตามฉันทราบว่ามีกรณีขอบสองประเภท: กรณีขอบความต้องการทางธุรกิจ ("ถ้าเราสั่งผู้ฝึกสอนด้านซ้าย 27 คนและผู้ฝึกสอนด้านขวา 28 คนซึ่งคำสั่งนั้นอาจผิด") ซึ่งควรจัดการกับความต้องการของโครงการและจริง การเข้ารหัสกรณีขอบ (การจัดการกับอินพุตที่ไม่ถูกต้องวนซ้ำอย่างต่อเนื่องผ่านรายการเมื่อ hashset จะฉลาดกว่าความเร็วที่ฉลาดกว่าเมื่อเซตใหญ่กว่า x เป็นต้น) ซึ่งเป็นสิ่งที่คุณต้องเรียนรู้เพิ่มเติม
Ed James

ขอบคุณสำหรับความเข้าใจของคุณ ขอบคุณมันจริงๆ คุณค่อนข้างถูกต้องในทุกด้านที่นี่ถึงแม้ว่าฉันจะอยากรู้อยากเห็นถ้าเขาเป็นคนที่ดี แต่เพียงแค่ขาดสิ่งนี้ที่ทำให้วิศวกรที่ยิ่งใหญ่ที่ยอดเยี่ยมฉันจะยังคงทำให้เขาทำงานอื่น ๆ และทำให้เขาอยู่ในองค์กรได้อย่างไร ย้ายไปที่ทีมอื่นหรือบางสิ่ง ... แม้ว่าฉันจะเดาได้ แต่ฉันก็สามารถตอบคำถามนั้นได้ :)
อเล็กซ์เอ็น

ฉันกำลังคิดเกี่ยวกับมัน แต่ฉันไม่แน่ใจ บทบาทอีกประการหนึ่งที่จะเป็นที่ยอมรับได้สำหรับบุคคลประเภทนั้นไม่ควรต้องการความใส่ใจในรายละเอียดและมีไม่มากใน บริษัท ซอฟต์แวร์

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

5

คุณสามารถทำรีวิวรหัสหรือรีวิวออกแบบก่อนหน้านี้ในกระบวนการ?


4

สอนเขาให้เขียนโปรแกรมทดสอบก่อน จับคู่กับเขา คุณจะเขียนกรณีทดสอบและเขาจะเขียนรหัสเพื่อผ่านการทดสอบ


3

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

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


3

มีจำนวนกรณีขอบไม่ จำกัด ครอบคลุมพวกเขาทั้งหมดเป็นไปไม่ได้ เกิดอะไรขึ้นถ้ามีคนทำ#define TRUE FALSE? มันเพิ่มเคสแบบขอบคุณจะตรวจสอบด้วยหรือไม่

นอกจากนี้ฉันจะไม่พิจารณาการพิสูจน์คนโง่ทุกฟังก์ชั่นของคลาสส่วนตัวหรือฟังก์ชันภายใน

วิธีที่ฉันเลือกสำหรับรหัสที่จะต้องมั่นคงและมีเสถียรภาพมากคือ:

if(conditions_met)
{
DoStuff();
}
else
{
CrashAppAndDumpMemory();
}

วิธีนี้คุณจะได้รับแอปพลิเคชันที่เป็นของแข็งใน QA และเมื่อคุณได้รับการปล่อยตัวแอปจะมั่นคงและปลอดภัย

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


#define TRUE FALSE ไม่ใช่กรณีขอบมันเป็นความผิดที่ชิงทรัพย์
gnasher729

1

ถ้าเป็นกรณีขอบจำเป็นต้องพิจารณาด้วยหรือไม่? หากกรณีขอบมีความสำคัญกรณีขอบจำเป็นต้องป้อนเข้าสู่ข้อกำหนด / คุณสมบัติ / เรื่องราวของผู้ใช้

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

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


มีกรณีขอบเสมอ หากมีคนอ้างว่ากรณีขอบจะไม่พบพวกเขาไม่ได้เป็นกรณีขอบด้านขวา
Barry Brown

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

1

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


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

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

0

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

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