Mã tài liệu đầu tiên? [đóng cửa]


11

Có ai đã từng thử tạo một tài liệu mã hoàn chỉnh trước, trước khi thực sự viết mã chưa? Tôi đã suy nghĩ về điều này sớm hơn bởi vì tôi nghĩ rằng nó sẽ giúp viết một giao diện cụ thể và sẽ đảm bảo thiết kế ban đầu của bạn không bị trôi nổi bằng cách khiến bạn nghĩ về cách các lớp tương tác. Đây có phải là một ý tưởng tốt? Có ai đã thử nó chưa? Ell


2
Đúng. Đó là một ý tưởng tốt. Mọi người làm việc đó mọi thời gian. Bạn muốn biết thêm gì nữa?
S.Lott 17/03/2016

9
Đây là một câu hỏi chủ quan. Ai đó đã làm điều đó ít nhất một thời gian, vì vậy câu trả lời chắc chắn là có. Cá nhân tôi thích chỉ cần nhảy vào và tạo ra một nguyên mẫu đầu tiên, vì tôi sẽ không thể tránh khỏi việc tìm lại một thiết kế tốt hơn khoảng 5 lần trong quy trình. Khi giải quyết một cái gì đó phức tạp, tôi sẽ gãi thứ gì đó trên một tờ giấy trước. Nếu nó không quan trọng, thì tôi có xu hướng nhảy ngay vào. StyleCop giúp tôi lấp đầy các khoảng trống sau này.
Công việc

2
Đó là một ý tưởng tuyệt vời, nếu không, bạn kết thúc với các tính năng không có giấy tờ.
chrisw 17/03

8
@ S.Lott thực tế đơn giản là anh ta hỏi loại câu hỏi ngụ ý anh ta đang tìm kiếm thêm một số thông tin vì tôi khá chắc chắn rằng bạn đã biết. Nhưng có vẻ như bạn thích đưa ra những bình luận lén lút về những lỗi lầm của người khác.
Kenneth

2
Sẽ tốt hơn nữa nếu bạn viết các bài kiểm tra chấp nhận, và sau đó sử dụng TDD để hoàn thành các bài kiểm tra Chấp nhận đó;).
Martin Blore 17/03/2016

Câu trả lời:


5

Đúng.

Nó khiến bạn suy nghĩ về những gì, chính xác, mã của bạn phải làm gì. Ý tưởng là bạn có thể bắt đầu với bất kỳ phần nào của mã và biết chính xác những gì cần phải làm để hoàn thành mô-đun đó.

Nó cũng dễ dàng sửa một cái gì đó trên bảng vẽ hơn trong IDE.


12
Dễ dàng sửa chữa hơn, vâng. Dễ dàng nhận thấy hơn, hiếm khi. Các thiết kế hầu như luôn trông đẹp mắt cho đến khi bạn cố gắng thực hiện chúng.
CaffGeek 17/03/2016

@Chad Đó là sự thật. Tôi đã chỉnh sửa câu trả lời của mình để phản ánh điều đó.
Tối đa

4
Tôi không đồng ý. Tạo tài liệu đầy đủ trước hết tệ hơn nhiều so với chỉ đủ tài liệu để biết nên đi đâu tiếp theo. Thay đổi xảy ra. Không có cách nào để biết liệu bạn có đang đi đúng hướng hay không, và khi bạn tìm ra nó, bạn sẽ đi phía sau. Đi với những gì hoạt động, cải thiện và sửa chữa nó khi bạn đi, hãy để mã là tài liệu cập nhật nhất.
Zachary Scott

4
Tất nhiên ngay khi bạn thay đổi mã để sửa lỗi hoặc đáp ứng yêu cầu mới, tài liệu của bạn đã hết hạn. Tài liệu như các bài kiểm tra thực thi là cách để đi!
Johnsyweb

