You are on page 1of 16

Checklist Developer Developer Comment

Check
General ABAP HANA
1 HANA Code transport needs to be considered -- Delivery Unit is N/A
properly handled
2 If HANA Live is implemented by customer, reuse the HANA Live N/A
Views
3 Existing views have been leveraged instead of creating new ones Pass

4 Top Down approach should be preferred than Bottom Up Pass


approach unless some HANA Views or Procedures already exist in
the system.
5 For Top down approach the preference should be in this order. Pass
New Open SQL > CDS Views > AMDP
6 For Complex database selection (Open SQL/CDS View/AMDP) Pass
proper documentation should be done using Table Maintenance
diagram in the Technical Specification
Database Operation
1 Performance intensive calculation logic are done in the New Pass
Open SQL or CDS view or AMDP.
2 In SELECT statement, only the fields, which are needed, are Pass
selected - no SELECT * used.
3 INNER JOIN should be used wherever possible instead of "FOR Pass
ALL ENTRIES"
4 Aggregate functions (COUNT, MIN, MAX, SUM, AVG) used, N/A
wherever possible.
5 Sorting should be done at the SQL level by ORDER BY clause. Pass
6 Performance intensive calculation logic are done in the Stored Pass
Procedure or HANA views.
7 INSERT/UPDATE/DELETE operations are performed using Open N/A
SQL.
Data Dictionary
1 Any custom table created must be columnar table
ALV on HANA
1 For ALV reporting, ALV on HANA technique used with the ALV API Pass
IDA (Integrated Data Access).
2 For External Views as data sources, field catalog object references Pass
suitable data element for each column.
Column headings will be derived from these data elements.
3 Selection Screen values passed to API for data restriction. Pass
Native SQL - ADBC Connection (HANA as secondary DB)
1 For Native SQL-queries, exception-handling is done using Class N/A
CX_SQL_EXCEPTION
2 No Hashed or Sorted Internal tables are allowed as target for N/A
Native SQL. Always use Standard Internal tables.
3 Client and JOIN-conditions are provided explicitly. N/A
4 Query is closed using method close of class CL_SQL_RESULT_SET. N/A

CDS View
1 Never use UNION and UNION ALL in the same view N/A
2 N/A

Proper annotaions should be used in CDS view definition


Use the following annotations:
@ClientDependent: true
@AbapCatalog.Buffering.status: #SWITCHED_OFF

@Semantics.currencyCode: true (for currency code fields)


@Semantics.amount.currencyCode: 'currencyCode' (for
amount fields related to the 'currencyCode' field)
3 If too many prcoessing steps are invloved in a single CDS view N/A
then Modularization should be done by calling other simple CDS
views
ABAP Managed Database Procedures
1 Do not use CE functions in AMDP. CE functions are no longer Pass
recommended as of SPS9.
2 Mark Read Only AMDP Methods if the method is not Pass
updating any database entires.
3 Do not use Dynamic Select inside AMDP method; this may be a Pass
severe securitry issue
DDIC Objects
1 Foreign Key relationship has been maintained for all key N/A
fields(including MANDT) if a new table is being created.
2 Cardinality and Foreign-key field type has been maintained for all N/A
key fields if a new table is being created.
3 Proper Data-class and Size category has been provided for N/A
custom tables, look into project standard or consult an
SME/Senior SME for the same(Data-class has effect on table
storage for database systems ORACLE and INFORMIX).

4 Proper Delivery Class has been maintained for newly created N/A
DDIC tables.
5 Proper heading is appearing for all Table maintenance Generator N/A
columns - especially, no '+' sign is appearing as column-heading.

6 Proper recording routine has been maintained for TMG. N/A


7 Authorization group for TMG is as per Project Standard. N/A
8 Appropriate Enhancement category has been properly selected N/A
during custom-table activation.
9 All field labels have been maintained for custom Data-elements. N/A

10 For adjusting a database table using DB Utility use Backgorund as N/A


processing type or consult an SME/Senior SME.

Report Standard
1 All fields in the report have output lengths / field formats exactly Pass
as mentioned in the functional spec
2 Actual hard-copy output has been taken to check the layout and N/A
format
3 Events appear in the program with the order they are generally Pass
executed.
4 Report Header is according to project requirements Pass
5 Search help for selection fields should be available and should be Pass
same as we see it in standard transaction(If refering to any
standard field)
6 Make sure the error handling is properly done, instead of error Pass
message (from start-of-selection) use information type
message(with error) and leave list processing can be used to
return to selection screen

