ABAP on SAP HANA: Part XVII. ATC – ABAP Test Cockpit Setup & Exemption Process

We have been going ga-ga about HANA. We talked about what ABAPer should expect to do on HANA migration project? We introduced you to the industry buzz word HANA-tization and HANA+. We also revealed that the same ATC would help us in our transition to HANA. But do you really know how to set up ATC? Most of the times, system administrators would have it ready for us, but there is no harm in knowing it for ourselves. Buckle up, today, we would take a very deep plunge into ATC and try to explore all its nooks and corners. I am sure, this detailed information could be your future ready reference and guide for Setting up the ATC and also configuring the Exemption Process.

On you mark …

1. Definition

The ABAP Test Cockpit (ATC) is a new ABAP check toolset which allows you to run static checks and unit tests for your ABAP programs.

2. System Availability

The ATC is already available with EhP2 for SAP NetWeaver 7.0 support package stack 12 (SAP Basis 7.02, SAP Kernel 7.20) and EhP3 for SAP NetWeaver 7.0 support package stack 5 (SAP Basis 7.31, SAP Kernel 7.20).

3. Advantages

  • The ABAP Test Cockpit is fully integrated with the ABAP development workbench with high usability for developers and quality experts.
  • It offers superior and easy to use built-in reporting capabilities with filters and aggregated levels.
  • The ABAP Test Cockpit is not only a new check tool but supports essential quality assurance techniques like quality gates or regression testing in a consolidation system.
  • The ABAP Test Cockpit offers a robust process for managing exemptions (false/positive findings) based on the four-eyes principle.

4. ATC Process

5. ATC Configuration & Management

SAP provides a seamless integration of the ATC framework with the transport management framework. Upon global activation of ATC at the system level, we achieve:

  • Ability to invoke the ATC framework during the transport/task release.
  • Control the release/block of TR based on the issues identified.
  • Tight control on the code quality standards at the development phase.
  • Enable exemption process for the frequently occurring “No-Action” issues.

ATC transaction is the complete transaction to configure and manage ATC related activities viz. configuration, schedule Runs, manage approvers & subscribe approver notification. Below is the screenshot for the same

5.1 Default Variant & its Attributes

Transaction ATC -> ATC Administration ->Setup -> Configure ATC -> Double Click

Define the behavior of the ATC framework.

Global Check Variant – This is the variant which will be defaulted for all the ATC checks when the developer runs for each single object individually.

System ID – This is the system ID of the current system where the configuration is being carried out.

ATC Exemption – Enable the ATC exemption process as it is required so that all ATC issues are brought to a logical conclusion.

Results should be enabled for option “For Any Results”. With this, we are basically telling the system that ATC checks can be locally run for each object separately.

ATC Behavior – Enable to block the TR release on priority 1 and priority 2 issues.

5.2 Maintain Approvers

Approvers are the ones which receive the exemptions raised by the developers. Based on the exemption justification, approvers are expected to take an informed decision whether to approve OR not.

Below are the steps:

Transaction ATC -> ATC Administration -> Exemptions -> Maintain Approvers -> Double Click

You would get a popup to enter the list of the approvers.

The ‘authority check’ column marks it RED or GREEN based on the authorizations given to that user. If an approver does not have the required ATC QA role, then it would be turned RED.

The roles and authorizations are discussed later in the document.

5.3 Approver Delegation

Approvers can bring in their substitute in case of their absence OR any other reason. They can thus effectively delegate their tasks to other users provided then the required authorization and is configured as an approver already.

Transaction ATC -> ATC Administration -> Quality Governance -> Subscribe for Approver Notification -> Double Click

On double click, a pop up would come where you can maintain the delegated user. The user has to be maintained as “approver” already. You can also restrict the delegation window with “Start Date” and “End Date”.

5.4 Email Batch Job Scheduling

With exemptions being raised, we would certainly need a mechanism to intimate the user/approver about the work items that they get. For this, we have to activate an SAP standard batch job. The activation can be done via

Transaction ATC -> ATC Administration -> Setup -> Schedule Email Jobs -> Double Click. The batch job can be scheduled as “Weekly” OR “Daily”. If there is a custom requirement to have scheduling at a higher frequency, then it needs to done by customer manually.

5.5 Global Customizing Activation

In the following screen, change the setting of “Check Objects when Request Released” to “Globally Activated”.

