Mutation check done on all accepted tasks; mutant fixes; dump filter in proxy

- skip sy-subrc lines and CDS type lengths; CDS literal mutants; mutate helper classes
- proxy: sap_short_dumps shows only dumps of the current run
- 26/26 tasks pass; results in docs/faz1-tasarim.md 11g

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
Kral
2026-10-03 06:02:59 +02:00
parent 0ba25faeea
commit f907351c0d
108 changed files with 7384 additions and 8 deletions

View File

@@ -0,0 +1,22 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Project effort'
define view entity {{P}}I_PROJ_EFFORT
as select from {{p}}proj as proj
inner join {{p}}asgn as asgn on asgn.proj_id <> proj.proj_id
{
key proj.proj_id as proj_id,
proj.proj_name as proj_name,
count( * ) as assign_count,
sum( asgn.work_hours ) as total_hours,
sum( cast( asgn.work_hours as abap.dec( 15, 2 ) ) * asgn.rate ) as total_cost,
case
when sum( cast( asgn.work_hours as abap.dec( 15, 2 ) ) * asgn.rate ) > proj.budget
then 'X'
else 'N'
end as over_budget
}
where asgn.status = 'A'
group by
proj.proj_id,
proj.proj_name,
proj.budget

View File

@@ -0,0 +1,22 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Project effort'
define view entity {{P}}I_PROJ_EFFORT
as select from {{p}}proj as proj
inner join {{p}}asgn as asgn on asgn.proj_id = proj.proj_id
{
key proj.proj_id as proj_id,
proj.proj_name as proj_name,
count( * ) as assign_count,
max( asgn.work_hours ) as total_hours,
sum( cast( asgn.work_hours as abap.dec( 15, 2 ) ) * asgn.rate ) as total_cost,
case
when sum( cast( asgn.work_hours as abap.dec( 15, 2 ) ) * asgn.rate ) > proj.budget
then 'X'
else 'N'
end as over_budget
}
where asgn.status = 'A'
group by
proj.proj_id,
proj.proj_name,
proj.budget

View File

@@ -0,0 +1,22 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Project effort'
define view entity {{P}}I_PROJ_EFFORT
as select from {{p}}proj as proj
inner join {{p}}asgn as asgn on asgn.proj_id = proj.proj_id
{
key proj.proj_id as proj_id,
proj.proj_name as proj_name,
count( * ) as assign_count,
sum( asgn.work_hours ) as total_hours,
max( cast( asgn.work_hours as abap.dec( 15, 2 ) ) * asgn.rate ) as total_cost,
case
when sum( cast( asgn.work_hours as abap.dec( 15, 2 ) ) * asgn.rate ) > proj.budget
then 'X'
else 'N'
end as over_budget
}
where asgn.status = 'A'
group by
proj.proj_id,
proj.proj_name,
proj.budget

View File

@@ -0,0 +1,22 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Project effort'
define view entity {{P}}I_PROJ_EFFORT
as select from {{p}}proj as proj
inner join {{p}}asgn as asgn on asgn.proj_id = proj.proj_id
{
key proj.proj_id as proj_id,
proj.proj_name as proj_name,
count( * ) as assign_count,
sum( asgn.work_hours ) as total_hours,
sum( cast( asgn.work_hours as abap.dec( 15, 2 ) ) * asgn.rate ) as total_cost,
case
when sum( cast( asgn.work_hours as abap.dec( 15, 2 ) ) * asgn.rate ) <= proj.budget
then 'X'
else 'N'
end as over_budget
}
where asgn.status = 'A'
group by
proj.proj_id,
proj.proj_name,
proj.budget

View File

@@ -0,0 +1,59 @@
{
"task": "G0017",
"mutants": [
{
"object": "{{P}}I_PROJ_EFFORT",
"mutant": "line 5: inner join -> left outer join (join)",
"status": "survived",
"hidden": "8/8",
"failed_tests": []
},
{
"object": "{{P}}I_PROJ_EFFORT",
"mutant": "line 5: = -> <> (eq)",
"status": "killed",
"hidden": "1/8",
"failed_tests": [
"BUDGET_NOT_EXCEEDED",
"COST_OF_PROJECT_ONE",
"COUNT_OF_PROJECT_ONE",
"HOURS_OF_PROJECT_ONE",
"NO_ACTIVE_ASSIGNMENT",
"OVER_BUDGET_FLAG",
"ROW_COUNT"
]
},
{
"object": "{{P}}I_PROJ_EFFORT",
"mutant": "line 10: sum( -> max( (agg)",
"status": "killed",
"hidden": "7/8",
"failed_tests": [
"HOURS_OF_PROJECT_ONE"
]
},
{
"object": "{{P}}I_PROJ_EFFORT",
"mutant": "line 11: sum( -> max( (agg)",
"status": "killed",
"hidden": "7/8",
"failed_tests": [
"COST_OF_PROJECT_ONE"
]
},
{
"object": "{{P}}I_PROJ_EFFORT",
"mutant": "line 13: > -> <= (rel)",
"status": "killed",
"hidden": "6/8",
"failed_tests": [
"BUDGET_NOT_EXCEEDED",
"OVER_BUDGET_FLAG"
]
}
],
"valid": 5,
"killed": 4,
"kill_rate": 0.8,
"ok": true
}