Là viết phần mềm trong trường hợp không có yêu cầu là một kỹ năng để sở hữu hoặc một tình huống tôi nên tránh?


44

Tôi thấy rằng một số nhà phát triển phần mềm rất thành thạo về điều này và thường được khen ngợi về khả năng đưa ra một khái niệm làm việc với các yêu cầu trừu tượng. Thành thật mà nói, điều này làm tôi phát điên, và tôi không thích "làm cho nó lên" khi tôi đi. Tôi đã từng nghĩ rằng điều này có vấn đề, nhưng tôi đã bắt đầu cảm nhận được sự thay đổi và tôi tự hỏi liệu tôi có cần điều chỉnh quá trình suy nghĩ (và lập trình) của mình khi được đưa ra rất ít hướng. Tôi có nên bắt đầu có được khả năng này như một kỹ năng, hay bám sát ý tưởng rằng quy tắc kinh doanh và thu thập yêu cầu là ưu tiên hàng đầu?


2
Một tình huống cần tránh. Chỉ có điều là, bạn không thể. Và tôi đã phát cuồng về nó vài tuần trước ...
yannis

64
Đó là cả hai, giống như vận hành một bình chữa cháy.
Ben Brocka

3
Nếu như bạn không có kế hoạch, bạn đã mặc định sẵn kế hoạch là sự thất bại. Những dự án này được xây dựng mà không có yêu cầu có thể hoặc không thể đáp ứng mong đợi của khách hàng khi họ rời khỏi cửa hàng nhưng họ gần như chắc chắn che giấu vô số tội lỗi có nghĩa là khi các yêu cầu thay đổi (và họ luôn làm) một thế giới đau thương đang chờ đợi người phải chịu thực hiện những thay đổi cần thiết Các lập trình viên viết mà không có yêu cầu chính thức không nên khen ngợi, họ nên bị khiển trách vì đã không chuẩn bị cho việc bảo trì dự án trong tương lai dài hạn
GordonM


5
Đôi khi, khách hàng không biết họ muốn gì. Họ muốn bạn chạy "thí nghiệm" để xác định những gì họ muốn. Tôi đã từng viết một hệ thống hoa hồng trong đó yêu cầu duy nhất là trả hoa hồng. Tỷ lệ phần trăm và các khoản phải trả hoa hồng được xác định theo kinh nghiệm với hệ thống hoa hồng thử nghiệm.
Gilbert Le Blanc

Câu trả lời:


80

Kỹ năng không phải là viết phần mềm mà không có yêu cầu. Thay vào đó, để gợi ra các yêu cầu từ chủ dự án bất kể có tài liệu yêu cầu chính thức hay không.

Thu thập các yêu cầu chắc chắn là ưu tiên hàng đầu của bạn, nhưng bạn không nhất thiết phải ghi nhận tất cả các nhu cầu của khách hàng. Rủi ro tất nhiên là bạn có thể bỏ lỡ một số thông tin quan trọng làm cho kiến ​​trúc hệ thống của bạn trở nên vô dụng nếu bạn không quản lý để có loại cuộc trò chuyện phù hợp với khách hàng của mình, tuy nhiên việc xác định sản phẩm và thậm chí nhận được là không bình thường. phần lớn sự phát triển ngoài lề, trong khi trì hoãn các quyết định kiến ​​trúc hệ thống chính cho đến thời điểm cuối cùng có thể. Đây là một cách tiếp cận phát triển tinh gọn nhằm đảm bảo rằng bạn không cam kết với một kiến ​​trúc không tương thích tiềm năng quá sớm trong quá trình phát triển sản phẩm của bạn cho đến khi bạn có nhiều thông tin vững chắc hơn. Trong các tình huống mà OP đã mô tả trong câu hỏi của anh ấy,

