วิธีปฏิบัติที่ดีที่สุดสำหรับการมอบรหัสดั้งเดิม


66

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

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

พื้นหลังบางส่วนของรหัสฉันจะสืบทอด:

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

ฉันสงสัยว่าจะใช้เวลานานเท่าไหร่จนกว่าเขาจะจากไป นี่คือแนวคิดสองสามข้อ:

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

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

ปรับปรุง:ในฐานะที่เป็นโครงการมอบเป็นมากกว่าผมได้ขยายรายการนี้กับประสบการณ์ของตัวเองในคำตอบด้านล่างนี้


2
มุ่งเน้นไปที่การบันทึกสาเหตุของฟังก์ชั่นที่ได้รับการปรับปรุง!

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

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

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

คำตอบ:


25

เมื่อคุณมีสิทธิ์เข้าถึงนักพัฒนาคุณต้องถามรหัส: -

  • โมดูลใดที่โค้ด / ใช้ยากที่สุด ปัญหาคืออะไรและพวกเขาเอาชนะได้อย่างไร

  • โมดูลใดสร้างข้อบกพร่องได้มากที่สุด

  • โมดูลใดที่ส่งผลให้แก้ไขข้อบกพร่องได้ยากที่สุด

  • บิตส่วนใดของรหัสที่เขาภาคภูมิใจที่สุด

  • บิตใดของรหัสที่เขาต้องการ refactor จริง ๆ แต่ไม่มีเวลา

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


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

@PersonalNexus คุณสามารถนำวิธีการนี้ไปใช้กับเอกสารได้เช่นกัน ถามว่าเอกสารใดมีประโยชน์มากที่สุดและเอกสารใดไม่น่าเชื่อถือหรือล้าสมัย (เชื่อฉัน 95% ของเอกสารตกอยู่ในหมวดหมู่สุดท้าย!)
James Anderson