7 No hard coding of currency output formats in the program. Try to N/A


use the feature WRITE . CURRENCY for report output. But
when the Amount fields are download to a file they should only
be moved as 1000.00 and not written as 1,000.00

8 Try to use ALV class approach than function module approach Pass
(Object Oriented Approach) in case the program is run in
foreground mode.Background mode does not support ALV class
approach(Object Oriented Approach)

9 The report must be associated with a custom T-code Pass


10 Avoid using REUSE_ALV_FIELDCATALOG_MERGE and populate N/A
Field-Catalog manually
11 For USER-COMMAND, need to check name of the field selected N/A
by User
12 NO STANDARD PAGE-HEADING need to be specified Pass
13 SY-SUBRC check need to be done for the N/A
REUSE_ALV_GRID/LIST_DISPLAY Function-Module
14 Use AT SELECTION-SCREEN instead of AT SELECTION-SCREEN ON Pass
<fieldname> in case there are dependancies between field-values
of more than one Selection-Screen Fields
Workflow - Business Object/Class
1 All business object components should be in status implemented N/A
(Object should be Generated, Saved and Implemented). For class,
all methods from the IF_WORKFLOW interface are implemented
and active (may be blank).

2 If the attribute/method is not dependent on the key fields, then N/A


it is made instance independent (for business objects) or static
(for classes).
3 Custom instance attributes are created only if they are required N/A
in workitem texts or descriptions.
4 Custom Function Module is used instead of implementing the N/A
business logic in business object method if the logic is
large/complex. For business classes, the logic is modularized in
private methods.

5 If the method is instance dependent, the attributes of the BOR N/A


are accessed using macro SWC_GET_PROPERTY <self>. Extra
method parameters are not created. Similarly for classes,
instance attributes are used as me-><attribute> instead of
creating extra method parameters.

6 Exceptions in methods are detailed and raised at all possible N/A


levels with different error messages to facilitate error tracking.
7 If subtype of standard business object is created, then the N/A
supertype should be delegated to the subtype. The subtype
name should not be directly used anywhere in the workflow or
the tasks.

Workflow - Task
1 Agent assignment is maintained for all dialog tasks. N/A
2 Terminating events are attached to all asynchronous tasks. N/A
3 All dialog task have proper work item subject as well as work N/A
item description.
4 Redundant task containers are deleted. N/A
5 Agent assignment and classification properties of dialog tasks are N/A
saved in a customizing transport. (If transport setting is manual
then the agent assignment and classification attributes may be
recorded in a CTS using transaction RE_RHMOVE30).

Workflow Template
1 All container element names, step names and outcomes are N/A
elaborate and meaningful.
2 Values are not hardcoded in the workflow design instead - N/A
containers are declared with initial values.
3 The variables used in work item subject line for Send Mail steps N/A
should be short as max length of mail subject is only 50 char.

4 Redundant workflow container elements are deleted. N/A


5 Start conditions for workflow are attached to the event N/A
(transaction SWB_COND) instead of checking them with a
condition step inside the workflow.
6 A background step is not inserted in between two dialog steps N/A
being sent to the same agent(s). Doing so breaks the
synchronous dialog chain and the user does not get the
immediate popup.

7 If agent is determined via rule, the checkbox Terminate if Rule N/A


resolution without Result is checked so that if the Rule fails then
the workflow is put into error and work item does not go to all
the possible agents.

8 All bindings between event, workflow, task, block, method and N/A
rule are checked separately for syntax errors.
Conversions
1 BDC recording has been used if and only if no other option is N/A
available (e.g. Idoc/BAPI/Standard FM etc)
2 If LSMW is used, it is attached to a Transport-Request N/A
3 If BDC technique is used for data conversion, ensure date fields N/A
and field lengths have been handled appropriately.
4 For BDC call transactions ensure all errors have been handled and N/A
the program has been tested for all transaction modes (A/E/N).

5 If BAPI/standard FM is used, ensure proper error handling has N/A


