Tại sao phải bận tâm với thông số kỹ thuật chi tiết?


8

Khi viết phần mềm, điểm đặc biệt của việc viết một đặc tả cây chết chính thức, chi tiết là gì? Để làm rõ, một đặc điểm kỹ thuật cấp cao, hơi không chính thức cho những người không muốn đọc mã có ý nghĩa với tôi. Tuy nhiên, việc triển khai tham chiếu trong mã nguồn có thể đọc được, được nhận xét tốt là về thông số kỹ thuật rõ ràng nhất của bất kỳ thứ gì bạn sẽ nhận được, vì máy tính phải có khả năng thực thi nó. Thông số kỹ thuật chính thức thường khó đọc và gần như khó viết, như mã.

Những đặc điểm chính thức mang lại lợi ích gì cho việc triển khai tham chiếu cộng với một tài liệu nhỏ về hành vi nào không được xác định / xác định thực hiện bất kể cách thức hoạt động trong triển khai tham chiếu.

Chỉnh sửa: Ngoài ra, có gì sai với các bài kiểm tra là đặc điểm kỹ thuật chính thức?


7
Tại sao nó phải là "cây chết"? Tại sao không phải là wiki hoặc PDF?
Philip Regan

@Philip: Không có lý do về nguyên tắc. Chỉ là các tài liệu rất chính thức có xu hướng được viết trên cây chết, đặc biệt là tại các tổ chức lớn, quan liêu như những tài liệu tôi đang hình dung.
dsimcha

Thông số kỹ thuật phần mềm rất tốt cho các lập trình viên sử dụng cho chính họ, nhưng thậm chí còn tốt hơn để sử dụng cho khách hàng để họ xác định kỳ vọng của họ về sản phẩm cuối một cách cụ thể ... trước khi bạn bắt đầu làm việc kỳ diệu.
ToTheBeach

2
Tôi ủng hộ các thông số kỹ thuật cao cấp. Chỉ đủ chi tiết để khách hàng hiểu những gì họ đang nhận được và các nhà phát triển hiểu khách hàng muốn gì. Bất kỳ chi tiết hơn thế này và bạn sẽ kết thúc việc duy trì tài liệu thay vì mã.
Berin Loritsch

@Berin: Đúng vậy, đây là ý của một đặc tả cấp cao, không chính thức. Khi tôi viết câu hỏi này, tôi đã suy nghĩ nhiều hơn về các tiêu chuẩn (ví dụ, trình biên dịch C ++) hơn là phần mềm kinh doanh.
dsimcha

Câu trả lời:


37

Làm thế nào bạn có thể biết bạn đã hoàn thành, nếu bạn không biết nó trông như thế nào khi hoàn thành?

Tính năng creep sẽ bắt bạn. Bạn sẽ cố gắng giao hàng cho khách hàng và khi thời gian hoàn thành trôi qua, họ sẽ khám phá 10.000 điều nhỏ mà họ nhất thiết phải có .

Để được trả tiền, để đưa sếp của bạn ra khỏi lưng khi thời hạn trôi qua, bạn cần phải rút ra thông số và nói: "Tất cả các ước tính thời gian và chi phí của tôi đều dành cho việc này , không phải điều này mới điều mà mọi người đã quyết định họ muốn. "


13
Điều hối tiếc duy nhất của tôi là tôi có nhưng một người ủng hộ để cho sự khôn ngoan này.
Dan Ray

3
+1. Sự khôn ngoan. Điều đó nói rằng, cửa hàng cuối cùng tôi làm việc là một mô hình kinh doanh dựa trên đăng ký, nơi khách hàng tiếp tục trả tiền cho các giấy phép hiện có trong khi hét lên về các tính năng khác mà họ phải có (ví dụ: Bạn có nguy cơ mất chúng nếu bạn không thực hiện chúng phạm vi creep - nhưng họ trả tiền cho bạn cùng một lúc để bạn muốn làm cho họ hạnh phúc). Nhưng thông thường, bạn không được trả tiền trong khi thực hiện creep scope. Ngoài ra: mô hình kinh doanh đó thực sự có thể làm cho các nhà phát triển cảm thấy giống như các codemonkey.
Bobby Bàn

