เอกสารรหัสก่อน? [ปิด]


11

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


2
ใช่. มันเป็นความคิดที่ดี. คนทำมันตลอดเวลา คุณต้องการรู้อะไรอีก
S.Lott

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

2
มันเป็นความคิดที่ดีไม่งั้นคุณจะได้ฟีเจอร์ที่ไม่มีเอกสาร
chrisw

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

2
มันจะดียิ่งขึ้นถ้าคุณเขียนการทดสอบการยอมรับแล้วใช้ TDD เพื่อทำแบบทดสอบการยอมรับเหล่านั้น;)
Martin Blore

คำตอบ:


5

ใช่.

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

นอกจากนี้ยังง่ายต่อการแก้ไขบางสิ่งบางอย่างบนกระดานวาดภาพมากกว่าใน IDE


12
ง่ายต่อการแก้ไขใช่ สังเกตง่ายขึ้นไม่ค่อย การออกแบบมักจะดูดีอยู่เสมอจนกว่าคุณจะพยายามนำไปใช้
CaffGeek

@Chad นั่นเป็นความจริง ฉันได้แก้ไขคำตอบของฉันเพื่อสะท้อนสิ่งนั้นแล้ว
Maxpm

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

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

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

10

มีวิธีคิดอยู่สองวิธี:

1) เอกสารเช่นเดียวกับในเอกสาร Word, Wiki ฯลฯ โดยคำจำกัดความคุณไม่สามารถมีเอกสารรหัสที่สมบูรณ์เพราะคุณไม่มีรหัสไปยังเอกสาร คุณสามารถลองจัดทำเอกสารการออกแบบระดับสูง, สมมติฐาน, อินเทอร์เฟซและสัญญาก่อน

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


2
+1 สำหรับ TDD ตัวเลือกที่ดีกว่าการบันทึกเอกสารอย่างแน่นอนจากนั้นต้องเปลี่ยนเอกสารจำนวนมากหากรหัสเปลี่ยนแปลง
Ethel Evans

+1 ด้วยสำหรับเอกสารในรูปแบบของ TDD
sevenseacat

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

@ jwenting ฉันมีเหมือนกันและมันก็เป็นคอลเลกชันของไดอะแกรมเช่นเดียวกับเอกสารเวิร์ดมากกว่า 200 หน้า ไม่เพียงเป็นการเสียเวลาอย่างสมบูรณ์ แต่ต้องใช้เวลา 2 เดือนในการผลิตและเวลา PM ที่สำคัญของเราในการปรับปรุงอย่างต่อเนื่องเนื่องจากการออกแบบพัฒนาเป็นผลิตภัณฑ์ขั้นสุดท้าย จริง ๆ แล้วมันอาจจะเร็วขึ้นกว่านี้ด้วยการจำลองแบบกราฟิกโดยใช้ Balsalmiq ครั้งต่อไปที่ฉันทำงานในโครงการที่มีข้อกำหนดนี้ฉันจะทำในสิ่งที่บุคคลอื่นควรได้รับมอบหมายให้จัดการเต็มเวลาเพราะนั่นคือความพยายามในการบำรุงรักษา
Evan Plaice

+1 TDD สำหรับการพิสูจน์พื้นฐานของแต่ละองค์ประกอบและไดอะแกรมสำหรับข้อสมมติฐานการออกแบบโดยรวม (เน้นที่ข้อสันนิษฐานเนื่องจากการออกแบบที่แท้จริงควรถูกเขียนเป็นแอปพลิเคชันที่ใช้งานได้จริงที่ดีที่สุดไม่ใช่การใช้แผนภาพ 1-1 ) เอกสารซอฟต์แวร์ฉบับเต็มของคลาสสาธารณะ / ภายใน / วิธีการ / คุณสมบัติทั้งหมดมาผ่านตัวสร้างเอกสาร (คุณสมบัติ / ผลตอบแทน / ข้อสังเกตทั้งหมดควรกรอกก่อน) และทุกสิ่งที่เป็นส่วนตัว / ท้องถิ่นจะได้รับหนึ่ง liners เพื่ออธิบายสิ่งที่พวกเขาทำเพื่อการอ้างอิงในอนาคต (เครื่องกำเนิดไฟฟ้าส่วนตัว / ท้องถิ่นจะถูกละเว้น)
Evan Plaice

7

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

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


แน่นอน! การเปลี่ยนแปลงเกิดขึ้น เน่าเอกสาร Code เป็นรูปแบบเอกสารที่แท้จริง
Zachary Scott

3

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