Vẽ lên (phác thảo / phác thảo) các ý tưởng trước có, nhưng không tạo tài liệu. Trừ khi bạn muốn lãng phí rất nhiều nỗ lực bởi vì bạn sẽ vứt bỏ rất nhiều nỗ lực ban đầu khi thiết kế được đưa vào ứng dụng thực tế. Thêm vào đó, chỉ các lớp / phương thức công khai hoặc nội bộ phải được ghi lại đầy đủ (bao gồm mô tả đầy đủ cũng như các tham số). Nội dung riêng tư nên có một lớp lót mô tả những gì họ làm để tham khảo trong tương lai nhưng bất cứ điều gì khác là lãng phí vì chắc chắn họ sẽ bị bỏ qua trong giai đoạn tạo tài liệu.
Evan Plaice

10

Có hai cách nghĩ về nó:

1) Tài liệu như trong tài liệu Word, Wiki, v.v. Theo định nghĩa, bạn không thể có một tài liệu mã hoàn chỉnh vì bạn không có mã để làm tài liệu. Bạn có thể thử ghi lại thiết kế cấp cao, các giả định, giao diện và hợp đồng trước.

2) Tài liệu như các bài kiểm tra thực thi. Có một trường phái cho rằng các bài kiểm tra đơn vị thực thi là tài liệu tốt nhất. Trường phái tư tưởng này cũng ủng hộ loại tài liệu này trước khi viết mã (TDD). Đồng thời, bạn không viết tất cả các bài kiểm tra cho toàn bộ hệ thống ngay từ đầu. Bạn phân tích nó bằng các trường hợp sử dụng trước, sau đó bạn thực hiện kiểm tra và mã cho mỗi trường hợp sử dụng.


2
+1 cho TDD. Hoàn toàn là một lựa chọn tốt hơn so với tài liệu, sau đó phải thay đổi số lượng tài liệu đáng kể nếu mã thay đổi.
Ethel Evans

Đồng thời +1 cho tài liệu dưới dạng TDD.
Sevenseacat 17/03/2016

bạn CÓ THỂ có tài liệu sản phẩm hoàn chỉnh trước khi sản phẩm tồn tại. Tôi đã thực hiện nó, tôi đã làm việc trong các dự án mà nó là một yêu cầu. Bạn sẽ không có ảnh chụp màn hình, nhưng bạn có thể có mọi thứ khác (bao gồm các sơ đồ Visio thể hiện vị trí của các thành phần trên màn hình).
jwenting

@jwenting Tôi cũng vậy và đó là một tập hợp các sơ đồ cũng như hơn 200 trang tài liệu từ. Nó không chỉ lãng phí hoàn toàn thời gian mà còn cần 2 tháng để sản xuất và một lượng đáng kể thời gian PM của chúng tôi để liên tục cập nhật khi thiết kế phát triển thành sản phẩm cuối cùng. Nó thực sự có thể đã đi nhanh hơn rất nhiều với các mô hình đồ họa sử dụng Balsalmiq. Lần tới khi tôi làm việc trong một dự án mà đây là một yêu cầu tôi sẽ đưa ra quan điểm rằng một người khác nên được chỉ định để quản lý nó toàn thời gian bởi vì đó là bao nhiêu nỗ lực để duy trì.
Evan Plaice

+1 TDD cho bằng chứng cơ bản của các thành phần và sơ đồ riêng lẻ cho các giả định thiết kế tổng thể (nhấn mạnh vào giả định vì thiết kế thực tế phải được viết là ứng dụng thực tế tốt nhất không phải là triển khai sơ đồ 1-1, vì lý do chúng được gọi là giả định ). Tài liệu phần mềm đầy đủ của tất cả các lớp / phương thức / thuộc tính công khai / nội bộ xuất hiện cuối cùng thông qua một trình tạo tài liệu (tất cả các thuộc tính / trả về / nhận xét phải được điền trước) và tất cả các nội dung riêng tư / cục bộ đều được mô tả những gì chúng làm để tham khảo trong tương lai (riêng tư / cục bộ bị bỏ qua bởi trình tạo).
Evan Plaice