1
+1 Tôi đến để lập trình thông qua các hệ thống điều khiển HVAC kỹ thuật - một đặc điểm kỹ thuật điển hình cho một tòa nhà sẽ là vài trăm trang. Các dự án được chấp nhận bởi nhà tư vấn / khách hàng khi tất cả các điểm được đánh dấu - các biến thể sẽ phải chịu chi phí và thời hạn kéo dài. Vấn đề là - vì một số lý do, dường như trong sự phát triển phần mềm nói chung, đặc tả nên được viết bởi người triển khai - Tôi nghĩ điều này là sai - trong HVAC, đặc tả đã thông qua một nhà tư vấn xây dựng (mặc dù người triển khai có thể truy vấn và thách thức thông số kỹ thuật bất cứ lúc nào).
HorusKol

1
"khi thời gian hoàn thành trôi qua, họ sẽ khám phá ra 10.000 điều nhỏ mà họ hoàn toàn phải có" Nhưng điều đó chỉ đúng với phần mềm được tạo ra tùy chỉnh. Nếu bạn phát triển một phần mềm thu nhỏ hoặc một phần mềm nội bộ, nó sẽ hoàn thành khi bạn nói nó đã hoàn thành. Sẽ luôn có yêu cầu cho các tính năng bổ sung. Một số trong số họ sẽ được đưa vào một bản phát hành trong tương lai, một số sẽ không. Tôi không thấy lợi ích của thông số kỹ thuật chi tiết ở đây.
nikie

2
@nikie: Nói với nhóm thiết kế Duke Nukem. Bạn phải đối phó với QA, tiếp thị, những người đọc quá nhiều tạp chí ... Nó vẫn còn quan trọng.
Satanicpuppy

8

Thông số kỹ thuật cho phép bạn suy ngẫm về mọi thứ mà không cần phải viết nhiều mã lên phía trước sẽ phải thay đổi, nếu thông số kỹ thuật thay đổi. Hãy xem nó là giữa bảng đen và mã hóa thực tế

Đó cũng là một ý tưởng rất tốt để làm khi có một số bên độc lập viết các thành phần cần phải đi cùng nhau.


8

Ngoài một số lý do rất tốt khác đã được đề cập, việc có một thông số chính thức cho phép bạn CYA - Cover Your Ass! Nếu các nhà quản lý / nhà phân tích / người kiểm tra nói rằng bạn không xây dựng một cái gì đó chính xác, bạn có thể chỉ ra thông số kỹ thuật và nói "Tôi đã xây dựng nó như bạn muốn!". Điều này bao gồm các công cụ cấp thấp, chẳng hạn như "Tất cả dữ liệu được lưu trong bảng AXX_RGV phải ở dạng UPPERCASE", "Các biểu mẫu web có ít hơn 3 trường nhập phải có nút Gửi ở phía dưới bên trái", v.v ...

Ngoài ra khi mọi người quên mọi thứ trong một dự án rất dài và lớn, việc có một thông số chi tiết để tham khảo có thể rất hữu ích. Chỉ cần nhớ rằng thông số kỹ thuật phải là Tài liệu sống và nếu các yêu cầu thay đổi (thông qua những gì được hy vọng là quy trình tài liệu và chính thức), thì thông số kỹ thuật cũng phải như vậy. Vâng, điều này có thể mất nhiều thời gian hơn. Theo kinh nghiệm của tôi, nó đáng giá (nếu nó được thực hiện đúng).


1
+1 để duy trì thông số kỹ thuật trong suốt vòng đời của dự án.
Chuck Stephanski

6