แก้ไข: เอกสารบางอย่าง แต่ควรทำตามที่คุณไปนาน ทำให้ง่ายต่อการทำเอกสารฉบับเต็มในภายหลัง


3

โจชัวโบลชกล่าวถึงประเด็นนี้มากในการสัมภาษณ์ของเขาสำหรับหนังสือ "ผู้เขียนที่ทำงาน"

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

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

ไม่มีอะไรจะเพิ่มเติมจากความจริง ไม่เพียง แต่เป็นการต่อรองเท่านั้น แต่เป็นกระบวนการทำความเข้าใจ ลูกค้าหลายคนจะไม่บอกปัญหากับคุณ พวกเขาจะบอกวิธีแก้ปัญหาให้คุณ ตัวอย่างเช่นลูกค้าอาจพูดว่า“ ฉันต้องการให้คุณเพิ่มการสนับสนุนสำหรับ 17 คุณลักษณะต่อไปนี้ในระบบนี้ ถ้าอย่างนั้นคุณต้องถามว่า 'ทำไม? คุณจะทำอย่างไรกับระบบ? คุณคาดหวังว่ามันจะพัฒนาอย่างไร '” และอื่น ๆ คุณย้อนกลับไปเรื่อย ๆ จนกว่าคุณจะทราบว่าลูกค้าต้องการซอฟต์แวร์อะไรบ้าง นี่คือกรณีการใช้งาน

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

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

- Joshua Bloch จากการสัมภาษณ์ใน " Coders at Work: Reflections on Craft of Programming " โดย Peter Seibel

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


นี่เป็นคำแนะนำที่ดี แต่เอกสารที่ดีรวมถึงการใช้ API
Frank Hileman

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

1

บางคนถึงกับไปไกลกว่านี้และระบุว่า บริษัท ควรจะทำงานถอยหลังอย่างสมบูรณ์ดังนั้น

  1. เขียนข่าวประชาสัมพันธ์
  2. เขียนคำถามที่พบบ่อย
  3. กำหนดประสบการณ์ของลูกค้า
  4. เขียนคู่มือผู้ใช้
  5. เริ่มการเขียนโปรแกรม

ดู http://www.allthingsdistributed.com/2006/11/working_backwards.html


1

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

README ไม่ได้จัดทำเอกสารรายละเอียดทุกโครงการของคุณ โดยทั่วไปจะมีข้อมูลต่อไปนี้แทน:

  1. คำอธิบาย : สั้น "ระยะห่างระหว่างการขาย" บอกผู้อ่านว่าทำไมพวกเขาควรอ่านต่อไป
  2. ตัวอย่างด่วน : ตัวอย่างรหัสสั้น ๆ หรือภาพหน้าจอเพื่อสนับสนุนคำอธิบาย
  3. เริ่มต้นอย่างรวดเร็ว : วิธีเริ่มต้นใช้งานติดตั้งคำแนะนำและตัวอย่างเพิ่มเติม
  4. เอกสารเพิ่มเติม : ลิงก์ไปยังเอกสารฉบับเต็มและข้อมูลเพิ่มเติม
  5. การจัดระเบียบโครงการ : ใครคือผู้เขียน, วิธีการมีส่วนร่วม, วิธีการยื่นข้อบกพร่อง
  6. ประกาศทางกฎหมาย : ใบอนุญาตลิขสิทธิ์และรายละเอียดทางกฎหมายอื่น ๆ

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

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

ใน "เอกสารเพิ่มเติม" ฉันสร้างโครงร่างของชิ้นส่วนที่จะต้องมีเอกสารรายละเอียดเพื่อที่จะทำในภายหลัง "การจัดระเบียบโครงการ" ช่วยให้ฉันทราบได้ว่าใครจะทำงานในโครงการและการเข้ารหัส "ประกาศทางกฎหมาย" ... เช่นกันอาจทำให้คนเหล่านี้ออกไปด้วย

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

สำหรับข้อมูลเพิ่มเติมตรวจสอบสิ่งต่อไปนี้:

  1. การพัฒนา Readme ขับเคลื่อน
  2. รหัสที่สำคัญที่สุดไม่ใช่รหัส
  3. คุณเป็นเอกสารของคุณ

0

ทำไมคุณไม่ต้องการคิดว่าคลาสมีปฏิสัมพันธ์อย่างไร? ทำไมเป็นสิ่งเลวร้าย ฉันคิดเกี่ยวกับการโต้ตอบก่อนที่ฉันจะรู้ว่าคลาสนั้นคืออะไร ด้วยวิธีการเรียนระบุตัวเอง


0

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

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