Nói chung, tốt hơn là làm cho tất cả các bộ phận chức năng hoặc làm cho UI hoạt động trước - hoặc kết hợp cả hai?


47

Nói chung, tốt hơn là làm cho tất cả các bộ phận chức năng hoặc làm cho UI hoạt động trước - hoặc kết hợp cả hai?

Giả sử bạn đang làm việc trên một cái gì đó lớn, thông thường bạn có chấp nhận thực hành để có được tất cả các đốm thu thập dữ liệu chức năng hoạt động trước bất kỳ giao diện người dùng nào, để tất cả giao diện người dùng làm việc một lúc khi bạn đi, hoặc một cái gì đó ở giữa không?

Tất cả chúng ta đều biết chia nhỏ các phần có thể quản lý được, nhưng câu hỏi cuối cùng là liệu UI có được bao gồm trong các phần có thể quản lý mà tôi cho là không.

Trong trường hợp ví dụ, hãy xem xét một ứng dụng GUI có một cửa sổ gốc, nhưng hơn một chục tab ở nhiều bến khác nhau để phân tách các thành phần dữ liệu khác nhau. Mỗi tab riêng lẻ có một bộ các bộ phận chuyển động tương đối phức tạp phía sau nó từ phối cảnh đơn vị chức năng.

Ứng dụng ví dụ trong câu hỏi cụ thể này có ở đây với blog đi kèm và sản phẩm thương mại gốc .

Câu trả lời:


85

Có một quan niệm chung giữa nhiều người dùng và khách hàng doanh nghiệp rằng khi nó trông hoàn chỉnh, nó gần như hoàn tất. Như bạn có thể biết, điều này là xa sự thật. Người ta có thể có nó trông đẹp, nhưng không có phụ trợ và một số người dùng nghĩ rằng làm cho nó trông đẹp là 80% công việc chứ không phải 20% ( hoặc 80% còn lại ).

Vô số nhà phát triển có thể kể những câu chuyện rùng rợn về điều này - nhận được một loạt các trang được thực hiện trong Microsoft Word bằng cách sử dụng ảnh chụp màn hình của một số công cụ khác và khách hàng nói rằng "vậy, bạn gần như đã hoàn thành chưa?"

Bạn cần phải tăng tốc để tất cả các phần được thực hiện khi nó được thực hiện. Cố gắng thực hiện tất cả các phụ trợ trước và sau đó tất cả các giao diện người dùng sẽ dẫn đến người dùng cuối nghĩ rằng bạn không làm gì cả và hỏi tại sao bạn được trả tiền khi không có gì để hiển thị cho nó. Mặt khác, giao diện người dùng trước và bạn sẽ thấy người dùng cuối thực hiện các thay đổi gây cười và tiêu tốn toàn bộ thời gian của chúng tôi.

Trường hợp xấu nhất với 'cái đầu tiên và cái kia' là khi bạn đến phần khác, bạn thấy rằng nó hoàn toàn không phù hợp với thiết kế.

Do đó, xây dựng cả hai. Hiển thị tiến trình ở mặt trước, làm cho mặt sau hoạt động với những gì bạn đang xây dựng. Trong nhiều trường hợp, một ý tưởng tốt là cung cấp các bản dựng gia tăng và đảm bảo bạn đang thực hiện những gì khách hàng muốn (điều này được đưa vào Agile). Đi quá lâu với 'những tiến bộ có thể nhìn thấy' có thể làm tổn thương mối quan hệ khách hàng (điều này là cho cả hai trường hợp 'mọi thứ đều được thực hiện sớm' và 'không có gì được thực hiện cho đến khi kết thúc' - thật khó để khách hàng thấy khung được viết hoặc các bài kiểm tra đơn vị hoặc vệ sinh dữ liệu theo tiến độ).

Joel đã viết về điều này trong The Iceberg Secret, tiết lộ :

Hệ quả quan trọng Hai. Nếu bạn hiển thị một người không lập trình màn hình có giao diện người dùng đẹp 100%, họ sẽ nghĩ rằng chương trình gần như đã hoàn tất.

Những người không lập trình viên chỉ nhìn vào màn hình và thấy một số pixel. Và nếu các pixel trông giống như chúng tạo ra một chương trình làm một cái gì đó, chúng nghĩ rằng "ồ, trời ơi, nó có thể khó hơn bao nhiêu để làm cho nó thực sự hoạt động?"

