2009-06-02 21 views
7

Tôi đã có một phần công việc ném ra do một thay đổi nhỏ duy nhất spec mà hóa ra không được spec'ed một cách chính xác. Nếu nó đã được thực hiện ngay tại đầu của dự án thì phần lớn công việc đó là would have never have been needed in the first place.Làm thế nào để thực hiện mã theo cách làm giảm khả năng hoàn thành lại hoạt động

Một số nguyên tắc về mẹo/thiết kế tốt giúp giữ cho những điều này xảy ra là gì?

Hoặc để giảm bớt số lượng làm việc lại để mã cần thiết để thực hiện yêu cầu tính năng hoặc thay đổi thiết kế giữa triển khai?

Trả lời

6

Modularize. Tạo các khối mã nhỏ hoạt động tốt. Tuy nhiên, đó chỉ là khởi đầu. Nó thường là một sự kết hợp lớn của các yếu tố góp phần mã quá xấu nó cần phải làm lại hoàn toàn. Tất cả mọi thứ từ yêu cầu không ổn định cao, thiết kế kém, thiếu quyền sở hữu mã, danh sách đi và về.

Thêm vào những gì người khác đã đưa ra: COMMUNICATION.
Giao tiếp giữa bạn và khách hàng, bạn và quản lý, bạn và các nhà phát triển khác, bạn và bộ phận QA của bạn, thông tin liên lạc giữa mọi người là chìa khóa. Đảm bảo quản lý hiểu khung thời gian hợp lý và đảm bảo cả bạn và khách hàng đều hiểu chính xác công trình của bạn là gì.

4

Dành thời gian để giữ liên lạc mở với khách hàng mà bạn xây dựng sản phẩm. Tạo các mốc quan trọng và thiết lập thời gian để hiển thị dự án cho khách hàng tại mỗi mốc. Ngay cả khi khách hàng hoàn toàn thất vọng với một mốc quan trọng khi bạn hiển thị nó, bạn có thể làm xước những gì bạn có và bắt đầu lại từ cột mốc cuối cùng. Điều này cũng đòi hỏi rằng công việc của bạn được xây dựng trong các khối làm việc độc lập với nhau như Csunwold đã nêu.

điểm ...

  1. Giữ mở giao
  2. Hãy cởi mở và trung thực với sự tiến bộ của sản phẩm
  3. Hãy sẵn sàng thay đổi hàng ngày với nhu cầu của doanh nghiệp khách hàng và thông số kỹ thuật cho sự thay đổi sản phẩm .
+3

Nói cách khác, hãy đọc Mã hoàn chỉnh của Steve McConnell. – Copas

0

Giống như csunwold cho biết, việc mô đun hóa mã của bạn là rất quan trọng. Viết nó để nếu một mảnh rơi dễ bị lỗi, nó không làm hỏng phần còn lại của hệ thống. Bằng cách này, bạn có thể gỡ lỗi một phần lỗi duy nhất trong khi có thể dựa vào phần còn lại một cách an toàn.

Ngoài điều này, tài liệu là chìa khóa. Nếu mã của bạn được gọn gàng và được chú thích rõ ràng, việc sửa lại nó trong tương lai sẽ vô cùng dễ dàng hơn cho bạn hoặc bất kỳ ai xảy ra để gỡ lỗi.

Sử dụng điều khiển nguồn cũng có thể hữu ích. Nếu bạn tìm thấy một đoạn mã không hoạt động đúng cách, luôn có cơ hội hoàn nguyên về quá trình lặp lại mạnh mẽ trong quá khứ.

0

Mặc dù nó không trực tiếp áp dụng cho ví dụ của bạn, khi viết mã, tôi cố gắng theo dõi các cách thức mà tôi có thể thấy phần mềm phát triển trong tương lai.

Về cơ bản, tôi cố gắng dự đoán nơi phần mềm sẽ đi, nhưng phê bình, tôi chống lại sự cám dỗ để thực hiện bất kỳ điều gì tôi có thể tưởng tượng xảy ra. Tất cả những gì tôi đang cố gắng làm cho các API và giao diện hỗ trợ tương lai có thể mà không cần triển khai các tính năng đó, với hy vọng rằng những 'kịch bản có thể' này giúp tôi tìm ra một giao diện tốt hơn và tương lai hơn.

Không phải lúc nào cũng hoạt động.

2

Thay đổi yêu cầu phần mềm và không có nhiều việc có thể làm về điều đó ngoại trừ tương tác thường xuyên hơn với khách hàng.

Tuy nhiên, một người có thể xây dựng mã mạnh mẽ hơn khi đối mặt với thay đổi. Nó sẽ không giúp bạn tiết kiệm từ việc ném ra mã đáp ứng một yêu cầu mà không ai cần nữa, nhưng nó có thể làm giảm tác động của những thay đổi đó. Ví dụ: bất cứ khi nào điều này áp dụng, hãy sử dụng giao diện thay vì các lớp (hoặc tương đương bằng ngôn ngữ của bạn) và tránh thêm hoạt động vào giao diện trừ khi bạn hoàn toàn chắc chắn mình cần chúng. Bằng cách xây dựng các chương trình của bạn theo cách bạn ít có khả năng dựa vào kiến ​​thức về một triển khai cụ thể và bạn ít có khả năng thực hiện những thứ bạn không cần.