Vâng, đôi khi bạn cần phải nhìn chằm chằm vào quả cầu pha lê một chút để hiểu được khách hàng thực sự đang yêu cầu điều gì, đó là nơi mà việc tạo mẫu tăng đột biến và chậm - và đôi khi rất đau đớn - đòi hỏi phải gia tăng các yêu cầu rằng bạn thực sự phát triển các kỹ năng quan hệ khách hàng tốt và cũng là sự kiên nhẫn để nhận ra rằng với bất kỳ ý tưởng phần mềm phức tạp nào, ban đầu, khách hàng thường không biết nhiều hơn bạn về những gì phần mềm thực sự cần làm. Thông thường, khách hàng gọi cho bạn sớm để phụ thuộc vào chuyên môn của bạn để xác định các yêu cầu của họ vì khách hàng không phải lúc nào cũng có chuyên môn hoặc kiến ​​thức cần thiết về quy trình phát triển phần mềm.


22
"Kỹ năng này không phải là viết phần mềm mà không có yêu cầu. Thay vào đó, nó gợi ra các yêu cầu từ chủ dự án bất kể có tài liệu yêu cầu chính thức hay không." Đây cũng là điều mà tôi đã suy nghĩ rất nhiều. Nó gần giống như là một thám tử giỏi, hoặc biết cách phỏng vấn ai đó và đặt câu hỏi đúng. Trong tình huống này, tôi tìm thấy câu hỏi, "Bạn có thể cho tôi biết bạn muốn làm gì không?" hoạt động tốt hơn nhiều so với "Bạn có thể cho tôi biết nó nên hoạt động như thế nào không?"

5
@BrianReindel Đôi khi tôi bắt đầu với sự kết hợp Bản đồ tư duy / Cây nhị phân theo suy nghĩ của khách hàng. Tôi hỏi "ý tưởng là gì?", Sau đó sử dụng liên kết từ để xem mỗi ý tưởng mang lại điều gì cho tâm trí khách hàng. Từ đó tôi xây dựng một bức tranh về những gì khách hàng đang nghĩ và tôi bắt đầu xác định các yêu cầu từ đó. Mỗi yêu cầu gợi lên những câu hỏi cần được hỏi. Thông thường các câu hỏi "Tại sao" giúp tôi có câu trả lời tốt hơn các câu hỏi "Cái gì / Làm thế nào", vì chúng cho khách hàng cơ hội suy nghĩ vượt ra ngoài những điều cơ bản. Về cơ bản, đó là một nghệ thuật trong việc sử dụng tâm lý học để khiến khách hàng bộc lộ nhu cầu.
S.Robins

3
Một phần của kỹ năng là biết thứ tự thực hiện mọi thứ và tránh "hoàn thiện" những thứ sẽ bị xé toạc bằng mọi cách. Bằng cách đó, bạn có thể gặp khách hàng / người quản lý / bất cứ điều gì, cho họ thấy những gì bạn có cho đến nay và điều chỉnh khi bạn đi cùng. Bạn cần biết làm thế nào để thực hiện các bước lớn theo đúng hướng chung trước tiên.
David Schwartz

4
Một cách để khơi gợi các yêu cầu là cung cấp cho họ một cái gì đó cơ bản và xem phần nào họ phàn nàn. Ví dụ: tạo một nguyên mẫu giấy ( amazon.co.uk/ - ) và chạy qua các tương tác với chúng.
deworde

35

Điều này rất mơ hồ

Hai điều tôi có thể nói:

  1. Có rất nhiều người kỹ thuật rất có năng khiếu mà sự nghiệp của họ bị dừng lại vì họ chờ đợi những yêu cầu hoàn hảo. Hoặc họ chơi, "Xin lỗi, không thể làm điều đó, không nằm trong yêu cầu." Thực tế là yêu cầu viết rất khó khăn. Độ chính xác cần thiết cho các yêu cầu tốt không giống như bất cứ điều gì mà hầu hết những người kinh doanh đã từng tạo ra. Có một cầu nối giữa công nghệ và doanh nghiệp, và những người khiến những người khác đến 100% để gặp họ thường thua cuộc.

  2. Có những người phần mềm học các lĩnh vực tốt hoặc tốt hơn khách hàng của họ. Những người này đáng giá vàng của họ, ngay cả khi họ không phải là nhà phát triển tốt nhất 100%. Tôi đã thấy mọi người phần mềm dự đoán nhu cầu tiếp thị định lượng của các nhà quản lý thương hiệu tốt nhất trong nước. Họ không giỏi nhất trong việc mã hóa tất cả các giải pháp, nhưng họ là anh hùng vì họ có thể qua cầu.