17

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

  • รับทุกสิ่งภายใต้การควบคุมเวอร์ชัน:หลังจากตรวจสอบให้แน่ใจว่าทุกสิ่งที่ฉันต้องการสร้างอยู่ภายใต้การควบคุมเวอร์ชันฉันยังค้นหาที่ฮาร์ดไดรฟ์ของนักพัฒนาซอฟต์แวร์เก่าเพื่อค้นหาสคริปต์หรือยูทิลิตี้เพิ่มเติมที่จะเป็นประโยชน์ในการปรับใช้และ / หรือ ไม่ได้เช็คอิน
  • จากบนลงล่าง:ฉันจะเริ่มต้นด้วยการดูระดับสูงในชั้นเรียนหลักและทัวร์แบบมีมัคคุเทศก์กับผู้พัฒนาเก่าของพื้นที่หลัก จากนั้นฉันจะขุดลึกลงไปในส่วนที่เหลือด้วยตัวเองทำเครื่องหมายสิ่งที่ไม่เหมาะสมกับฉันด้วย//TODOเครื่องหมาย
  • เขียนเอกสารทั้งหมดด้วยตัวเอง:ในขณะที่ฉันมีนักพัฒนาซอฟต์แวร์เก่าดูการเขียนของฉันเพื่อให้แน่ใจว่าฉันเข้าใจถูกต้องแล้วฉันยืนยันที่จะเขียนทุกอย่างด้วยตัวเอง ด้วยวิธีนี้ฉันจะมั่นใจได้ว่าการเขียนมีความหมายกับฉันและไม่เพียง แต่เป็นนักพัฒนาซอฟต์แวร์เก่า
  • แสดงความคิดเห็นได้ทุกที่:ฉันเพิ่มเอกสารสรุป XMLลงในทุกคลาสและทุกวิธี ด้วยวิธีนี้ฉันทำให้แน่ใจว่าอย่างน้อยฉันก็ดูรหัสทุกชิ้นและมีความเข้าใจเพียงพอที่จะสรุปสิ่งที่ทำในประโยค นอกจากนี้ยังทำให้เข้าใจวิธีการใช้วิธีการสรุป / ชั้นเรียนได้ง่ายขึ้นเนื่องจาก IntelliSense รับข้อมูลนี้ ฉันสามารถระบุส่วนต่างๆของรหัสที่ฉันยังต้องดูได้อย่างง่ายดาย
  • เอกสารใกล้กับแหล่งที่มา:เพื่อให้การเชื่อมต่อระหว่างซอร์สโค้ดและเอกสารง่ายขึ้นฉันวางเอกสารส่วนใหญ่ไว้ในซอร์สโค้ด สำหรับเอกสารระดับสูงที่อธิบายการทำงานร่วมกันระหว่างระบบย่อยต่าง ๆ ฉันใช้วิกิเนื่องจากการใส่ข้อมูลนี้ในที่เดียวในรหัสไม่ทำงาน documenation ทั้งหมดควรเป็นข้อความอิเล็กทรอนิกส์และสามารถค้นหาข้อความแบบเต็ม
  • ไดอะแกรม:สำหรับภาพรวมพื้นฐานฉันใช้ไดอะแกรมระดับของความละเอียดต่าง ๆ สำหรับระบบย่อยต่างๆ สำหรับส่วนที่เกิดขึ้นพร้อมกันไดอะแกรมวัตถุและการโต้ตอบมีประโยชน์จริง ๆ ดูคำถามอื่น ๆ ของฉันในหัวข้อ
  • การเปลี่ยนโครงสร้างเป็นคู่:ในขณะที่ฉันทำการปรับเปลี่ยนใหม่กับนักพัฒนาซอฟต์แวร์เก่าเพื่อทำความเข้าใจกับโค้ดและทำให้สิ่งต่าง ๆ สามารถบำรุงรักษาได้มากขึ้นนี่คือการใช้เวลานานและกระบวนการที่มีความเสี่ยง การพึ่งพาระหว่างส่วนต่าง ๆ การทำงานของ Michael Feathers อย่างมีประสิทธิภาพด้วยรหัสมรดกเป็นความช่วยเหลือที่ดีสำหรับเรื่องนี้ถึงแม้ว่าการเปลี่ยนการใช้งานโดยไม่มีการสนับสนุนเครื่องมือที่เหมาะสมยังคงเจ็บปวด ในขณะที่การสร้างใหม่ฉันจะให้เขาควบคุมเมาส์และคีย์บอร์ดได้เพราะมันสนุกสำหรับเขามากกว่านี้ (ดูหัวข้อย่อยสุดท้ายของฉัน) และฉันมีอิสระที่จะเขียนสิ่งที่ฉันเรียนรู้
  • การเช็คอินแยกต่างหากสำหรับความคิดเห็นและการเปลี่ยนแปลง:หลังจากที่ฉันแนะนำข้อผิดพลาดโดยไม่ได้ตั้งใจโดยการเขียนความคิดเห็นเกี่ยวกับoverrideฉันได้ระมัดระวังในการแสดงความคิดเห็นและการเปลี่ยนแปลงในการเช็คอินแยกต่างหาก ฉันใช้ยูทิลิตี้ตัวเล็ก ๆ เพื่อแยกความคิดเห็นทั้งหมดจากซอร์สโค้ดก่อนที่จะตรวจสอบบางอย่างดังนั้นความแตกต่างของการเช็คอินอย่างเดียวที่แสดงความคิดเห็นจะแสดงความแตกต่าง 0 รายการ การเปลี่ยนแปลงทั้งหมด (เช่นการลบฟิลด์ที่ไม่ได้ใช้) ได้รับการตรวจสอบโดยผู้พัฒนาเก่าอย่างระมัดระวังเพื่อให้แน่ใจว่าฉันไม่ได้ลบสิ่งที่ยังต้องการ
  • คำแนะนำแบบเป็นบรรทัดต่อบรรทัดของข้อความสำคัญ:สำหรับข้อความที่มีการปรับให้เหมาะสม / ซับซ้อนที่สุดฉันจะใช้รหัสต่อบรรทัดกับนักพัฒนาซอฟต์แวร์รายเก่าและบางครั้งถึงกับเพื่อนร่วมงานคนที่สาม วิธีนี้ฉันได้รับความเข้าใจอย่างถ่องแท้ของรหัสและเมื่อผู้คนมากมายตรวจสอบรหัสเราได้ระบุข้อบกพร่องบางอย่างรวมถึงบางสิ่งที่สามารถเพิ่มประสิทธิภาพได้อีก
  • ทำตัวให้ไวและรักษาแรงบันดาลใจให้กับนักพัฒนาซอฟต์แวร์เก่า:ฉันสังเกตว่านักพัฒนาซอฟต์แวร์รายเก่าสนใจน้อยลงเรื่อย ๆ เนื่องจากวันสุดท้ายของเขาใกล้เข้ามา (ไม่น่าแปลกใจ) ดังนั้นฉันจะตรวจสอบให้แน่ใจว่าชิ้นส่วนที่สำคัญที่สุดถูกส่งมอบเป็นครั้งแรกโดยปล่อยให้ส่วนที่เหลือให้ฉันคิดด้วยตัวเองหากจำเป็น ฉันยังพยายามทิ้งสิ่งที่สนุกสนานมากขึ้น (เช่นการควบคุมคีย์บอร์ดเมื่อจับคู่การเขียนโปรแกรม) กับเขาและทำสิ่งที่น่าเบื่อเช่นการเขียนเอกสารด้วยตัวเอง
  • ระบุคำขอคุณลักษณะ:ฉันพบว่ามีประโยชน์ในการขอให้นักพัฒนาซอฟต์แวร์เก่าใช้ดูรายการคุณลักษณะที่ผู้คนขอ แต่ยังไม่ได้เพิ่ม มีบางสิ่งที่ฉันเพิ่มให้ดูง่าย แต่มีเหตุผลที่ดีที่พวกเขาไม่ได้เพิ่มเพราะพวกเขาจะทำสิ่งอื่น ๆ แตกหักเมื่อดำเนินการพวกเขาอย่างที่ฉันคิดตอนแรก