With this, the configuration is done to activate the integration of ATC framework with TR Management framework.

But, there is a catch – This integration will work only on main TR release level and NOT during task release.

6. Exemption Process

6.1 Role Specification

In the entire ATC process, we have 3 people who play the major roles. Below are the roles required for each person:

  • Developer – S_DEVELOP, ACTVT 02 or 03
  • QA Lead – SAP_SATC_QE
  • ATC Admins – SAP_SATC_ADMIN

6.2 Workflow Triggering

As per the process diagram shown in the initial part of the document, exemption workflow can be triggered once the developer comes across ATC issues which need exemptions.

The exemption can be needed for any valid issues like:

  • The code is part of SAP standard.
  • The code is built as per business need and hence ATC expectations cannot be meant.

Below is a sample ATC result example.

On running ATC for a single object, the developer has to raise the exemption for an individual message. “Apply for an exemption” is the link to launch the exemption workflow.

6.2.1 Granularity level definition

On clicking that link, we will get the following pop-up.

The first screen is where the developer has options to select the correct exemption granularity.

Object Restriction

This Sub-object – Applicable to the technical object where the code is. An example of sub-object: Include program.

This Object – Applicable to the global scope of the program. That is the main program and hence all the ATC issues within that object (including all sub-objects) are considered.

This Package – The whole package with its objects are considered. The exemption gets applied to all of them.

Check Restriction

This Check – Applicable to all the “CHECK messages” inside that CHECK. This is irrespective of the current CHECK MESSAGE since in the screen.

This Check Message – Applicable to ONLY the check message auto populated in the above screen.

6.2.2 Auto Approver Determination

On clicking on “Continue” button on the ‘Granularity & Scope’ screen, we land on the “approver selection’ screen as shown below.

In the above screen, the APPROVER field is grayed out and auto-populated. This is NOT a standard functionality. We need custom enhancement which can do on the below:

  • Create Implicit enhancement at the start of the method HANDLE_PBO_SECOND_SCREEN in the include program LSATC_CI_EXEMPTION_REQUESTL02.
  • Set the value G_EXEMPTION_DATA-APPROVER based on the custom logic.
  • LOOP over the SCREEN table to disable this field, if required.

6.2.3 Customization of Reasons

We can customize the reasons as per our requirement as well – as shown below.

In the above screen shot, “DB Select…Found” is the customized reason code.

This can be done by maintaining the TMG for the table SATC_CI_REASONS.

6.2.4 Exemption approval process

Upon clicking on COMPLETE button in the “Approver and Reason” screen, an exemption is raised to the chosen approver.

The approver can view his inbox via exemption browser. The same can be reached via

Transaction ATC -> ATC Administration -> Quality Governance -> Exemption Browser -> Double Click

On double click, we reach the following screen:

  • On this screen, the approver can put his ID and press F8. In the below screen you can see, that approver can change granularity level and enter the VALIDITY date for that approval.
  • The approval comment can be entered in the ASSESSMENT box.

7. Release of Task and Transport

7.1 Custom code

There may be the requirement to check also the single ‘tasks’. Currently, automatically triggering of Code Inspector checks during the release of a ‘task’ is not available as a standard. To address this requirement, SAP provides a standard BADI ‘CTS_REQUEST_CHECK’, that can be implemented by customers to trigger code inspector checks during the release of a task.

Implementing the above BADI with some custom code to explicitly call the ATC framework will help us achieve our target.

In this BADI, we have a method called “CHECK_BEFORE_RELEASE”. We implement this method and put the logic to explicitly call ATC framework for that list of objects.

CL_SATC_AC_TRANSPORT_CHECK is the implementing class which holds all the actions of the ATC tool.

7.2 Task Level Check – Look and Feel

We have a report program under a TR and similarly, we have the include program as well with it. Include program is the sub-object to the main program. The naming convention is easy to understand as per the below screen shot.

The existing ATC issues are as follows. It is visible that 3 of the records are already approved by the QA lead. But still, we have priority 2 issues.

On attempting to release the TR, we get the following:

Now, we get the approval for all the items. You can below see that all the entries are GREEN.

Now, attempting to release the task, it allows successfully.

7.3 Main TR level check – Look and Feel

Now, evaluating the same functionality while releasing the main TR. To do robust testing, we forcefully put additional objects under main TR, as shown below.