Cuộc sống không phải là về màu đen và người da trắng mặc dù. Nếu bạn vẽ một hộp hẹp xung quanh mình, bạn sẽ tự giới hạn mình. Mặt khác, một tổ chức loại bỏ những gì cần thiết để tạo ra công nghệ cũng bị hạn chế. Bạn sẽ phải xem nơi nào bạn thích màu xám hơn.


12

Yêu cầu là những bước trong hành trình, tầm nhìn là hướng đi

Đối với nhiều ứng dụng, một đặc tả kỹ thuật rất chi tiết chỉ là quá nhiều vì một cuộc thảo luận nhanh có thể khiến tài liệu sắp chữ cẩn thận của họ trở nên vô dụng. Thay vào đó, hãy bắt đầu với một tầm nhìn. Nếu mọi người hiểu bức tranh tổng thể thì các yêu cầu có thể được điền vào trong suốt quá trình thảo luận.

Là một nhà phát triển, bạn phải học cách sử dụng các cuộc thảo luận này để truy tìm các yêu cầu . Điều này có nghĩa là đặt câu hỏi hàng đầu cho khách hàng khiến họ suy nghĩ về quyết định của họ ngày nay phù hợp với tầm nhìn tổng thể. Càng sớm những cuộc thảo luận chi tiết này diễn ra thì tầm nhìn tổng thể sẽ càng nhanh chóng trở thành một thiết kế mạch lạc.

Bạn nên theo dõi kết quả của các cuộc thảo luận này trong một số loại theo dõi vấn đề để những người khác có thể nhận xét về họ nếu họ bỏ lỡ cuộc thảo luận ban đầu. Và để bạn có một bản ghi bạn, hoặc các thành viên khác trong nhóm của bạn, có thể tham khảo lại nếu bạn cần làm rõ.

Vì vậy, học cách viết mã chống lại tầm nhìn, nhưng hãy sẵn sàng để truy tìm những yêu cầu đó khi đến lúc.


+1 cho "Yêu cầu là các bước trong hành trình, tầm nhìn là hướng"
người dùng

10

Steve Jobs tin rằng khách hàng không thể mô tả chính xác những gì họ muốn các sản phẩm trong tương lai trông như thế nào, vì vậy công việc của bạn là cung cấp chúng. Vì vậy, trừ khi bạn cung cấp phần mềm tùy chỉnh mọi lúc, hãy quên thông số kỹ thuật chính thức và bắt đầu bằng cách tạo nguyên mẫu và để khách hàng chơi với họ và cho bạn biết họ nghĩ gì. Bạn phải đặt đúng người làm nguyên mẫu, và họ cần có sự giúp đỡ. Tôi nói điều này từ kinh nghiệm - Tôi là con khỉ nguyên mẫu, người thích tạo giao diện trực quan và tôi đã hợp tác với ai đó trong sản phẩm, người hiểu những gì khách hàng muốn và có thể giải thích mọi thứ trên giấy hoặc sử dụng Excel.

Cả hai chúng tôi đều không phải là thiên tài, nhưng chúng tôi nghĩ giống nhau - bạn gần như có thể nói rằng chúng tôi có hóa học và có tác động rất lớn đến việc mọi thứ đang được xây dựng và làm thế nào. Bây giờ, chỉ có một nhóm từ trung bình đến lớn có thể đủ khả năng để có một nguyên mẫu và một người không phải là lập trình viên, người phát triển sản phẩm độc quyền, nhưng nó rất xứng đáng. Prototyping là giai đoạn rẻ nhất trong phát triển phần mềm, vì vậy nó chỉ có ý nghĩa để có được giao diện người dùng và hành vi rõ ràng. Tôi chưa đọc Code Complete nhưng tôi nghĩ có một cái gì đó giống như được viết trong cuốn sách đó.

