วิธีการหลีกเลี่ยงข้อผิดพลาดของการวิเคราะห์แบบคงที่


17

ฉันทำงานที่ บริษัท ที่ทำคะแนนได้ 11 จาก Joel Test - อย่างน้อยก็ในกระดาษ

อย่างไรก็ตามในทางปฏิบัติไม่มีอะไรทำงานได้ดีอย่างที่คาดหวังและโครงการนี้ใช้DEFCON 1มาครึ่งปีแล้ว ตอนนี้เพื่อนส่วนใหญ่ของฉันมีความสุขถ้าพวกเขาสามารถกลับบ้านเวลา 18.00 น. - ในวันอาทิตย์

หนึ่งในแนวทางปฏิบัติที่ดีที่ทำให้ฉันไม่ทำงานคือการใช้เครื่องมือวิเคราะห์แบบคงที่ โครงการทั้งสองแทร็ค GCC คำเตือน -Wall และเป็นกรรมสิทธิ์และมีราคาแพงมาก"C / C ++"เครื่องมือ

คำเตือนของ Gcc ทำบ่อยกว่าไม่ได้ชี้ไปที่ข้อผิดพลาดที่แท้จริง

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

การปฏิบัติตามมาตรฐานคือผู้คนถูกกดเพื่อให้ทุกคำเตือนปิดขึ้น โปรดทราบว่านี่ไม่รวมคำเตือนที่เป็นเท็จบวกส่วนใหญ่นี่ไม่ใช่ปัญหา

ผลลัพธ์คือ:

  1. ผู้คนเพิ่มการปลดเปลื้องประเภทให้กับทุกค่าและให้กับทุกข้อโต้แย้งที่ซ่อนชนิดที่มีปัญหาจริงในกระบวนการ
  2. ผู้คนแนะนำโดยข้อบกพร่องหนึ่งหรือใช้คุณสมบัติภาษาที่มีปัญหาที่แตกต่างกัน (strlen แทน sizeof, strncpy แทน strcpy ฯลฯ )
  3. คำเตือนถูกปิดเสียง
  4. รายงานข้อผิดพลาดเริ่มกลิ้งเข้ามา

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

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

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


1
หมายเหตุด้านข้าง: GCC นอกเหนือจาก« -Wall »ยังมีตัวเลือก« -Wextra »และคำเตือนเพิ่มเติมที่ไม่รวมอยู่ด้วยเหตุผลบางประการใน metaoptions ทั้งสอง ดูเอกสารสำหรับข้อมูลเพิ่มเติม โดยทั่วไปตัวเลือกทุกตัวจะมีการพูดถึงถ้าเปิดใช้งานโดยการใช้เมตาโอชั่น ดังนั้นเพื่อค้นหาสิ่งที่ไม่ได้เปิดใช้งานคุณอาจต้องการไฮไลต์เอกสารทั้งหมดทั้งคำว่า "-Wall" และ "-Wextra" และคุณจะเห็นว่ายังไม่ได้ใช้
Hi-Angel

ฉันต้องการเพิ่มด้วยว่าฉันสงสัยว่า GCC ไม่ได้รวม« -Wextra »ไว้ใน« -Wall »มาก ฉันเชื่อว่าบางส่วนของสถานะเหล่านี้มีประโยชน์เป็นพิเศษ ; อย่างน้อยคำเตือนเหล่านี้ทำให้ฉันเป็นอิสระจากการดีบักนานหนึ่งชั่วโมง
Hi-Angel

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

คำตอบ:


16

อย่างไรก็ตามในทางปฏิบัติไม่มีอะไรทำงานได้ดีอย่างที่คาดหวังและโครงการนี้ใช้ DEFCON 1 มาครึ่งปีแล้ว ตอนนี้เพื่อนส่วนใหญ่ของฉันมีความสุขถ้าพวกเขาสามารถกลับบ้านเวลา 18.00 น. - ในวันอาทิตย์

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

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

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


คุณช่วยให้การอ้างอิงงานวิจัยได้ประมาณ 40 ชั่วโมงต่อสัปดาห์หรือไม่

11
ที่นี่และที่นี่เพียงเพื่อเริ่ม มีการบันทึกไว้อย่างดีว่าคุณไม่สามารถทำงานได้มากกว่า 40 ชั่วโมงต่อสัปดาห์ Google ง่ายๆจะพบคุณรีมบทความ
DeadMG