On attempting to release the TR, we get the following issue – as expected

8. Message Priorities

Each ATC message which comes as a result of the ATC run has identified priority by the standard. Viz. Error, Warning OR information.

Error – Priority 1

Warning – Priority 2

Information – Priority 3

The priority definition is of key interest to us since in the ATC configuration we ask the framework to BLOCK the release of the transport if there are any P1 or P2 messages.

Based on this, there will be always a need to revisit the priorities maintained for these messages by SAP and if required, change it to suit our development standards.

8.1 Change to Message priorities

Following is the path: Transaction SCI à Menu Goto à Management of à Message Priorities

Choose the message which you want to change from the below screen. Click on the ICON and enter a NEW priority the pop-up screen. Click on green ok button.

9. Overall Reporting

Overall reporting can be done via the same transaction.

Following is the path: Transaction ATC à Quality Governance à Exemption Browser à Double Click

You could choose from the selection screen as per the requirement and just choose the required list of the ATC exemption statuses and press F8.

You will see the below screen. With appropriate fields chosen from the layout, you can build the exemption analysis as desired.

In the below screenshot, you can see that we have important fields like:

  • Present status
  • Requestor
  • Approver
  • Approval / Rejection Notes
  • Check / Check message category, etc

You can also download it and do excel analysis as desired.

10. ATC Activation – Challenges

  1. Priority of the defect to production – Sustain Phase && defined timelines of the project – Build phase.
  2. The old piece of code requiring change and hence the ATC framework blocks the TR for even a single line change – This is one of the most important defects because it adds up a considerable amount of effort in the development phase and hence the timelines will definitely vary.
  3. The ATC also considers the generated program for evaluation and hence adds additional QA / TL level efforts.
  4. ChaRM integration is already available but will result in additional overhead in case the TR release fails due to ATC framework.
  5. In most cases, we have “No-action” ATC issues which result in the overhead on the QA members as they have to work on the exemption process with the appropriate restriction on the validity date.

10.1 Way out

Since the ATC framework works on the variants that we configure, we can modify the variant as per our needs so that “No-Action” issues do not pop up. This will help in reducing a lot of effort for TL/ QA and also the developer at large.

10.2 “No Action” Issues: (subjective & decision on project level should be taken to decide on below list)

Check Title Check Message  Standard Explanation to be given 
Complex WHERE Condition in SELECT Statement JOIN link from … Tables JOIN(s) are required as data needs to be fetched from multiple tables to exploit HANA capabilities 
Complex WHERE Condition in SELECT Statement WHERE condition has … fields linked with AND Data selection is required based on multiple logical operators on different fields
Copy Large Data Objects  Assign a Long Field  data object copy is needed as per the logic 
Empty Unused Procedures  Procedure “…” is empty and was not executed  It can be ignored as we have implemented only needed routines as per requirement 
Extended Program Check (SLIN)  Method was not implemented.  Only the required methods are implemented. 
Low-Perform. Parameter Transfers  Parameter is a long field and is passed by VALUE  Parameter(s) are required to be passed “By Value” as per HANA AMDP requirements 
Search DB Operations  DB Operation CLOSE for … found.  Database CLOSE cursor are always captured and hence can be ignored. 
Search DB Operations  DB Operation EXPORT DBTAB for … found.  Statement(s) are required as we need to export data from INDX tables 
Search DB Operations  DB Operation FETCH… found.  Database FETCH cursor are always captured and hence can be ignored. 
Search DB Operations  DB Operation IMPORT DBTAB for … found.  Statement(s) are required as we need to import data from INDX tables 
Search DB Operations  DB Operation OPEN for … found.  Database OPEN cursor are always captured and hence can be ignored. 
Search DB Operations  DB Operation SELECT … found.  Database SELECT’s are always captured and hence can be ignored. 
SELECT Statements That Bypass the Table Buffer Access to Table … Bypasses Table Buffer: …  Aggregations are required as per the business need and hence this issue cannot be avoided. 
SELECT Statements That Bypass the Table Buffer Buffered Table … in a JOIN  JOIN(s) are required as data needs to be fetched from multiple tables to exploit HANA capabilities 
SELECT Statements That Bypass the Table Buffer Buffered Table … in SELECT with Subquery  Subquery(s) are required as data needs to be fetched from multiple tables to exploit HANA capabilities