การตรวจสอบโค้ดขั้นสูงและแบบฝึกหัดการทดสอบหน่วย


15

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

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

หนึ่งในความต้านทานของทั้งสองพื้นที่คือ "เรามักจะเข้มงวดกับ dateline ดังนั้นจึงไม่มีเวลาสำหรับการตรวจสอบโค้ดและการทดสอบหน่วย"

ความต้านทานอีกประการสำหรับการตรวจสอบโค้ดคือปัจจุบันเราไม่ทราบวิธีการทำ เราควรตรวจสอบรหัสทุกครั้งที่เช็คอินหรือตรวจสอบรหัสตามวันที่กำหนด?


คำถามที่น่าสนใจแน่นอน - มีคำถามที่คล้ายกันอื่น ๆ ที่นี่ แต่พวกเขาทั้งหมดถามจากด้านโปรแกรมเมอร์ไม่ใช่ผู้นำ / PM
Michael K

คำตอบ:


17

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

หรือพวกเขาเพียงแค่พยายามที่จะปฏิเสธความคิดด้วยข้อแก้ตัวนี้?

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

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

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


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

@ Graviton แน่นอนว่าคุณสามารถทำรีวิวโค้ดทดลองได้สองถึงสามแบบเพื่อให้ผู้คนได้รับความนิยมและสามารถตัดสินใจได้ว่าพวกเขาจะชอบหรือไม่ ตรวจสอบให้แน่ใจว่าไม่มีการตำหนิเกิดขึ้นและผู้คนมักให้ความสำคัญกับปัญหาที่พบมากกว่าผู้เขียน เลือกชิ้นส่วนที่ถูกต้องของรหัสก่อนอาจเป็นรหัสเก่าที่ไม่ได้เขียนโดยสมาชิกทีมปัจจุบัน มันควรจะซับซ้อนพอสมควร แต่ไม่เล่นโวหารเกินไปเพื่อให้ผู้คนสามารถเข้าใจได้อย่างแนบเนียนและอาจพบข้อบกพร่องจริงบางอย่างในนั้น
PéterTörök

+1 สำหรับการบอกว่า 'เริ่มต้นทันที' IME เป็นวิธีเดียวที่จะเอาชนะการผัดวันประกันพรุ่ง
Michael K

5

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

กุญแจสำคัญในการตรวจสอบรหัสคือคุณต้องการตรวจสอบรหัสน้อยที่สุดเท่าที่จะทำได้โดยเร็วที่สุด วิธีนี้จะง่ายกว่าในการตรวจสอบเวลารหัสนี้ใหม่ในใจของผู้คนและการใช้การปรับปรุงที่แนะนำจะง่ายขึ้น ในสุดขีดที่คุณต้องการตรวจสอบทุกการเช็คอิน เครื่องมือที่ดีในการทำงานโดยอัตโนมัตินี้เป็นhttp://code.google.com/appengine/articles/rietveld.html เป็นเครื่องมือที่ Google ใช้ภายในเพื่อบังคับให้มีการตรวจสอบโค้ดเพื่อให้เกิดขึ้นกับทุกการเช็คอิน

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

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


+1 สำหรับผลการวิจัยจริง คุณมีลิงค์ไปยังหน้า IBM หรือไม่?
l0b0

ฉันไม่ได้มีการเชื่อมโยงกับพวกเขา แต่สมบูรณ์รหัสไม่
btilly

3

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

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

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


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

คำตอบที่รุนแรงสวย!
Marcie

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

1

การแนะนำ tdd ต่อความต้องการของผู้พัฒนานั้นแตกต่างกันไป มันเป็นวิธีที่ยากในการเรียนรู้ที่จะรัก tdd

เนื่องจาก tdd มีประสิทธิภาพมากที่สุดในเขตข้อมูลสีเขียว (หรือยากค่าใช้จ่ายไม่มีประสิทธิภาพหากการทดสอบเป็นไปตามกาลเวลา) ฉันจะเริ่มต้นด้วยทีมเล็ก ๆ ที่ใช้สิ่งใหม่ หากคุณพบ develloppers สองคนในทีมที่ไม่เห็นด้วยกับ tdd น้อยกว่าคนอื่น ๆ ที่เป็นจุดเริ่มต้นที่ดี โปรดทราบว่าประสิทธิผลของ tdd-developpers จะประสบในขณะที่ไม่มีประสบการณ์กับ tdd

การพัฒนา tdd นี้เป็นจุดเริ่มต้นที่ดีสำหรับ codereview อภิปรายว่าทีดีดีมีอิทธิพลต่อสถาปัตยกรรมของโปรแกรมอย่างไรและจะทำให้ซอฟต์แวร์บำรุงรักษาง่ายขึ้นได้อย่างไร

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