Rủi ro lớn ở đây là nếu bạn giả lập UI trước, có lẽ để bạn có thể có một số cuộc trò chuyện với khách hàng, thì mọi người sẽ nghĩ bạn sắp hoàn thành. Và sau đó khi bạn dành năm tới để làm việc "dưới vỏ bọc", có thể nói, không ai sẽ thực sự thấy những gì bạn đang làm và họ sẽ không nghĩ gì cả.

Điều này một lần nữa được nhắc lại trong bài đăng trên blog Đừng làm cho bản Demo trông Xong có biểu đồ hữu ích này:

Làm thế nào là nó trông như thế nào

Lưu ý ở đây, hai tùy chọn thường phản ánh 'hoàn thành ui' (và sau đó kỳ vọng là bạn sẽ hoàn thành sớm) và 'hoàn thành phần phụ trợ' (và sau đó khách hàng lo lắng về việc bạn bỏ lỡ thời hạn).

Làm thế nào 'hoàn thành' một cái gì đó trông phù hợp với cách 'hoàn thành' một cái gì đó là.

Mỗi nhà phát triển phần mềm đã trải nghiệm điều này nhiều lần trong sự nghiệp của họ. Nhưng các công cụ xuất bản trên máy tính để bàn dẫn đến sự đau đầu tương tự đối với các nhà văn công nghệ - nếu bạn đưa cho ai đó một bản nháp thô được phông chữ và định dạng hoàn hảo, họ sẽ thấy nó được thực hiện nhiều hơn bạn muốn. Chúng ta cần một trận đấu giữa nơi chúng ta đang ở và nơi người khác cảm nhận chúng ta.

Bài viết này cũng đưa ra một điểm quan trọng về loại phản hồi bạn nhận được với các mức độ khác nhau của giao diện người dùng. Nếu bạn có một cái gì đó có vẻ hoàn chỉnh, bạn có nhiều khả năng nhận được phản hồi về "bạn có thể thay đổi phông chữ" hơn "bố cục này không hoạt động - có quá nhiều tab."


Đối với những người đang chiến đấu với điều này trong thế giới Java Swing, có một giao diện được gọi là Napkin khiến cho giao diện người dùng trông không hoàn chỉnh (ngay cả khi nó là).

Chìa khóa ở đây là làm cho nó trông không hoàn thành. Giao diện người dùng hoàn chỉnh là một tín hiệu cho nhiều người dùng doanh nghiệp rằng ứng dụng đã hoàn tất (ngay cả khi chỉ là một vài trang tĩnh mà không có logic nào đằng sau nó hoặc một cái gì đó được xây dựng trong trình xây dựng giao diện).


Đọc thêm (và các liên kết từ bài viết):


7
Có vẻ như bạn đang đề xuất một loại phương pháp nhanh nào đó ... :)
Alexander

7
@Alexander Agile giúp trong trường hợp này, nhưng không cần thiết. Thác có thể có (chuyển giao) cột mốc và khách hàng có thể rất thất vọng khi thấy các "nó trông thực hiện, tại sao có thêm 3 viên đá dặm mà chỉ mất chừng nào?" FWIW, tôi đã có những trường hợp mà người dùng doanh nghiệp nghĩ rằng nó đã được thực hiện do ảnh chụp màn hình + sơn ms trong thiết kế công nghệ (cửa hàng thác nước) trông tốt.

3
Trong trường hợp bạn không thấy câu trả lời của chuyên gia cho video đó, thì đây là: youtu.be/B7MIJP90biM
ragol

3
Tôi đã thiết kế UI cho phần lớn sự nghiệp lập trình của mình và KHÔNG MỘT LẦN NÀO tôi có một khách hàng cho rằng UI nguyên mẫu có nghĩa là phần mềm đã 'gần xong'. Tôi nghe có vẻ như những người thuyết trình về giao diện người dùng của khung dây không làm tốt công việc giải thích các khung lưới lên phía trước nếu khách hàng bằng cách nào đó bối rối nghĩ rằng dự án gần như đã hoàn thành.
Graham

2
+1 cho Napkin L & F. Đó chắc chắn sẽ là trong tương lai của tôi. :)
Kathy

27

