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 …
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).
- 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.
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.
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
- Approval / Rejection Notes
- Check / Check message category, etc
You can also download it and do excel analysis as desired.
10. ATC Activation – Challenges
- Priority of the defect to production – Sustain Phase && defined timelines of the project – Build phase.
- 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.
- The ATC also considers the generated program for evaluation and hence adds additional QA / TL level efforts.
- ChaRM integration is already available but will result in additional overhead in case the TR release fails due to ATC framework.
- 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|