Một đặc tả chính thức về các yêu cầu của một chương trình cần thiết bởi vì kỹ sư phần mềm cần biết những gì cần thực hiện; kỹ sư QA cần biết những gì cần kiểm tra và khách hàng cần biết những gì mong đợi.

Có một thông số kỹ thuật cho phép bạn biết khi nào bạn hoàn thành lập trình.


1
Tôi tin rằng OP đã hỏi về tính hữu ích của thông số kỹ thuật thiết kế chi tiết. Mọi người đều biết rằng một tài liệu yêu cầu được viết tốt là rất quan trọng đối với sự thành công của một dự án. Tôi không chắc chắn rằng các thông số kỹ thuật thiết kế chi tiết ngày nay cũng hữu ích như khi chúng ta sử dụng các ngôn ngữ lập trình cấp thấp hơn nhiều. Trước đó, một thông số thiết kế chi tiết được đặt ra trong mã giả những gì cần được mã hóa. Mã được triển khai đã được kiểm tra đối với mã psuedocode trong quá trình xem xét mã để đảm bảo tính chính xác. Định hướng này cũng có tác dụng phụ là tạo ra một lớp con của các lập trình viên được mã hóa từ spec.
bit-twiddler

3

Một trong những lợi ích chính có thể là an toàn. Tôi sẽ không muốn bay trên một chiếc máy bay trong đó đặc điểm kỹ thuật của các hệ thống điều khiển là một triển khai tham chiếu. Tôi thực sự muốn ai đó chỉ định những gì hệ thống cần làm trong một hình thức mà một người không quen thuộc với phần mềm có thể hiểu được. Tôi mong đợi từng yêu cầu đã được xác minh đầy đủ bằng cách thử nghiệm.

Đối với các hệ thống quan trọng ít an toàn, thông số kỹ thuật là công cụ truyền thông. Họ nên chi tiết những gì hệ thống cần làm chi tiết đủ để xây dựng và kiểm tra hệ thống. Làm thế nào hệ thống làm điều này là trách nhiệm của mã. Các chi tiết cần thiết sẽ khác nhau tùy thuộc vào chuyên môn tên miền của nhóm phát triển và quyền truy cập vào các chuyên gia tên miền.

Thông số kỹ thuật phải luôn phù hợp với các hệ thống được thực hiện. Nếu lỗi được tìm thấy trong đặc tả, thông số kỹ thuật cần được cập nhật.

Lỗi gây ra các ước tính mà tôi đã thấy cho thấy các lỗi thử nghiệm được phân chia tương đối đồng đều giữa các lỗi về thông số kỹ thuật, mã và thử nghiệm.


3

Tôi nghĩ rằng câu hỏi này là mấu chốt của câu hỏi vòng đời nhanh nhẹn và thác nước.

Nếu bạn đang làm nhanh, tiền đề cơ bản là mã được kết hợp với tương tác nhà phát triển chặt chẽ sẽ tốt hơn và nhanh hơn so với đặc tả chi tiết. Nhóm nghiên cứu ưu tiên phát hành các tính năng mới và chất lượng cao hơn những thứ khác - như các cơ chế giao tiếp chính thức như thông số kỹ thuật thiết kế chi tiết. Nhưng có một giao dịch ở đây - bạn phải có các kênh liên lạc giữa các thành viên trong nhóm để họ hỏi về sắc thái và ý định thiết kế chi tiết khi họ cần.