Nó phụ thuộc: Bạn cần một vòng phản hồi chặt chẽ xung quanh phần chức năng quan trọng nhất của bạn

Nếu cốt lõi của những gì bạn làm, phần rủi ro và đáng sợ, là một số công cụ nội bộ, sau đó lấy phần cốt lõi hoạt động trong giao diện điều khiển hoặc thông qua thử nghiệm đơn vị. Ví dụ, trình phân tích cú pháp giao thức không cần UI để biết liệu nó có hoạt động chính xác hay không.

Nếu điều tuyệt vời của bạn liên quan đến bất kỳ tương tác nào - tính tương tác bạn cần liên tục khắc phục sự cố, vứt bỏ và khám phá lại - thì cách tiếp cận đầu tiên về giao diện người dùng là rất quan trọng. Ví dụ, tôi muốn xây dựng một ứng dụng để cho phép mọi người tương tác với trực quan hóa dữ liệu. Điều quan trọng nhất tôi cần tìm ra là nếu hình dung có ý nghĩa, vì vậy tôi có thể sẽ vứt bỏ một nửa tá phương pháp tiếp cận trước khi giải quyết một. Tôi sẽ làm tất cả điều này trước khi viết một bài kiểm tra đơn vị.

Có một vùng màu xám mờ ở giữa nơi bạn có thể quyết định sự kết hợp tốt nhất về cách tương tác và xác thực tốt nhất mã của bạn (kiểm tra tự động? UI để thử nghiệm?). Cá nhân tôi đã thực hiện cả hai thái cực và mọi thứ ở giữa, và quyết định vị trí phù hợp trên quang phổ đó là một trong những điều khó khăn nhất tôi phải quyết định và phụ thuộc 100% vào loại điều tôi đang xây dựng.


2
Tức là xác định và giải quyết các thành phần nguy hiểm nhất và quan trọng nhất ở phía trước để giảm thiểu cơ hội vượt và / hoặc thất bại. Cho dù các thành phần đó là UI, logic nghiệp vụ, v.v ... hoặc rất có thể, một số kết hợp của tất cả các thành phần khác nhau.
Alexander

1
Nó thực sự nghe giống như bạn đang nói về việc tạo mẫu cho tôi, bởi vì nếu bạn vẫn ném các thiết kế đi thì đó là những gì bạn nên lặp đi lặp lại - không phải là mã thực tế.
Aaronaught

8

Trong môi trường Agile, bạn có thể nghe các cuộc thảo luận về "bộ xương đi bộ" hoặc "lát cắt dọc mỏng". Ý tưởng là vì phần mềm làm việc là điều quan trọng đối với người dùng, bạn xây dựng phần mềm theo cách thức hoạt động theo từng mảnh.

Trong ứng dụng ví dụ mà bạn đã đề cập, bạn sẽ bắt đầu với cửa sổ và có thể một tab và làm cho tất cả hoạt động trực tiếp trong một số thời trang. Sau đó, theo thời gian, bạn sẽ thêm chức năng và do đó, các tab trên cơ sở từng trường hợp cụ thể, làm cho mỗi tính năng hoạt động khi bạn xây dựng nó. Đây là một phần của những gì mà các cuộc biểu tình của khách hàng thường xuyên mang lại cho bạn: cơ hội thể hiện một cái gì đó mới hoạt động và nhận phản hồi về nó ngay lập tức.

Nói tóm lại, vâng, công việc UI hoàn toàn là một phần và phần của một đơn vị công việc chức năng, nếu bạn có UI.

Bắt đầu với một cái gì đó nhỏ hoạt động và lặp lại chức năng của nó để cung cấp một phần mềm đầy đủ.


+1 Luôn luôn có một mảnh có thể thay đổi của một cái gì đó là điều cần thiết.
JensG

@Jens: "Luôn luôn có một mảnh có thể thay đổi của một cái gì đó là điều cần thiết" là một canard. Tốt nhất là nói rằng chỉ áp dụng cho một số ít các ứng dụng phần mềm. Trong thế giới thực, các ứng dụng chỉ thực hiện một phần công việc cần thiết không hữu ích chút nào.
Dunk

Đó là kinh nghiệm của bạn. Tôi có những cái khác nhau. Các dự án lớn, trong thế giới thực với nhiều cột mốc và khách hàng thực sự bao gồm.
JensG