14

เมื่ออยู่ในสถานการณ์ที่คล้ายกันฉันเชื่อว่าสิ่งต่อไปนี้ควรพิจารณาด้วย:

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

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

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

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

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

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


+1 การทดสอบเพิ่มเติม มีการทดสอบไม่เพียงพอ
Sardathrion

10

+1 สำหรับคำตอบที่คุณมีในคำถามของคุณ!

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

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

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

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

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


+1 สำหรับความพยายามที่จะแก้ไขข้อบกพร่องบางอย่างเก่าตัวเองเพื่อทดสอบความเข้าใจของฉันรหัส
PersonalNexus

1
"ไม่สำคัญว่าเขาจะเกลียดคุณ" - ระวัง "มันเป็นโลกใบเล็ก";)
retracile

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

7

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

ปฏิบัติต่อการมอบเป็นโครงการและจัดทำแผนและเกี่ยวข้องกับการจัดการ

0 - ตรวจสอบให้แน่ใจว่าคุณรู้วิธีใช้ระบบ

1 - สร้างรายการสินค้าที่ชัดเจนของส่วนประกอบโซลูชันแหล่งที่มาของแต่ละรายการและที่ที่อยู่ (ในที่เก็บต่าง)

2 - รับและถ้าเป็นไปได้จัดการรหัสผ่านสำหรับเซิร์ฟเวอร์ต่าง ๆ ที่เริ่มต้นทันที ตรวจสอบให้แน่ใจว่าคุณมีข้อมูลบัญชีผู้ดูแลระบบทั้งหมด

3 - รับสิทธิ์ใช้งานของส่วนประกอบภายนอกแต่ละรายการยกเว้นว่าอยู่นอกขอบเขตของคุณ (เช่น Dll พิเศษฐานข้อมูล ฯลฯ )

4 - รับรายงานที่เป็นลายลักษณ์อักษรเกี่ยวกับสถานะปัจจุบันของระบบจากนักพัฒนาและลูกค้าของคุณ (หากพวกเขาอยู่ในพื้นที่ของ บริษัท ของคุณ)

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

6 - รับรายการของเหตุการณ์ที่กำหนดไว้ (การทำงานรายเดือน, การทำงานประจำสัปดาห์) ที่ซอฟต์แวร์ต้องตอบสนอง

7 - เรียนรู้ขั้นตอนการสำรองข้อมูล / คืนค่า

8 - ทำความเข้าใจกับกรอบที่ใช้ในการสร้างแอปพลิเคชัน

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

10 - ตรวจสอบให้แน่ใจว่าสภาพแวดล้อมการทดสอบและการพัฒนาของคุณคล้ายกันมาก

