Tạo mẫu nhanh và tái cấu trúc


9

Thỉnh thoảng khi tôi bắt đầu một dự án nhỏ (như ứng dụng Android), tôi không biết cách tiếp cận nào sẽ kết thúc và tôi chỉ thử một cách tiếp cận và thử. Nhưng nếu tôi chưa bao giờ sử dụng phương pháp này trước đây (đối với một loại ứng dụng tôi không bao giờ lập trình trước đó) thì giống như bước vào địa hình không xác định. Tôi không biết sử dụng thư viện nào (có thể tôi phải thử một vài thư viện) và có rất nhiều unkonwns (như: cách lấy dữ liệu âm thanh thô trong Android)

Vì vậy, sau đó quá trình phát triển của tôi diễn ra như sau:

  • Viết một đoạn mã để xem cách tiếp cận có cơ hội không. (Cách tiếp cận càng không chắc chắn, mã càng xấu)
  • Nếu nó hoạt động, tái cấu trúc rất nhiều cho đến khi nó đẹp

Tôi nghĩ rằng có thể lãng phí thời gian nếu tôi lên kế hoạch chi tiết cho thiết kế phần mềm của mình vào thời điểm này, nó sẽ giống như lên kế hoạch cho một chuyến đi mà không có bản đồ.

Đây có phải là một phần của sự phát triển aglie? Làm thế nào để bạn đối phó với địa hình chưa biết trong phát triển phần mềm?


Điều này được đề cập trong Clean Code 2 như là phương tiện phát triển lặp lại ... cho dù bạn có tin vào cuốn sách đó hay không là tùy thuộc vào bạn.
Giàn khoan

Câu trả lời:


11

Điều đó không liên quan gì đến nhanh nhẹn, nhưng mọi người cho rằng điều đó xảy ra bởi vì đó là những gì họ nghĩ Agile là; gà không đầu phát triển trong một xã hippy.

Những gì bạn đang làm là đánh giá các công nghệ vì hiện tại bạn không có đủ kinh nghiệm về chúng để thực hiện cuộc gọi phán xét. Điều này là tốt và không bao giờ kết thúc vì các thư viện, khung, ngôn ngữ và nền tảng mới xuất hiện gần như hàng ngày.

Làm thế nào bạn đối phó với những điều chưa biết là một câu hỏi thực sự tốt và thực sự cần phải nghiên cứu các phương án, đánh giá chúng và sau đó chọn một câu hỏi.

Các kỹ năng có xu hướng liên kết với Agile giúp ở đây liên quan đến việc tạo mã dễ dàng và an toàn để tái cấu trúc. TDD là ví dụ điển hình. Nó khuyến khích bạn xem xét sự phát triển của bạn về mặt kết quả. "Mã này sẽ tạo ra kết quả này", tập trung tâm trí và giảm số lượng mã không đóng góp vào việc giải quyết mục tiêu.

Nếu bạn viết mã theo các nguyên tắc RẮN (Từ viết tắt), bạn sẽ ở vị trí tốt sau này để thay thế thư viện nếu bạn chọn sai, hoặc, như thường xảy ra, bạn sẽ vượt xa sự lựa chọn của mình.

Thật tốt khi bạn hỏi loại câu hỏi này. Có quá nhiều nhà phát triển vì nhiều lý do sẽ không có nguy cơ xuất hiện "không biết gì" bằng cách dành thời gian để chọn đúng công nghệ. Sai lầm sớm trong dự án không muộn. Thử nghiệm là chìa khóa không phải là một sự lãng phí, vì vậy tôi nghĩ rằng bạn đang đi đúng hướng.


2

Đây có phải là một phần của sự phát triển aglie? Làm thế nào để bạn đối phó với địa hình chưa biết trong phát triển phần mềm?

Những gì bạn đã mô tả không phải là Agile. Sự phát triển của Agile liên quan nhiều hơn đến việc thúc đẩy lập kế hoạch thích ứng, phát triển tiến hóa và phân phối với phương pháp lặp theo thời gian. Agile không khuyến khích phản ứng nhanh chóng và linh hoạt để thay đổi. Do đó, việc bao thanh toán lại mã của bạn khi tiến trình phát triển có các phần của phương pháp Agile trong đó.

Xử lý các phần chưa biết của dự án bắt đầu bằng việc thu thập các yêu cầu đã biết, với thiết kế cấp cao. Khi bạn có hầu hết các thành phần trong tay, bạn có thể tìm kiếm giải pháp phù hợp. Điều đó nói rằng, xây dựng bằng chứng nhỏ về khái niệm trước khi phát triển toàn diện là cách tiếp cận mà nhóm chúng tôi tuân theo.

Có một nguyên tắc phát triển phần mềm được gọi là RẮN . Theo kinh nghiệm của tôi, áp dụng chúng cho các vấn đề / vấn đề luôn là một bước tiến trong việc cải thiện cơ sở mã dự án của bạn.


2