1
@Dunk: Một ứng dụng không thực hiện bất kỳ phần nào của công việc sẽ ít hữu ích hơn một ứng dụng thực hiện một phần công việc. Tuy nhiên, tôi không nói về một ứng dụng "đã hoàn thành"; Tôi đang nói về thứ tự người ta nên xây dựng một ứng dụng. Kinh nghiệm của tôi phù hợp với JensG: luôn có thể cắt bản beta dựa trên những gì bạn đã demo trong tuần đó và gửi nó cho khách hàng ngay lập tức khiến khách hàng hạnh phúc hơn nhiều.
Keith B

Đây là câu trả lời duy nhất tôi có thể xác định với. Những người khác thậm chí dường như không xem xét khả năng phát triển sản phẩm tốt không phân chia rõ ràng thành "UI" và "back-end". Đó là một câu hỏi mà chỉ có một lập trình viên mới hoặc người quản lý dự án mới hỏi, và không phải là một câu hỏi mà một lập trình viên hoặc PM có kinh nghiệm nên từ chối trả lời theo mệnh giá. Chính ý tưởng hỏi cái nào nên được "thực hiện trước" mùi hôi thối của thác nước.
Aaronaught

3

Tôi sẽ khuyên bạn nên tạo một hỗn hợp của cả chức năng và giao diện người dùng (và nhận phản hồi hoặc trải nghiệm thử nghiệm càng sớm càng tốt).

BTW, đó không phải là cách mà hầu hết các phần mềm GUI lớn được phát triển? Tìm ví dụ vào trình duyệt Firefox : từ một phiên bản đến cả chức năng và giao diện người dùng tiếp theo đã phát triển.


2

Trong các ứng dụng lớn (dựa trên web PHP) mà tôi làm việc, tôi cố gắng đưa các lớp và phương thức vào vị trí trước, trả về các giá trị giả . Điều này là để thiết lập một hợp đồng giả mà các nhà phát triển khác có thể sử dụng để triển khai UI cho.

Một lợi thế thứ hai của phương pháp này là chúng ta có thể trau dồi hợp đồng / giao diện khi các yêu cầu UI thay đổi (và chúng luôn thay đổi), ngay cả trước khi tất cả các mã được viết và gửi.


Đây là điều tôi đang cố gắng sắp xếp. Vì dự án cụ thể của tôi được triển khai như một vỏ UI lớn và mỗi máy gặt dữ liệu là một trình cắm thêm, mỗi trình cắm có trách nhiệm quản lý các thành phần UI của chính nó. Bằng cách này, không có "hợp đồng" cần thiết cho một người / nhóm người nhất định. Giả định là cùng một nhóm người sẽ làm việc với một trình cắm thêm đã cho bắt đầu để kết thúc. Đó là một phần lý do tôi thiết kế nó theo cách của tôi. Thay vào đó, đối với các dự án khác, đây là một lời khuyên tuyệt vời. Vì vậy, upvote từ tôi vì nó sẽ hữu ích cho người khác.
RobotHumans

2

Những gì tôi có xu hướng làm là bắt đầu với một giao diện người dùng xảo quyệt : một cái gì đó chỉ cần loại bỏ dữ liệu biến trên màn hình. Không có phông chữ, không căn chỉnh, không có gì thực sự đồ họa trong một thời gian dài. Chỉ cần "Chào mừng người dùng x" và các nút được gọi là "tải pic", v.v ... Điều tốt là bạn sẽ tìm ra nếu một cái gì đó trong phần phụ trợ bị hỏng.

Khi quá trình phát triển diễn ra, bạn có thể tìm thấy nhiều thứ cần phải tiếp tục hoặc ít hơn. Nhưng ở giai đoạn nào đó, bạn sẽ quyết định phần phụ trợ sắp hoàn thành. Bây giờ bạn có một giao diện người dùng chứa tất cả các tệp đính kèm cần thiết và bạn có thể dành nhiều thời gian để thực hiện tất cả các công cụ đồ họa.

Hãy coi chừng, nó không phải là hoàn hảo. Bạn cần một chút tầm nhìn xa để thấy một số vấn đề phát sinh. Chẳng hạn, bạn có thể cần nghiên cứu các thành phần UI để hiển thị dữ liệu một cách hợp lý.


