Bỏ qua đến nội dung chính

Specification-by-Absence

Derived Failure Pattern của Implicit Rules và Unverifiable Expectations

Summary

Specification-by-Absence là Failure Pattern trong đó,
khi explicit specifications không tồn tại,
"điều không được viết" bản thân được coi như de facto specifications.

Điều mà Pattern này đề cập không phải là vấn đề không viết specifications đầy đủ.
Đó là một cấu trúc trong đó, giữa sự không chắc chắn và pressure cho change, ghi lại specifications bị hoãn lại,
và khoảng trống đó được lấp đầy bởi implicit expectations và conventions.


Context

Trong software đang vận hành,
định nghĩa tất cả specifications trước không thực tế.

Đặc biệt liên quan đến hành vi của các chức năng hiện có và các trường hợp ngoại lệ,
sự thật "nó đã hoạt động như thế này"
có xu hướng được coi như một thay thế cho các documented specifications.

Trong các tình huống như vậy,
ngay cả khi specifications không được làm rõ ràng,
chỉ expectations trở nên cố định.

Forces

Các động lực chính tạo ra Pattern này như sau:

  • High cost of specification description
    Viết precise specifications yêu cầu thời gian và thỏa thuận,
    và trong các môi trường mà các thay đổi xảy ra thường xuyên, nó dễ dàng bị hoãn lại.

  • Dependence on existing behavior
    Running code được tham chiếu như de facto specifications,
    và intent của behavior không được diễn đạt.

  • Asymmetry of confirmation costs
    So với chi phí làm cho specifications rõ ràng,
    tiến hành dựa trên giả định của implicit expectations trông rẻ hơn trong ngắn hạn.

  • Localization of changes
    Các thay đổi giới hạn phạm vi tác động tích lũy,
    và overall specification image không còn được chia sẻ.

Failure Mode

Bởi vì specifications không được làm rõ ràng,
các bất đồng giữa expectations và implementation không thể được xác minh sau thực tế.

Kết quả là, các dạng hỏng sau đây tiến hành đồng thời:

  • Expectations xuất hiện sau code review
    Chỉ sau implementation, nó được chỉ ra như "khác với assumptions."

  • Specification confirmation được thay thế bằng tham chiếu đến past behavior
    Cơ sở của correctness phụ thuộc vào history và memory.

  • Changes được coi như cơ sở cho specifications
    Implementation xảy ra được nhập vào
    trở nên cố định như một điểm tham chiếu cho các specification decisions tiếp theo.

Consequences

  • Sự phân biệt giữa specification changes và bug fixes trở nên mơ hồ
    (Part I: What Breaks — Responsibility / Data)

  • Decision criteria không được chia sẻ, và các thảo luận trôi về impressions
    (Part II: Why It Breaks — Context Erosion)

  • New members và AI không có lựa chọn nào khác ngoài đoán correctness
    Bởi vì assumptions và constraints không được làm rõ ràng,
    sử dụng như decision support bị giới hạn.
    (Part II: Why It Breaks — Context Erosion)

  • Lòng tin vào specifications dần dần bị mất
    (Part I: What Breaks — Data / Responsibility)

Countermeasures

Sau đây không phải là danh sách các giải pháp,
mà là các counter-patterns để thay đổi động lực với can thiệp tối thiểu chống lại Failure Mode.

  • Xử lý một cách rõ ràng điều chưa được quyết định
  • Phân biệt và diễn đạt facts và expectations của behavior
  • Không cố gắng viết mọi thứ,
    nhưng để lại minimal specifications cần thiết cho các quyết định

Resulting Context

Specifications vẫn không hoàn chỉnh,
và không phải mọi thứ được ghi lại.

Tuy nhiên, bằng cách làm hiển thị các phần không xác định,
các bất đồng giữa expectations và implementation có thể được giải quyết sớm.

Kết quả là, specifications hoạt động
không phải như các sản phẩm cố định,
mà là các điểm tham chiếu hỗ trợ các quyết định.

See also

  • Context-Blind Change
    Foundational pattern trong đó absence of specifications trở nên cố định như một structure khi assumptions không được chia sẻ trong các thay đổi.

  • ** Test-Passing Illusion**
    Một derived pattern trong đó, trong các môi trường mà explicit specifications không tồn tại, verification success có xu hướng được coi như một thay thế cho correctness.


Appendix: Conceptual References

  • Requirements & Knowledge
    Background của các cấu trúc trong đó kiến thức tiên quyết cần thiết cho các quyết định không được coi như specifications.
  • Information Hiding & Boundaries
    Background của failure structures trong đó các undefined assumptions rò rỉ vào implementation và behavior.
  • Feedback, Measurement & Learning
    Background của các động lực trong đó verification results không dẫn đến learning mà không có specifications.

Appendix: References

  • Pamela Zave, Michael Jackson, Four Dark Corners of Requirements Engineering, 1997.
  • Barry W. Boehm, Software Engineering Economics, 1981.
  • Gojko Adzic, Specification by Example: How Successful Teams Deliver the Right Software, 2011.