OUTPUT Domain Stories¶
OUTPUT-STORY-001¶
AS A user I WANT each processed field to be printed in the required kata output format SO THAT the result matches the specification exactly
Architecture Reference: Chapter 5 Building Block View - Output Formatter, Chapter 2 Constraints - C-2
OUTPUT-STORY-001-S1: Print a single annotated field with correct header¶
GIVEN
one annotated
Fieldstruct existsit is the first field in the output sequence
WHEN
the Output Formatter prints the field
THEN
the first line of output is
Field #1:the following lines contain the annotated grid rows exactly
OUTPUT-STORY-001-S2: Separate consecutive fields with a blank line¶
GIVEN
two or more annotated fields exist
WHEN
the Output Formatter prints all fields in sequence
THEN
a blank line appears between each pair of consecutive fields
no trailing blank line appears after the last field
OUTPUT-STORY-001-S3: Preserve mine positions in output¶
GIVEN
an annotated field contains cells that were mines (
*)
WHEN
the Output Formatter prints the field
THEN
every mine cell appears as
*in the outputno mine cell is replaced with a numeric value
FE Sub-Stories¶
OUTPUT-FE-001.1¶
AS A user I WANT the output to appear on stdout so I can read it or redirect it to a file SO THAT the result is accessible in the standard console way
Architecture Reference: Chapter 3 Context and Scope - External Interfaces, Chapter 7 Deployment View - Build and Run
OUTPUT-FE-001.1-S1: Write annotated output to stdout¶
GIVEN
the binary is run with valid minefield input on stdin
WHEN
processing completes
THEN
the annotated fields are written to stdout
the output can be captured by redirecting stdout to a file
BE Sub-Stories¶
OUTPUT-BE-001.1¶
AS A developer
I WANT printField(ostream&, Field, int) to write the Field #N: header and grid rows to the given stream
SO THAT the formatter is independently testable without writing to real stdout
Architecture Reference: Chapter 5 Building Block View - Output Formatter, Chapter 8 Cross-Cutting Concepts - Testability
OUTPUT-BE-001.1-S1: Emit correct header and grid to an ostream¶
GIVEN
an annotated
Fieldwith two rows1*and11is passed as the second field (index 2)
WHEN
printFieldis called with anostringstream, the field, and index2
THEN
the stream contains
Field #2:on the first linethe next two lines are
1*and11
OUTPUT-BE-001.2¶
AS A developer I WANT the blank-line separator to be emitted between fields but not after the last one SO THAT the output matches the kata format exactly
Architecture Reference: Chapter 5 Building Block View - Output Formatter, Chapter 2 Constraints - C-2
OUTPUT-BE-001.2-S1: No trailing blank line after the last field¶
GIVEN
two fields are printed in sequence
WHEN
both calls to
printFieldcomplete
THEN
exactly one blank line appears between the two field blocks
the output does not end with a blank line
INFRA Sub-Stories¶
OUTPUT-INFRA-001.1¶
AS A developer
I WANT all formatter tests to pass when running ./runTests inside the Docker container
SO THAT regressions in output formatting are detected in a clean, isolated local environment
Architecture Reference: Chapter 8 Cross-Cutting Concepts - Testability, Chapter 7 Deployment View - Build and Run
OUTPUT-INFRA-001.1-S1: Formatter tests pass inside Docker¶
GIVEN
the
kata-testsDocker image has been built viadocker build -t kata-tests .Google Test cases for
printFieldexist intests/
WHEN
docker run --rm kata-testsis executed
THEN
./runTestsruns inside the containerall formatter tests pass
the container exits with code
0
OUTPUT-INFRA-001.2¶
AS A developer I WANT the full test suite to run inside Docker and exit cleanly SO THAT the complete output pipeline is validated in a single local container run
Architecture Reference: Chapter 7 Deployment View - Build and Run, Chapter 6 Runtime View - Main Processing Scenario
OUTPUT-INFRA-001.2-S1: Full test suite passes inside Docker¶
GIVEN
the
kata-testsDocker image has been built viadocker build -t kata-tests .Google Test cases covering output formatting exist in
tests/
WHEN
docker run --rm kata-testsis executed
THEN
./runTestsruns inside the containerall tests pass
the container exits with code
0
OUTPUT-STORY-002¶
AS A user
I WANT fields to be numbered as Field #1, Field #2, and so on
SO THAT each output block is clearly identified
Architecture Reference: Chapter 5 Building Block View - Output Formatter, Chapter 2 Constraints - C-2
OUTPUT-STORY-002-S1: First and second fields carry correct numbers¶
GIVEN
two annotated fields are ready for output
WHEN
the Output Formatter prints both fields
THEN
the first block begins with
Field #1:the second block begins with
Field #2:
OUTPUT-STORY-002-S2: Field number increments for each successive field¶
GIVEN
N annotated fields are ready for output
WHEN
the Output Formatter prints all N fields
THEN
field K begins with
Field #K:for every K from 1 to N
BE Sub-Stories¶
OUTPUT-BE-002.1¶
AS A developer
I WANT printField to accept a 1-based index and embed it in the Field #N: header
SO THAT numbering is controlled by the caller and testable in isolation
Architecture Reference: Chapter 5 Building Block View - Output Formatter, Chapter 9 Architecture Decisions - ADR-001
OUTPUT-BE-002.1-S1: Header contains the supplied index¶
GIVEN
printFieldis called with anostringstreamand index3
WHEN
the function writes its output
THEN
the first line of the stream is
Field #3:
INFRA Sub-Stories¶
OUTPUT-INFRA-002.1¶
AS A developer
I WANT the Field #N: numbering tests to pass when running ./runTests inside the Docker container
SO THAT numbering correctness is automatically checked in a clean local environment
Architecture Reference: Chapter 8 Cross-Cutting Concepts - Testability, Chapter 7 Deployment View - Build and Run
OUTPUT-INFRA-002.1-S1: Numbering test executes inside Docker¶
GIVEN
the
kata-testsDocker image has been built viadocker build -t kata-tests .Google Test cases for
printFieldwith indices1,2, and5exist intests/
WHEN
docker run --rm kata-testsis executed
THEN
./runTestsruns inside the containerall numbering tests pass
the container exits with code
0
OUTPUT-STORY-003¶
AS A user I WANT blank lines to separate printed fields correctly SO THAT the output formatting matches the kata requirements
Architecture Reference: Chapter 2 Constraints - C-2, Chapter 5 Building Block View - Output Formatter
OUTPUT-STORY-003-S1: Blank line appears between two consecutive fields¶
GIVEN
two annotated fields are printed in sequence
WHEN
the Output Formatter prints both fields
THEN
exactly one blank line separates the two field blocks
OUTPUT-STORY-003-S2: No blank line after the last field¶
GIVEN
the Output Formatter has printed the final field
WHEN
output is complete
THEN
the output does not end with a blank line
BE Sub-Stories¶
OUTPUT-BE-003.1¶
AS A developer
I WANT printField to emit a blank line before the Field #N: header when the index is greater than 1
SO THAT separation is handled inside the formatter without extra logic in main()
Architecture Reference: Chapter 5 Building Block View - Output Formatter, Chapter 9 Architecture Decisions - ADR-001
OUTPUT-BE-003.1-S1: Blank line precedes all fields except the first¶
GIVEN
printFieldis called with index1and then with index2
WHEN
both calls complete
THEN
the output for index
1has no leading blank linethe output for index
2is preceded by exactly one blank line
INFRA Sub-Stories¶
OUTPUT-INFRA-003.1¶
AS A developer
I WANT the blank-line separator test to pass when running ./runTests inside the Docker container
SO THAT blank-line formatting is automatically verified in a clean local environment
Architecture Reference: Chapter 8 Cross-Cutting Concepts - Testability, Chapter 7 Deployment View - Build and Run
OUTPUT-INFRA-003.1-S1: Separator placement test executes inside Docker¶
GIVEN
the
kata-testsDocker image has been built viadocker build -t kata-tests .a Google Test case capturing two consecutive
printFieldcalls viaostringstreamexists intests/
WHEN
docker run --rm kata-testsis executed
THEN
./runTestsruns inside the containerthe separator test passes
the container exits with code
0
Traceability Verification¶
Scenario ID |
Architecture Reference |
Parent Story |
Testable Assertion |
|---|---|---|---|
OUTPUT-STORY-001-S1 |
Chapter 5 Building Block View - Output Formatter |
OUTPUT-STORY-001 |
first field is printed with |
OUTPUT-STORY-001-S2 |
Chapter 2 Constraints - C-2 |
OUTPUT-STORY-001 |
blank line separates consecutive fields; no trailing blank line |
OUTPUT-STORY-001-S3 |
Chapter 5 Building Block View - Output Formatter |
OUTPUT-STORY-001 |
mine cells appear as |
OUTPUT-FE-001.1-S1 |
Chapter 3 Context and Scope - External Interfaces |
OUTPUT-FE-001.1 |
annotated output is written to stdout and capturable |
OUTPUT-BE-001.1-S1 |
Chapter 8 Cross-Cutting Concepts - Testability |
OUTPUT-BE-001.1 |
|
OUTPUT-BE-001.2-S1 |
Chapter 2 Constraints - C-2 |
OUTPUT-BE-001.2 |
exactly one blank line between fields, none after last |
OUTPUT-INFRA-001.1-S1 |
Chapter 8 Cross-Cutting Concepts - Testability |
OUTPUT-INFRA-001.1 |
|
OUTPUT-INFRA-001.2-S1 |
Chapter 6 Runtime View - Main Processing Scenario |
OUTPUT-INFRA-001.2 |
|
OUTPUT-STORY-002-S1 |
Chapter 5 Building Block View - Output Formatter |
OUTPUT-STORY-002 |
first field header is |
OUTPUT-STORY-002-S2 |
Chapter 2 Constraints - C-2 |
OUTPUT-STORY-002 |
field index increments by one for each successive field |
OUTPUT-BE-002.1-S1 |
Chapter 5 Building Block View - Output Formatter |
OUTPUT-BE-002.1 |
|
OUTPUT-INFRA-002.1-S1 |
Chapter 8 Cross-Cutting Concepts - Testability |
OUTPUT-INFRA-002.1 |
|
OUTPUT-STORY-003-S1 |
Chapter 2 Constraints - C-2 |
OUTPUT-STORY-003 |
blank line appears between field blocks |
OUTPUT-STORY-003-S2 |
Chapter 2 Constraints - C-2 |
OUTPUT-STORY-003 |
no blank line after the final field |
OUTPUT-BE-003.1-S1 |
Chapter 5 Building Block View - Output Formatter |
OUTPUT-BE-003.1 |
blank line emitted before field block when index > 1 |
OUTPUT-INFRA-003.1-S1 |
Chapter 8 Cross-Cutting Concepts - Testability |
OUTPUT-INFRA-003.1 |
|