Và khách hàng đi vào đâu trong phương pháp của bạn? Hãy nhớ rằng thường thì khách hàng của bạn chỉ có một ý tưởng rất chung về những gì họ muốn. Tùy thuộc vào bạn để tìm ra cách "rút ra khỏi chúng" chính xác những gì họ muốn để bạn có thể xây dựng nó. Phương pháp của bạn chỉ xây dựng những gì bạn nghĩ khách hàng muốn nhưng đó sẽ hiếm khi là những gì khách hàng thực sự muốn. Vì vậy, bạn đã lãng phí rất nhiều thời gian để mã hóa thứ mà khách hàng không muốn.
Dunk

À, "khách hàng" của tôi đang ngồi ngay cạnh tôi, và tôi có một nền tảng trong lĩnh vực mang đến cho tôi một ý tưởng khá hay về những gì đang muốn. Về cơ bản, chúng tôi luôn gần với sản phẩm cuối, giao diện người dùng thông minh và tôi luôn có thể nhận được phản hồi. Tôi đã không xem xét vấn đề có một vòng phản hồi dài. Tôi đoán có kiến ​​thức tên miền là chìa khóa.
Carlos

0

Nếu bạn sử dụng một cột mốc tốt và hệ thống theo dõi vấn đề, bạn có thể tránh được một số vấn đề này bởi vì trong nháy mắt, quản lý có thể thấy bạn đang làm việc hiệu quả như thế nào. Họ sẽ có thể thấy rằng bạn đã hoàn thành 80% phần cuối và giao diện người dùng là cột mốc tiếp theo; họ sẽ có thể thấy rằng bạn có một bộ UI và các tác vụ phụ trợ để hoàn thành cho một cột mốc tính năng cụ thể. Nhưng tất cả bắt đầu với yêu cầu của dự án và câu trả lời của Doug T nêu lên một số điểm tốt về khía cạnh thiết kế hệ thống.


0

Suy nghĩ theo quan điểm người dùng / khách hàng của bạn. Một hệ thống phần mềm là một tập hợp các tính năng mang lại cho người dùng / khách hàng này một số giá trị. Tất nhiên mỗi một trong số các tính năng này đều có và UI, phụ trợ và một số thứ khác.

Xây dựng hệ thống của bạn luôn có tính năng theo tính năng và thử chia thành các tính năng rất nhỏ. Bằng cách này, bạn luôn ở gần để có thêm thứ gì đó để cung cấp cho khách hàng của mình, hãy nhớ rằng phần mềm phát triển không phải là xây dựng phiên bản 1.0 mà là chuyển sang phiên bản 1.0.1 sang 1.0.2, v.v.


0

Nó phụ thuộc. Làm thế nào xác định tốt là yêu cầu của bạn? UI phải đối mặt với bao nhiêu hệ thống?

Từ kinh nghiệm của tôi, hầu hết khách hàng không biết họ muốn gì cho đến khi họ nhìn thấy thứ gì đó trước mặt họ. Vì vậy, tôi thường cung cấp một số khung dây của các khía cạnh UI chính hoặc cung cấp phần lớn giao diện người dùng (không hoạt động). Điều này cho phép khách hàng thay đổi ý định về các tính năng / chức năng mà không ảnh hưởng quá nhiều vì thiết kế cơ sở dữ liệu và cấu trúc mã vẫn chỉ trong giai đoạn thiết kế - rất dễ sửa đổi thiết kế. Đó là các đơn đặt hàng có cường độ dễ dàng hơn / nhanh hơn để thay đổi thiết kế sớm hơn trong dự án sau đó.

Agile nói rằng bạn cũng nên làm việc trên các mục khó nhất và các mục quan trọng nhất trước tiên. Thất bại nhanh chóng . Vì vậy, một khi khách hàng đã nhìn thấy UI tôi tập trung vào việc xây dựng các thành phần nhỏ có chức năng đầy đủ, nói chuyện quan trọng nhất và khó thực hiện nhất trước tiên để bạn biết càng sớm càng tốt nếu bạn gặp phải bất kỳ trở ngại nào.

Sau đó, bạn có chạy nước rút của bạn và liên lạc với khách hàng phát triển cả hai khía cạnh giao diện người dùng và chức năng đôi khi.

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.