9.2 KiB
Development Playbook: EDOC-REFACT-01 — ZEDOC_REPAIR_REPORT test coverage
Status: draft Author: I301710 Model tier for execution: sonnet for phases 5 and 6, opus for phases 1 and 2 Transport: Package:
All lines marked ASSUMED hold placeholder data. Replace them with system data before the agent starts phase 1.
The agent runs the phases in order. Each phase ends with a gate. The agent must not start the next phase before the gate passes. If a gate fails twice, the agent stops and reports. It does not try a third time.
0. Context
Business need: ZEDOC_REPAIR_REPORT has no unit tests. The logic sits in the report and reads the database directly, so a test needs a system connection. The refactoring must reach 70% coverage without a change to the behaviour that the user sees.
Related objects (known before analysis):
| Object | Type | Role |
|---|---|---|
| ZEDOC_REPAIR_REPORT | report | selection screen, logic, output — ASSUMED ~1400 lines |
| EDOC_HDR | table | eDocument header — ASSUMED |
| EDOC_STATUS | table | status history — ASSUMED |
| CL_EDOCUMENT | standard class | status change API — ASSUMED |
Out of scope:
- The selection screen fields and their names.
- The ALV output layout.
- Any standard SAP object.
- The repair rules themselves. This change moves logic. It does not correct it.
1. Analysis
Input: section 0.
Actions:
- Read the report structure: FORM routines, local classes, global data.
- Find a similar refactored report in the package. Record the pattern that it uses for data access and for test doubles.
- Record which FORM routine reads the database and which one only computes.
Output:
| Object | Direction | Caller / callee | Risk if changed |
|---|---|---|---|
| ZEDOC_REPAIR_REPORT | entry | started by user and by job variant EDOC_REP_D — ASSUMED | job variant breaks if the selection screen changes |
| f_select_documents | callee | reads EDOC_HDR | pure database access, move behind an interface |
| f_determine_repair | callee | called by f_select_documents | pure logic, move to the processor class |
| f_apply_repair | callee | calls CL_EDOCUMENT | write access, move behind an interface |
| f_display | callee | ALV | keep in the report |
Naming pattern found in the package — ASSUMED:
- Classes:
ZCL_EDOC_<area>_<role> - Interfaces:
ZIF_EDOC_<area>_<role> - Test classes: local
ltcl_<subject>in the class include
Framework pattern found in the package — ASSUMED:
- Data access sits behind an interface. The production class carries the SELECT.
- Test doubles are local classes in the test include.
- The constructor takes the interface. It defaults to the production class.
Gate A:
- Every FORM routine has a category: read, write, or compute.
- The job variant list is complete.
- The naming convention is written down, not assumed.
2. Impact analysis
| Change | Type | Downstream effect | Mitigation |
|---|---|---|---|
| Move the logic out of the report | behaviour risk | wrong result if a global variable holds state between FORM routines | list every global variable in phase 1 and pass it as a parameter |
| New interface for the read access | new object | none, the report is the only caller | — |
| New interface for the write access | new object | CL_EDOCUMENT calls move into one class | one place to check for the update task |
| The report keeps the selection screen | none | job variant stays valid | do not rename a selection screen field |
| No existing unit test | none | nothing to break | — |
Known risk: the report may run inside an update task. If the write happens in
IN UPDATE TASK, the sequence must not change. Confirm this in phase 1 before
phase 5 starts.
Gate B:
- Every global variable in the report is listed with its readers.
- The update task behaviour is confirmed, not assumed.
- The selection screen stays unchanged.
3. Object plan
3.1 Objects to change
| Object | Type | Change | Verification |
|---|---|---|---|
| ZEDOC_REPAIR_REPORT | report | keep the selection screen, the ALV, and the START-OF-SELECTION shell. Delegate the rest to the processor. | run with the job variant, compare the result list with the result before the change |
3.2 Objects to create
| Object | Type | Responsibility | Package | Naming rule applied |
|---|---|---|---|---|
| ZIF_EDOC_REPAIR_DATA | interface | declare the read and write operations for repair data | ZIF_EDOC__ | |
| ZCL_EDOC_REPAIR_DATA | class | run the SELECT and the status update against the database | ZCL_EDOC__ | |
| ZCL_EDOC_REPAIR_PROCESSOR | class | decide which document needs a repair and which repair it needs | ZCL_EDOC__ |
The processor holds no SELECT. It receives data and returns a decision. This is the condition that makes a database-free test possible.
Gate C:
- Every object has an exact name.
- The processor class has no database access in its plan.
- The package and the transport are set for each new object.
4. Coding standards
The agent applies these rules. It does not restate them in the code.
- Clean ABAP naming and structure.
- No comment that restates what the code does.
- No Given/When/Then comment headers in tests.
- Method length: keep below 40 statements.
- No new global variable.
- Exception classes: use the package pattern. Do not create a new base class.
- Text elements for user-facing text.
Project-specific rules recorded in section 1:
- Class and interface names follow
Z(CL|IF)_EDOC_<area>_<role>. - The constructor takes the data interface and defaults to the production class.
- Test doubles are local classes in the test include.
5. Implementation
Order:
ZIF_EDOC_REPAIR_DATA— create, activate, syntax check.ZCL_EDOC_REPAIR_DATA— implement the interface with the SELECT and the update that phase 1 recorded. Activate, syntax check.ZCL_EDOC_REPAIR_PROCESSOR— move the compute logic from the FORM routines. Activate, syntax check.ZEDOC_REPAIR_REPORT— replace the FORM bodies with calls to the processor. Keep the selection screen and the ALV. Activate, syntax check.
Rules:
- One object per step.
- Do not change an object that section 3 does not list.
- If the implementation needs another object, stop and update section 3 first.
- Move the logic. Do not improve it. A behaviour change here breaks the comparison test in section 8.
Gate D:
- All four objects are active.
- The syntax check returns no error.
- The report holds no SELECT statement.
- No object outside section 3 changed.
6. Unit tests
Target coverage: 70% or higher on ZCL_EDOC_REPAIR_PROCESSOR.
Actions:
- Create a local test double for
ZIF_EDOC_REPAIR_DATAin the processor test include. - Write the cases below.
- Run ABAP Unit.
| Case | Object | Expected result |
|---|---|---|
| document with a status that needs a repair | processor | the processor returns the repair action |
| document with a status that needs no repair | processor | the processor returns no action |
| document with a status outside the known set | processor | the processor raises the package exception |
| empty input table | processor | the processor returns an empty result, no exception |
| two documents, one needs a repair | processor | the result holds one entry |
| document already repaired on the same day | processor | the processor returns no action |
Gate E:
- All tests pass.
- Coverage on the processor is 70% or higher.
- No test opens a database connection.
- The test double holds no SELECT.
7. ATC
Actions:
- Run ATC with the project variant on the four objects.
- Report priority 1 and priority 2 findings, grouped by check.
- Fix each finding, or record the reason for an open finding.
| Check | Priority | Object | Decision |
|---|
Stop rule: if the same finding returns after two fix attempts, the agent stops and reports it.
8. Acceptance criteria
- The report started with job variant EDOC_REP_D returns the same document list as before the change. Compare with a saved result list.
- The status update writes the same records as before, in the same sequence, and in the same update task mode.
- The selection screen shows the same fields with the same names.
- A document with an unknown status raises the package exception. The report shows the message and does not dump.
- The ALV layout and the column order stay unchanged.
The first criterion needs a result list from before the change. Save it before phase 5 starts. Without it the criterion is not testable.
9. Definition of done
- Gates A to F pass.
- All acceptance criteria pass.
- The transport holds the four objects and no other object.
- The agent produced a change summary.
- Open points are listed, or the list is empty.
Token rules for the agent
- Read method signatures and the FORM list before the full report source.
- Read a FORM body only in the step that moves it.
- Do not repeat a read that the tables above already record.
- After each phase, keep the tables and drop the raw source.
- If two attempts at a gate fail, stop.
Change summary (agent fills this at the end)
| Object | Type | Action | Reason |
|---|