11 - พยายามระบุการพึ่งพาที่สำคัญ (ในระบบอื่นหรือระหว่างส่วนประกอบ) ที่ไม่สามารถเห็นได้ง่าย

12 - ระบุและจัดทำเอกสารเวอร์ชันที่ต้องการของการใช้ซอฟต์แวร์แต่ละครั้งและการติดต่อผู้จำหน่าย (ถ้าจำเป็น)

13 - ระบุเครื่องมือพิเศษที่เขาใช้ซึ่งคุณไม่มีในกรณีที่สามารถช่วยคุณได้

14 - รับโฟลว์ระบบในระดับสูง และเริ่มสร้างห้องสมุดเอกสารของคุณ

15 - ทำความเข้าใจวิธีจัดการความปลอดภัยของผู้ใช้สำหรับแอปพลิเคชัน

16 - รับบันทึกข้อผิดพลาดและพยายามทำความเข้าใจกับการกระทำและการกระทำที่ส่งผลต่อข้อมูลเก่า (ถ้ามี)

17 - รู้จักกระบวนการที่ใช้เวลานานเกินไปและคุณต้องระวังอะไรบ้าง (เช่นขนาดไฟล์ที่ผิดปกติ, ftp ของไฟล์ที่ซ้ำกัน ฯลฯ ) หากทำได้

18 - ตรวจสอบนาฬิกาเซิร์ฟเวอร์การผลิต

19 - ระบุว่าการกำหนดค่านั้นอยู่ที่ไหนและเปรียบเทียบการกำหนดค่าสภาพแวดล้อมแต่ละรายการกับการผลิตเพื่อให้ทราบว่าพารามิเตอร์ใดที่แตกต่างกันและสาเหตุ

20 - รับข้อมูลการติดต่อของผู้ชายคนนี้

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

22 - ประเมินความเข้าใจของคุณ 1 สัปดาห์ก่อนออกเดินทางและรายงานปัญหาที่คุณเห็นว่ามีความเสี่ยง

เนื่องจากคุณพูดถึงว่าคุณไม่มีฐานข้อมูลรายการนี้จึงสั้นลง

โชคดี.


@SSamra: ขอบคุณสำหรับความคิดเห็นที่ยกขึ้น ฉันต้องการมัน :)
NoChance

ละเอียดถี่ถ้วนและรวมถึงจุดสำคัญที่ฉันอาจพลาดไปเช่นที่เกี่ยวข้องกับการจัดการและลูกค้า (ภายใน) ของเรา
PersonalNexus

5

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

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

จากนั้นบันทึกเอกสารทุกอย่างที่เหลือ


5

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

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

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

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

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

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

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


คุณควรทำเอกสารอย่างไร ข้อความธรรมดา ? วิกิ ความคิดเห็นในซอร์สโค้ด?
c69

สิ่งใดก็ตามที่ทำให้สามารถเรียกคืนรหัสความเข้าใจเดิมที่คุณมีเมื่อคุณเขียนเอกสาร
treecoder

5

ฉันรู้สึกถึงคุณ

คำแนะนำเล็กน้อย:

  1. บันทึกทุกบทสนทนาที่คุณมีกับโปรแกรมเมอร์ที่ออก!
  2. ถามแรงจูงใจเบื้องหลังประเด็น "ใหญ่" เป็นเรื่องที่ดีที่คุณเข้าใจ API แต่ขุดเพื่อการตัดสินใจภายใน - ทำไมโค้ดถูกแบ่งพาร์ติชันตามที่มันเป็น? ความรับผิดชอบคืออะไร
  3. พยายามศึกษารหัสจริงๆ เมื่อคุณรับหน้าที่บำรุงรักษาและสนับสนุนบางครั้งก็เป็นความกดดันที่จะ "ศึกษารหัสในขณะที่กำลังดำเนินการ" ต่อต้านถ้าคุณทำได้และศึกษารหัสจริงๆ
  4. มองหาสถานการณ์ คุณรู้จัก API - ดูว่ารหัสทำงานอย่างไร ตัวอย่างที่นึกถึงคือโมดูลแฟกซ์ ในฐานะผู้ใช้ของ API คุณต้องเตรียมรูปภาพหน้าไว้ล่วงหน้าและส่งรหัสคำสั่งเพื่อส่งหน้า ขอให้โปรแกรมเมอร์ออกจากการติดตามกับคุณในรหัสเพื่อดูว่าสถานการณ์นี้ดำเนินการอย่างไร จากนั้นไปที่สถานการณ์ "รับหน้า"
  5. 80/20 - พยายามครอบคลุมสถานการณ์ทั่วไปให้มากขึ้นก่อน
  6. พิจารณาเขียนใหม่ หากรหัสเก่าและอินเทอร์เฟซถูกกำหนดอย่างดีอาจมีการเปลี่ยนแปลงเทคโนโลยีพอที่จะพิสูจน์ได้
  7. ฉันเกลียดที่จะพูดแบบนี้ แต่ให้พิจารณาหางานใหม่