Một ưu điểm khác của phương pháp này là bạn có thể dễ dàng trao đổi một triển khai cho một cách khác. Ví dụ, đôi khi nó trả tiền để viết hiệu quả nhất (hiệu quả) nhưng viết nhanh nhất và thử nghiệm cho nguyên mẫu của bạn, và chỉ thay thế nó bằng cái gì đó thông minh hơn khi nguyên mẫu là cơ sở của sản phẩm và hiệu năng thực sự vấn đề. Tôi thấy rằng đây là một cách rất hiệu quả để tránh tối ưu hóa sớm, và do đó ném đi những thứ.

2
  • lặp nhỏ

  • lặp thường

  • kiểm tra giữa lặp

  • có được một sản phẩm làm việc đơn giản ra càng sớm càng tốt vì vậy khách hàng có thể cung cấp đầu vào.

Về cơ bản giả định thứ SẼ được ném ra ngoài, do đó, mã thích hợp, và không nhận được đủ xa vào cái gì mà có nó được ném ra chi phí rất nhiều thời gian.

+0

Tôi thứ hai này. Và đảm bảo bạn không "kết hôn" mã của bạn. –

+2

Đồng ý kết hôn với mã của bạn là một sai lầm rất khủng khiếp. Nói chung tôi muốn viết một bản nháp đầy đủ rồi hoàn toàn bắt đầu lại. Sau đó, mã của bạn sẽ trở nên sạch sẽ hơn nhiều vì bạn thực sự biết bạn đang làm gì vào thời điểm đó. – Louis

2

mô đun là câu trả lời, như đã được nói. nhưng nó có thể là một câu trả lời khó để sử dụng trong thực tế. tôi đề nghị tập trung vào:

thư viện
  • nhỏ mà làm những việc được xác định trước cũng
  • phụ thuộc tối thiểu giữa các module

viết giao diện đầu tiên là một cách tốt để đạt được cả hai (với giao diện sử dụng cho phụ thuộc). viết các bài kiểm tra tiếp theo, chống lại các giao diện, trước khi mã được viết, thường làm nổi bật các lựa chọn thiết kế không có mô-đun.

tôi không biết liệu ứng dụng của bạn có tập trung vào UI hay không; có thể khiến mô đun trở nên khó khăn hơn. nó vẫn thường đáng để nỗ lực, nhưng nếu không thì giả sử rằng nó sẽ bị vứt bỏ trước khi dài và tuân theo nguyên tắc tảng băng trôi, rằng 90% công việc không gắn với UI và dễ dàng hơn để giữ mô-đun.

cuối cùng, tôi khuyên bạn nên "lập trình viên thực dụng" bởi andrew hunt và dave thomas với đầy đủ các mẹo. yêu thích cá nhân của tôi là DRY - "không lặp lại chính mình" - bất kỳ mã nào nói cùng một điều hai lần có mùi.

1

G'day,

Nhìn qua các câu trả lời khác ở đây tôi nhận thấy mọi người đang đề cập đến việc cần làm cho dự án tiếp theo của bạn.

Một điều dường như bị thiếu mặc dù đang có một lần giặt để tìm hiểu lý do tại sao thông số kỹ thuật. đã không đồng bộ. với các yêu cầu thực tế cần thiết của khách hàng.

Tôi chỉ lo lắng nếu bạn không làm điều này, bất kể bạn đang thực hiện phương pháp nào để triển khai dự án tiếp theo của mình, nếu bạn vẫn gặp sự không khớp giữa yêu cầu thực tế và thông số kỹ thuật. cho dự án tiếp theo của bạn thì bạn lại một lần nữa sẽ ở trong tình huống tương tự.

Nó có thể là một cái gì đó đơn giản như giao tiếp xấu hoặc có thể yêu cầu khách hàng leo.

Nhưng ít nhất nếu bạn biết nguyên nhân và bạn có thể thử và giúp giảm thiểu cơ hội xảy ra lần nữa.

Không gõ những câu trả lời khác đang nói và có một số nội dung tuyệt vời ở đó, nhưng hãy học hỏi từ những gì đã xảy ra để bạn không bị lên án lặp lại.

HTH

cổ vũ,

+0

Cảm ơn, các điểm rất hợp lệ. (vấn đề của tôi chủ yếu chỉ là nhìn thấy nó được thực hiện đầy đủ và quyết định họ không muốn nó nữa sau khi sử dụng nó, tôi đoán đó là cust creep theo một cách.) – Louis

1

Đôi khi một viết lại là giải pháp tốt nhất!
Nếu bạn đang viết phần mềm cho máy ảnh, bạn có thể giả định rằng phiên bản tiếp theo cũng sẽ làm video, hoặc video stereo hoặc quét laser 3d và bao gồm tất cả các móc cho tất cả chức năng này hoặc bạn có thể viết một kiến ​​trúc phi hành gia có thể mở rộng linh hoạt nó có thể đối phó với các máy ảnh tiếp theo bao gồm cả động cơ phản lực - nhưng nó sẽ chi phí quá nhiều tiền, tài nguyên và hiệu suất mà bạn có thể đã được tốt hơn off không làm điều đó.

Viết lại hoàn toàn cho chức năng mới trong vai trò mới không phải lúc nào cũng là một ý tưởng tồi.

+0

Ông chủ của tôi sẽ tát bạn. haha. Nhưng bạn nói đúng, viết lại hoàn toàn đôi khi là cần thiết. Nhưng họ mất rất nhiều tài nguyên, hầu hết thời gian nó không thể được thực hiện. – Louis

+0

Bạn đã thấy mã đã được 'mở rộng' mà không viết lại. Những người có SSN bắt đầu bằng 99 có nghĩa là trường tên cuối cùng hiện là số tài khoản của đối tác. –

Các vấn đề liên quan