Nếu bạn đang thực hiện thác nước, bạn đang làm việc theo giả định rằng công việc điền mã theo thiết kế chi tiết và sau đó thử nghiệm nó là rất quan trọng. Và bạn muốn cung cấp cho các bên liên quan cái nhìn sâu sắc sớm về cách công việc này sẽ tiến hành và nó sẽ như thế nào khi nó được thực hiện. Đó có thể là việc kiểm tra thiết kế với khách hàng để đảm bảo bạn đã tìm ra các tính năng có ý nghĩa. Nó cũng có thể là để kiểm tra nó với các chuyên gia trong các đấu trường khác - chẳng hạn như đánh giá an toàn, đánh giá bảo mật và đánh giá của các thành viên trong nhóm phải tích hợp với mã của bạn. Giả định là những đánh giá này sẽ tiết kiệm thời gian trong thời gian dài bởi vì chúng sẽ giúp bạn tiết kiệm được việc điều tra một lượng lớn thời gian trong việc phát triển điều sai.

Gần đây, tôi đã thấy một số hợp nhất thực sự tuyệt vời giữa các thiết kế chi tiết và các công cụ nhận xét mã - ví dụ JavaDoc. Vì hầu hết các thiết kế chi tiết là các bản in chân của mã và các giải thích ngắn về những gì nó sẽ làm - đây ít nhiều giống với những gì bạn mong đợi như các nhận xét về mã. Vì vậy, có một công cụ sẽ chuyển đổi các nhận xét mã thành một thông số thiết kế chi tiết là điều tuyệt vời - một cách tốt hơn để giữ cho nó cập nhật hơn là làm bằng tay.

Tôi tin rằng đánh giá không chính xác về cách thiết kế chi tiết cho dự án , là một yếu tố chính trong tăng trưởng chi phí. Điều tồi tệ nhất là bạn bị nguyền rủa nếu bạn làm và bị nguyền rủa nếu bạn không:

  • Nếu thiết kế của bạn quá chi tiết về quy mô của đội, độ phức tạp của công việc và các yêu cầu của cổng bạn phải vượt qua (đánh giá bảo mật, đánh giá an toàn, v.v.), thì bạn đã lãng phí thời gian và tiền bạc quý giá một vật phẩm bạn sẽ không bao giờ sử dụng.
  • Nếu thiết kế của bạn không đủ chi tiết, bạn sẽ lãng phí tiền vì các thành viên trong nhóm đưa ra các giả định không chính xác dẫn đến các vấn đề tích hợp và bạn có nguy cơ phải làm lại rất nhiều khi kiểm toán an ninh hoặc an toàn cuối cùng phát hiện ra các vấn đề có thể được khắc phục sớm và rẻ tiền nếu chúng bị khía cạnh rõ ràng của thiết kế trước khi thực hiện.

Tôi không cảm thấy đó là vỏ màu đen và trắng - có thể có nhiều lúc một số thành phần "đủ tốt" nếu được thiết kế ở mức cao, trong khi những bộ phận khác cần công việc chi tiết nghiêm ngặt. Và việc thay đổi môi trường nhóm hoặc dự án có thể quyết định nhu cầu thiết kế mới khi dự án phát triển.


2

Làm việc trên một dự án lớn ngay bây giờ. Cho đến nay, thông số kỹ thuật đã giúp QA xác định những gì cần kiểm tra, đã cho phép chúng tôi tính phí khách hàng nhiều hơn (đáng kể là hàng triệu) khi kiểm tra Người dùng, họ quyết định rằng những gì họ đã đồng ý không phải là những gì họ thực sự muốn, cho phép mọi người thực hiện đánh giá mã để xem mã có đáp ứng yêu cầu hay không, cho phép các nhà phát triển có cơ sở để kiểm tra xem họ đã hoàn thành chưa và chỉ đến thông số kỹ thuật để giải quyết tranh chấp về những gì mô-đun nên chứa. Nó cũng cho phép chúng tôi xác định các nhà phát triển không sản xuất những gì khách hàng yêu cầu trước khi khách hàng nhìn thấy sản phẩm và điều đó đã trở thành cơ sở để loại bỏ một số người không thể theo dõi thông số kỹ thuật. Sự phức tạp của thông số kỹ thuật của chúng tôi đã giúp khách hàng nhận ra rằng chúng tôi không thái quá trong ước tính chi phí và thời gian.

