Có nên giao tiếp giữa x và y mệnh?


26

Trong ứng dụng của tôi có một số mẫu biểu thức được xác định trước có thể được sử dụng để lọc dữ liệu. Một trong số đó là " between x and y". Một kỹ sư QA tuyên bố rằng có một khiếm khuyết trong định nghĩa của nó, bởi vì " between 100 and 200" cho kết quả khác với " between 200 and 100". Biểu thức được dịch bên trong thành " value >= x and value <= y", vì vậy rõ ràng không có kết quả khi ranh giới thứ hai thấp hơn ranh giới thứ nhất. Tôi đã kiểm tra rằng hành vi tương tự có trong SQL - " between x and y" giả sử rằng y> = x hoặc không có kết quả. Nó có nghĩa là toán tử không giao hoán, ít nhất là trong SQL.

Vì vậy, QA có đúng rằng " between x and y" nên giao hoán không?


11
Không, nhưng có lẽ ui của bạn sẽ chuyển sang màu đỏ khi ai đó điền sai.
Ewan

3
đồng thời, nó là một trong những thứ> = <= nên độc quyền để bạn có thể xâu chuỗi 100-> 200 200-> 300, v.v. mà không bị chồng chéo
Ewan

23
Không rõ liệu betweennên bao gồm hoặc loại trừ các giá trị thấp hơn và cao hơn. Người QA có thể là người phạm tội nhưng miễn là có sự không chắc chắn ai đó cần phải làm rõ các câu chuyện / yêu cầu của người dùng. Nó có thể chỉ ra rằng cách họ được thực hiện là như thế nào, nhưng phải đưa ra quyết định.
Bent

11
Đó không phải là trường hợp đúng hay sai. Đó là một trường hợp ... làm thế nào để doanh nghiệp muốn ứng dụng hoạt động? Câu trả lời là chức năng nào được mong đợi. Các cuộc tranh luận kỹ thuật không thúc đẩy chức năng cần thiết. Chức năng cần thiết thúc đẩy các cuộc tranh luận kỹ thuật và hy vọng truyền cảm hứng cho giải pháp tốt nhất cho doanh nghiệp.
Brad Thomas

2
Câu hỏi này là về những gì người dùng mong đợi hơn là về những gì một lập trình viên mong đợi. Như vậy, nó sẽ phù hợp hơn với Trải nghiệm người dùng .
Makyen

Câu trả lời:


32

Nếu thông số kỹ thuật hiện tại của bạn không được xác định, hành vi này hoàn toàn tùy ý, không có định nghĩa "đúng" hoặc "sai". Vì vậy, nếu kỹ sư QA của bạn không thể chỉ cho bạn đoạn chính xác trong thông số kỹ thuật nơi hành vi này được xác định, bạn có thể từ chối yêu cầu của anh ta (mặc dù đó dường như không phải là một yêu cầu cần nhiều nỗ lực để thực hiện nó). Nếu cả hai bạn không thể tìm thấy sự đồng thuận, một người trong nhóm của bạn phải đưa ra quyết định điều gì quan trọng hơn trong bối cảnh của ứng dụng:

  • theo tiêu chuẩn SQL càng chặt chẽ càng tốt
  • không tuân theo nó vì công thái học, các trường hợp sử dụng cụ thể hoặc các yêu cầu khác

Bất cứ quyết định nào mà nhóm của bạn đưa ra, có thể là một ý tưởng tốt để ghi lại hành vi và lý do tại sao quyết định được đưa ra.


57
bạn có thể từ chối yêu cầu của anh ấy => Tôi thực sự sẽ nói rằng trước hết, hành vi nên được xác định. Sau đó, bạn có thể cảm ơn anh chàng QA đã chỉ ra vấn đề và nói rằng bây giờ nó được chỉ định để hoạt động theo <cách cụ thể> (và đảm bảo mã phù hợp với thông số kỹ thuật).
Matthieu M.

1
@MatthieuM. Tôi nghĩ đó là một câu trả lời riêng biệt nên có 33 câu trả lời riêng. ;)
jpmc26

1
Chuyển đổi lỗi để cải thiện và để nó tồn đọng vĩnh viễn. Cảm ơn QA vì sự siêng năng của họ.
Sandy Chapman

1
@MatthieuM. vâng, trong thế giới lý tưởng sẽ có một yêu cầu rõ ràng cho từng chi tiết. Trong trường hợp như vậy, tôi sẽ không cần đặt câu hỏi về Stack Exchange :)
pkalinow

@pkalinow: Tôi nghĩ bạn đã hiểu nhầm nhận xét của tôi. Quan điểm của tôi là trước khi đóng lỗi, bạn nên (1) cảm ơn anh chàng QA vì đã chỉ ra một đoạn mã chưa được xác định rõ và (2) ngồi cùng với bất kỳ ai quan tâm để thực sự chỉ định hành vi. Điều này có thể có nghĩa là giao báo cáo QA cho bất kỳ ai chịu trách nhiệm viết thông số kỹ thuật, cho chủ sở hữu sản phẩm nếu bạn có những điều đó, v.v ... sau đó, khi hành vi cần được đồng ý, bạn có thể đánh giá xem phần mềm có cần thay đổi không hay không. Có lẽ nó sẽ có nghĩa là thay đổi phần mềm, có thể nó sẽ có nghĩa là đóng báo cáo ...
Matthieu M.