5
การแก้ไขข้อผิดพลาดเล็กน้อยที่สำคัญ แต่ IMHO: การ จำกัด 40 ชั่วโมง / สัปดาห์เป็นค่าเฉลี่ยโดยประมาณและกฎนี้ใช้สำหรับระยะเวลานานเท่านั้น มันก็โอเคสำหรับทีมที่จะเพิ่มชั่วโมงพิเศษก่อนกำหนดเวลาที่สำคัญจากนั้นกู้คืนหลังจากนั้น นอกจากนี้ขีด จำกัด จะแตกต่างกันไปตามผู้คนและเมื่อเวลาผ่านไป - บางคนสามารถทำงานได้ 43 ชั่วโมงต่อสัปดาห์โดยไม่มีปัญหาส่วนคนอื่น ๆ เพียง 35 คนและอีกหนึ่งคนมีประสิทธิผลมากกว่าในบางสัปดาห์ อย่างไรก็ตามการทำงานล่วงเวลาที่สำคัญเป็นเวลานานกว่าสองสามสัปดาห์ติดต่อกันย่อมทำให้เกิดปัญหาร้ายแรง
PéterTörök

13

ฉันทำงานที่ บริษัท ที่ทำคะแนนได้ 11 จาก Joel Test - อย่างน้อยก็ในกระดาษ

การทดสอบนั้นเกี่ยวข้องกับ บริษัท ซอฟต์แวร์เพียงเล็กน้อยเท่านั้น ฉันไม่เข้าใจ hype เกี่ยวกับเรื่องนี้ คุณสามารถทำคะแนน 12 และยังมีโปรแกรมเมอร์อึ 100% คนมีความสำคัญมากกว่าเครื่องมือ

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

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

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

มาตรฐาน MISRA-C อุทิศทั้งบทเพื่ออธิบายกฎการแปลงโดยนัยที่เป็นอันตรายเหล่านี้จากนั้นพวกเขาได้เพิ่มกฎที่ซับซ้อนมากมายสำหรับวิธีการหลีกเลี่ยงข้อบกพร่องที่เกิดจากการแปลงโดยนัย สิ่งนี้มีผลกระทบค่อนข้างน้อยต่อเครื่องวิเคราะห์แบบคงที่ทั้งหมดในตลาด

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

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

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

ไม่มีวิธีที่ง่ายรอบ ๆ มัน ปัญหาที่แท้จริงไม่ใช่เครื่องมือ แต่เป็นภาษา C ที่คลุมเครือ ดูเหมือนว่าจะเป็นภาษาง่าย ๆ เพียงครู่เดียว แต่มีกลไกที่ไร้เหตุผลและแปลก ๆ มากมายเกิดขึ้นระหว่างบรรทัด และยังมีหลายร้อยกรณีของพฤติกรรมที่ไม่ได้กำหนด / ไม่ระบุ / impl.specific ในภาษา ส่วนใหญ่คุณต้องเรียนรู้และหลีกเลี่ยง

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


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

@qpr มันไม่ได้ทดสอบนายจ้างเช่นกันเพียงความตั้งใจของนายจ้างที่จะใช้จ่ายเงินในการพัฒนาซอฟต์แวร์ สิ่งต่างๆเช่นขั้นตอนการสรรหาเป้าหมายขององค์กรความรู้ด้านการตลาด ฯลฯ ไม่ได้กล่าวถึง ฉันคิดว่า บริษัท "ฟองสบู่" ส่วนใหญ่จะได้คะแนน 12 จากการทดสอบนั้นโดยผู้บริหารที่ไม่รู้ด้วยซ้ำว่าผลิตภัณฑ์ใดที่กำลังพัฒนาหรือหากมีตลาดใด ๆ สำหรับพวกเขาเลย

4

ยังไม่ชัดเจนว่าคุณจะถามถึงวิธีการแก้ไขปัญหาหรือวิธีการหลีกเลี่ยงปัญหาตั้งแต่แรก ฉันสมมติว่าหลัง

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

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

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

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


3

นอกเหนือจากคำตอบที่ยอดเยี่ยมของ user29079 แล้วฉันต้องการเพิ่มข้อบกพร่องอีกหนึ่งอย่างของภาษา C ซึ่งเพิ่มปัญหา ฉันไม่ได้ตระหนักถึงข้อบกพร่องนี้จนกว่าฉันจะย้ายไปที่จาวา

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

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

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

ดังนั้นนี่เป็นกรณีของเป้าหมายที่ขัดแย้งกัน; ความขัดแย้ง

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

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

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

ในจาวาคุณสามารถใส่คำนำหน้าพารามิเตอร์แต่ละตัวเพื่อใช้งานได้ @SuppressWarnings()เพื่อใช้งานได้เพื่อปิดการใช้งานคำเตือนเฉพาะซึ่งอาจใช้กับพารามิเตอร์เฉพาะนั้นเท่านั้น