been done.
6 Ensure application server filepath logic has been incorporated as N/A
most conversion programs if not all run in batch jobs.
GUI_UPLOAD does not work in background.
7 IF the file format is .XLS ensure proper approval exists that the N/A
program will never run in backgound as excel files cannot be
downloaded from application server
General ABAP
1 Relevant objects are attached into CTS and unnecessary ones are Pass
removed from CTS
2 Program header flower box with supplier information must be N/A
filled for all ABAP editor based objects
3 Has the program made to be modular wherever suitable? Pass

4 Correct Message class is used and default message class is Pass


specified for the report.
5 Program/Object documentation is provided as per Project Pass
Standards. This is also applicable for all sub-units in a code
(Subroutines, Macros, etc.)
6 If this is a modification, did you document the changed lines with
the Change Number?
7 No Object should be saved as "Local Object" (in Package $TMP) Pass

8 All sub-units of a code (Data-declarations, SELECT-queries,


Subroutine/FM/Method calls, and all processing-logic blocks)
need to have meaningful names and detailed half-line/full-line
comments

9 Dead Code should be removed from the program Pass


Data Declaration
1 Global variables are minimized by declaring local variables or by Pass
passing variables through parameters and arguments while
creating internal subroutine.
2 Extended Syntax-Check must be executed and all Errors/Warnings Pass
removed as much as possible, or suitable explanation has been
documented for not doing so.
3 While working with Function-Modules/Classes, ensure proper Pass
error/exception handling has been done.
Internal Table
1 Sort fields on the SORT statement should not be left as default Pass
(i.e. SORT ITAB BY FLD1 instead of SORT ITAB).
2 Field symbols must be extensively used instead of internal table N/A
work area in order to enhance the performance. Try to use READ
table assigning <Field-symbols> and Append initial line to
<Internal table> assigning <Field-symbols> instead of Read table
into <Work Area> and Append <Work Area> to internal table
respectively.

3 Try to optimize the memory usage, use Refresh & FREE int_tab if N/A
the internal table is not required any more, This is deallocate the
memory of internal table

4 Handle internal table with minimum loops.Modify Pass


transporting ..where .. can replace loopsDelete where .. can
replace loopsLOOP AT ITAB WHERE K = XXX should be used
instead of LOOP AT ITAB / CHECK ITAB-K = XXX. Use Parallel
Cursor as much as possible in case of nested Loops.
5 If explicit work area is used for internal table read/update, try to N/A
use transporting to ensure minimize data passing, (the best
option is to use Field Symbols when modifying the current
internal table fields)

6 Sorted and hashed tables should be used to improve N/A


performance wherever possible.Rule for sorted table: Table is
relatively big (more than 20 entries) and sorting criteria is fixed in
the entire program and not used in ALV Rules for Hashed table:
Really big tables

7 When processing internal tables make sure to clear the work area Pass
before you fill it e.g. in a loop statement (LOOP AT ...,), in
particular when using MOVE-CORRESPONDING or INTO
CORRESPONDING FIELDS OF.

Subroutines
1 Are all the parameters for the subroutine listed and described in Pass
the header?
2 Are the parameters and subroutine names descriptive? Pass
Data Access
1 In SELECT statement, only the fields, which are needed, are Pass
selected in the order that they reside on the database.
2 For selecting single row from a database table, use SELECT Pass
SINGLE if the full primary key is known. Otherwise, use UP to 1
Rows.

3 Is there any primary or secondary index for any of the fields used
in where clause of select from big database tables?

4 For Inner-Joins with1:N relationship between two tables, the Pass


table with the 1 relationship is the preferred driving table. Hence,
it should be always places on the left of the JOIN statement

5 Whenever possible, use array operations instead of single-row Pass


operations to modify your database tables.
6 When updating database tables, use the SAP lock concept and N/A
pass values for the lock argument otherwise all table lines may be
locked.
7 To ensure database updates on an all-or-nothing principle, N/A
bundle all of your database updates in a single dialog step
(usually the last) of the dialog program.
8 Try to use positive & specific (=) checks than negatives (<>), open N/A
ended (> / <)Avoid inefficient use of indexes. An effective use of
indexes specifies the index fields with = in the where condition
without gaps in the order of the index fields.