Thông số kỹ thuật là tốt đẹp để có, nhưng chúng không bao giờ hoàn hảo. Có tồn tại một định lý về điều đó. Bạn không thể chứng minh rằng thông số kỹ thuật đã hoàn tất và bạn không thể chứng minh rằng công cụ không có lỗi hoặc nó sẽ dừng lại :)

Tuy nhiên, các công ty phần mềm luôn luôn vận chuyển phần mềm bất chấp những khiếm khuyết này trong quy trình. Thông số kỹ thuật sẽ không bao giờ hoàn hảo. Thông số kỹ thuật cũng KHÔNG HẤP DẪN và lỗi thời. Một thông số kỹ thuật cho một nguyên mẫu giống như bảng logarit là một biểu đồ duy nhất - thông số kỹ thuật về cơ bản là một tập tài liệu nhàm chán được in trong khi bạn có thể tương tác với một công cụ / biểu đồ thay thế. Hãy xem http://www.i-programmer.info/news/112-theory/3900-a-better-way-to-program.html để tìm cảm hứng.

Bây giờ, spec là tốt nếu bạn phải có một hợp đồng để trang trải mông của bạn. Nhưng một thông số kỹ thuật vẫn nên đến sau một nguyên mẫu, không phải trước đó. Công việc của bạn là tìm ra cách làm cho các nguyên mẫu rẻ tiền.


+1 cho thông số kỹ thuật không bao giờ hoàn hảo, nhưng -1 cho thông số kỹ thuật không tự nhiên và lỗi thời. Hãy nghĩ về các yêu cầu như một danh sách các tính năng mà khách hàng muốn và Spec là danh sách các hành vi xác định những gì khách hàng cần. Về cơ bản hợp đồng của các loại quy định như thế nào các chức năng hệ thống, thay vì những gì hệ thống được. Thiết kế và thông số kỹ thuật lớn lên là vấn đề, nhưng giống như tất cả các vấn đề lớn sẽ dễ thực hiện hơn khi được chia nhỏ để thực hiện một lúc. Tạo mẫu cũng hiếm khi có hiệu quả về chi phí nếu bạn không có ý tưởng gì về nguyên mẫu. Đây là nơi thông số kỹ thuật cung cấp một điểm khởi đầu ...
S.Robins

... tuy nhiên, thông số kỹ thuật không nhất thiết phải được viết bằng đá. Tạo mẫu (về cơ bản là vấn đề đi xe đạp) có giá trị nhất khi chúng cung cấp thông tin mới vào thông số kỹ thuật và nơi thông số kỹ thuật được phép thay đổi để phù hợp với những điều bạn đã học được từ nguyên mẫu. Nếu không có thông số kỹ thuật, bạn có nguy cơ đơn giản làm mọi thứ trở nên ổn định, điều này không phải luôn luôn là lợi ích tốt nhất của khách hàng. Khách hàng mong đợi bạn đáp ứng nhu cầu của họ và bạn có ít rủi ro ma sát hơn khi bạn có thể cung cấp bằng chứng rằng bạn đã đồng ý với điều gì đó, ngay cả khi chỉ là do dự kiến.
S.Robins

@S. Robins, một bác sĩ (khách hàng) có thể nói điều gì đó đơn giản như "Tôi muốn thấy một cây gia đình có nguy cơ ung thư ước tính tương ứng cho mỗi thành viên trong gia đình." Vì có nhiều cách khác nhau để trình bày thông tin này và lo lắng về các gia đình lớn trải dài trên nhiều trang, tôi nghĩ sẽ thật vô lý khi bắt đầu ghi lại thông tin này như một thông số ngay lập tức. Chúng tôi hiểu những gì bác sĩ nói, nhưng chúng tôi muốn nhận được chính xác hơn. Một nguyên mẫu tương tác hiển thị số và tên ngẫu nhiên mà tài liệu có thể nói yay hoặc nay là tự nhiên hơn so với thông số 30 trang không hoàn chỉnh cố gắng mô tả giống nhau.
Công việc