13

Đây là một câu hỏi về khả năng sử dụng hoặc kinh nghiệm người dùng. Cách SQL hoặc bất kỳ hệ thống nào khác hoạt động là không liên quan, câu hỏi là điều gì có ý nghĩa nhất từ ​​góc độ người dùng.

Hành vi hiện tại không có ý nghĩa từ góc độ người dùng. Hoặc là x và y nên hoán đổi cho nhau hoặc nó không nên được phép chọn một x lớn hơn y. Cho phép x lớn hơn y nhưng trả về một tập hợp trống sẽ đưa ra khả năng lỗi không cần thiết mà không cung cấp bất kỳ lợi ích nào.

Vì vậy, kỹ sư QA là chính xác có một khiếm khuyết, nhưng giải pháp đề xuất không nhất thiết là tốt nhất. Bạn phải thực hiện các bài kiểm tra khả năng sử dụng để quyết định điều này, hoặc ít nhất là hỏi một số người dùng đại diện những gì có vẻ tự nhiên nhất đối với họ.

Ngoài ra, bạn có thể đặt câu hỏi tại /ux// . Những người ở đó thực sự biết một vài điều về trải nghiệm người dùng.


11

Có một vài lựa chọn hợp lý, và lựa chọn nào phụ thuộc vào phần còn lại của hệ thống và sự mong đợi của người dùng của bạn.

Bạn có thể, như kỹ sư QA chỉ ra, chỉ cần thực hiện biểu thức giao hoán, và sau đó bản dịch sẽ là

between x and y => value >= min(x, y) and value <= max(x, y)

Bạn có thể hạn chế sử dụng hợp lệ x <= y, điều này đòi hỏi UI của bạn có thể hiển thị "đó không phải là biểu thức hợp lệ" càng sớm càng tốt.

Là một biến thể của ở trên, hạn chế x < ynếu bạn có một biểu thức equals xvà thích điều đó để đánh giávalue >= x and value <= x


Lưu ý: Xin đừng tự đưa ra tuyên bố value >= min(x, y) and value <= max(x, y). Tính toán trước những gì bạn có thể để lưu máy chủ cơ sở dữ liệu của mình, đặc biệt nếu nó dư thừa như thế (bạn có thể thực hiện các thao tác liên quan một lần và đặt cả hai kết quả tương ứng). Điều đó có thể không quan trọng, tùy thuộc vào máy chủ cơ sở dữ liệu và các giá trị cụ thể mà bạn cung cấp, nhưng máy chủ SQL được viết kém có thể thực hiện tốt minmaxcho mọi bản ghi nếu bạn đặt chúng vào wherevà nếu bạn có thể loại bỏ nỗ lực đó , không có lý do để không.
Vụ kiện của Quỹ Monica

6
Xin đừng nghe QPaysTaxes - tối ưu hóa mọi thứ mà không bao giờ đo lường sự cần thiết chính xác là điều Knuth gọi là "tối ưu hóa sớm nuôi ong gốc rễ của mọi tội lỗi". Rất có thể trong hầu hết các mã trong thế giới thực, bạn sẽ không nhận thấy sự khác biệt về tốc độ nếu Min và Max được tính cho mỗi bản ghi, nhưng tính toán trước các giá trị (và do đó giới thiệu thêm mã và dự phòng thêm) sẽ khiến chương trình ít được bảo trì hơn.
Doc Brown

@DocBrown Tôi đồng ý rằng chúng ta không nên thực hiện thay đổi để tăng hiệu suất tiềm năng mà không đo lường, nhưng trái với yêu cầu của bạn, tôi sẽ thấy các giới hạn được tính toán trước dễ đọc hơn một lớp lót, và do đó dễ duy trì hơn .
Jacob Raihle ngày

@JacobRaihle: điều này có thể được quan tâm, nhưng đối với khẩu vị của tôi value >= min(x, y) and value <= max(x, y)là có thể đọc được như value >= minXY and value <= maxXY, ở đâu minXYmaxXYlà giới hạn được tính toán trước. Tuy nhiên, đối với cái sau sẽ phải viết một số mã để thêm hai biến mới này vào hệ thống, điền trước chúng, đừng quên cập nhật các giá trị này khi x và y thay đổi, v.v. Dữ liệu dư thừa luôn đưa ra một rủi ro sai sót nhất định.
Doc Brown

5

Trong một thiết lập không tương tác, nơi các ranh giới của bạn được tạo bởi một tập lệnh, thường có nghĩa là yêu cầu chúng phải theo thứ tự. Điều này tạo ra một kiểm tra xác nhận ít hơn để làm, có ý nghĩa hơn về mặt ngữ nghĩa và không quan trọng để quản lý.