Tôi muốn thêm, tôi đã làm việc trên các dự án với thông số kỹ thuật tốt, với thông số kỹ thuật xấu và không có thông số kỹ thuật. Những người cuối cùng là tồi tệ nhất là những người không có thông số kỹ thuật vì nhóm phát triển và khách hàng luôn có một tầm nhìn nội bộ khác nhau về kết quả cuối cùng. Đây là những dự án mà bạn đi xung quanh lẩm bẩm, "tôi có thể lấy mô-đun đọc tâm trí ở đâu?" Đoán những gì khách hàng có thể muốn là một trải nghiệm khủng khiếp. Thông số kỹ thuật xấu không tốt hơn nhiều, nhưng ít nhất bạn có thể tinh chỉnh khi bạn đi và nói, "Tôi không chắc ý của bạn ở đây là gì." để có thêm thông tin trước khi lãng phí thời gian xây dựng điều sai. Dự án lớn mà tôi đang thực hiện hiện tại có thông số kỹ thuật tốt đáng kinh ngạc, nó làm cho cuộc sống dễ dàng hơn và ít căng thẳng hơn.


+1 - Đôi khi bạn phải nhận ra đây là một doanh nghiệp liên quan đến những người kỹ thuật và phi kỹ thuật nhìn thấy bức tranh lớn theo nhiều cách.
JeffO

2

Cá nhân, tôi nghĩ thông số kỹ thuật chi tiết đánh giá cao.

Theo kinh nghiệm của tôi, những gì khách hàng cần và những gì khách hàng nghĩ họ cần thường là hai thứ khác nhau. Nếu bạn đóng băng các yêu cầu sớm, bạn đang xây dựng những gì họ nghĩ rằng họ cần chứ không phải những gì họ thực sự cần. Về mặt pháp lý, bạn ở bên an toàn và bạn sẽ được trả tiền, nhưng bạn sẽ không có một khách hàng hài lòng.

Mặt khác, nếu bạn chấp nhận rằng phát triển phần mềm ở một mức độ nào đó là một hoạt động khám phá, bạn sẽ cố gắng duy trì các yêu cầu mở càng lâu càng tốt. Thảo luận với người dùng những gì bạn cần biết cho lần lặp hiện tại , không hơn, không kém. Và biết rằng đôi khi, bạn sẽ phải xem lại các quyết định này trong lần lặp lại sau. Quan trọng nhất: Hãy nhớ rằng nếu điều đó xảy ra, đó không phải là lỗi của khách hàng. Trừ khi người dùng của bạn là nhà phát triển phần mềm, quá trình thu thập yêu cầu không phải là một phần trong mô tả công việc của họ. Đó là một phần trong mô tả công việc của bạn.

Vậy làm thế nào để bạn ngăn chặn tính năng creep? Lý tưởng nhất, bằng cách có một người quản lý sản phẩm lành mạnh, người chịu trách nhiệm chấp nhận hoặc từ chối các yêu cầu tính năng và không thể bị chi phối bởi bất kỳ ai khác.


1

Agile đã hơn 10 tuổi, vì vậy đây không phải là một hiện tượng mới.

Tôi hy vọng thông số kỹ thuật sẽ ngắn hơn rất nhiều so với mã, vì vậy tôi không biết bạn cần bao nhiêu chi tiết. Cần có đủ để giữ các thành viên trong nhóm trong vòng lặp. Việc đọc tất cả các mã của nhau có thực tế / cần thiết không?

Đồng ý, không cần tài liệu chết. Tôi muốn tiếp cận một cơ sở mã lạ không có tài liệu hơn tài liệu không chính xác.

Và nếu máy tính rất giỏi trong việc thực thi mã của bạn, tại sao bạn không để nó tự thay đổi? Làm theo công thức ở mặt sau của hộp không làm cho bạn trở thành một đầu bếp.

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.