1
Tôi hiểu bạn đến từ đâu, tuy nhiên những gì bạn đề xuất thường là một cách tiếp cận đắt tiền. Rõ ràng tôi không đề xuất nguyên mẫu là một sản phẩm hoàn chỉnh, nhưng bất cứ điều gì bạn xây dựng ở nơi có bất kỳ tương tác nào cũng sẽ cần thời gian để phát triển. Một lựa chọn ít tốn kém hơn là đứng ở bảng trắng, phác thảo một vài ý tưởng và đặt câu hỏi nhắm mục tiêu để giúp bạn thu hẹp tiêu chí của mình. Tôi cũng không ủng hộ việc tạo ra một thông số lớn. Các tài liệu phác thảo, hoặc thậm chí các mẫu mã kiểm tra, được tạo ra lặp đi lặp lại và khi cần, thường đơn giản và rẻ hơn so với tạo mẫu trước.
S.Robins

3

Tôi thường thấy rằng trong một số trường hợp tôi cần phải đóng vai trò như một nhà phân tích kinh doanh, phát hiện chính xác cách thức các doanh nghiệp hiện đang hoạt động, cách mọi người nghĩ rằng nó hoạt động (thường được những điều rất khác nhau), và làm thế nào họ sẽ thích nó để làm việc.

Tôi đã tìm thấy thành công bằng cách luôn rõ ràng về các quyết định mà tôi buộc phải đưa ra để xây dựng phần mềm. Tôi giải thích lý do của mình, viết tài liệu về những gì tôi đã khám phá, tạo biểu đồ và phân phối chúng cho mọi người, v.v.

Bạn có thể sẽ không tạo ấn tượng tốt bằng cách từ chối thực hiện bất kỳ công việc nào cho đến khi hoàn thành các yêu cầu. Nhưng bằng cách tự mình thu thập các yêu cầu chất lượng tốt (mà không nhất thiết phải chú ý đến thực tế), bạn sẽ đạt được cùng một mục tiêu là phần mềm chất lượng.

Và vâng, như những người bình luận khác đã nói, luôn xây dựng phần mềm giả định rằng nó sẽ thay đổi. Thay đổi là một hằng số bạn có thể dựa vào. Luôn xây dựng phần mềm của bạn đủ linh hoạt và mô đun để không cập nhật phần mềm khi một số yêu cầu mới đột nhiên xuất hiện.


3

Nếu bạn muốn làm việc như một nhà phát triển phần mềm khi mới khởi nghiệp, đó là một kỹ năng cần có.

Nếu bạn muốn làm việc tại một công ty tư vấn thì đó là một tình huống cần tránh bằng mọi giá. Điều này là do công ty của bạn được trả tiền theo mức độ bạn thực hiện thông số kỹ thuật / yêu cầu chứ không phải bạn giải quyết vấn đề của khách hàng tốt như thế nào.

Nếu bạn đang viết mã để giải trí trong thời gian rảnh rỗi thì đó là cuộc gọi của bạn. Nếu bạn không cảm thấy đủ điều kiện để thực hiện cuộc gọi cho các dự án thời gian rảnh rỗi của mình thì hãy thử một vài cách và xem những gì hoạt động. Ngoài ra, không cần thiết một điều phù hợp với một kích thước, một số dự án yêu cầu một hoặc một kiểu tiếp cận khác. Thông thường nếu bạn chọn sai một trong những dự án này, bạn sẽ tìm ra nó khá nhanh.


2

Một chút của cả hai. Bạn cần làm hài lòng khách hàng, điều đó có nghĩa là bạn cần biết họ muốn gì. Mặt khác, khách hàng nổi tiếng là xấu trong việc truyền đạt những gì họ thực sự muốn.

Vì vậy, bạn muốn tránh các tình huống mà bạn không biết khách hàng muốn gì, nhưng chắc chắn bạn sẽ gặp phải một kịch bản trong đó các yêu cầu là 'yếu đuối' nhất, và tồi tệ nhất. Một lập trình viên thế giới thực tốt đòi hỏi khả năng thích ứng.


2

Không thể viết một chương trình mà không có yêu cầu. Ngay cả 'Hello World' cũng có yêu cầu: tạo ra đầu ra. Vì vậy, tôi nghĩ rằng bạn đang hỏi về các yêu cầu chính thức, dưới dạng một số lượng lớn thứ gì đó giống như UML. Và về những điều đó, tôi đã gặp 2 loại người:

1) Những người cần yêu cầu chính thức. Họ cần được nói chính xác những gì cần làm, và tốt nhất là làm thế nào để làm điều đó. Họ yêu thích các câu như Quy trình A lấy đối số B sẽ xuất ra C và họ ghét những câu đó: Chương trình sẽ làm cho công việc của chúng tôi hiệu quả hơn . Chúng thường là động vật của công ty.

2) Những người đối diện với 1. Họ ghét được nói phải làm gì và làm như thế nào, họ thích được nói những gì nên đạt được. Họ thích nói chuyện với khách hàng, phân tích những gì họ nói và sau đó phát triển giải pháp của riêng họ. Họ thường là những người làm việc tự do và không phù hợp với tập đoàn.

Tôi sẽ không nói cái nào tốt hơn. Cả hai đều có ưu và nhược điểm của họ. Họ là đơn giản đầy đủ cho các điều kiện khác.


0

Bạn KHÔNG thể phát triển phần mềm hoạt động mà không biết các Yêu cầu; nhưng, bạn có thể có một cú hích tốt trong việc phát triển những gì kinh nghiệm của bạn cho bạn biết các Yêu cầu có khả năngđược. Phát triển Agile sử dụng kết hợp các kỹ thuật 'trực quan', bao gồm Quy tắc 80:20 và 'khám phá' các Yêu cầu bằng cách tạo mẫu. Nói cách khác, một nhóm phát triển có kinh nghiệm đưa ra dự đoán tốt nhất về những gì cần thiết và tạo ra một nguyên mẫu của phần mềm. Quy tắc 80:20 nói rằng họ sẽ đúng 80%. Các bên liên quan của dự án sau đó xem xét các nguyên mẫu hữu hình. Phản hồi của họ bắt đầu lấp đầy khoảng trống 20% ​​theo cách hiểu của chúng tôi về Yêu cầu. Vì vậy, về mặt hiệu quả, Agile không phải là về việc viết phần mềm mà không có bất kỳ yêu cầu nào, thay vào đó, đó là về việc sử dụng kinh nghiệm trước đây của bạn để nói, "bạn có muốn một cái gì đó như thế này không?" Trong 80% các trường hợp, sẽ cho phép bạn vượt lên và xác nhận những gì thực sự cần thiết nhanh hơn là thực hiện các quy trình Yêu cầu truyền thống.


Agile không phải là về trực giác, mà là về giao tiếp. Việc cung cấp phần mềm làm việc thường xuyên để nhận phản hồi thường là khuyến khích giao tiếp và định giá việc cung cấp những thứ khách hàng cần. Vâng, kinh nghiệm phát huy tác dụng, nhưng bạn có nhiều khả năng phát triển những gì khách hàng cần nếu trước tiên bạn hỏi những gì khách hàng yêu cầu. Quy tắc được gọi là 80:20 không thực sự được áp dụng trừ khi bạn rất quen thuộc với lĩnh vực kinh doanh của khách hàng và thậm chí sau đó tôi sẽ lấy 'thống kê' đó bằng một thìa muối lớn.
S.Robins

-2

Ai nói Agile đã viết mã khi không có yêu cầu? Tôi biết Tuyên ngôn đã được giải thích theo cách này bởi một số ... nhưng điều đó không làm cho nó đúng.


1
Xin chào, trong khi tôi đồng ý với nhận xét của bạn về nguyên tắc (và tôi cũng mệt mỏi khi thấy mọi người sử dụng Agile như một cái cớ để làm hỏng quá trình phát triển và gọi nó là "nhanh nhẹn"), câu trả lời này không thực sự giải quyết được OP câu hỏi, không phải về Agile, mà thay vào đó là hỏi về việc viết phần mềm mà không có yêu cầu có phải là một kỹ năng để phát triển hay không. Có lẽ bạn đã có ý định thêm điều này như một bình luận cho câu trả lời của người khác?
S.Robins
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.