7

Bắt đầu với tài liệu là mô hình thác nước cổ điển và có tất cả những cạm bẫy liên quan đến mô hình đó. Nhìn rộng ra, bạn càng có nhiều tài liệu thì bạn càng phải cập nhật khi các yêu cầu thay đổi. Một lợi ích của việc bắt đầu với tài liệu người dùng là bạn có thể nhận được phản hồi (và do đó thay đổi) sớm hơn. Nhưng kinh nghiệm cho thấy hầu hết mọi người đều tệ trong việc lập bản đồ tài liệu về hành động. Vì vậy, chúng tôi sử dụng các nguyên mẫu thay thế, cho phép mọi người thực sự sử dụng phần mềm và đưa ra phản hồi theo cách đó.

Một biến thể của "tài liệu đầu tiên" là lập trình biết chữ . Bắt đầu bằng cách viết một mô tả về những gì chương trình sẽ làm từ góc độ lập trình viên. Tiếp tục điều chỉnh cho đến khi nó biên dịch. Voila, một chương trình biết chữ.


Chính xác! Thay đổi xảy ra. Tài liệu thối. Mã là hình thức trung thực nhất của tài liệu.
Zachary Scott

3

Cá nhân tôi thấy tốt hơn khi sử dụng các sơ đồ (như UML) để thực hiện mô hình đơn giản để hiển thị dòng chảy của mọi thứ. Điều này nhanh hơn nhiều so với việc ghi lại những điều bằng lời và nếu được thực hiện đúng có thể chỉ là mô tả. Mặc dù vậy, tôi sẽ do dự khi làm Tài liệu đầy đủ vì cá nhân tôi chưa từng có một dự án nào mà tôi đã làm mà không thay đổi trong quá trình lập trình.

EDIT: Một số tài liệu mặc dù nên được thực hiện khi bạn đi lâu. Điều này làm cho nó dễ dàng hơn để làm tài liệu đầy đủ sau này.


3

Joshua Bloch thảo luận về điểm này trong cuộc phỏng vấn của mình cho cuốn sách "Coders at Work".

Trái với quan điểm chính thống và hàn lâm hơn, ông khuyên bạn điều gì đó để điều chỉnh suy nghĩ của bạn (có thể bạn đã tự đọc nó ở đó?): Rằng trước khi viết tài liệu bạn phải hiểu những gì bạn muốn từ hệ thống và có được "thực tế hơn" " cảm giác. Với mục đích này, anh ta sẽ thiết kế một phần của các giao diện và một số mã máy khách sử dụng chúng.

Điều quan trọng nhất là phải biết những gì bạn đang cố gắng xây dựng: vấn đề nào bạn đang cố gắng giải quyết. Tầm quan trọng của phân tích yêu cầu không thể được phóng đại. Có những người nghĩ rằng, Oh Oh, yeah, yêu cầu phân tích; bạn đến khách hàng của bạn, bạn nói, 'Bạn cần gì?' Anh ấy nói với bạn, và bạn đã hoàn thành.

Không gì có thể hơn được sự thật. Không chỉ là một cuộc đàm phán mà nó còn là một quá trình hiểu biết. Nhiều khách hàng sẽ không cho bạn biết một vấn đề; họ sẽ cho bạn biết một giải pháp. Chẳng hạn, một khách hàng có thể nói, tôi cần bạn thêm hỗ trợ cho 17 thuộc tính sau vào hệ thống này. Sau đó, bạn phải hỏi, 'Tại sao? Bạn sẽ làm gì với hệ thống? Làm thế nào để bạn mong đợi nó sẽ phát triển? 'Vv và như vậy. Bạn qua lại cho đến khi bạn tìm ra tất cả những gì khách hàng thực sự cần phần mềm để làm. Đây là những trường hợp sử dụng.

