คำนำ
นี่เป็นงานที่น่ากลัวอย่างแน่นอนและมีพื้นที่มากมายที่จะครอบคลุม ดังนั้นฉันจึงแนะนำอย่างนอบน้อมว่านี่เป็นแนวทางที่ครอบคลุมสำหรับทีมของคุณด้วยตัวชี้ไปยังเครื่องมือที่เหมาะสมและสื่อการเรียนรู้
ข้อควรจำ: สิ่งเหล่านี้เป็นแนวทางและมีความตั้งใจที่จะนำมาปรับใช้หรือลดลงตามสถานการณ์
ระวัง:การทิ้งข้อมูลทั้งหมดนี้ไว้ในทีมในครั้งเดียวน่าจะล้มเหลวมากที่สุด คุณควรพยายามที่จะเลือกองค์ประกอบเชอร์รี่ที่จะช่วยให้คุณได้เหงื่อที่ดีที่สุดและแนะนำพวกเขาอย่างช้าๆทีละครั้ง
หมายเหตุ:ไม่ใช่ทั้งหมดนี้ใช้โดยตรงกับระบบการเขียนโปรแกรมภาพเช่น G2 สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีจัดการกับสิ่งเหล่านี้ให้ดูที่ส่วนท้ายที่ท้าย
บทสรุปผู้บริหารสำหรับคนใจร้อน
- กำหนดโครงสร้างโครงการที่เข้มงวดด้วย:
- โครงการแม่แบบ ,
- การประชุมการเข้ารหัส ,
- คุ้นเคยระบบสร้าง ,
- และชุดแนวทางการใช้งานสำหรับโครงสร้างพื้นฐานและเครื่องมือของคุณ
- ติดตั้งSCMที่ดีและตรวจสอบให้แน่ใจว่าพวกเขารู้วิธีใช้
- ชี้ไปที่IDEsที่ดีสำหรับเทคโนโลยีของพวกเขาและตรวจสอบให้แน่ใจว่าพวกเขารู้วิธีใช้พวกเขา
- ใช้เครื่องตรวจสอบคุณภาพรหัสและการรายงานอัตโนมัติในระบบบิลด์
- เชื่อมโยงระบบการสร้างเข้ากับการรวมอย่างต่อเนื่องและระบบการตรวจสอบอย่างต่อเนื่อง
- ด้วยความช่วยเหลือของดังกล่าวข้างต้นระบุคุณภาพรหัส "ฮอตสปอต"และrefactor
ตอนนี้สำหรับรุ่นยาว ... โปรดระวังตัวเอง!
ความแข็งแกร่ง (บ่อยครั้ง) ดี
นี่เป็นความเห็นที่ถกเถียงกันเนื่องจากความแข็งแกร่งมักจะถูกมองว่าเป็นพลังในการต่อต้าน มันเป็นความจริงสำหรับบางเฟสของบางโครงการ แต่เมื่อคุณเห็นว่ามันเป็นโครงสร้างสนับสนุนกรอบที่จะไปคาดเดามันจะช่วยลดปริมาณของเวลาและความพยายามที่สูญเปล่าอย่างมาก ทำให้มันใช้ได้ผลสำหรับคุณไม่ใช่กับคุณ
ความแข็งแกร่ง = กระบวนการ / ขั้นตอน
การพัฒนาซอฟต์แวร์ต้องการกระบวนการและขั้นตอนที่ดีด้วยเหตุผลเดียวกันกับที่โรงงานเคมีหรือโรงงานมีคู่มือขั้นตอนการฝึกซ้อมและแนวทางฉุกเฉิน: การป้องกันผลลัพธ์ที่ไม่ดีการคาดการณ์ที่เพิ่มขึ้นเพิ่มผลผลิตสูงสุด ...
ความแข็งแกร่งมาในการดูแล แต่!
ความแข็งแกร่งของโครงสร้างโครงการ
หากแต่ละโครงการมาพร้อมกับโครงสร้างของตัวเองคุณ (และผู้มาใหม่) จะหายไปและจำเป็นต้องรับจากศูนย์ทุกครั้งที่คุณเปิด คุณไม่ต้องการสิ่งนี้ในร้านขายซอฟต์แวร์ระดับมืออาชีพและคุณไม่ต้องการสิ่งนี้ในห้องปฏิบัติการ
ความแข็งแกร่งของระบบ Build
ถ้าแต่ละโครงการมีลักษณะที่แตกต่างกันมีโอกาสที่ดีที่พวกเขายัง
สร้างความแตกต่าง งานสร้างไม่ควรต้องการการวิจัยมากเกินไปหรือการคาดเดามากเกินไป คุณต้องการที่จะสามารถที่จะทำในสิ่งที่เป็นที่ยอมรับและไม่จำเป็นต้องกังวลเกี่ยวกับข้อมูลเฉพาะ: configure; make install
, ant
,
mvn install
ฯลฯ ...
การนำระบบบิลด์เดียวกันกลับมาใช้ใหม่และทำให้มีการพัฒนาตลอดเวลายังช่วยให้มั่นใจในระดับคุณภาพที่สอดคล้องกัน
คุณต้องมีความรวดเร็วREADME
ในการชี้เฉพาะโครงการและให้คำแนะนำผู้ใช้ / นักพัฒนา / นักวิจัยอย่างสง่างามหากมี
นอกจากนี้ยังช่วยอำนวยความสะดวกในส่วนอื่น ๆ ของโครงสร้างพื้นฐานการสร้างของคุณเช่น:
ดังนั้นโปรดสร้างงานของคุณ (เช่นโครงการของคุณ) ให้ทันสมัย แต่ทำให้เข้มงวดขึ้นเมื่อเวลาผ่านไปและมีประสิทธิภาพมากขึ้นในการรายงานการละเมิดและการปฏิบัติที่ไม่ดี
อย่าบูรณาการล้อและนำสิ่งที่คุณได้ทำไปแล้ว
อ่านหนังสือที่แนะนำ:
ความแข็งแกร่งในการเลือกภาษาโปรแกรม
คุณไม่สามารถคาดหวังได้โดยเฉพาะในสภาพแวดล้อมการวิจัยเพื่อให้ทุกทีม (และแม้แต่นักพัฒนาน้อยลง) ใช้ภาษาและเทคโนโลยีเดียวกัน อย่างไรก็ตามคุณสามารถระบุชุดของเครื่องมือ "สนับสนุนอย่างเป็นทางการ" และสนับสนุนให้ใช้ ส่วนที่เหลือไม่มีเหตุผลที่ดีไม่ควรได้รับอนุญาต (นอกเหนือจากต้นแบบ)
ทำให้สแต็คเทคโนโลยีของคุณง่ายและการบำรุงรักษาและทักษะที่จำเป็นให้กว้างที่สุด: แกนกลางที่แข็งแกร่ง
ความเข้มงวดของอนุสัญญาและแนวทางการเข้ารหัส
การประชุมการเข้ารหัสและแนวทางเป็นสิ่งที่ช่วยให้คุณสามารถพัฒนาทั้งตัวตนเป็นทีมและร่วมกันศัพท์แสง คุณไม่ต้องการที่จะเข้าใจผิดกับดินแดนที่ไม่ระบุตัวตนทุกครั้งที่คุณเปิดไฟล์ต้นฉบับ
กฎไร้สาระที่ทำให้ชีวิตยากขึ้นหรือห้ามการกระทำที่ชัดเจนในขอบเขตที่การกระทำที่ถูกปฏิเสธโดยอาศัยการละเมิดเพียงครั้งเดียวเป็นภาระ อย่างไรก็ตาม:
วิธีการส่วนบุคคล:ฉันก้าวร้าวเมื่อพูดถึงการเขียนโค้ดบางคนถึงกับบอกว่านาซีเพราะฉันเชื่อว่ามี
ภาษากลางเป็นสไตล์ที่เป็นที่รู้จักสำหรับทีมของฉัน เมื่อรหัสอึได้รับการตรวจสอบในนั้นมันโดดเด่นเหมือนเจ็บเย็นบนใบหน้าของดาราฮอลลีวูด: มันก่อให้เกิดการตรวจสอบและการกระทำโดยอัตโนมัติ ในความเป็นจริงบางครั้งฉันก็ไปไกลเท่าที่จะสนับสนุนการใช้ตะขอก่อนการกระทำที่จะปฏิเสธการกระทำที่ไม่สอดคล้อง ดังที่กล่าวไว้มันไม่ควรบ้าเกินไปและได้รับผลตอบแทนเพิ่ม: ควรขับเคลื่อนด้วย แนะนำสิ่งเหล่านี้อย่างช้าๆโดยเฉพาะตอนเริ่มต้น แต่เป็นวิธีที่ดีกว่าการใช้เวลามากในการแก้ไขรหัสที่ผิดพลาดซึ่งคุณไม่สามารถทำงานกับปัญหาจริงได้
บางภาษาบังคับใช้สิ่งนี้ด้วยการออกแบบ:
ตรวจสอบให้แน่ใจว่ารหัสเน่าไม่สามารถผ่านได้ การประชุมรหัส , บูรณาการอย่างต่อเนื่องและการตรวจสอบอย่างต่อเนื่อง , การเขียนโปรแกรมคู่และตรวจสอบรหัสเป็นคลังแสงของคุณกับปีศาจนี้
นอกจากนี้ตามที่คุณเห็นด้านล่างรหัสคือเอกสารประกอบและเป็นอีกพื้นที่หนึ่งที่อนุสัญญาส่งเสริมการอ่านและความชัดเจน
ความแข็งแกร่งของเอกสาร
เอกสารประกอบไปด้วยรหัส รหัสตัวเองเป็นเอกสาร แต่จะต้องมีคำแนะนำที่ชัดเจนเกี่ยวกับวิธีการสร้างใช้และบำรุงรักษาสิ่งต่าง ๆ
การใช้จุดควบคุมเดียวสำหรับเอกสารประกอบ (เช่น WikiWiki หรือ DMS) เป็นสิ่งที่ดี สร้างช่องว่างสำหรับโครงการช่องว่างสำหรับการสุ่มและการทดลองเพิ่มเติม ให้ช่องว่างทั้งหมดนำกฎและระเบียบทั่วไปกลับมาใช้ซ้ำ พยายามทำให้มันเป็นส่วนหนึ่งของจิตวิญญาณของทีม
คำแนะนำส่วนใหญ่ที่ใช้กับรหัสและเครื่องมือก็ใช้กับเอกสารประกอบ
ความแข็งแกร่งในความคิดเห็นของรหัส
ความคิดเห็นเกี่ยวกับโค้ดดังกล่าวข้างต้นเป็นเอกสารประกอบ นักพัฒนาซอฟต์แวร์ต้องการแสดงความรู้สึกเกี่ยวกับรหัสของพวกเขา (ส่วนใหญ่เป็นความภาคภูมิใจและความยุ่งยากถ้าคุณถามฉัน) ดังนั้นจึงไม่ใช่เรื่องผิดปกติสำหรับพวกเขาที่จะแสดงสิ่งเหล่านี้โดยไม่มีเงื่อนไขที่ไม่แน่นอนในความคิดเห็น (หรือแม้แต่รหัส) เมื่อชิ้นข้อความที่เป็นทางการมากขึ้นสามารถสื่อความหมายเดียวกันโดยใช้คำย่อหรือละครที่น้อยลง มันตกลงที่จะให้ใบไม่กี่ผ่านเพื่อความสนุกสนานและประวัติศาสตร์เหตุผล: มันก็ยังเป็นส่วนหนึ่งของการพัฒนาวัฒนธรรมทีม แต่มันเป็นสิ่งสำคัญมากที่ทุกคนรู้ว่าสิ่งที่เป็นที่ยอมรับและสิ่งที่ไม่และที่ความคิดเห็นของเสียงเป็นเพียงที่:
เสียง
ความแข็งแกร่งในบันทึกการกระทำ
บันทึกการกระทำไม่ใช่ "ขั้นตอน" ที่น่ารำคาญและไร้ประโยชน์ในวงจรชีวิตของ SCM ของคุณ: คุณไม่ได้ข้ามมันกลับบ้านทันเวลาหรือทำภารกิจต่อไปหรือติดต่อกับเพื่อนที่ออกไปทานอาหารกลางวัน พวกเขาสำคัญและเช่นเดียวกับไวน์ที่ดียิ่งมีเวลามากเท่าไหร่ที่จะมีค่ามากขึ้น ดังนั้นพวกเขาถูกต้อง ฉันรู้สึกงุนงงเมื่อเห็นเพื่อนร่วมงานเขียนหนึ่งสมุทรสำหรับคอมมิชชันยักษ์หรือแฮ็คที่ไม่ชัดเจน
มีการผูกมัดด้วยเหตุผลและเหตุผลนั้น ISN'T ไม่ได้แสดงอย่างชัดเจนโดยรหัสของคุณและบันทึกการคอมมิทบรรทัดเดียวที่คุณป้อน มีมากกว่านั้น
บรรทัดของรหัสแต่ละคนมีเรื่องราวและประวัติศาสตร์ ความแตกต่างสามารถบอกเล่าประวัติของมันได้ แต่คุณต้องเขียนเรื่องราวของมัน
เหตุใดฉันจึงอัปเดตบรรทัดนี้ -> เนื่องจากอินเทอร์เฟซเปลี่ยนไป
ทำไมอินเทอร์เฟซเปลี่ยน? -> เนื่องจากไลบรารี่ L1 กำลังกำหนดว่าอัปเดตแล้ว
เหตุใดจึงมีการอัปเดตห้องสมุด -> เนื่องจากไลบรารี่ L2 นั้นเราต้องการฟีเจอร์ F ขึ้นอยู่กับไลบรารี่ L1
และฟีเจอร์ X คืออะไร? -> ดูภารกิจ 3456 ในตัวติดตามปัญหา
มันไม่ใช่ตัวเลือก SCM ของฉันและอาจไม่ใช่สิ่งที่ดีที่สุดสำหรับห้องปฏิบัติการของคุณเช่นกัน แต่Git
ได้รับสิทธินี้และพยายามที่จะบังคับให้คุณเขียนบันทึกที่ดีกว่ามากที่สุดระบบ SCMs อื่น ๆ โดยใช้และshort logs
long logs
เชื่อมโยง ID งาน (ใช่คุณจำเป็นต้องใช้) และปล่อยให้สรุปทั่วไปสำหรับshortlog
และขยายในบันทึกยาว: เขียนเซ็ตของเรื่อง
เป็นบันทึก:มีไว้ที่นี่เพื่อติดตามและบันทึกการอัปเดต
Rule of Thumb:หากคุณกำลังค้นหาบางอย่างเกี่ยวกับการเปลี่ยนแปลงนี้ในภายหลังมีแนวโน้มที่จะตอบคำถามของคุณหรือไม่
โครงการเอกสารและรหัสยังมีชีวิตอยู่
ทำให้พวกเขาซิงค์มิฉะนั้นพวกเขาจะไม่สร้างเอนทิตี้ของ symbiotic นั้นอีกต่อไป มันทำงานได้อย่างมหัศจรรย์เมื่อคุณ:
- ล้างคอมมิทบันทึกใน SCM ของคุณพร้อมลิงค์ไปยัง ID งานในตัวติดตามปัญหาของคุณ
- ที่ตัวตั๋วของผู้ติดตามตัวนี้เชื่อมโยงกับการเปลี่ยนแปลงใน SCM ของคุณ (และอาจเป็นไปได้กับการสร้างในระบบ CI ของคุณ)
- และระบบเอกสารที่เชื่อมโยงไปยังสิ่งเหล่านี้ทั้งหมด
รหัสและเอกสารจะต้องเหนียว
ความแข็งแกร่งในการทดสอบ
กฎของ Thumb:
- รหัสใหม่ใด ๆ จะมาพร้อมกับการทดสอบหน่วย (อย่างน้อย)
- รหัสมรดกที่ได้รับการปรับสภาพใหม่จะมาพร้อมกับการทดสอบหน่วย
แน่นอนความต้องการเหล่านี้:
- เพื่อทดสอบสิ่งที่มีค่า (หรือเสียเวลาและพลังงาน)
- ที่จะเขียนดีและแสดงความคิดเห็น (เช่นเดียวกับรหัสอื่น ๆ ที่คุณเช็คอิน)
มันเป็นเอกสารเช่นกันและช่วยในการร่างสัญญาของรหัสของคุณ โดยเฉพาะอย่างยิ่งถ้าคุณใช้TDD แม้ว่าคุณจะทำไม่ได้คุณก็ต้องการมันเพื่อความสบายใจ พวกเขาเป็นเครือข่ายความปลอดภัยของคุณเมื่อคุณรวมรหัสใหม่ (การบำรุงรักษาหรือคุณสมบัติ) และหอสังเกตการณ์ของคุณเพื่อป้องกันรหัสเน่าและความล้มเหลวด้านสิ่งแวดล้อม
แน่นอนคุณควรไปต่อและมีการทดสอบการรวมและ
การทดสอบการถดถอยสำหรับแต่ละข้อผิดพลาดที่คุณทำซ้ำได้
ความแข็งแกร่งในการใช้งานของเครื่องมือ
ไม่เป็นไรสำหรับนักพัฒนา / นักวิทยาศาสตร์เป็นครั้งคราวเพื่อต้องการลองตัวตรวจสอบแบบคงที่ใหม่บนแหล่งที่มาสร้างกราฟหรือแบบจำลองโดยใช้ตัวอื่นหรือใช้โมดูลใหม่โดยใช้ DSL แต่จะดีที่สุดถ้ามีชุดเครื่องมือที่เป็นที่ยอมรับซึ่งสมาชิกในทีมทุกคนคาดว่าจะรู้และใช้
นอกเหนือจากนั้นให้สมาชิกใช้สิ่งที่พวกเขาต้องการตราบใดที่พวกเขาทั้งหมด:
- การผลิต ,
- ไม่ต้องการความช่วยเหลือเป็นประจำ
- ไม่สม่ำเสมอการปรับโครงสร้างพื้นฐานโดยทั่วไปของคุณ ,
- ไม่รบกวนโครงสร้างพื้นฐานของคุณ (โดยการแก้ไขพื้นที่ทั่วไปเช่นรหัสระบบการสร้างเอกสาร ... )
- ไม่ส่งผลกระทบต่อการทำงานของคนอื่น ,
- สามารถที่จะทันเวลาการดำเนินการใด ๆ ที่ได้รับการร้องขอ
หากไม่ใช่ในกรณีนี้ให้บังคับใช้ว่าพวกเขากลับเป็นค่าเริ่มต้น
ความแข็งแกร่งเทียบกับความคล่องตัวการปรับตัวการสร้างต้นแบบและกรณีฉุกเฉิน
ความยืดหยุ่นสามารถทำได้ดี ให้คนบางครั้งใช้สับเป็นวิธีที่รวดเร็ว-N-สกปรกหรือเครื่องมือที่ชื่นชอบสัตว์เลี้ยงที่จะได้งานทำ
ดี ไม่เคยปล่อยให้มันกลายเป็นนิสัยและไม่เคยปล่อยให้รหัสนี้กลายเป็น codebase ที่เกิดขึ้นจริงที่จะสนับสนุน
Team Spirit Matters
พัฒนาสำนึกใน Codebase ของคุณ
- พัฒนาความรู้สึกภาคภูมิใจในรหัส
- ใช้แผ่นผนัง
- กระดานผู้นำสำหรับเกมบูรณาการอย่างต่อเนื่อง
- wallboards สำหรับการจัดการปัญหาและการนับข้อบกพร่อง
- ใช้ติดตามปัญหา / บั๊ก
หลีกเลี่ยงเกมตำหนิ
- ห้ามใช้บูรณาการ / เกมการตรวจสอบอย่างต่อเนื่องต่อเนื่อง: มันส่งเสริมที่ดีมีมารยาทและการแข่งขันการผลิต
- ติดตามข้อบกพร่อง: มันเป็นเพียงการดูแลที่ดี
- ทำการระบุสาเหตุที่แท้จริง: มันเป็นเพียงกระบวนการพิสูจน์อักษรในอนาคต
- แต่ไม่ได้กำหนดความผิด : มันเป็นเคาน์เตอร์ที่มีประสิทธิผล
มันเกี่ยวกับรหัสไม่ใช่เกี่ยวกับผู้พัฒนา
ทำให้ผู้พัฒนาตระหนักถึงคุณภาพของรหัสของพวกเขา แต่ทำให้พวกเขาเห็นรหัสเป็นเอนทิตีที่แยกออกมาและไม่ใช่ส่วนขยายของตัวเองซึ่งไม่สามารถวิพากษ์วิจารณ์ได้
เป็นความขัดแย้ง: คุณต้องส่งเสริมการเขียนโปรแกรม ego-lessสำหรับสถานที่ทำงานที่มีสุขภาพดี แต่ต้องพึ่งพา ego เพื่อจุดประสงค์ในการสร้างแรงบันดาลใจ
จากนักวิทยาศาสตร์ถึงโปรแกรมเมอร์
คนที่ไม่เห็นคุณค่าและภาคภูมิใจในโค้ดไม่ได้สร้างรหัสที่ดี เพื่อให้คุณสมบัตินี้ปรากฏขึ้นพวกเขาจำเป็นต้องค้นพบว่ามันมีค่าและสนุกแค่ไหน ความเป็นมืออาชีพที่แท้จริงและความปรารถนาที่จะทำสิ่งที่ดีนั้นไม่เพียงพอ: มันต้องการความรัก ดังนั้นคุณจะต้องเปิดให้นักวิทยาศาสตร์ของคุณเป็น
โปรแกรมเมอร์ (ในความรู้สึกขนาดใหญ่)
มีคนแย้งในความคิดเห็นว่าหลังจาก 10 ถึง 20 ปีในโครงการและรหัสของมันทุกคนจะรู้สึกผูกพัน บางทีฉันผิด แต่ฉันคิดว่าพวกเขาภูมิใจในผลลัพธ์ของรหัสและผลงานและมรดกของรหัสไม่ใช่ของรหัสเองหรือของการเขียน
จากประสบการณ์นักวิจัยส่วนใหญ่มองว่าการเขียนโค้ดเป็นสิ่งจำเป็นหรือเป็นการเบี่ยงเบนความสนุก พวกเขาต้องการให้มันทำงาน คนที่มีความเชี่ยวชาญในเรื่องนี้อยู่แล้วและผู้ที่มีความสนใจในการเขียนโปรแกรมนั้นง่ายต่อการโน้มน้าวให้ใช้แนวทางปฏิบัติที่ดีที่สุดและเปลี่ยนเทคโนโลยี คุณต้องพาพวกเขาไปครึ่งทาง
การบำรุงรักษารหัสเป็นส่วนหนึ่งของงานวิจัย
ไม่มีใครอ่านงานวิจัยเส็งเคร็ง นั่นเป็นเหตุผลที่พวกเขาได้รับการตรวจทานจากผู้อ่านตรวจสอบกลั่นปรับปรุงเขียนใหม่และได้รับการอนุมัติอีกครั้งจนกว่าจะถือว่าพร้อมสำหรับการเผยแพร่ เช่นเดียวกับวิทยานิพนธ์และรหัสฐาน!
ทำให้ชัดเจนว่าการปรับโครงสร้างโค้ดให้คงที่และการรีเฟรชคงที่จะป้องกันโค้ดเน่าและลดหนี้ทางเทคนิคและอำนวยความสะดวกในการใช้งานในอนาคตและการปรับตัวของงานสำหรับโครงการอื่น ๆ
ทำไมทั้งหมดนี้ ??!
ทำไมเราถึงต้องกังวลกับสิ่งต่าง ๆ ข้างต้น? สำหรับคุณภาพรหัส หรือว่าเป็น
รหัสคุณภาพ ...
แนวทางเหล่านี้มีจุดมุ่งหมายเพื่อผลักดันทีมของคุณสู่เป้าหมายนี้ บางแง่มุมทำได้โดยการแสดงให้พวกเขาเห็นวิธีและปล่อยให้พวกเขาทำ (ซึ่งดีกว่ามาก) และคนอื่น ๆ จับพวกเขาด้วยมือ (แต่นั่นคือวิธีที่คุณให้การศึกษาแก่ผู้คนและพัฒนานิสัย)
คุณจะรู้ได้อย่างไรว่าเป้าหมายอยู่ใกล้แค่เอื้อม
คุณภาพสามารถวัดได้
ไม่ได้เสมอในเชิงปริมาณ แต่มันเป็นที่วัด ดังที่กล่าวไว้คุณจะต้องพัฒนาความรู้สึกภาคภูมิใจในทีมของคุณและแสดงความคืบหน้าและผลลัพธ์ที่ดีเป็นกุญแจสำคัญ วัดคุณภาพของรหัสอย่างสม่ำเสมอและแสดงความคืบหน้าระหว่างช่วงเวลาและความสำคัญของมัน ทำย้อนหลังเพื่อไตร่ตรองสิ่งที่ได้ทำไปแล้วและมันทำให้สิ่งต่าง ๆ ดีขึ้นหรือแย่ลงได้อย่างไร
มีเครื่องมือที่ดีสำหรับการมีการตรวจสอบอย่างต่อเนื่อง โซนาร์เป็นที่นิยมในโลก Java แต่สามารถปรับให้เข้ากับเทคโนโลยีใด ๆ และมีคนอื่นอีกมากมาย เก็บรหัสของคุณไว้ใต้กล้องจุลทรรศน์และมองหาข้อบกพร่องและจุลินทรีย์ที่น่ารำคาญเหล่านี้
แต่ถ้ารหัสของฉันเสียแล้ว
จากทั้งหมดที่กล่าวมาเป็นเรื่องสนุกและน่ารักเหมือนการไปเที่ยว Never Land แต่มันไม่ใช่เรื่องง่ายที่จะทำเมื่อคุณมีโค้ดอึ (กองไอน้ำและมีกลิ่นเหม็น) อยู่แล้วและทีมลังเลที่จะเปลี่ยนแปลง
นี่คือความลับ: คุณจำเป็นต้องเริ่มที่ไหนสักแห่ง
เรื่องส่วนตัว:ในโครงการเราทำงานร่วมกับ codebase ที่มีน้ำหนักตั้งแต่ 650,000+ Java LOC, มากกว่า 200,000 บรรทัดของ JSPs, 40,000+ JavaScript LOC และ 400+ MBs ของการพึ่งพาไบนารี
หลังจากผ่านไปประมาณ 18 เดือนมี 500,000 Java LOC (MOSTLY CLEAN) , JSPs 150,000 บรรทัด, และ 38,000 JavaScript LOC โดยมีการอ้างอิงลงไปจนถึง 100MB แทบจะไม่ (และสิ่งเหล่านี้ไม่ได้อยู่ใน SCM ของเราอีกต่อไป!)
พวกเราทำได้อย่างไร เราทำทุกอย่างที่กล่าวมา หรือพยายามอย่างหนัก
มันเป็นความพยายามของทีม แต่เราค่อยๆฉีดกฎระเบียบและเครื่องมือในการตรวจสอบอัตราการเต้นของหัวใจของผลิตภัณฑ์ของเราอย่างช้า ๆขณะที่ "ลดไขมัน" อย่างเร่งรีบ: รหัสอึการพึ่งพาที่ไร้ประโยชน์ ... เราไม่ได้หยุดพัฒนาทั้งหมด ทำสิ่งนี้: เรามีช่วงเวลาแห่งความสงบและสัมพัทธ์เป็นครั้งคราวซึ่งเรามีอิสระที่จะคลั่งไคล้ codebase และฉีกมันออกเป็นส่วนใหญ่ แต่ส่วนใหญ่เราทำทั้งหมดโดยการเริ่มต้นโหมด "การทบทวนและ refactor" ทุกโอกาสที่เราได้รับ : ในระหว่างการสร้าง, ในระหว่างอาหารกลางวัน, ในระหว่างการแก้ไขข้อผิดพลาดในช่วงบ่ายวันศุกร์ ...
มี "งาน" ที่ยิ่งใหญ่บางส่วน ... การเปลี่ยนระบบการสร้างของเราจาก Ant build ยักษ์ของ 8500+ XML LOC เป็น Maven build แบบโมดูลที่หลากหลายเป็นหนึ่งในนั้น จากนั้นเราได้:
- โมดูลที่ชัดเจน (หรืออย่างน้อยก็ดีขึ้นมากแล้วและเรายังคงมีแผนใหญ่สำหรับอนาคต)
- การจัดการการพึ่งพาอัตโนมัติ (สำหรับการบำรุงรักษาและการอัพเดทง่าย ๆ และเพื่อกำจัด deps ที่ไร้ประโยชน์)
- การสร้างที่เร็วขึ้นง่ายขึ้นและทำซ้ำได้
- รายงานประจำวันเกี่ยวกับคุณภาพ
อีกอย่างคือการฉีด "เครื่องมือสายพาน - เครื่องมือ" แม้ว่าเราจะพยายามลดการพึ่งพา: Google Guava และ Apache Commons ลดขนาดโค้ดของคุณลงและลดพื้นผิวสำหรับข้อบกพร่องในรหัสของคุณเป็นจำนวนมาก
นอกจากนี้เรายังชักชวนแผนกไอทีของเราที่อาจใช้เครื่องมือใหม่ของเรา (JIRA, Fisheye, Crucible, Confluence, Jenkins) ได้ดีกว่าที่ใช้อยู่ เรายังคงต้องจัดการกับบางอย่างที่เราดูถูก (QC, Sharepoint และ SupportWorks ... ) แต่มันเป็นประสบการณ์ที่ได้รับการปรับปรุงโดยรวมโดยที่เหลืออีกห้อง
และทุกวันขณะนี้มีความมุ่งมั่นระหว่างหนึ่งถึงหลายสิบข้อตกลงที่จัดการเฉพาะกับการแก้ไขและการปรับโครงสร้างสิ่งต่าง ๆ บางครั้งเราทำลายสิ่งต่าง ๆ (คุณต้องการการทดสอบหน่วยและคุณควรเขียนสิ่งเหล่านั้นก่อนที่คุณจะทำการดัดแปลงสิ่งต่าง ๆ ) แต่โดยรวมแล้วคุณประโยชน์สำหรับขวัญกำลังใจของเราและสำหรับผลิตภัณฑ์นั้นมีมากมาย เราได้รับเปอร์เซ็นต์ของคุณภาพของรหัสในแต่ละครั้ง และมันสนุกที่ได้เห็นมันเพิ่มขึ้น !!!
หมายเหตุ:ต้องเขย่าอีกครั้งเพื่อให้มีที่ว่างสำหรับสิ่งใหม่และดีกว่า ในเรื่องเล็ก ๆ น้อย ๆ ของฉันแผนกไอทีของเราเป็นส่วนหนึ่งในการพยายามกำหนดบางสิ่งบางอย่างกับเราและผิดกับคนอื่น หรือบางทีพวกเขาใช้ในการได้รับสิทธิ สิ่งต่าง ๆ เปลี่ยนไป พิสูจน์ว่าพวกเขาเป็นวิธีที่ดีกว่าในการเพิ่มผลผลิตของคุณ รุ่นทดลองและต้นแบบมาถึงแล้วสำหรับสิ่งนี้
วงจรการสร้างโค้ดสปาเก็ตตี้ที่เพิ่มขึ้นอย่างลับสุดยอดเพื่อคุณภาพที่ยอดเยี่ยม
+-----------------+ +-----------------+
| A N A L Y Z E +----->| I D E N T I F Y |
+-----------------+ +---------+-------+
^ |
| v
+--------+--------+ +-----------------+
| C L E A N +<-----| F I X |
+-----------------+ +-----------------+
เมื่อคุณมีเครื่องมือที่มีคุณภาพที่ toolbelt ของคุณ:
วิเคราะห์รหัสของคุณด้วยเครื่องมือตรวจสอบคุณภาพรหัส
Linters, ตัววิเคราะห์แบบสแตติกหรืออะไรที่มีคุณ
ระบุของคุณที่สำคัญฮอตสปอตและผลไม้แขวนต่ำ
การละเมิดมีระดับความรุนแรงและคลาสขนาดใหญ่ที่มีระดับความรุนแรงสูงเป็นธงสีแดงขนาดใหญ่เช่นนี้จะปรากฏเป็น "ฮอตสปอต" ในมุมมองประเภทหม้อน้ำ / ฮีทแมป
แก้ไขฮอตสปอตก่อน
ช่วยเพิ่มผลกระทบของคุณในระยะเวลาอันสั้นเนื่องจากพวกเขามีมูลค่าทางธุรกิจสูงสุด การละเมิดหลักควรจัดการทันทีที่ปรากฏเนื่องจากเป็นช่องโหว่ความปลอดภัยที่อาจเกิดขึ้นหรือสาเหตุความผิดพลาดและมีความเสี่ยงสูงในการก่อให้เกิดความรับผิด (และในกรณีของคุณประสิทธิภาพที่ไม่ดีสำหรับห้องปฏิบัติการ)
ทำความสะอาดการละเมิดในระดับต่ำที่มีเรตติ้ง codebase อัตโนมัติ
ปรับปรุงอัตราส่วนสัญญาณต่อเสียงรบกวนเพื่อให้คุณสามารถเห็นการละเมิดที่สำคัญในเรดาร์ของคุณตามที่ปรากฏ บ่อยครั้งที่มีกองทัพขนาดใหญ่ที่มีการละเมิดเล็กน้อยในตอนแรกหากพวกเขาไม่เคยได้รับการดูแลและ codebase ของคุณถูกปล่อยให้เป็นอิสระ พวกเขาไม่ได้แสดง "ความเสี่ยง" ที่แท้จริง แต่จะทำให้การอ่านและการบำรุงรักษาของรหัสนั้นด้อยลง แก้ไขพวกเขาในขณะที่คุณพบพวกเขาในขณะที่ทำงานหรือโดยการทำความสะอาดเควสขนาดใหญ่ที่มีรหัสอัตโนมัติกวาดถ้าเป็นไปได้ ระวังการกวาดอัตโนมัติขนาดใหญ่ถ้าคุณไม่มีชุดทดสอบและระบบการรวมที่ดี ตรวจสอบให้แน่ใจว่าเห็นด้วยกับเพื่อนร่วมงานในเวลาที่เหมาะสมเพื่อเรียกใช้พวกเขาเพื่อลดความรำคาญ
ทำซ้ำจนกว่าคุณจะพอใจ
หากคุณยังคงใช้งานผลิตภัณฑ์นี้อยู่จะเป็นการพัฒนาอย่างต่อเนื่อง
เคล็ดลับง่ายๆสำหรับการดูแลบ้านที่ดี
ไม่ต้องเสียเวลาไปกับการใช้จ่ายต่อสัปดาห์จากไฟล์หนึ่งไปอีกไฟล์หนึ่งและท้ายสุดด้วยชุดการแก้ไขนับพันที่มีขนาดใหญ่ซึ่งครอบคลุมฟีเจอร์และโมดูลต่างๆ - ทำให้การติดตามในอนาคตเป็นเรื่องยาก ปัญหาหนึ่งในรหัส = ตั๋วหนึ่งใบในตัวติดตามของคุณ บางครั้งเซ็ตการแก้ไขอาจส่งผลกระทบต่อตั๋วหลายใบ แต่ถ้ามันเกิดขึ้นบ่อยเกินไปคุณอาจทำอะไรผิด
ภาคผนวก: การจัดการสภาพแวดล้อมการเขียนโปรแกรมด้วยภาพ
Walled Gardens of Bespoke Programming Systems
ระบบการตั้งโปรแกรมที่หลากหลายเช่น OP2 G2 เป็นสัตว์ที่แตกต่างกัน ...
ไม่มีที่มา "รหัส"
บ่อยครั้งที่พวกเขาไม่ให้คุณเข้าถึงการแสดงต้นฉบับของ "รหัส" ต้นฉบับของคุณ: มันอาจถูกเก็บไว้ในรูปแบบไบนารีที่เป็นกรรมสิทธิ์หรืออาจจะเก็บสิ่งต่าง ๆ ในรูปแบบข้อความ แต่ซ่อนไว้จากคุณ ระบบการเขียนโปรแกรมกราฟิกแบบ Bespoke นั้นไม่ใช่เรื่องแปลกในห้องปฏิบัติการวิจัยเนื่องจากมันทำให้กระบวนการทำงานของการประมวลผลข้อมูลซ้ำอัตโนมัติ
ไม่มีสัญญาตกลง
นอกเหนือจากของตัวเองนั่นคือ คุณมักถูก จำกัด โดยสภาพแวดล้อมการเขียนโปรแกรมดีบักเกอร์ของตนเองล่ามของตนเองเครื่องมือเอกสารและรูปแบบของตนเอง พวกเขามี
กำแพงล้อมรอบสวนยกเว้นในที่สุดหากพวกเขาดึงดูดความสนใจของใครบางคนที่มีแรงจูงใจมากพอที่จะทำวิศวกรรมรูปแบบของพวกเขาและสร้างเครื่องมือภายนอก - หากใบอนุญาตอนุญาต
ขาดเอกสาร
บ่อยครั้งสิ่งเหล่านี้เป็นระบบการเขียนโปรแกรมเฉพาะซึ่งใช้ในสภาพแวดล้อมที่ค่อนข้างปิด ผู้ที่ใช้งานพวกเขามักจะลงนามใน NDA และไม่เคยพูดเกี่ยวกับสิ่งที่พวกเขาทำ ชุมชนการเขียนโปรแกรมสำหรับพวกเขานั้นหายาก ทรัพยากรจึงขาดแคลน คุณติดอยู่กับการอ้างอิงอย่างเป็นทางการของคุณและนั่นคือมัน
บิตแดกดัน (และบ่อยครั้งที่น่าผิดหวัง) คือทุกสิ่งที่ระบบเหล่านี้สามารถทำได้โดยการใช้ภาษาการเขียนโปรแกรมหลักและวัตถุประสงค์ทั่วไปและอาจมีประสิทธิภาพมากกว่า แต่มันต้องมีความรู้เชิงลึกเกี่ยวกับการเขียนโปรแกรมในขณะที่คุณไม่สามารถคาดหวังว่านักชีววิทยานักเคมีหรือนักฟิสิกส์ของคุณ (เพื่อชื่อไม่กี่) ที่จะรู้เพียงพอเกี่ยวกับการเขียนโปรแกรมและแม้แต่น้อยที่จะมีเวลา (และปรารถนา) ระบบที่ซับซ้อนซึ่งอาจจะหรืออาจจะไม่ยาวนาน ด้วยเหตุผลเดียวกันกับที่เราใช้ DSL เรามีระบบการเขียนโปรแกรมตามความต้องการเหล่านี้
เรื่องเล็ก ๆ น้อยส่วนตัว 2:จริงๆแล้วฉันทำงานด้วยตัวเอง ฉันไม่ได้ทำการเชื่อมโยงกับคำขอของ OP แต่โครงการของฉันเป็นชุดของซอฟต์แวร์ประมวลผลข้อมูลขนาดใหญ่และการเชื่อมต่อข้อมูลระหว่างกัน (ส่วนใหญ่ใช้สำหรับการวิจัยทางชีวภาพสารสนเทศการดูแลสุขภาพและเครื่องสำอาง ความฉลาดหรือโดเมนใดก็ตามที่แสดงถึงการติดตามข้อมูลการวิจัยจำนวนมากทุกชนิดและการเตรียมเวิร์กโฟลว์การประมวลผลข้อมูลและ ETL) หนึ่งในแอปพลิเคชั่นเหล่านี้คือ IDE เชิงวิชวลที่ใช้ระฆังและนกหวีดปกติ: อินเตอร์เฟสลากและวาง, พื้นที่ทำงานโปรเจ็กต์เวอร์ชัน (ใช้ไฟล์ข้อความและ XML สำหรับพื้นที่เก็บข้อมูลเมตาดาต้า), ไดรเวอร์ที่ถอดได้หลายแหล่ง canvas ไปยังการออกแบบ pipelines เพื่อประมวลผลข้อมูลจากแหล่งข้อมูล N และในท้ายที่สุดจะสร้าง M outputed transforms และการสร้างภาพเงาที่เป็นไปได้และรายงานออนไลน์ที่ซับซ้อน (และการโต้ตอบ) ระบบการเขียนโปรแกรมวิชวลแบบ bespoke ทั่วไปของคุณซึ่งมีอาการของโรค NIH เล็กน้อยภายใต้ข้ออ้างในการออกแบบระบบที่ปรับให้เข้ากับความต้องการของผู้ใช้
และอย่างที่คุณคาดหวังมันเป็นระบบที่ดีมีความยืดหยุ่นค่อนข้างมากสำหรับความต้องการของมัน แต่บางครั้งก็ค่อนข้าง over-the-top ดังนั้นคุณสงสัยว่า "ทำไมไม่ใช้เครื่องมือบรรทัดคำสั่งแทน?" และน่าเสียดายที่เป็นผู้นำในขนาดกลาง ทีมที่ทำงานในโครงการขนาดใหญ่ให้กับผู้คนมากมายต่างใช้มันด้วยวิธีปฏิบัติที่ "ดีที่สุด" ที่แตกต่างกัน
เยี่ยมมากพวกเราถึงวาระแล้ว! - เราทำอะไรเกี่ยวกับมัน
ในท้ายที่สุดทั้งหมดข้างต้นยังคงถือ หากคุณไม่สามารถแยกการเขียนโปรแกรมส่วนใหญ่ออกจากระบบนี้เพื่อใช้เครื่องมือและภาษากระแสหลักมากขึ้นคุณต้อง "ปรับ" ให้เข้ากับข้อ จำกัด ของระบบของคุณ
เกี่ยวกับการกำหนดเวอร์ชันและการจัดเก็บ
ในท้ายที่สุดคุณสามารถเกือบทุกรุ่นสิ่งที่แม้จะมีข้อ จำกัด มากที่สุดและสภาพแวดล้อมที่มีกำแพงล้อมรอบ ส่วนใหญ่บ่อยครั้งที่ระบบเหล่านี้ยังมาพร้อมกับเวอร์ชันของตนเอง (ซึ่งน่าเสียดายที่ค่อนข้างพื้นฐานและเสนอให้เปลี่ยนกลับไปเป็นเวอร์ชันก่อนหน้าโดยไม่มีการมองเห็นมาก มันไม่ได้ใช้ชุดการเปลี่ยนแปลงที่แตกต่างอย่าง SCM ที่คุณเลือกและอาจไม่เหมาะสำหรับผู้ใช้หลายคนที่ส่งการเปลี่ยนแปลงพร้อมกัน
แต่ถึงกระนั้นหากพวกเขามีฟังก์ชั่นดังกล่าวบางทีทางออกของคุณคือปฏิบัติตามแนวทางมาตรฐานอุตสาหกรรมที่เรารักด้านบนและโอนไปยังระบบการเขียนโปรแกรมนี้ !!
หากระบบจัดเก็บข้อมูลเป็นฐานข้อมูลก็อาจทำให้ฟังก์ชั่นการส่งออกหรือสามารถสำรองในระดับระบบไฟล์ ถ้ามันใช้รูปแบบไบนารี่ที่กำหนดเองบางทีคุณสามารถลองทำมันด้วย VCS ที่รองรับข้อมูลไบนารีได้ดี คุณจะไม่มีการควบคุมอย่างละเอียด แต่อย่างน้อยคุณจะได้รับการปกป้องจากภัยพิบัติและมีการปฏิบัติตามการกู้คืนจากภัยพิบัติในระดับหนึ่ง
เกี่ยวกับการทดสอบ
ใช้การทดสอบของคุณภายในแพลตฟอร์มและใช้เครื่องมือภายนอกและงานแบ็คกราวน์เพื่อตั้งค่าการสำรองข้อมูลปกติ อาจเป็นไปได้ว่าคุณทำให้การทดสอบเหล่านี้เหมือนกับที่คุณทำกับโปรแกรมที่พัฒนาด้วยระบบการเขียนโปรแกรมนี้
แน่นอนว่ามันเป็นงานแฮ็คและไม่เป็นไปตามมาตรฐานของการเขียนโปรแกรม "ปกติ" แต่ความคิดคือการปรับให้เข้ากับระบบในขณะที่พยายามรักษากระบวนการพัฒนาซอฟต์แวร์ระดับมืออาชีพ
ถนนนั้นยาวและสูงชัน ...
เช่นเดียวกับสภาพแวดล้อมแบบเฉพาะเจาะจงและระบบการเขียนโปรแกรมตามความต้องการและในขณะที่เราเปิดเผยไว้ข้างต้นคุณจัดการกับรูปแบบแปลก ๆ ชุดเครื่องมือที่อาจเป็น clunky (หรือไม่สามารถใช้งานได้อย่าง จำกัด )
คำแนะนำ:พยายามใช้แนวทางข้างต้นนอกระบบการเขียนโปรแกรม bespoke ของคุณให้มากที่สุด สิ่งนี้ทำให้มั่นใจได้ว่าคุณสามารถพึ่งพาเครื่องมือ "ทั่วไป" ซึ่งมีการสนับสนุนที่เหมาะสมและไดรฟ์ชุมชน
วิธีแก้ปัญหา:เมื่อนี่ไม่ใช่ตัวเลือกให้ลองติดตั้งเฟรมเวิร์กส่วนกลางนี้ใหม่ใน "กล่อง" ของคุณ ความคิดคือการวางพิมพ์เขียวของแนวปฏิบัติที่ดีที่สุดที่เป็นมาตรฐานอุตสาหกรรมไว้ด้านบนของระบบการเขียนโปรแกรมของคุณและทำให้ดีที่สุด คำแนะนำยังคงใช้: กำหนดโครงสร้างและแนวทางปฏิบัติที่ดีที่สุดส่งเสริมความสอดคล้อง
น่าเสียดายที่สิ่งนี้บ่งบอกว่าคุณอาจต้องดำน้ำและทำงานขาจำนวนมหาศาล ดังนั้น...
คำพูดสุดท้ายที่มีชื่อเสียงและคำขอต่ำต้อย:
- บันทึกเอกสารทุกอย่างที่คุณทำ
- แบ่งปันประสบการณ์ของคุณ
- โอเพนซอร์สเครื่องมือใด ๆ ที่คุณเขียน
เมื่อทำสิ่งนี้ทั้งหมดคุณจะ:
- ไม่เพียงเพิ่มโอกาสในการได้รับการสนับสนุนจากผู้คนในสถานการณ์ที่คล้ายคลึงกัน
- แต่ยังให้ความช่วยเหลือแก่ผู้อื่นและส่งเสริมการสนทนารอบกองเทคโนโลยีของคุณ
ใครจะรู้คุณอาจจะเป็นจุดเริ่มต้นที่ดีของชุมชนที่มีชีวิตชีวาใหม่ของการปิดบังภาษา X หากไม่มีให้เริ่มเลย!
- ถามคำถามเกี่ยวกับกองมากเกิน ,
- แม้อาจจะเขียนข้อเสนอสำหรับ StackExchange เว็บไซต์ใหม่ใน
พื้นที่ 51
บางทีมันอาจจะสวยงามอยู่ข้างในแต่ไม่มีใครมีเบาะแสดังนั้นให้ช่วยลดกำแพงที่น่าเกลียดนี้และปล่อยให้คนอื่นมอง!