9 When using FOR ALL ENTRIES:If duplicate entries are not deleted N/A
from the internal table, data records are read unnecessarily from
the database. (try to put into temp. internal table, sort, delete
adjacent and then use for database selects)

10 In asynchronous updates you should not use CALL FUNCTION N/A


IN UPDATE TASK within loops. Instead gather the data records to
be changed in an internal table and then update them.
11 If your program uses a logical database, but does not require all N/A
fields belonging to a certain GET event, always use the FIELDS
addition to reduce the amount of data selected by the logical
database.

12 Do not use select statement within a GET event. N/A


13 Always check for the deletion flag on key master data tables (i.e., N/A
KNA1, KNVV, MARA). Deletion flags are usually named LOEVM,
LOEKZ, LVORM, etc. Depends upon functional requirement as
well

Message
1 Messages should be self explanatory enough to be understood by Pass
the business users.
2 Dont use default message statement after function module call Pass
( message sy-msgid exception: If you see the sy-msgid would be
populated then you can use Message Sy-msgid...)
Hard Coding
1 Display format for date values are not hard coded - they are Pass
derived from user settings or country/any other business unit
specific settings.
2 Currency/quantity formats are not hard coded - they are derived N/A
from user settings or country/any other business unit specific
settings.
For amount values, the number of decimal places should follow
the corresponding currency code configuration (Table: TCURX).

3 For all value-based restrictions (i.e. specific fixed values) in Pass


business-logic, the values are derived from Selection-Screen /
TVARVC Table / Project-Specific Constant Table / any other
dynamic logic - NO Hard Coded Literals/Constants are present in
Code for those.

4 For system parameters like System-ID / RFC-destination / N/A


Language / Transaction-codes etc., the values are derived from
Selection-Screen / TVARVC Table / Project-Specific Constant Table
/ any other dynamic logic - NO Hard Coded Literals/Constants
are present in Code for those.

5 File name and path are derived from Logical File / Selection- N/A
Screen / TVARVC Table / Project-Specific Constant Table / any
other dynamic logic - NO Hard Coded Literals/Constants are
present in Code for those.

6 Fixed values, used internally in the program (e.g. flags, table N/A
name/field name in ALV field catalog population, justification in
ALV etc.) are not used as hard coded literals. Instead constants
are used for them.

7 For program output texts and literals with translation Pass


requirements, text elements are used instead of hard coded
literals/constants. For explicit and implicit enhancements - where
text elements cannot be created - message addition like
MESSAGE...INTO text is used instead of hard coded literals.

8 All SY-UNAME checks and hard coded breakpoints removed. N/A


Miscellaneous
1 Unreleased function modules are not used, unless absolutely Pass
needed. Always look for alternatives (other FMs/ Classes).

2 In an authorization check all fields of the object must be N/A


specified. If not required to check all the values the use
DUMMY"
3 Has an SQL-trace been performed on programs with database N/A
access?
4 If your program is performance critical then runtime analysis N/A
been performed?
Reviewer Reviewer Comment Impact Defect Type
Check

N/A

N/A

Pass

Pass

Pass

Pass

Pass

Pass

Pass

N/A

Pass
Pass

N/A

Pass

Pass

Pass

N/A

N/A

N/A
N/A

N/A
N/A

N/A

Pass

Pass

Pass

N/A

N/A

N/A

N/A

N/A

N/A
N/A
N/A

N/A

N/A

Pass

N/A
Pass

Pass
Pass

Pass

N/A

Pass

Pass
N/A

N/A

Pass
N/A

Pass

N/A

N/A

N/A

N/A

N/A

N/A
N/A

N/A
N/A
N/A

N/A
N/A

N/A

N/A

N/A

N/A
N/A

N/A

N/A

N/A

N/A

N/A
N/A

N/A

N/A

N/A
N/A

Pass

N/A

Pass

Pass

Pass

Pass

Pass

Pass

Pass

Pass

Pass

N/A

N/A

Pass
N/A

N/A

Pass

Pass

Pass

Pass

Pass

Pass

Pass

N/A

N/A

N/A

N/A

N/A
N/A

N/A
N/A

Pass

Pass

Pass

N/A

Pass

N/A

N/A

N/A

Pass

N/A
Pass

N/A

N/A

N/A

You might also like