ฉันชอบความคิดในการอัดเทปทุกบทสนทนาดังนั้นฉันสามารถกลับไปที่คำพูดเดิมของเขาหลังจากที่เขาจากไป อย่างไรก็ตามคำแนะนำ # 7 ไม่ใช่ตัวเลือก ;-)
PersonalNexus

3

ถ้าคุณต้องการเอกสารที่ดีพอสมควรซื้อสำเนาของPascal Analyzer (PAL)ฉันใช้มันในโครงการ Delphi และมันยอดเยี่ยม - ตอนนี้พวกเขาอาจแยกฟังก์ชั่นเอกสารออกเป็นผลิตภัณฑ์ที่ฉันไม่คุ้นเคย (Pascal Browser) ดังนั้นคุณอาจจะต้องซื้อทั้งคู่ (<300 USD) แต่ PAL เป็นเครื่องมือที่ยอดเยี่ยมสำหรับการทำความเข้าใจว่ามีการใช้ตัวแปรใดบ้างเมื่อมีการเรียกใช้ฟังก์ชั่นต่างๆและรับปัญหาที่อาจเกิดขึ้นกับโค้ด

ใช้ PAL เพื่อทำความเข้าใจว่าโครงสร้างและรหัสของรายการการปรับปรุงที่แนะนำประมาณ 1,000 รายการนั้นเป็นอย่างไรหากประสบการณ์ของฉันคือสิ่งที่ต้องทำต่อไป การทำงานผ่านรายการจะช่วยปรับปรุงคุณภาพของรหัสทำให้ง่ายขึ้นอย่างมากและทำให้ชีวิตของคุณง่ายขึ้นในอนาคต Delphi สนับสนุนการปรับโครงสร้างใหม่ในเวอร์ชันล่าสุด (5 ปีที่ผ่านมา) คุณไม่จำเป็นต้องรวมทุกอย่างในไฟล์ dpr เพื่อให้มันทำงานได้อย่างถูกต้องเมื่อฉันทำมันดังนั้นโปรดจำไว้

หากคุณต้องการทดสอบหน่วยดาวน์โหลดDUnitและเริ่มสร้างการทดสอบบางอย่างด้วย coder ดั้งเดิมซึ่งอาจเป็นวิธีที่สร้างสรรค์ในการใช้เวลาอย่างน้อยบางเวลา


2

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

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

โดยทั่วไปแล้วจุดที่ดี แต่ไม่มีฐานข้อมูลในกรณีของฉัน
PersonalNexus

1
อาจจะช่วยคนอื่น
NRS

2

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

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

1) (บุคคลทางเทคนิค) รายละเอียดการติดต่อของลูกค้าที่เขาติดต่อด้วย

2) บัญชีของเขาที่เขาซื้อลิขสิทธิ์ซอฟต์แวร์คีย์ที่ต้องต่ออายุทุกปีและกระบวนการ / ค่าใช้จ่ายในการต่ออายุ

3) เอกสารการตั้งค่าของไลบรารีซอฟต์แวร์ / ส่วนประกอบและผลิตภัณฑ์ของบุคคลภายนอกที่ทำงานร่วมกับผลิตภัณฑ์ของคุณ เราพยายามเป็นเวลา 4 วันเพื่อนำเครื่องที่หายไปกลับมาเนื่องจากการล้างข้อมูลในพื้นที่

4) เอกสาร / ขั้นตอนที่ใช้ในการฝากซอร์สโค้ดกับซอฟต์แวร์ บริษัท ฝากเงินเช่น Escrow

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

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

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