อย่างไรก็ตามเท่าที่ฉันรู้ C ไม่เคยสนับสนุนกลไกมาตรฐานใด ๆ สำหรับการยับยั้งการเลือกคำเตือนในข้อความสั่งและคอมไพเลอร์บางตัวที่ใช้กลไกกรรมสิทธิ์ของตนเองทำเช่นนั้นอย่างชาญฉลาดตัวอย่างเช่น#pragma warning (nnn:N)คำสั่งของ Microsoft C. ปัญหากับคำสั่งเหล่านี้ คือคุณต้องการคำสั่งสองบรรทัดเพื่อที่จะยับยั้งคำเตือนสำหรับคำสั่งเดียวและปล่อยให้คำเตือนนั้นเปิดใช้งานสำหรับคำสั่งที่ตามมา ดังนั้นโปรแกรมเมอร์ C จึงมีความเป็นไปได้สูงที่จะเลิกใช้คำเตือนในแต่ละข้อความแม้ว่าพวกเขาจะรู้ว่าคำเตือนนี้เฉพาะในข้อความนี้ก็ไม่เป็นไร


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


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

2

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

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

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

หากคุณต้องการจัดการทีมซอฟต์แวร์ที่เขียนโค้ด C หรือ C ++ บางอย่างฉันต้องบอกก่อนว่าอะไรคือเป้าหมายหลักของโครงการ หากการเขียนรหัสปราศจากข้อผิดพลาดมีความสำคัญสูงสุด (เช่นแอปโซเชียลสุดยอดเยี่ยมใหม่สำหรับ iOS และ Android ไม่เหมาะกับเรื่องนี้) จากนั้นใช้การวิเคราะห์แบบคงที่แม้อาจเป็นไปตามข้อกำหนดอย่างเป็นทางการและการตรวจสอบอย่างเป็นทางการ แต่ถ้าเป็นเช่นนี้การเลือกโปรแกรมเมอร์ที่ดีและทำให้พวกเขาทำงานในสภาพแวดล้อมที่มีสติด้วยปริมาณงานที่เพียงพอและเหมาะสม 40 ชั่วโมงต่อสัปดาห์นั้นสำคัญกว่า

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

จุดล่าง: กำหนดเป้าหมายของคุณจากนั้นกำหนดเครื่องมือและกระบวนการที่คุณใช้อย่าปล่อยให้เครื่องมือที่มีอยู่กำหนดกระบวนการ (ตามเป้าหมาย) เนื่องจากการจัดการ (ไม่ดี) อาจต้องการบังคับคุณ


1

ตามที่ระบุไว้ในคำตอบของ k.steff เครื่องมือการวิเคราะห์แบบคงที่สำหรับ 'C' จะมีประโยชน์หากคุณกำลังสร้างซอฟต์แวร์ในสถานการณ์ที่สำคัญ (ซอฟต์แวร์บนเครื่องบิน) และต้องใช้งานตั้งแต่วันแรก (ไม่ใช่หลังจากการพัฒนาเป็นเวลาหลายเดือน )

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

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

ดังนั้นความคิดเห็นของฉันคือคุณต้องหลีกเลี่ยงเครื่องมือราคาแพงและใช้เวลานานเหล่านี้หรือใช้เพื่อทำให้คน 'พิษ' ยุ่ง


1

ฉันทำงานที่ บริษัท ที่ทำคะแนนได้ 11 จาก Joel Test - อย่างน้อยก็ในกระดาษ

การตรวจสอบความถูกต้องโดยการทดสอบ Joel ไม่ใช่วิธีการปฏิบัติที่ดี การทำให้เป็นโมฆะโดย Joel Test เป็นวิธีการหนึ่งในการปฏิบัติที่ไม่ดี / ขาดหายไป กล่าวอีกนัยหนึ่งก็สามารถมองเห็นได้ตามความจำเป็น แต่ไม่เพียงพอ

ตอนนี้เพื่อนส่วนใหญ่ของฉันมีความสุขถ้าพวกเขาสามารถกลับบ้านเวลา 18.00 น. - ในวันอาทิตย์

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

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

ใช่มีวิธีใช้การวิเคราะห์รหัสแบบคงที่ในลักษณะที่มีสติ

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

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

การปลดเปลื้องโดยนัยจะถูกขึ้นบัญชีดำในหนังสือสไตล์ของพวกเขาด้วย

ดูเหมือนว่าปัญหาความสามารถในการจัดการไม่ใช่ปัญหาการวิเคราะห์แบบคงที่

ผลลัพธ์คือ:

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

ผู้คนแนะนำโดยข้อบกพร่องหนึ่งหรือใช้คุณสมบัติภาษาที่มีปัญหาที่แตกต่างกัน (strlen แทน sizeof, strncpy แทน strcpy ฯลฯ )

คำเตือนถูกปิดเสียง

รายงานข้อผิดพลาดเริ่มกลิ้งเข้ามา

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

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