จัดส่งห้องสมุดชั้นหนึ่งของฉัน gotchas ใด ๆ ที่ฉันต้องระวัง?


12

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

ที่นี่ฉันอยู่ที่:

  • ห้องสมุดได้รับการทดสอบโดยหน่วยและมีรหัสครอบคลุมประมาณ 97%
  • API ได้รับการบันทึกไว้อย่างดีและมีการสร้างเอกสาร xml สำหรับการสนับสนุนภายใน
  • ฉันได้รับรองว่าผู้เข้าถึงคลาสสาธารณะ / ส่วนตัวนั้นถูกต้องและถูกต้อง เช่นเดียวกันกับ getters / setters ทั้งหมด
  • การจัดการข้อผิดพลาดไม่ได้อย่างสง่างามอย่างที่ฉันต้องการ แต่ฉันไม่เห็นเส้นตายและยอมรับว่ามันเป็น "ดีเท่าที่ควรจะเป็น" ในตอนนี้
  • ไม่มีการบันทึกที่เป็นมิตร Debug.Writeline ถูกใช้อย่างกว้างขวาง ... ฉันได้เรียนรู้เมื่อเร็ว ๆ นี้ว่านี่เป็นภาพสะท้อนของความไม่มีประสบการณ์ของฉัน :(

คำแนะนำของคุณได้รับการชื่นชมอย่างมาก!

ห้องสมุดจะใช้ในการสร้างรายงาน หมวกมาตรฐาน - เชื่อมต่อกับฐานข้อมูลแบบอ่านอย่างเดียวดำเนินการ calcs จัดรูปแบบและส่งออกข้อมูลไปยังสตรีมตอบกลับ


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


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

@JimmyHoffa: เพิ่มคำตอบสำหรับคำถามของคุณ ขอบคุณที่สละเวลา hte!
นายจาวาจาวา

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

อาจใช้ Sandcastle หรือห้องสมุดสร้างเอกสารอื่นเพื่อให้มีเอกสารอ้างอิงแบบออฟไลน์ (ish)
เจสซีซี. เครื่องตัด

7
ผ่อนคลาย. การมีการทดสอบหน่วยเดียวแม้แต่หนึ่งครั้งและเอกสาร API หนึ่งบรรทัดแล้วยกระดับการเผยแพร่นี้เกินรหัส ~ 95% "ปล่อยให้โปรแกรมเมอร์อื่น ๆ ใน บริษัท ใช้" ในประสบการณ์ของฉัน
Carson63000

คำตอบ:


8

ล็อคอิน API

ศิลปะของการสร้าง API อย่างมีประสิทธิภาพนั้นเกี่ยวกับการจัดการความคาดหวังเช่นเดียวกับโครงสร้าง

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

หากคุณกังวลว่ารหัสอาจไม่พร้อมสำหรับช่วงไพร์มไทม์คุณสามารถเผยแพร่เป็นเบต้าได้เสมอ

ข่าว:

  • เบต้า (เช่นก่อน 1.0)

    • อาจมีการเปลี่ยนแปลงการแตก API หลายรายการ
    • อาจไม่มีการเปลี่ยนแปลงความเข้ากันได้ย้อนหลังระหว่างรุ่น
    • อาจมีการขาดการขัด
  • เป็นทางการ (1.0+)

    • API ถูกล็อคจนกว่าจะมีการออกรุ่นใหญ่ครั้งต่อไป
    • การเปลี่ยนแปลงใด ๆ ที่แนะนำควรรับประกันความเข้ากันได้แบบย้อนหลัง
  • รองลงมา (เช่น 1.1)

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

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

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

สมมติฐานของคุณเกี่ยวกับวิธีการใช้งานนั้นผิด

ไม่ว่าผู้ออกแบบจะมีวิธีการที่ดีเพียงใดผู้คนจะพบกับวิธีการใช้ในทางที่ผิดหรือสร้างการใช้ทางเลือก

วิธีหนึ่งในการจัดการสิ่งนี้คือการ จำกัด การใช้งานให้มากที่สุดเท่าที่จะทำได้โดยใช้ accessors (เช่นส่วนตัว / สาธารณะ / ภายใน) แต่ไม่มีการออกแบบหรือวิศวกรรมจำนวนมากที่จะช่วยให้คุณมีความรู้ความเข้าใจมากขึ้น

ไม่สำคัญว่าคุณจะ 'สมบูรณ์แบบ' รหัสของคุณจะเป็นอย่างไรผู้ใช้ของคุณจะพิสูจน์ได้ว่าไม่ใช่

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

ในกรณีของคุณคุณกำลังต่อสู้อย่างหนักตั้งแต่เริ่มต้นดังนั้นคุณอาจเริ่มต้นได้เช่นกัน


ดูเหมือนว่าคุณมีฐานที่เหลืออยู่ เอกสาร API มีความสำคัญและการทดสอบจะดีสำหรับการสร้างความมั่นใจเมื่อมีการเปลี่ยนแปลงในอนาคต

การใช้รูปแบบการบันทึกที่สอดคล้องกันจะมีความสำคัญก่อนที่จะมีการเปิดตัวรหัสเพื่อการผลิตเนื่องจากคุณจะต้องมีวิธีการเปิด / ปิด / กรองบันทึกทั่วโลก BTW ในกรณีส่วนใหญ่การบันทึกจะเกี่ยวข้องกับการนำเข้าไลบรารีและเปลี่ยนการโทรออกจาก Debug.WriteLine () เป็นอย่าง Logging.Debug (), Logging.Info (), Logging.Error () คนตัดไม้เพียงแค่ให้การใช้งานมาตรฐานสำหรับการกำหนดค่าการกรองและช่วงกว้างของรูปแบบการส่งออก (ไฟล์อดีตคอนโซล ฯลฯ )

นอกเหนือจากนั้นฉันจะหาวิธีนำรหัสออกมาและใช้งาน แม้ว่าผู้ใช้จำนวนน้อยเท่านั้นที่จะเริ่มต้น


1
1 Re: เข้าสู่ระบบ - ผมขอแนะนำให้TraceSource ไม่แนะนำการพึ่งพาภายนอกเนื่องจากเป็นส่วนหนึ่งของไลบรารี core .NET และอนุญาตให้ผู้ใช้เชื่อมต่อ listeners และกำหนดค่าการติดตามทั้งผ่านรหัสและผ่านไฟล์ app.config
Dan Lyons

4

นี่คือสองสิ่งที่ฉันพบว่าเป็นกุญแจสำคัญในการปล่อยซอฟต์แวร์:

  • รู้ว่าสิ่งที่คุณได้เปิดตัว
  • จัดการความคาดหวัง

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

รู้ว่าสิ่งที่คุณได้รับการปล่อยตัว

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

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

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

การจัดการความคาดหวัง

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

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

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


0

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

ทั่วไป:

  • ใส่ในการตรวจสอบโมฆะสำหรับพารามิเตอร์ฟังก์ชั่นที่ไม่ควรเป็นโมฆะ สิ่งนี้ช่วยให้ฉันล้มเหลวเร็ว
  • ลบความคิดเห็นที่ไม่จำเป็นและไฟล์ที่ใส่ความคิดเห็นออก สิ่งเหล่านี้ทำให้งานในอนาคต
  • ค้นหาความคิดเห็น "// TODO" ใด ๆ บางครั้งฉันออกจากบันทึกเพื่อตัวเอง บางครั้งฉันลืมพวกเขา
  • เรียกใช้การทดสอบรหัสของฉันโดยใช้ฐานข้อมูลการผลิตที่เป็นไปได้ สิ่งนี้ช่วยให้มั่นใจว่าฉันมีการเปลี่ยนแปลงฐานข้อมูลทั้งหมดของฉันในเซิร์ฟเวอร์การผลิต
  • ใส่ในการบันทึกมากมาย โดยเฉพาะอย่างยิ่งสำหรับการปรับใช้เริ่มต้น ในความเป็นจริงฉันบันทึกการบันทึกสำหรับจุดสิ้นสุดเนื่องจากรหัสของฉันมักจะถูก gelled บางตอนนี้ คุณไม่ต้องการอยู่ในสถานการณ์ที่คุณมีปัญหาและคุณพูดกับตัวเองว่า "ถ้าฉันรู้ว่าคุณค่าของ X คืออะไรในเวลานี้" ลองวางแผนล่วงหน้า
  • ลองล้อมสายห้องสมุดบุคคลที่สามใน Facades สิ่งนี้ทำให้ง่ายต่อการเปลี่ยนไลบรารีในอนาคตรวมทั้งจัดทำรายการตรวจสอบสิ่งที่คุณต้องการจากไลบรารี

.Net เฉพาะ:

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