Đến với một bộ trường hợp sử dụng tốt là điều quan trọng nhất bạn có thể làm trong giai đoạn này. Một khi bạn có điều đó, bạn có một điểm chuẩn để bạn có thể đo bất kỳ giải pháp nào có thể. Sẽ ổn thôi nếu bạn dành nhiều thời gian để đưa nó gần đúng, bởi vì nếu bạn hiểu sai, bạn đã chết. Phần còn lại của quá trình sẽ là một bài tập vô ích.

Điều tồi tệ nhất mà bạn có thể làm được và tôi đã thấy điều này xảy ra, đó là bạn đưa một nhóm người thông minh vào phòng làm việc trong sáu tháng và viết một đặc tả hệ thống gồm 247 trang trước khi họ thực sự hiểu họ là ai cố gắng xây dựng. Bởi vì sau sáu tháng, họ sẽ có một hệ thống được chỉ định rất chính xác có thể là vô dụng. Và họ thường nói, chúng tôi đã đầu tư rất nhiều vào thông số kỹ thuật mà chúng tôi phải xây dựng nó. Vì vậy, họ xây dựng hệ thống vô dụng và nó không bao giờ được sử dụng. Và điều đó thật kinh khủng. Nếu bạn không sử dụng các trường hợp sử dụng, bạn xây dựng mọi thứ và sau đó bạn cố gắng làm một việc rất đơn giản và bạn nhận ra rằng, Ôi trời ơi, làm một việc rất đơn giản như lấy một tài liệu XML và in nó yêu cầu các trang trên các trang của bản tóm tắt mã. Và đó là một điều khủng khiếp.

- Joshua Bloch, từ một cuộc phỏng vấn trong " Coders tại nơi làm việc: Những phản ánh về nghề lập trình " của Peter Seibel

Nếu bạn đã suy nghĩ theo những dòng này, sẽ tốt hơn nếu bạn có thể cầm cuốn sách và đọc toàn bộ cuộc phỏng vấn. Như tôi đã nói, anh ấy luôn rất giác ngộ.


Đây là lời khuyên tốt, nhưng tài liệu tốt bao gồm việc sử dụng API.
Frank Hileman

Đối với hồ sơ, trong khi tôi đánh giá cao bản chỉnh sửa, tôi nghĩ rằng trích dẫn đó có thể không phải là bản mà tôi đã nghĩ đến. Nó có vẻ liên quan tiếp tuyến và mức độ cao hơn hoặc liên quan đến giai đoạn yêu cầu. Tôi nghĩ rằng anh ấy đã nói rằng trước khi viết tài liệu, anh ấy sẽ bắt đầu viết mã, viết mã máy khách sẽ sử dụng giao diện để có ý tưởng sơ bộ về giao diện phù hợp và theo tôi, đây là phần trực quan đối lập) nên xuất hiện trước, trước khi viết bất kỳ tài liệu thiết kế cấp thấp nào cả. Tất nhiên đó là lỗi của tôi vì đã không tìm thấy trích dẫn khi tôi viết câu trả lời này.
DPM


1

Viết tài liệu mã hoàn chỉnh trước tiên có lẽ là quá mức cần thiết và phần nào gợi nhớ đến phương pháp thác nước. Tuy nhiên, tôi đã thấy rằng một cách tiếp cận thực tế hơn là viết README trước. Đây là lý do tại sao:

README không ghi lại mọi chi tiết của dự án của bạn. Thay vào đó, nó thường chứa thông tin sau:

  1. Mô tả : "khoảng cách bán hàng" ngắn. Nói với người đọc tại sao họ nên tiếp tục đọc.
  2. Ví dụ nhanh : đoạn mã ngắn hoặc ảnh chụp màn hình để hỗ trợ mô tả.
  3. Bắt đầu nhanh : cách đi, cài đặt hướng dẫn và nhiều ví dụ khác.
  4. Tài liệu khác : liên kết đến các tài liệu đầy đủ và thêm thông tin.
  5. Tổ chức dự án : ai là tác giả, cách đóng góp, cách nộp lỗi.
  6. Thông báo pháp lý : giấy phép, bản quyền và bất kỳ chi tiết pháp lý nào khác.