Phụ thuộc vào dự án, nếu bạn đang làm việc một mình trong một dự án nhỏ, có thể có ý nghĩa hoàn hảo để thực hiện nghiên cứu và điều tra công nghệ của bạn như là một phần của sự phát triển. Và mặc dù không phải là một phần của Agile, tất nhiên một phương pháp Agile có thể được sử dụng để thêm một số điều khiển cho điều này. Tuy nhiên, điều này làm cho quá trình rất khó dự đoán / hoặc hộp thời gian. Có thể ổn, thậm chí nhanh hơn, nếu làm việc một mình trong một dự án nhỏ hoàn toàn là của bạn, hãy để yêu cầu của bạn mở ra khi bạn học chúng. Sử dụng các nguyên tắc tốt trên đường đi và nhất quán và bạn không cần phải tính lại quá nhiều.

Trong công việc, chúng tôi sử dụng Kanban, Scrum và các cách tiếp cận thác nước truyền thống hơn. Phụ thuộc vào dự án, tôi thấy rằng các phát triển phức tạp với các yêu cầu trước được xác định rõ là không phù hợp nhất với nhanh nhẹn, nhiều người sẽ không đồng ý.

Trước khi chúng tôi bắt đầu làm việc ngay cả trên một dự án nhanh (tất cả nhưng đơn giản nhất là), chúng tôi tạo một số tài liệu. Chúng tôi có một giả lập (nếu ui tập trung), một tập hợp các yêu cầu và một đặc tả chức năng.

Phát triển sẽ được yêu cầu tạo ra thông số kỹ thuật từ thông số chức năng và trong quá trình này, chúng tôi sẽ chỉ định công nghệ và thực hiện bất kỳ nghiên cứu trực tiếp nào mà chúng tôi cần. Quá trình này có vẻ rất quan trọng đối với tôi, vì nó mang đến cơ hội nhìn thấy những lỗ hổng trong các yêu cầu / thông số chức năng - và đưa ra các quyết định công nghệ lớn trước những người có kinh nghiệm và kiến ​​thức hệ thống để đưa ra quyết định như vậy.

Mặc dù vậy, điều quan trọng là thông số chức năng có thể là danh sách các gạch đầu dòng và thông số kỹ thuật thường sẽ là một mô hình, với một số điểm đạn và chỉ đạo công nghệ, có thể chỉ 3 hoặc 4 trang trong một số trường hợp.

Ngay cả khi chạy một dự án nhanh, chúng tôi tạo tài liệu:

  • Tất cả các tài liệu có một chi phí.
  • Phát triển chống lại việc di chuyển và xác định các yêu cầu cấp cao có chi phí.
  • Sự cân bằng chính xác ở trên phụ thuộc vào dự án của bạn, văn hóa và con người.
  • Chúng tôi tài liệu Chỉ trong thời gian, tài liệu đã lỗi thời.
  • Chúng tôi tài liệu hầu như không đủ / vừa đủ.
  • Chúng tôi không duy trì hoặc cập nhật các tài liệu này, chúng tôi không nỗ lực nhiều vào chúng. Chúng nhỏ. Chúng tôi hy vọng sẽ ném chúng đi.
  • Chúng tôi giải quyết những ẩn số lớn như quyết định công nghệ, yêu cầu mơ hồ và kiến ​​trúc lên phía trước.
  • Chúng tôi biết những gì chúng tôi đang phát triển trước khi chúng tôi bắt đầu.
  • Chúng tôi tin tưởng các nhà phát triển đưa ra quyết định sáng suốt xung quanh tài liệu và thảo luận về bất kỳ vấn đề nào.
  • Chúng tôi coi trọng việc giao tiếp qua tài liệu, vì vậy chúng tôi hy vọng tất cả những người liên quan sẽ giao tiếp thường xuyên.
  • Chúng tôi tài liệu hệ thống (tổng quan) sau khi phát triển, không trong, không trước.

Bạn thấy có một thác nước nhỏ trong quá trình nhanh nhẹn của chúng tôi.

Nếu bạn làm việc một mình, hãy tạo một mô hình trả trước (sơ đồ!) Và chơi và chọn công nghệ, sau đó khi bạn có khái niệm về các yêu cầu cấp cao này, hãy tiến lên và phát triển theo cách lặp nhanh nhẹn, nhưng hãy xem xét các nguyên tắc tốt và nhất quán khi bạn đi và bạn sẽ cần phải tái yếu tố ít hơn, nhiều yếu tố lại khi bạn đi.

Nhưng nói chung, nếu có một chi phí thực sự liên quan (không phải là sở thích) hãy biết những gì bạn đang phát triển trước khi bạn viết mã, nhưng đừng lãng phí quá nhiều thời gian để viết tài liệu sẽ trở nên dư thừa nhanh chóng vì bạn sẽ thay đổi ý định và nên thay đổi tâm trí của bạn trong quá trình phát triển khi bạn trở nên thông tin tốt hơn. Và dự án của bạn có thể thay đổi quá trình, nhưng bắt đầu từ một nền tảng tốt, được xác định rõ.


1

Đây là cách tôi bắt đầu các dự án mới và nó hoạt động khá tốt, giả sử chúng ta đang nói về các dự án nhỏ. Ví dụ, tôi sẽ không đi theo con đường này nếu tôi đang viết một ORM hoặc một cái gì đó có cường độ như vậy. Thỉnh thoảng tôi sẽ dùng đến nghiên cứu chính thức hơn khi tôi thực sự ở trong đầu. Nhưng phần lớn tôi chỉ bắt đầu viết mã và xem điều gì sẽ xảy ra. Bạn phải chuẩn bị để ném rất nhiều mã khi bạn làm điều này.

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.