Trong cài đặt tương tác, bạn muốn giúp người dùng. Nếu có thể, hãy tạo một GUI không cho phép các phạm vi hoán đổi được nhập hoặc ít nhất là làm cho việc nhập phạm vi theo thứ tự dễ dàng nhất có thể. Nếu bạn đang nhập các phạm vi bằng văn bản, hãy lấy một trang từ vim, đối tượng sử dụng đó và nhắc người dùng tự động trao đổi các phạm vi đảo ngược:

Backwards range given, OK to swap (y/n)?

Nếu kỹ sư QA của bạn không có gì theo cách của UX để cho anh ta thấy phạm vi đảo ngược sẽ là điều không mong muốn, thì anh ta đã đưa ra một giả định hợp lý.


2

Thẳng thắn? Đừng sử dụng "giữa". Ở tất cả.

Đầu tiên, thuật ngữ này vô cùng mơ hồ, đặc biệt là tiếng Anh. Có giao hoán không? Là các điều khoản độc quyền? Bao gồm?

Thứ hai, nếu bạn đang thực hiện một giao diện ly dị với phụ trợ, đừng lo lắng về hành vi phụ trợ; và đừng để người dùng của bạn thừa nhận hành vi được kế thừa. Chắc chắn, SQL định nghĩa nó BETWEENlà bao gồm, nhưng điều này gần như không bao giờ là hành vi mong muốn (ví dụ: Nếu bạn làm điều gì đó giống như rows BETWEEN :start and :start + :stridebạn sẽ nhận được stride + 1hàng).

Thay vào đó, bạn nên liệt kê rõ ràng các so sánh cho các điểm cuối. "Lớn hơn hoặc bằng x". "Trước hôm nay". Điều này loại bỏ sự mơ hồ. Nó cũng giúp viết mã sạch hơn, và tránh một số lỗi ngấm ngầm. Ví dụ hàng từ trước đó về cơ bản là bài viết của Djikstra về lập chỉ mục . Và cho phép SQL sử dụng giới hạn trên bao gồm trên một số loại có thể dẫn đến dữ liệu sai được chọn .


Chà, đáng để nghĩ đến. Và cảm ơn các liên kết. Bài đăng của Dijkstra có lẽ không liên quan lắm, nhưng thú vị :)
pkalinow

Điều này không thực sự trả lời câu hỏi OP, thay vào đó, nó làm tăng thêm sự nhầm lẫn.
Roland Tepp

1

Việc tranh luận với QA của bạn về việc ai "đúng" và ai "sai" là không có ích. Bạn giải thích thông số kỹ thuật khác với họ. Điều đó có nghĩa là thông số kỹ thuật đủ mơ hồ mà nó đòi hỏi phải làm rõ.

Nếu giao diện người dùng là thông số kỹ thuật và đó không phải là hành vi mà QA mong đợi, thì đó sẽ không phải là hành vi mà ít nhất một số người dùng mong đợi. Điều đó chỉ ra một vấn đề về khả năng sử dụng (ngay cả khi bạn muốn tranh luận PEBKAC). Làm việc với QA của bạn để tìm một giải pháp thỏa đáng cho điều đó.

Như một điểm chung, hãy cẩn thận với những từ như "giữa" có vẻ rõ ràng, nhưng không. Ngoài sự không đồng ý của bạn về việc có nên đi lại hay không, thì chúng còn có vấn đề với tính bao quát ở hai đầu và có thể có nghĩa là những điều khác nhau trên các lĩnh vực khác nhau (ví dụ: "giữa Thứ Sáu và Thứ Hai" sẽ có ý nghĩa khác với hầu hết mọi người so với "giữa Thứ Hai và Thứ sáu")


1

Tôi sẽ sử dụng một nguyên tắc UNIX để nói về các giao diện đơn giản.

Bất cứ nơi nào có một giao diện bạn đang cung cấp cho thế giới bên ngoài, hãy giữ điều đó ít gây ngạc nhiên nhất có thể!

Bây giờ tôi đã giảm báo cáo vấn đề xuống một cách thực dụng hơn, tôi nghĩ rằng bạn sẽ mất vài phút để nhận ra rằng khi chỉ định phạm vi số, nhưng rõ ràng là *** giữ cái nhỏ hơn như trước đây. Nếu nó vẫn là một câu hỏi hóc búa, hãy nghĩ như thế này- Đã bao nhiêu lần bạn sử dụng cách ngược lại để biểu diễn hai số trong khi nói với trẻ cách so sánh chúng?

Nếu kỹ sư QA của bạn gọi đó là một lỗi, hãy nói với anh ta một cách lịch sự rằng bạn đang mong đợi một số lỗi thực sự , và không phải là cách để truyền năng lượng tốn kém vào những thứ tầm thường.


0

Làm cho mã gỡ lỗi của bạn ném một điều kiện lỗi hoặc ghi lại cảnh báo bất cứ khi nào nó được chuyển các giá trị theo thứ tự sai. Bằng cách này, mã gọi có thể kiểm tra và trao đổi các tham số, nếu cần thiết. Bằng cách này, người dùng của 'tính năng' này sẽ nhận thức được và thực hiện đúng (điều mà bạn không biết trước).

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.