Viết "mục đích bán hàng" lên phía trước buộc tôi phải rõ ràng về lý do tại sao dự án này nên tồn tại và tại sao các nhà phát triển nên sử dụng nó. Hành động đơn thuần là viết các câu đầy đủ để mô tả dự án thường thay đổi nó tốt hơn: bạn hiểu nó tốt hơn, phát triển ý tưởng mới và phát hiện ra các vấn đề tiềm ẩn. Đây cũng là một công cụ ưu tiên tuyệt vời: bất cứ điều gì trong "mục đích bán hàng" là phải có!

"Ví dụ nhanh" và "hướng dẫn bắt đầu nhanh" buộc tôi phải suy nghĩ thông qua các trường hợp sử dụng chính theo quan điểm của người dùng. Tôi đã thấy rằng làm điều này trước khi viết bất kỳ mã nào - trước khi bị sa lầy vào các chi tiết triển khai và thời hạn chặt chẽ - dẫn đến các API và thiết kế sạch hơn nhiều. Hãy nhớ rằng: các chương trình nên được viết cho mọi người đọc và chỉ tình cờ cho các máy thực thi ( SICP ).

Trong "tài liệu tiếp theo", tôi tạo ra một phác thảo về các phần sẽ cần tài liệu chi tiết, sẽ được thực hiện sau. "Tổ chức dự án" cho phép tôi tìm ra ai sẽ làm việc trong dự án và thực tiễn mã hóa. "Thông báo pháp lý" ... tốt, cũng có thể giúp họ tránh xa.

Khi bạn đã có README cơ bản này, bạn có một tài liệu hữu ích để thảo luận, đánh giá thiết kế, phân chia công việc và lập kế hoạch dự án. Khi bạn làm việc trong dự án, thường xuyên kiểm tra lại với README để đảm bảo bạn vẫn đang đi đúng hướng. Ngoài ra, tăng dần cập nhật README và "tài liệu thêm" khi bạn đi có nghĩa là tất cả tài liệu của bạn sẽ được thực hiện khi mã được thực hiện, đó là một trải nghiệm thú vị hơn nhiều so với việc phải vội vàng ghi lại mọi thứ vào phút cuối.

Để biết thêm thông tin, hãy kiểm tra như sau:

  1. Phát triển theo hướng Readme
  2. Mã quan trọng nhất không phải là mã
  3. Bạn là những gì bạn tài liệu

0

Tại sao bạn không muốn nghĩ về cách các lớp tương tác? Tại sao đó là một điều xấu? Tôi thực sự nghĩ về các tương tác trước khi tôi biết các lớp là gì. Bằng cách đó, các lớp tự xác định.


0

Bạn nên có một số ý tưởng về những gì bạn dự định làm trước khi bạn viết mã. Vấn đề luôn là làm thế nào để bạn giữ những gì bạn đã mã hóa đồng bộ với những gì bạn đã viết? Một số người nói đừng thử, những người khác nói hãy quên các tài liệu ban đầu và tiếp tục bình luận. Tất nhiên mã luôn là nguồn chính tắc. Vấn đề sau đó trở thành liệu có đáng nỗ lực để ghi lại những gì mã làm cho những người đến sau hoặc sử dụng mã. Bất cứ ai cũng có thể tìm ra những gì một chức năng làm. Công việc của người viết là giúp ai đó hiểu trong 5 phút những gì mọi người có thể tìm ra trong một giờ. Thêm deltas và xác định đường dẫn của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.