praxishandbuch sap code inspector - readingsample · sap press praxishandbuch sap code inspector...

54
SAP PRESS Praxishandbuch SAP Code Inspector Bearbeitet von Randolf Eilenberger, Frank Ruggaber, Reinhard Schilcher Neuausgabe 2011. Buch. 466 S. Hardcover ISBN 978 3 8362 1706 4 Format (B x L): 16 x 24 cm Weitere Fachgebiete > EDV, Informatik > Datenbanken, Informationssicherheit, Geschäftssoftware > SAP schnell und portofrei erhältlich bei Die Online-Fachbuchhandlung beck-shop.de ist spezialisiert auf Fachbücher, insbesondere Recht, Steuern und Wirtschaft. Im Sortiment finden Sie alle Medien (Bücher, Zeitschriften, CDs, eBooks, etc.) aller Verlage. Ergänzt wird das Programm durch Services wie Neuerscheinungsdienst oder Zusammenstellungen von Büchern zu Sonderpreisen. Der Shop führt mehr als 8 Millionen Produkte.

Upload: others

Post on 18-Apr-2020

66 views

Category:

Documents


1 download

TRANSCRIPT

SAP PRESS

Praxishandbuch SAP Code Inspector

Bearbeitet vonRandolf Eilenberger, Frank Ruggaber, Reinhard Schilcher

Neuausgabe 2011. Buch. 466 S. HardcoverISBN 978 3 8362 1706 4

Format (B x L): 16 x 24 cm

Weitere Fachgebiete > EDV, Informatik > Datenbanken, Informationssicherheit,Geschäftssoftware > SAP

schnell und portofrei erhältlich bei

Die Online-Fachbuchhandlung beck-shop.de ist spezialisiert auf Fachbücher, insbesondere Recht, Steuern und Wirtschaft.Im Sortiment finden Sie alle Medien (Bücher, Zeitschriften, CDs, eBooks, etc.) aller Verlage. Ergänzt wird das Programmdurch Services wie Neuerscheinungsdienst oder Zusammenstellungen von Büchern zu Sonderpreisen. Der Shop führt mehr

als 8 Millionen Produkte.

Bonn � Boston

Randolf Eilenberger, Frank Ruggaber, Reinhard Schilcher

Praxishandbuch SAP Code Inspector ®

1706-4.book Seite 3 Montag, 4. Juli 2011 3:19 15

Auf einen Blick

1 Einsatz des SAP Code Inspectors ....................................... 29

2 Konfiguration und Funktionen des SAP Code Inspectors ........................................................... 67

3 Automatisierte Prüfungen mit dem SAP Code Inspector ............................................................ 125

4 Programmierung eigener Prüfungen für den SAP Code Inspector ............................................................ 159

5 Standardprüfungen des SAP Code Inspectors .................... 235

A Konstanten des SAP Code Inspectors ................................ 391

B Meldungen der SAP-Standardprüfungen ........................... 405

C Glossar ................................................................................ 449

D Die Autoren ......................................................................... 453

1706-4.book Seite 5 Montag, 4. Juli 2011 3:19 15

9

Inhalt

Geleitwort der SAP AG ............................................................................. 17Geleitwort der inconso AG ....................................................................... 19Einleitung ................................................................................................. 21

Dieses Kapitel enthält einen kurzen Überblick über die verschiedenen SAP-Testwerkzeuge, eine einfach nachzuvollziehende Einführung in die Benutzung des SAP Code Inspectors und eine kleine Übersicht über die vorhandenen SAP-Standardprüfungen. Das Ziel dieses Kapitels ist es, Sie dabei mit den grundlegenden Begriffen und Funktionen des SAP Code Inspectorsvertraut zu machen. 29

1 Einsatz des SAP Code Inspectors ........................................ 29

1.1 Einordnung des SAP Code Inspectors .................................... 291.2 Verwendung des SAP Code Inspectors ................................... 34

1.2.1 Gemeinsamkeiten in verschiedenen Bereichen .......... 351.2.2 Prüfvariante ............................................................. 381.2.3 Objektmenge ........................................................... 431.2.4 Inspektion ............................................................... 55

1.3 Überblick über die SAP-Standardprüfungen ........................... 63

2 Konfiguration und Funktionen des SAP Code Inspectors ........................................................... 67

2.1 Einstellmöglichkeiten des SAP Code Inspectors ...................... 672.1.1 Verwaltung von Tests ............................................... 682.1.2 Verwaltung von Objektkollektoren .......................... 712.1.3 Verwaltung von Meldungsprioritäten ....................... 73

2.2 Objektkollektoren ................................................................. 752.2.1 Programme aus der Laufzeitanalyse .......................... 762.2.2 Verwendungsnachweis für Tabellen ......................... 782.2.3 Objekte aus Umfeldermittlung ................................. 792.2.4 Objekte aus Verwendungsnachweis ......................... 802.2.5 Objekte aus Coverage Analyzer ................................ 812.2.6 Objekte aus Datei-Upload ........................................ 822.2.7 Objekte aus Laufzeitfehlern (ab Release 7.0 EHP2).... 832.2.8 Objekte aus cProjects (ab Release 7.0 EHP2) ............ 842.2.9 Objekte aus eingebetteten Paketen

(ab Release 7.0 EHP2) .............................................. 852.2.10 Programme aus Katalog der Report-Sourcen

(ab Release 7.0 EHP2) .............................................. 862.3 Ergebnismeldungen unterdrücken ......................................... 87

2.3.1 Pseudokommentare ................................................. 882.3.2 Genehmigungsverfahren .......................................... 95

IVZ_lang.fm Seite 9 Dienstag, 5. Juli 2011 10:20 10

Inhalt

10

2.4 Verwendungsnachweis für Prüfvarianten und Objektmengen ....................................................................... 109

2.5 Ergebnisse von Inspektionen vergleichen ............................... 1112.5.1 Vergleich zweier verschiedener Inspektionen ............ 1112.5.2 Vergleich zweier Versionen einer Inspektion ............ 114

2.6 E-Mail versenden ................................................................... 1172.6.1 E-Mail aus der Ergebnisliste einer Transaktion........... 1172.6.2 E-Mail über den Report »rs_ci_email« ...................... 1192.6.3 Fazit ......................................................................... 123

2.7 Hintergrundjob des SAP Code Inspectors ............................... 1232.7.1 Teilaufgabe Löschung ............................................... 1232.7.2 Teilaufgabe Import ................................................... 124

In diesem Kapitel gehen wir auf die Möglichkeiten der automatisierten Nutzung des SAP Code Inspectors ein, beschreiben dessen externe Programmierschnittstelle und vermitteln Ihnen zu diesen Themenstellungen Erfahrungen aus der Praxis. 125

3 Automatisierte Prüfungen mit dem SAP Code Inspector ... 125

3.1 Einsatzszenario für automatisierte Prüfungen ......................... 1253.2 Inspektion als Job einplanen .................................................. 1263.3 Objektprüfungen bei Auftragsfreigabe ................................... 1303.4 Objektprüfungen bei Aufgabenfreigabe ................................ 1353.5 Externe Programmierschnittstelle des

SAP Code Inspectors .............................................................. 1503.5.1 Inspektion eines einzelnen TADIR-Objektes ............. 1513.5.2 Inspektion mit einer bestehenden Objektmenge ....... 1523.5.3 Inspektion von Sourcecode ...................................... 1523.5.4 Inspektion einer Selektion von Objekten .................. 1533.5.5 Inspektion einer Objektliste ..................................... 154

3.6 Erfahrungen aus der Praxis ..................................................... 1543.6.1 Planung eines automatisierten

Code-Inspector-Einsatzes ......................................... 1553.6.2 Integration des SAP Code Inspectors in

eigenen Code ........................................................... 157

4 Programmierung eigener Prüfungen für den SAP Code Inspector ................................................ 159

4.1 Vorüberlegungen für eine eigene Prüfung .............................. 1604.1.1 Generelle Planung .................................................... 1614.1.2 Datensammler des Code-Inspector-Frameworks........ 162

4.2 Grundlagen für eine eigene Prüfung ....................................... 1644.2.1 Hintergrund für die Grundlagen ............................... 1644.2.2 Schritt 1: Erstellung von Einträgen im

Prüfvariantenbaum ................................................... 166

IVZ_lang.fm Seite 10 Dienstag, 5. Juli 2011 10:20 10

Inhalt

11

4.2.3 Kategorieneintrag erstellen ...................................... 1674.2.4 Prüfungseintrag erstellen .......................................... 1724.2.5 Schritt 2: Aktivierung der neuen Einträge ................. 1774.2.6 Aktivierte Einträge in der Ergebnisanzeige ................ 178

4.3 Prüfvariante (Frontend) .......................................................... 1794.3.1 Erweiterung des Prüfvariantenbaums ....................... 1804.3.2 Parameterauswahlbildschirm .................................... 1814.3.3 Methode »constructor« ............................................ 1874.3.4 Methode »if_ci_test~query_attributes« ..................... 1934.3.5 Methode »cl_ci_query_attributes=>generic« ............. 1954.3.6 Struktur »sci_attent« ................................................ 1964.3.7 Feld »kind« .............................................................. 1974.3.8 Methode »fill_messages« .......................................... 2004.3.9 Struktur »scimessage« .............................................. 2014.3.10 Methode »if_ci_test~navigate« ................................. 2044.3.11 Methode »if_ci_test~display_documentation« ........... 2044.3.12 Methode »if_ci_test~exception« ............................... 204

4.4 Aufbau einer eigenen Prüfung (Backend) ............................... 2054.4.1 Methode »run« ........................................................ 2054.4.2 Methode »inform« ................................................... 2094.4.3 Methode »clear« ...................................................... 2124.4.4 Methode »get_message_text« .................................. 2124.4.5 Methode »run_begin« .............................................. 2124.4.6 Methode »run_end« ................................................. 2124.4.7 Methode »get_result_node« ..................................... 2134.4.8 Methode »consolidate_for_display« ......................... 2134.4.9 Methode »modify_priorities« ................................... 2144.4.10 Methode »add_obj_type« ........................................ 2154.4.11 Methode »get« ........................................................ 2154.4.12 Sonstige Methoden .................................................. 216

4.5 Tabellen der ABAP-Scan-Engine ............................................ 2164.5.1 Token-Tabelle .......................................................... 2184.5.2 Statement-Tabelle .................................................... 2214.5.3 Structure-Tabelle ..................................................... 2244.5.4 Level-Tabelle ........................................................... 226

4.6 Mögliche Umsetzungsszenarien ............................................. 2294.6.1 Manipulation bestehender

SAP-Standardprüfungen ........................................... 2304.6.2 Integration eigener Prüfungen in den

SAP Code Inspector ................................................. 2304.6.3 Fazit ........................................................................ 234

IVZ_lang.fm Seite 11 Dienstag, 5. Juli 2011 10:20 10

Inhalt

12

In diesem Kapitel finden Sie eine Beschreibung aller von SAP ausgelieferten Prüfungen der verschiedenen Kategorien wie Performance, Sicherheit, Metriken etc. Besitzt eine Prüfung Parameter, wird deren Einfluss auf die Ausführung der Prüfung vorgestellt. Zu komplexen Prüfungen finden Sie weitere Details und Hilfestellung bei der Analyse der Meldungen. 235

5 Standardprüfungen des SAP Code Inspectors .................... 235

5.1 Zuverlässigkeit und Relevanz von Prüfungen .......................... 2375.1.1 Zuverlässigkeit ......................................................... 2375.1.2 Laufzeit .................................................................... 238

5.2 Implizite Prüfungen des Code-Inspector-Frameworks ............ 2395.3 Allgemeine Prüfungen ........................................................... 240

5.3.1 Anweisungsstatistik .................................................. 2415.3.2 Tabellennamen aus SELECT-Anweisungen ................ 2435.3.3 Statistik der Tabelleneigenschaften .......................... 2445.3.4 ABAP-Token-Statistik ............................................... 245

5.4 Performanceprüfungen .......................................................... 2465.4.1 Analyse der WHERE-Bedingung für SELECT .............. 2495.4.2 Analyse der WHERE-Bedingung für

UPDATE und DELETE .............................................. 2545.4.3 SELECT-Anweisungen, die am Tabellenpuffer

vorbei lesen ............................................................. 2555.4.4 SELECT-Anweisungen mit anschließendem CHECK.... 2605.4.5 SELECT in Schleifen .................................................. 2625.4.6 Ändernde Datenbankzugriffe in Schleifen ................. 2635.4.7 Geschachtelte Schleifen ........................................... 2645.4.8 Kopieren großer Datenobjekte ................................. 2655.4.9 Inperformante Operationen auf internen Tabellen..... 2665.4.10 Inperformante Parameterübergaben ......................... 2695.4.11 Kopieren der aktuellen Tabellenzeile bei

LOOP AT … ............................................................. 2745.4.12 'EXIT' oder keine Anweisung in

SELECT-ENDSELECT-Schleife ................................... 2765.4.13 Invalidierung des SAP-Tabellenpuffers ...................... 2785.4.14 Verwendung von Indizes in der

SELECT-Anweisung .................................................. 2805.4.15 Instanzerzeugung von BAdIs .................................... 2825.4.16 SELECT INTO CORRESPONDING FIELDS bei

gepufferten Tabellen ................................................ 2845.4.17 Prüfung der Tabelleneigenschaften ........................... 2845.4.18 Performanceprüfungen, die es nicht gibt .................. 294

5.5 Sicherheitsprüfungen ............................................................. 2955.5.1 Kritische Anweisungen ............................................. 2975.5.2 Suche nach bestimmten kritischen Anweisungen

(ab Release 7.0 EHP2) .............................................. 3005.5.3 Dynamische und mandantenabhängige

Zugriffe im SELECT ................................................... 301

IVZ_lang.fm Seite 12 Dienstag, 5. Juli 2011 10:20 10

Inhalt

13

5.5.4 Dynamische und mandantenabhängige Zugriffe mit INSERT, UPDATE, MODIFY, DELETE ................. 303

5.5.5 Prüfung der SY-SUBRC-Behandlung ........................ 3045.5.6 Verwendung der ADBC-Schnittstelle

(ab Release 7.0 EHP2) .............................................. 3075.5.7 Ändernde Datenbankzugriffe außerhalb von

Verbuchungsbausteinen ........................................... 3085.5.8 Mandantenabhängige Shared-Objects-Methoden

(ab Release 7.0 EHP2) .............................................. 3095.5.9 Weitere Prüfmöglichkeiten

zur Programmsicherheit ........................................... 3105.6 Syntaxprüfung/Generierung ................................................... 310

5.6.1 Klassen/Interface-Konsistenz .................................... 3115.6.2 Syntaxprüfung .......................................................... 3125.6.3 Erweiterte Programmprüfung ................................... 3135.6.4 Generieren von ABAP-Programmen ......................... 3165.6.5 Suspekte Konvertierungen ....................................... 317

5.7 Robuste Programmierung (ab Release 7.0 EHP2) ................... 3215.7.1 Suche nach APPEND und INSERT ... INDEX

bei SORTED-Tabellen ............................................... 3225.7.2 Komplexe WHERE-Bedingung in

SELECT-Anweisung .................................................. 3235.7.3 Prüfung der SY-SUBRC-Behandlung ......................... 3265.7.4 Suspekte Konvertierungen ....................................... 3265.7.5 Anmerkungen zu SELECT ... FOR ALL ENTRIES

und READ TABLE ... BINARY SEARCH ...................... 3265.8 Programmierkonventionen .................................................... 327

5.8.1 Namenskonventionen .............................................. 3285.8.2 Erweiterte Namenskonventionen für Programme ...... 3305.8.3 Testkonventionen von ABAP Unit ............................ 333

5.9 Metriken und Statistik ........................................................... 3345.9.1 Metrik der ausführbaren Anweisungen ..................... 3355.9.2 Prozedurale Metrik .................................................. 3375.9.3 Fan-out-strukturelle Metrik ...................................... 3415.9.4 Kommentarsprache-Metrik ...................................... 3425.9.5 OO-Größenmetrik .................................................... 3455.9.6 Anweisungsstatistik .................................................. 3475.9.7 ABAP-Web-Dynpro-Metrik (ab Release 7.0 EHP2).... 3475.9.8 Worthäufigkeit in Kommentaren .............................. 350

5.10 Dynamische Tests .................................................................. 3515.10.1 ABAP Unit ............................................................... 352

IVZ_lang.fm Seite 13 Dienstag, 5. Juli 2011 10:20 10

Inhalt

14

5.11 Oberflächen ........................................................................... 3555.11.1 GUI-Usability-Prüfung .............................................. 3555.11.2 Standardprüfungen für Web Dynpro ........................ 3565.11.3 Web-Dynpro-Programmierkonventionen ................. 3585.11.4 Dynpro-Prüfungen ................................................... 3605.11.5 Dynpro-Generierung ................................................ 3605.11.6 Dynpro-Prüfung auf Usability und Accessibility ......... 361

5.12 Suchfunktionen ..................................................................... 3625.12.1 Suche von ABAP-Token ........................................... 3635.12.2 Suche von ABAP-Anweisungsmustern ...................... 3645.12.3 Suche nach unerwünschten Sprachelementen ........... 3655.12.4 Suche WRITE-Anweisungen ..................................... 3675.12.5 Suche Oracle Rule Hints ........................................... 368

5.13 Anwendungsprüfungen .......................................................... 3705.13.1 HR-Entkopplung: Prüfung der Infotypklassen ............ 370

5.14 Interne Performancetests ....................................................... 3715.14.1 Prüfung SQL-Trace: Analyse der

WHERE-Bedingung für SELECT ................................. 3735.14.2 Prüfung SQL-Trace: Analyse der

WHERE-Bedingung für UPDATE und DELETE............ 3755.14.3 Prüfung SQL-Trace: Zugriffe auf gepufferte

Tabellen ................................................................... 3765.14.4 Prüfung SQL-Trace: Explain für alle

SELECT-Anweisungen .............................................. 3795.15 Interne Tests .......................................................................... 380

5.15.1 Tests zu ENHANCEMENT-SECTION ......................... 3815.15.2 Test zu CL_ABAP_COMPILER ................................... 3825.15.3 Erkennen von totem Coding ..................................... 3825.15.4 Leerer Test ............................................................... 3835.15.5 Überprüfung der Erweiterbarkeit von Tabellen .......... 383

5.16 Proxy-Prüfungen .................................................................... 3845.16.1 Proxy-Prüfungen ...................................................... 385

389

Anhang ...................................................................................... 389

A Konstanten des SAP Code Inspectors ................................................ 391A.1 Inspektionsverarbeitung ........................................................ 391A.2 Pseudokommentare und Genehmigungsverfahren ................. 393A.3 ABAP-Scan-Engine ................................................................ 397

IVZ_lang.fm Seite 14 Dienstag, 5. Juli 2011 10:20 10

Inhalt

15

B Meldungen der SAP-Standardprüfungen ........................................... 405B.1 Allgemeine Prüfungen ........................................................... 407B.2 Performanceprüfungen .......................................................... 410B.3 Sicherheitsprüfungen ............................................................. 418B.4 Syntaxprüfung/Generierung ................................................... 421B.5 Programmierkonventionen .................................................... 423B.6 Metrik und Statistik ............................................................... 428B.7 Dynamische Tests .................................................................. 431B.8 Oberflächen .......................................................................... 435B.9 Suchfunktionen ..................................................................... 440B.10 Anwendungsprüfungen ......................................................... 441B.11 Interne Performancetests ....................................................... 442B.12 Interne Tests ......................................................................... 444B.13 Proxy-Prüfungen .................................................................... 446B.14 Liste der internen Prüfungen ................................................. 446

C Glossar .............................................................................................. 449D Die Autoren ...................................................................................... 453

Index....................................................................................................... 455

IVZ_lang.fm Seite 15 Dienstag, 5. Juli 2011 10:20 10

17

Geleitwort der SAP AG

Bei SAP gibt es seit den Anfängen der ABAP-Programmierung eine Reihe vonWerkzeugen, die Entwicklerinnen und Entwickler dabei unterstützen, effizi-ent zu arbeiten und möglichst fehlerfreien Code zu implementieren. An ers-ter Stelle steht hier der ABAP Editor, der nicht nur den Syntaxcheck anbietet,sondern auch die Übernahme von Aufrufschnittstellen oder Codeauszeich-nung und -strukturierung ermöglicht. Der ABAP Editor ist in ein mächtigesFramework integriert: die ABAP Workbench. Außer vielfältigen Möglichkei-ten für die Navigation zu Entwicklungsobjekten bietet diese unter anderemVerwendungsnachweise, eine Anbindung an das ABAP Dictionary und dieTransport-Workbench sowie die Einbindung von Modellierungstools. DieAnalyse des laufenden Codes wird durch den ABAP Debugger unterstützt;dieser ermöglicht neben den üblichen Funktionen wie der Anzeige von Vari-ablen, Aufrufhierarchien und der Verwaltung von Breakpoints beispiels-weise auch die Analyse des Speicherverbrauchs oder die Ausführung vonSkripten. Als weitere Werkzeuge wären die erweiterte Programmprüfung,die ABAP-Laufzeitanalyse und der Performance-Trace zu nennen.

Im Lauf der Zeit entstand – auch aufgrund des Feedbacks zahlreicher Ent-wickler – die Anforderung, den Quelltext nicht nur bezüglich funktionalerKorrektheit, sondern auch hinsichtlich anderer Produkteigenschaften wiePerformance, Skalierbarkeit, Sicherheit oder Bedienbarkeit prüfen zu kön-nen. Die tägliche Arbeit hatte uns ferner gezeigt, dass ein großer Teil der imlaufenden Betrieb entdeckten Performanceprobleme ähnlichen Musternfolgte. Daraus ergab sich eine Reihe von Ideen für Prüfungen, um »hand-werkliche« Fehler, zum Beispiel beim Zugriff auf Datenbanktabellen, auto-matisch identifizieren zu können.

Zwar gab es bereits Werkzeuge für Untersuchungen von statischen Objekt-definitionen, doch diese erfüllten nicht die von uns gestellten Anforderun-gen – wir wünschten uns für alle Entwickler ein leicht zu bedienendes Tool,das in die Arbeitsumgebung integriert und hinsichtlich der Prüfmenge undder Art der Prüfungen einfach und flexibel konfigurierbar sein sollte. Durchdie Zusammenarbeit der beiden Teams »ABAP Language« und »Performance& Scalability« entstand daraufhin ein neues Werkzeug, der SAP Code Inspec-tor. Innerhalb kurzer Zeit wurde ein umfassendes Framework für die Konfi-

1706-4.book Seite 17 Montag, 4. Juli 2011 3:19 15

Geleitwort der SAP AG

18

guration von Objektmengen und Prüfungen sowie für die Ausführung vonInspektionen in Einzel- und Massentests entwickelt. Der Code Inspectorwurde in die Entwicklungs- und in die Transport-Workbench integriert,sodass die Prüfungen den Entwicklern stets direkt zur Verfügung stehen.

Zu den weiteren Vorteilen dieser engen Integration in die Entwicklungsum-gebung zählt, dass nicht nur statische ABAP-Quelltexte analysiert werdenkönnen, sondern auch Zugriffsmöglichkeiten auf das ABAP Dictionary oderauf die Symboltabellen des ABAP-Compilers bestehen. Dadurch können dieMetadaten der Entwicklungsumgebung und der ABAP-Kompilation zurAnreicherung von Prüfungen herangezogen werden. Das Code-Inspector-Framework hat sich als so flexibel erwiesen, dass damit sogar SQL-Tracesoder andere Objekte, die sich nicht im Objekt-Repository befinden, unter-sucht werden können.

Da das Code-Inspector-Framework durch seine offene Architektur einfacherweiterbar ist, kamen im Lauf der Zeit Prüfungen von verschiedenen Auto-ren hinzu, oft angeregt durch Anfragen von Benutzern. Für besondersbemerkenswert halten wir die Erweiterungen des Code Inspectors durchKunden oder Partner, beispielsweise durch eigene Prüfungen zu speziellenProgrammierrichtlinien oder – wie hier im Buch beschrieben – durch denAufruf des Code Inspectors aus einem BAdI in der Transport-Workbench.Dies zeigt uns, dass das Werkzeug Code Inspector akzeptiert und genutztwird und zu einem wichtigen Bestandteil des Softwareerstellungsprozessesgeworden ist.

Dieses Buch wurde für Sie als SAP-Anwender geschrieben, um Ihnen zu hel-fen, die Qualität Ihres selbst entwickelten ABAP-Codes zu überprüfen und zuverbessern. Das Autorenteam besteht aus zwei Mitarbeitern des SAP-Part-ners inconso AG und einem der Entwickler des Code Inspectors. Wir sinddavon überzeugt, dass durch diese Zusammenarbeit ein echtes Praxishand-buch entstanden ist, das Ihnen viele wichtige Tipps für die Arbeit mit demCode Inspector bietet. Das Streben nach einer hohen Softwarequalität ver-bindet alle engagierten Entwickler, und wir hoffen, dass dieses Buch und derCode Inspector Sie dabei unterstützen werden.

Dr. Andreas Simon Schmitt Dr. Ulrich MarquardDevelopment Architect, SAP AG Senior Vice President, SAP AGTIP Core ABAP Platform & VM Tech (AG) Performance & Scalability

1706-4.book Seite 18 Montag, 4. Juli 2011 3:19 15

19

Geleitwort der inconso AG

Vorbei sind die Zeiten, in denen Softwareentwicklung das Werk eigenbröt-lerischer Genies oder »Programmierkünstler« war. Schon lange hat sich dieSoftwareherstellung zu einem mehr und mehr ingenieurartig durchgeführ-ten Prozess entwickelt. In Zeiten wachsender Komplexität der Systeme, imUmfeld serviceorientierter Ansätze und verteilter Systeme gewinnt dieseingenieurartige Herangehensweise mehr und mehr an Bedeutung.

Dies gilt umso mehr, da Softwareentwicklung heute häufig »verteilt« stattfin-det. Systeme werden von möglicherweise rund um die Welt verteiltenTeams gemeinsam entwickelt. Und ist der Entwicklungsprozess einmal abge-schlossen, muss die Wartung und Pflege der Systeme unter gleichen Bedin-gungen gegebenenfalls von Dritten zuverlässig möglich sein. Dies alles stellthöchste Anforderungen an die Qualität, Fehlerfreiheit, Dokumentation unddamit auch an die Wartbarkeit der Systeme.

Nun sind aber trotz aller Professionalität des Entwicklungsprozesses, trotzumfangreich vorhandener Programmierrichtlinien, Dokumentationsvor-gaben, Styleguides etc. letztlich Menschen am Werk. Menschen, die mithohem Sachverstand, technologischem Know-how und eigener KreativitätLösungen für komplexe Prozesse in Sourcecode gießen. Die dabei ihre Indi-vidualität einbringen; und wo sich zum Beispiel bei hohem Projektdruckauch Fehler, Nichtachtung von Richtlinien, Standards oder Dokumentations-vorgaben einschleichen. Die zunehmende Mächtigkeit und Komplexität dereingesetzten Technologien und Werkzeuge erhöht dieses Risiko zusätzlich.Es ist daher von dramatisch zunehmender Bedeutung, im gesamten Soft-wareherstellungsprozess sicherzustellen, dass die Qualitätsstandards undProgrammierrichtlinien, die Dokumentationserfordernisse und Vorgabenzuverlässig und durchgängig eingehalten werden.

Sicherstellen heißt in diesem Zusammenhang, dass neben der klaren Defini-tion der Vorgaben und Richtlinien deren Einhaltung tatsächlich im Projekt-verlauf kontinuierlich geprüft und kontrolliert werden muss. Dies ist inumfangreichen Entwicklungsprojekten ohne technische Hilfsmittel nichtmehr wirtschaftlich möglich.

1706-4.book Seite 19 Montag, 4. Juli 2011 3:19 15

Geleitwort der inconso AG

20

Ein solches Hilfsmittel zur Qualitätssicherung stellt der SAP Code Inspectordar. Nun ist die Verfügbarkeit eines mächtigen Werkzeugs allein natürlichnoch nicht die Lösung aller Probleme. Es bedarf einer auf den jeweiligen Ein-satzzweck hin ausgerichteten »Bedienungsanleitung«, die es erleichtert, dasWerkzeug effektiv zum Einsatz zu bringen. Und die praktische Erfahrungenberücksichtigt und einfließen lässt.

Frank Ruggaber und Reinhard Schilcher haben auf Basis ihrer langjährigenErfahrung in umfangreichen Softwareentwicklungsprojekten bei der inconsoAG zusammen mit Dr. Randolf Eilenberger, Mitentwickler des SAP CodeInspectors bei der SAP AG, mit dem vorliegenden Buch eine praxisorien-tierte Anleitung zum Einsatz des SAP Code Inspectors im Umfeld der ABAP-Entwicklung erstellt.

Ich freue mich, Ihnen mit diesem Buch ein Hilfsmittel an die Hand geben zukönnen, mit dem Sie von diesen Erfahrungen profitieren können und das Siebei der Erstellung von Software mit höchster Codequalität unterstützt.

Bertram SalzingerVorstandsvorsitzender der inconso AG

1706-4.book Seite 20 Montag, 4. Juli 2011 3:19 15

21

Einleitung

Sicherlich haben Sie es selbst auch schon erlebt: Ob im Internet, in Fachzeit-schriften oder im Buchhandel, bis auf ein paar kurze Artikel zu einfachenInspektionseinstellungen und zu einigen Prüfungen im SAP Code Inspectorsind zu diesem Thema keine genaueren Informationen zu finden. Uns, FrankRuggaber und Reinhard Schilcher, erging es ebenfalls so, als wir für diverseKundenprojekte nähere Informationen zum Code Inspector suchten.Obwohl wir bereits in früheren Projekten etliche Code-Inspector-Standard-prüfungen ausgiebig verwendet hatten, gab es einige Bereiche, wie zum Bei-spiel die Erstellung eigener Prüfungen, die automatisierte Prüfung bei derTransportfreigabe oder das genaue Wissen um die Einsatzmöglichkeitenbestimmter SAP-Standardprüfungen, die wir uns erst im Lauf der Zeit erar-beiten mussten. Nach mehreren Kundenprojekten hatten wir durch Code-analyse und Debugging bereits so viel an Informationen zusammengetragenund in firmeneigenen Dokumentationen niedergeschrieben, dass allmählichdie Idee reifte, dieses umfangreiche Wissen zu einem so wichtigen Themaauch anderen zugänglich zu machen. Und so haben wir im April 2010beschlossen, ein umfassendes Buch zum SAP Code Inspector zu veröffent-lichen.

Um bei diesem Thema auch fachlich eine möglichst kompetente Unterstüt-zung zu erhalten, haben wir bei SAP einen der drei Entwickler des SAP CodeInspectors, Dr. Randolf Eilenberger, um seine Mitwirkung bei unseremBuchprojekt gebeten. Er erklärte sich sofort bereit, uns beim Schreiben desBuches tatkräftig zu unterstützen.

Ein Fachbuch zu einem SAP-Thema, da gibt es nur einen Verlag, der dafürinfrage kommt, nämlich SAP PRESS. Schon bei der ersten Kontaktaufnahmezeigte Stefan Proksch aufseiten des Lektorats ein reges Interesse an einerVeröffentlichung dieses wichtigen Themas und riet uns, das Werk als Praxis-handbuch zu schreiben.

Zielsetzung

Das Ergebnis liegt nun vor Ihnen: Mit diesem Buch halten Sie ein umfassen-des Werk zum Thema SAP Code Inspector in Ihren Händen. Dieses Buch

1706-4.book Seite 21 Montag, 4. Juli 2011 3:19 15

Einleitung

22

behandelt eines der, unserer Meinung nach, wichtigsten Werkzeuge zurQualitätssicherung in der Entwicklung. Die Konstellation der Autoren sorgtdafür, dass zum einen extrem wichtiges Hintergrundwissen und zum ande-ren praxisnahe Erfahrungen aus dem täglichen Projekteinsatz in das Buchmit eingeflossen sind. Im ersten Teil (Kapitel 1 bis 4) finden Sie eine Schritt-für-Schritt-Anleitung zum Einsatz des SAP Code Inspectors als Werkzeugeiner automatisierten Qualitätssicherung. Im zweiten Teil (Kapitel 5) findenSie für den täglichen Gebrauch eine umfassende Referenz aller mit dem SAPCode Inspector ausgelieferten Prüfungen. Und im Gegensatz zu vielenanderen brandneuen Themen können Sie sicher sein, dass dieses Werkzeugauf Ihrem SAP-System inzwischen ausgereift zur Verfügung steht. Denn derSAP Code Inspector wurde bereits mit dem SAP Web Application Server6.10 ausgeliefert (siehe Abschnitt »Systemvoraussetzungen« in dieser Ein-leitung).

Ein weiterer Vorteil dieses Werkzeuges besteht darin, dass Sie es bereits zuAnfang einer Entwicklungsphase einsetzen können. Denn die Erfahrung ausder Praxis zeigt, je früher Werkzeuge zur Qualitätssicherung in der Entwick-lungsphase eingesetzt werden, desto effizienter wird der Entwicklungs-prozess an sich. Letztendlich können dadurch aufwendige Nacharbeiten ver-mieden werden. Außerdem unterstützt ein automatisierter Einsatz vonWerkzeugen zur Qualitätssicherung die Entwickler bei der Einhaltung vonEntwicklungsstandards, was wiederum bei der Wartung und bei späterenProgrammerweiterungen bares Geld und Entwicklernerven sparen hilft.

Wir möchten Ihnen dies an einem Beispielszenario verdeutlichen, wie es inden meisten SAP-Projekten tagtägliche Praxis ist: Auf einem SAP-System ent-wickeln verschiedene Gruppen die unterschiedlichsten Anwendungen. Hier-bei gibt es Entwickler aus dem eigenen Unternehmen sowie externe Ent-wickler von verschiedenen Partnern. In diesem Unternehmen existierenEntwicklungsrichtlinien, in denen zum Beispiel Architekturvorgaben,Namenskonventionen und andere Vorgaben zur SAP-Entwicklung festgehal-ten sind. Nun soll sichergestellt werden, dass die definierten Entwicklungs-richtlinien von allen beteiligten Entwicklern eingehalten werden. Außerdemsollen alle Entwicklungen, bevor sie das Entwicklungssystem verlassen, aufAspekte wie Sicherheit, Performance und Robustheit hin geprüft werden,um dadurch das Produktivsystem zu schützen. Im Rahmen dieses Szenariosgibt es verschiedene Gruppen, die den SAP Code Inspector als Werkzeug zurQualitätssicherung in der Entwicklung nutzen können. Genau für diesehaben wir dieses Buch geschrieben.

1706-4.book Seite 22 Montag, 4. Juli 2011 3:19 15

Einleitung

23

Zielgruppen

An einem typischen SAP-Projekt mit kundeneigenen Entwicklungen sindnormalerweise zwei verschiedene Gruppen mit unterschiedlichen Betrach-tungsweisen beteiligt:

� zum einen die Gruppe der Berater und Entwickler, die die vorgegebenenQualitätsstandards erfüllen sollen

� zum anderen die Gruppe der SAP-Kunden, die die Entwicklungen der ver-schiedenen Berater und Entwickler auf Einhaltung der Qualitätsstandardshin prüfen möchten

An beide Lesergruppen wendet sich unser Buch. An einer SAP-Entwicklungkönnen hierbei folgende Rollen beteiligt sein:

� Qualitätsmanager überprüfen die realisierten SAP-Entwicklungen auf dieEinhaltung von Qualitätsstandards hin, die zum Beispiel in Form von Ent-wicklungsrichtlinien definiert wurden. Denn letztendlich sollten Entwick-lungsrichtlinien kein reiner Selbstzweck sein, sondern dazu dienen, eineperformante, wartungsfähige, robuste und sichere Software entwickeln zuhelfen. Sollten in Ihrem Unternehmen noch keine Entwicklungsricht-linien für die SAP-Entwicklung vorhanden sein, bietet das Buch ABAP-Programmierrichtlinien (SAP PRESS, 2009) einen guten Ausgangspunkt.

� Projektleiter müssen sich im Verlauf eines Projektes immer einen Über-blick über den aktuellen Stand der Entwicklungen verschaffen können.Hierbei stehen zum Beispiel folgende Fragestellungen im Vordergrund:

� Wie viel des gesamten Entwicklungsumfangs wurde bereits program-miert?

� Gibt es besonders inperformante oder sicherheitskritische Entwick-lungen?

� Werden die definierten Qualitätsstandards auch eingehalten?

Der Code Inspector ist das richtige Werkzeug, um all diese Fragen, undnoch mehr, beantworten zu können.

� Entwickler sollen die vorgegebenen Entwicklungsstandards einhalten unddefinierte Best Practices beachten, um bereits von Anfang an Fehler imCoding zu vermeiden. Sie benötigen ein Werkzeug, das möglichst durch-gängig und vollständig in ihre Entwicklungsumgebung integriert ist unddessen Benutzung so wenig Mehraufwand wie möglich erzeugt. Bei derEntwicklung des Code Inspectors durch SAP stand die Rolle des Entwick-lers als Hauptanwender des Werkzeugs im Vordergrund.

1706-4.book Seite 23 Montag, 4. Juli 2011 3:19 15

Einleitung

24

� Administratoren müssen die Infrastruktur rund um die Werkzeuge zurQualitätssicherung bereitstellen und konfigurieren. Ihr Ziel ist letztend-lich, besonders das Produktivsystem gegen alle negativen Auswirkungenvon neuen Entwicklungen zu schützen. Aspekte wie Sicherheit, Perfor-mance und Robustheit der Software stehen hierbei im Vordergrund.

Inhalt und Aufbau

Der SAP Code Inspector ist ein Werkzeug der Qualitätssicherung in der Ent-wicklung, das von den beschriebenen Zielgruppen, die an diesem Prozessbeteiligt sind, hervorragend eingesetzt werden kann. Der Inhalt diesesBuches ist dabei so gegliedert, dass für jede der Zielgruppen der jeweiligeEinstieg in die Nutzung des SAP Code Inspectors mit all seinen Facettenleicht nachvollzogen werden kann.

Das Buch wird von Kapitel zu Kapitel technisch immer anspruchsvoller unddas vorausgesetzte Wissen rund um die SAP-Systemwelt wird dabei immergrößer. Eine Ausnahme hiervon bildet das Kapitel 5, das sich als Referenz fürden täglichen Gebrauch an alle Zielgruppen richtet.

� In Kapitel 1, »Einsatz des SAP Code Inspectors«, finden Sie neben einerEinordnung des SAP Code Inspectors in die wichtigsten Testwerkzeugevon SAP eine Schritt-für-Schritt Anleitung für dessen Verwendung. Durchdie Abbildung zahlreicher Screenshots können Sie den Inhalt dieses Kapi-tels auch ohne direkten Systemzugang unterwegs nachvollziehen. Mit demWissen aus Kapitel 1 sind Sie in der Lage, Inspektionen gemäß Ihren Wün-schen zusammenzustellen und ausführen zu lassen.

� Kapitel 2, »Konfiguration und Funktionen des SAP Code Inspectors«, lie-fert Ihnen verschiedene weiterführende Themen und Werkzeuge rundum den SAP Code Inspector. Administratoren finden hier zum Beispieleinige interessante Einstellmöglichkeiten des SAP Code Inspectors. Darü-ber hinaus wird in diesem Kapitel näher auf die Benutzung von Objektkol-lektoren eingegangen und die verschiedenen Möglichkeiten zur Unter-drückung von Prüfungsmeldungen werden beschrieben. Ein Aspekt, derinsbesondere auch bei größeren Teams zum Einsatz kommen kann, ist dasVersenden der Prüfergebnisse per E-Mail.

� In Kapitel 3, »Automatisierte Prüfungen mit dem SAP Code Inspector«,wenden wir uns dann einem sehr wichtigen Themenblock zu, nämlichdem automatisierten Einsatz des SAP Code Inspectors. Als Vorkenntnissefür dieses Kapitel sollten Sie über ein grundlegendes Verständnis der SAP-Jobsteuerung sowie des SAP-Transportwesens verfügen. Um das in

1706-4.book Seite 24 Montag, 4. Juli 2011 3:19 15

Einleitung

25

Abschnitt 3.4, »Objektprüfungen bei Aufgabenfreigabe«, behandelte Bei-spiel nachvollziehen zu können, sollten Sie sich in der ABAP-Entwicklunggut auskennen. Am Ende des Kapitels zeigen wir Ihnen noch Erfahrungenaus der Praxis, die Ihnen dabei helfen, einen automatisierten Einsatz desCode Inspectors in Ihrem Umfeld zu realisieren.

� Kapitel 4, »Programmierung eigener Prüfungen für den SAP Code Inspec-tor«, enthält die wichtigsten Informationen, um eine eigene Code-Inspec-tor-Prüfung zu entwickeln, sofern Ihnen die von SAP zusammen mit demCode Inspector ausgelieferten Standardprüfungen nicht ausreichen. Die-ses Kapitel richtet sich an erfahrene Entwickler, die kundeneigene Code-Inspector-Prüfungen programmieren möchten. Es zeigt den Weg zum Ein-bau einer eigenen Prüfung in den SAP Code Inspector und liefert eineBeschreibung zu den Tabellen der Scan-Engine, die in einer eigenen Prü-fung als Datengrundlage verwendet werden können. Kapitel 4 hat daheraus Sicht der Entwicklung eher einen Referenzcharakter.

� In Kapitel 5, »Standardprüfungen des SAP Code Inspectors«, beschreibenwir alle von SAP in Release 7.0 des SAP NetWeaver Application Serverszusammen mit dem Code Inspector ausgelieferten Standardprüfungen.Hierbei gehen wir auf die möglichen Prüfungsparameter und die erzeugtenMeldungen näher ein und liefern wichtige Zusatzinformationen, die fürdas entsprechende Umfeld relevant sind. Für den praktischen Gebrauchbewerten wir die Prüfungen nach ihrer Praxisrelevanz und geben Ihnen beijeder Prüfung Empfehlungen für ihren Einsatz. Kapitel 5 ist eine Referenzfür den täglichen Umgang mit den Code-Inspector-Standardprüfungen. Essoll Ihnen insbesondere dabei helfen, die für Sie passenden Prüfungen zuidentifizieren und diese mit den jeweils richtigen Einstellungen für dieQualitätssicherung zu nutzen.

� In Anhang A, »Konstanten des SAP Code Inspectors«, finden Sie allge-meine Referenzen zu verschiedenen Bereichen des Code Inspectors.Anhang B, »Meldungen der SAP-Standardprüfungen«, listet die Meldun-gen der Code-Inspector-Standardprüfungen auf. Wichtige Begriffe, die imRahmen dieses Buches genannt, aber im jeweiligen Text nicht nähererklärt werden, sind in Anhang C, »Glossar«, beschrieben.

Systemvoraussetzungen

Der SAP Code Inspector wurde ursprünglich mit dem SAP Web ApplicationServer zu Release 6.10 SP22 eingeführt. Viele Prüfungen des SAP CodeInspectors wurden aber erst mit dem Release 6.20 ausgeliefert.

1706-4.book Seite 25 Montag, 4. Juli 2011 3:19 15

Einleitung

26

In diesem Buch wird der Stand basierend auf Release 7.0 EHP1 SP7 beschrie-ben. Nach dem Release 6.20 sind nur vereinzelt Prüfungen hinzugekommen,sodass Sie auch auf einem SAP-System mit einem Release-Stand 6.20 die meis-ten der in diesem Buch aufgeführten Beispiele nachvollziehen können sollten.Wenn Sie noch auf Release 6.10 arbeiten, können Sie mithilfe des SAP-Hin-weises 543359, »Code Inspector für SAP R/3 Release 4.6C«, die in Release6.20 verfügbaren Code-Inspector-Prüfungen in Release 6.10 einspielen.

Beispiele zu diesem Buch

Alle Beispiele zu diesem Buch sind im Paket Z_SCI_BOOK zusammengefasst.Dieses Paket mit sämtlichen Entwicklungsobjekten finden Sie in Form vonTransportdateien auf der Bonus-Seite zu diesem Buch. Den Link zur Bonus-Seite finden Sie unter http://www.sap-press.de/2525. Alternativ können Sieauch unter http://www.sap-press.de/bonus-seite den vorne im Buch abge-druckten Zugangscode eingeben.

Diese Beispiele wurden unter Release 7.0 EHP1 entwickelt, sind aber ent-sprechend abwärtskompatibel. Eine Ausnahme hiervon bildet unsere Bei-spielimplementierung einer eigenen Prüfung, die an einer Stelle mit regu-lären Ausdrücken arbeitet, die erst ab Release 7.0 des SAP NetWeaverApplication Servers zur Verfügung stehen.

Zusatzinformationen

Wichtige Hinweise und Zusatzinformationen werden in Form von grau hin-terlegten Kästen gesondert hervorgehoben. Diese Kästen haben unterschied-liche Schwerpunkte und sind mit verschiedenen Symbolen markiert:

� Achtung: Seien Sie bei der Durchführung der Aufgabe oder des Schrittesbesonders vorsichtig, der mit einem Ausrufezeichen markiert ist. EineErklärung, warum hier Vorsicht geboten ist, ist beigefügt.

� Empfehlung: Nützliche Tipps und Shortcuts, die Ihnen die Arbeit erleich-tern, sind mit einem Sternchen gekennzeichnet. Hierunter fallen auchErfahrungswerte, die wir in der Anwendung des Code Inspectors gesam-melt haben.

� Hinweis: Wird das besprochene Thema erläutert und vertieft, macht einPluszeichen Sie darauf aufmerksam.

1706-4.book Seite 26 Montag, 4. Juli 2011 3:19 15

Einleitung

27

Danksagung

Wir bedanken uns bei allen, die an der Entstehung dieses Buches mitgewirkthaben.

Besonderes möchten Frank Ruggaber und Reinhard Schilcher ihrem Arbeit-geber, der Firma inconso AG, dafür danken, dass sie dieses Projekt realisie-ren durften. Namentlich erwähnt seien insbesondere Bettina Haug-Weber,Bertram Salzinger, Robin Rösinger, Alberto Medde, Pietro Cimino, FriedgardWetzel, Britta Lubitz, Patric Mansfeld und Nikola Ruggaber.

Randolf Eilenberger dankt für das Lesen des Manuskriptes besonders Her-mann Gahm und Andreas Simon Schmitt. Letzterem gebührt zusammen mitDana Stegaru auch der Dank für die lehrreiche und interessante Zeit währendder Entwicklung des SAP Code Inspectors. Viele Kolleginnen und Kollegenaus dem Performanceteam haben mit Ideen und Diskussionen zu den einzel-nen Prüfungen beigetragen, stellvertretend erwähnt sei hier Siegfried Boes.

Bei Galileo Press danken wir insbesondere Florian Zimniak und StefanProksch für das uns entgegengebrachte Vertrauen und die professionelleUnterstützung. Zudem danken wir Osseline Fenner für die sprachliche Kor-rektur des Manuskripts sowie Maxi Beithe für die Herstellung dieses Buches.

Die Autoren möchten außerdem ihren Familien danken.

Dr. Randolf EilenbergerEntwickler, Performance & Scalability, SAP AG

Frank RuggaberSeniorberater, SAP Integration, inconso AG

Reinhard SchilcherBerater, SAP Integration, inconso AG

1706-4.book Seite 27 Montag, 4. Juli 2011 3:19 15

67

In diesem Kapitel erhalten Sie weitere Informationen zur Nutzung des SAP Code Inspectors. Hierbei gehen wir auf die Konfiguration, auf weitere Details zu den Objektkollektoren, den Pseudokommenta-ren, dem Genehmigungsverfahren und auf verschiedene Tools zum SAP Code Inspector ein.

2 Konfiguration und Funktionen des SAP Code Inspectors

Nachdem Sie den SAP Code Inspector in seinen Grundzügen kennengelernthaben, besprechen wir in diesem Kapitel weiterführende Aspekte. Zu Beginnbeschreiben wir den Verwaltungsbereich mit seinen Einstellmöglichkeitenzur Prüfvariante, zur Objektmenge und zur Meldungspriorität, gehen danngenauer auf die Objektkollektoren ein, die wir in Kapitel 1, »Einsatz des SAPCode Inspectors«, bereits erwähnt haben, machen Sie danach mit den Pseu-dokommentaren und dem Genehmigungsverfahren vertraut und liefernIhnen Informationen zum Vergleich von Inspektionsergebnissen und zum E-Mail-Versand. Abgerundet wird das Kapitel schließlich mit einer Beschrei-bung des Code-Inspector-Hintergrundjobs.

2.1 Einstellmöglichkeiten des SAP Code Inspectors

In diesem Abschnitt zeigen wir Ihnen die allgemeinen Einstellmöglichkeitendes Code Inspectors. Hierbei geht es nicht darum, Einstellungen für einekonkrete Inspektion vorzunehmen, wie wir sie bereits in Kapitel 1 beschrie-ben haben, sondern um generelle Einstellungen, die für alle Code-Inspector-Prüfvarianten und -Inspektionen gelten.

Im Wesentlichen verbergen sich die Einstellmöglichkeiten des Code Inspec-tors unter dem Menüpunkt Springen � Verwaltung von, der direkt in Trans-aktion SCI zu erreichen ist (siehe Abbildung 2.1). Um die jeweiligen Einstell-möglichkeiten anzupassen, benötigen Sie das Berechtigungsobjekt s_cov_adm

1706-4.book Seite 67 Montag, 4. Juli 2011 3:19 15

Konfiguration und Funktionen des SAP Code Inspectors2

68

mit dem Berechtigungsfeld actvt = '37'. Um die entsprechende Berechti-gung zu erhalten, fragen Sie am besten Ihren SAP-Basis-Administrator.

Abbildung 2.1 Einstellmöglichkeiten des Code Inspectors

2.1.1 Verwaltung von Tests

Über den Menüpunkt Springen � Verwaltung von � Tests können Sie fest-legen, welche Prüfungen (= Tests) bei der Anlage einer Code-Inspector-Prüf-variante im Prüfungsauswahlbaum (siehe Kapitel 1, »Einsatz des SAP CodeInspectors«) überhaupt angezeigt werden sollen.

Alle Prüfungen und deren Prüfkategorien sind mit dem Namen der Klasse, inder die Code-Inspector-Prüfung bzw. die Prüfkategorie realisiert wurde,einer kurzen Beschreibung und dem dafür Verantwortlichen (= erstellenderEntwickler der Klasse) in einer Liste aufgeführt (siehe Abbildung 2.2). Überden Klassennamen können Sie feststellen, ob es sich um eine Prüfkategorieoder eine Prüfung handelt. Testkategorien haben in der Regel den Bezeich-ner CATEGORY im Namen und Prüfungen den Bezeichner TEST. Die SpalteBeschreib. enthält die Bezeichnung aus der Hierarchie der Prüfvarianten(siehe Abschnitt 1.2.2).

1706-4.book Seite 68 Montag, 4. Juli 2011 3:19 15

Einstellmöglichkeiten des SAP Code Inspectors 2.1

69

Abbildung 2.2 Verwaltung von Tests vor SAP NetWeaver 7.0 EHP2

Eine Dokumentation, sofern vorhanden, zur entsprechenden Klasse könnenSie über Transaktion SE61 (Dokumentenpflege) finden, indem Sie dort imFeld Dokumentenklasse den Wert Klassen-Attribut auswählen, im FeldKlassen-Attribut den Namen der Klasse aus der Verwaltungsliste (sieheAbbildung 2.2) sowie im Feld darunter den Wert 0000 eintragen und dannauf den Anzeigen-Button ( ) klicken (siehe Abbildung 2.3).

Abbildung 2.3 Dokumentation zu den Code-Inspector-Prüfungen

1706-4.book Seite 69 Montag, 4. Juli 2011 3:19 15

Konfiguration und Funktionen des SAP Code Inspectors2

70

In SAP NetWeaver 7.0 EHP2 wurde die Liste der Prüfungen um zwei Spaltenerweitert, sodass Sie nun wesentlich einfacher zur Dokumentation der Klassegelangen: Mit einem Doppelklick auf das Info-Symbol ( ) in der Liste der Prü-fungen erhalten Sie, soweit vorhanden, direkt die dazugehörige Dokumentation(siehe Abbildung 2.4). Über die zweite hinzugekommene Spalte können Sie nunschnell erkennen, welcher Prüfkategorie eine Prüfung zugeordnet ist.

Abbildung 2.4 Verwaltung von Tests ab SAP NetWeaver 7.0 EHP2

Durch einen Doppelklick auf den Namen der Klasse wird der SAP Class Buil-der mit der entsprechenden Klasse geöffnet, und Sie können sich den Source-code direkt anschauen. Durch Anklicken der Spaltenköpfe können Sie dieeinzelnen Spalten markieren, die Sie dann über die Sortier-Buttons ( ,

) sortieren oder über den Filter-Button ( ) filtern können.

Doch nun zum eigentlichen Sinn der Liste der Code-Inspector-Prüfungen:Durch das Aktivieren bzw. Deaktivieren der Checkbox vor der jeweiligenZeile in der Ausgabeliste können Sie die Prüfung bzw. die Prüfkategorie imAuswahlbaum der Prüfvarianten (siehe Abschnitt 1.2.2) sichtbar oderunsichtbar schalten. Nachdem Sie alle Einträge wie gewünscht eingestellthaben, müssen Sie Ihre Änderung durch den Speichern-Button ( ) in derButton-Leiste sichern. Beim erstmaligen Speichern mit Ihrem Benutzer-namen werden Sie nach einem Customizing-Transportauftrag gefragt, unterdem Sie die Änderungen sichern möchten. Über diesen Transportauftragkönnen Sie dann die Einstellungen mittels des SAP-Transportwesens aufweitere SAP-Systeme verteilen.

1706-4.book Seite 70 Montag, 4. Juli 2011 3:19 15

Einstellmöglichkeiten des SAP Code Inspectors 2.1

71

Vorsicht ist allerdings beim Deaktivieren von Prüfkategorien geboten, denennoch aktive Code-Inspector-Prüfungen zugeordnet sind. Wenn Sie eine solchePrüfkategorie deaktivieren und zugehörige Prüfungen noch aktiviert sind,erhalten Sie bei Anlage einer Prüfvariante die folgende Fehlermeldung: »Ungül-tige Kategorie-Klasse … in der Prüfvariante«. Nach Bestätigung der Fehlermel-dung bricht die Code-Inspector-Transaktion ab. Ab Release 7.0 EHP2 erscheintin der Verwaltungsliste der Prüfungen bei einer Prüfung das Warn-Symbol( ), falls die dazugehörige Prüfkategorie nicht existiert oder ausgeschaltet ist.

2.1.2 Verwaltung von Objektkollektoren

In der Verwaltung der Objektkollektoren (siehe Kapitel 1, »Einsatz des SAPCode Inspectors«) können Sie die Objektkollektoren markieren, die in derWertehilfe zum Feld Objektkollektor in der Objektmenge angezeigt wer-den sollen (siehe Abschnitt 2.2). Über das Menü Springen � Verwaltung

von � Objektkollektoren in Transaktion SCI gelangen Sie zur Einstellungder Objektkollektoren.

Die Vorgehensweise bei der Verwaltung der Objektkollektoren ist weitge-hend identisch mit der Verwaltung der Tests, wie sie in Abschnitt 2.1.1beschrieben wurde. Wie Sie anhand von Abbildung 2.5 sehen können,befindet sich in der Spalte Objektkollektor der Name der ABAP-Klasse, inder der Objektkollektor implementiert wurde. Über einen Doppelklick aufden Klassennamen wird die Klasse im SAP Class Builder geöffnet, und Siekönnen den dazugehörigen Sourcecode betrachten. Der Text in der SpalteObjektkollektorbeschreibung entspricht dem Text aus der Wertehilfe zumFeld Objektkollektor in Abschnitt 2.2.

Empfehlung

Bei der Verwaltung von Tests (= Prüfungen) sollten Sie besondere Vorsicht bei derDeaktivierung von Prüfkategorien walten lassen. Denn von dieser Prüfkategorieabhängige, eingeschaltete Prüfungen können zum Abbruch des Code Inspectorsbei der Prüfvariantenauswahl führen. Daher sollten Sie die vorgenommenen Ände-rungen immer sofort durch die Anlage einer entsprechenden Prüfvariante (sieheAbschnitt 1.2.2) verifizieren.

Ab Release 7.0 EHP2 können Sie von Prüfkategorien abhängige Prüfeinträge schonin der Verwaltungsliste der Tests (= Prüfungen) einfach über einen Vergleich derSpalte Prüfungs-Kategorie bei Prüfungen mit der Spalte Beschreib. bei Prüfkatego-rien ermitteln.

Darüber hinaus sollten bestimmte Prüfungen und Prüfkategorien nicht markiertwerden. Mehr dazu finden Sie in Kapitel 5, »Standardprüfungen des SAP CodeInspectors«.

1706-4.book Seite 71 Montag, 4. Juli 2011 3:19 15

Konfiguration und Funktionen des SAP Code Inspectors2

72

Abbildung 2.5 Verwaltung von Objektkollektoren vor Release 7.0 EHP2

Wie bei der Verwaltung von Tests ist auch die Dokumentation zum Objekt-kollektor in Transaktion SE61 über den Namen der Klasse erreichbar (sieheauch Abbildung 2.3). Und ebenso wie bei der Verwaltung der Tests ist dieListe zur Verwaltung der Objektkollektoren ab Release 7.0 EHP2 um eineweitere Spalte mit einem direkten Link zur Dokumentation über den Info-Button ( ) erweitert worden (siehe Abbildung 2.6).

Abbildung 2.6 Verwaltung von Objektkollektoren ab Release 7.0 EHP2

Durch Aktivieren bzw. Deaktivieren der Checkbox vor dem Namen derABAP-Klasse in der jeweiligen Zeile der Verwaltungsliste kann der Objekt-kollektor in der Wertehilfe für die Objektkollektoren sichtbar oder unsicht-bar gemacht werden. Änderungen müssen ebenso wie bei der Verwaltungvon Tests über den Speichern-Button ( ) in der Button-Leiste gespeichertund einem Customizing-Transportauftrag zugeordnet werden.

Eine Beschreibung der einzelnen Objektkollektoren finden Sie in Abschnitt2.2.

1706-4.book Seite 72 Montag, 4. Juli 2011 3:19 15

Einstellmöglichkeiten des SAP Code Inspectors 2.1

73

2.1.3 Verwaltung von Meldungsprioritäten

Im Zusammenhang mit dem Ergebnis einer Inspektion haben wir bereits inKapitel 1, »Einsatz des SAP Code Inspectors«, die verschiedenen Meldungs-typen des Code Inspectors beschrieben (siehe auch Abbildung 2.7). Je nachzugeordnetem Meldungstyp erscheinen Problemfälle, die durch die jewei-lige Code-Inspector-Prüfung in den zu prüfenden Objekten festgestellt wer-den, in den entsprechenden Spalten (Fehler, Warnung oder Information) desErgebnisses der Inspektion (siehe Kapitel 1).

Abbildung 2.7 Meldungstypen des Code Inspectors

In der Praxis kann es in bestimmten Fällen sinnvoll sein, die Meldungstypender verschiedenen Code-Inspector-Prüfungen anzupassen. Ein Beispiel hier-für könnte die Prüfung auf sequenzielles Lesen aus internen Tabellen vomTyp STANDARD TABLE sein, die Sie von Fehler auf Warnung umstellen möch-ten. Dies können Sie über den Menüeintrag Springen � Verwaltung von �Meldungsprioritäten aus der Transaktion SCI heraus tun. Einen Ausschnittdes entsprechenden Dialogs sehen Sie in Abbildung 2.8.

Die in der Verwaltung von Tests sichtbar geschalteten Prüfungen (sieheAbschnitt 2.1.1) werden in der Einstellung der Meldungsprioritäten eben-falls in hierarchischer Form angezeigt (siehe Abbildung 2.8). Da die Prüfun-gen meist Teilprüfungen enthalten, gibt es somit oft auch mehr als nur eineeinzige Meldung; diese erscheinen dann als weitere Unterknoten zu den ein-zelnen Prüfungen in der Spalte Code-Inspector-Prüfung. Auf der Ebene dereinzelnen Meldungen können Sie deren Meldungspriorität einstellen, sofernin der Spalte Standardpriorität ein Symbol angezeigt wird. Wird in dieserSpalte kein Symbol angezeigt, ist die entsprechende Meldungspriorität, diebei der Prüfung ausgegeben wird, im Coding zu der jeweiligen Prüfung(siehe Kapitel 4, »Programmierung eigener Prüfungen für den SAP CodeInspector«) hart verdrahtet und kann nur durch Anpassung des Sourcecodesdieser Prüfung geändert werden.

1706-4.book Seite 73 Montag, 4. Juli 2011 3:19 15

Konfiguration und Funktionen des SAP Code Inspectors2

74

Abbildung 2.8 Meldungsprioritäten verwalten

Die Meldungspriorität einer Prüfung können Sie ändern, indem Sie in derSpalte Standardpriorität auf das passende Symbol in der gewünschtenZeile klicken. In Abbildung 2.9 wurde dies für die Meldung »große Tabelle&1: Keine WHERE-Bedingung« in der Zeile oberhalb der Dialogbox getan.Hier sehen Sie an dem grünen Symbol ( ) in der Spalte Aktuelle Priori-

tät, dass die aktuelle Meldungspriorität für diese Meldung auf Information

steht, die Originaleinstellung für diese Meldung finden Sie in der SpalteStandardpriorität. Im Dialog zur Änderung der Meldungspriorität sehenSie im Feld Aktuell die aktuell eingestellte Priorität sowie im Feld Standard

die Standardpriorität. Im Feld Neu können Sie eine neue Priorität für dieMeldung festlegen. Den letzten Änderer und das Änderungsdatum sehen Siein den Feldern Verantwortlicher und Geändert am.

Die Meldungstexte, die Sie in der Spalte Prüfung / Meldungstext angezeigtsehen, sind die Meldungstexte, wie sie in der Ergebnisliste einer Inspektionausgegeben werden. Über das Info-Symbol ( ) in der hierarchischenSpalte Code-Inspector-Prüfungen können Sie, sofern vorhanden, die jewei-lige Dokumentation der entsprechenden Prüfung öffnen.

1706-4.book Seite 74 Montag, 4. Juli 2011 3:19 15

Objektkollektoren 2.2

75

Abbildung 2.9 Ändern einer Meldungspriorität

Sofern in einer Prüfung eine Ausnahme verfügbar ist, können Sie in der letz-ten Spalte Ausnahme den jeweiligen sogenannten Pseudokommentar ab-lesen, mit dem Sie die Meldungsausgabe unterdrücken können. Mehr zudiesem Thema finden Sie in Abschnitt 2.3.1.

2.2 Objektkollektoren

In diesem Abschnitt werden die einzelnen Objektkollektoren genauer vorge-stellt. Die Objektkollektoren dienen zum Sammeln von Objekten, die nichtdirekt aus Entwicklungskomponenten oder aus bereits erzeugten Objekt-mengen, sondern aus anderen Quellen ermittelt werden. So stammen dieseObjekte zum Beispiel aus Prüfergebnissen anderer SAP-Tools, aus Dateienoder aus einer Umfeldermittlung.

Hinweis

An dieser Stelle können Sie weder Meldungstexte noch Pseudokommentareändern; diese werden hier nur angezeigt. Mehr zur Erstellung und Änderung vonMeldungstexten bzw. Pseudokommentaren finden Sie in Kapitel 4, »Programmie-rung eigener Prüfungen für den SAP Code Inspector«.

1706-4.book Seite 75 Montag, 4. Juli 2011 3:19 15

Standardprüfungen des SAP Code Inspectors5

284

5.4.16 SELECT INTO CORRESPONDING FIELDS bei gepufferten Tabellen

� Relevanz:

� Prüfklasse: cl_ci_test_select_correspond

� Objekttypen: 1PRG

� Anmerkung: Diese Prüfung ist in Ihrem System vermutlich nicht im Baumder Prüfungen sichtbar. Um sie verwenden zu können, wählen Sie die Prü-fung mithilfe des Code-Inspector-Menüs Springen � Verwaltung Von �Tests aus, und sichern Sie die Einstellung.

Kurzbeschreibung

Diese Prüfung untersucht, ob ein lesender Zugriff auf eine gepufferte Tabellemit dem Zusatz INTO CORRESPONDING FIELDS erfolgt. Dies ist nicht sonderlichkritisch, kann aber doch einen gewissen Mehraufwand bedeuten.

Details

Sind bei einer SELECT-Anweisung die Struktur der Datenbanktabelle und dieZielstruktur in ABAP nicht identisch, kann mit dem Zusatz INTO CORRESPON-DING FIELDS ein Mapping der Felder vorgenommen werden. Dies ist beiWeitem nicht so teuer, wie oft behauptet wird, und spielt deshalb bei Zugrif-fen auf nicht gepufferte Tabellen praktisch keine Rolle. Selbst bei gepuffertenTabellen halten sich die relativen Mehrkosten in Grenzen. Dennoch solltenSie, wo immer möglich, mit identischen Strukturen in Datenbank und inABAP arbeiten, um die Zuordnungskosten gering zu halten.

Meldungen

Siehe Anhang B, »Meldungen der SAP-Standardprüfungen«.

5.4.17 Prüfung der Tabelleneigenschaften

� Relevanz:

� Prüfklasse: cl_ci_test_ddic_tables

� Objekttypen: TABL, VIEW

Empfehlung

Führen Sie diese Prüfung nur aus, wenn Sie gezielt nach der Verwendung derOption INTO CORRESPONDING FIELDS bei Zugriffen auf gepufferte Tabellen suchenmöchten. Das direkte Einlesen gepufferter Daten in eine kompatible ABAP-Daten-struktur, das ohne diese Option auskommt, ist schneller.

1706-4.book Seite 284 Montag, 4. Juli 2011 3:19 15

Performanceprüfungen 5.4

285

Kurzbeschreibung

Diese Prüfung analysiert die Konsistenz der technischen Einstellungen vonDatenbanktabellen und -Views im ABAP Dictionary, insbesondere die Puffe-reinstellungen und die für diese Objekte angelegten Sekundärindizes.

Parameter

Die ersten beiden Parameter aktivieren die wichtigsten Teilprüfungen, diebeiden anderen Parameter später hinzugekommene Zusatzprüfungen:

� Technische EinstellungenDieser Parameter dient der Überprüfung von technischen Einstellungenwie Auslieferungsklasse, Datenart und Größenkategorie.

� TabellenindizesDieser Parameter dient der Überprüfung einiger einfacher Regeln fürTabellenindizes.

� Pufferung INDX-artige TabelleDiese Option sucht nach gepufferten, INDX-artigen Tabellen. Da auf solcheTabellen in der Regel mit der Anweisung IMPORT FROM DATABASE zugegrif-fen wird, ergibt eine Pufferung selten Sinn.

� View ignoriert MandantenabhängigkeitDiese Einstellung untersucht Datenbank-Views, bei denen mindestenseine der im View vereinigten Tabellen mandantenabhängig ist, aber dasMandantenfeld nicht in der JOIN-Bedingung enthalten oder der Mandantnicht das erste Feld im Datenbank-View ist.

Details

Die Eigenschaften einer Datenbanktabelle bzw. eines Datenbank-Views wer-den in Transaktion SE11 gepflegt. Leider bietet das ABAP Dictionary keinetatkräftige Unterstützung bei der Auswahl von konsistenten und unter Per-formanceaspekten sinnvollen Einstellungen. Die vorliegende Prüfung mahntim Nachhinein unstimmige Parameterkombinationen an, sagt aber nichtimmer ganz genau, wie die Einstellungen sein sollten. Als Hilfe finden Siehier in Abbildung 5.4 eine Übersicht über konsistente Einstellungen für diePufferung in Abhängigkeit von der Auslieferungs- und Datenklasse.

1706-4.book Seite 285 Montag, 4. Juli 2011 3:19 15

Standardprüfungen des SAP Code Inspectors5

286

Abbildung 5.4 Empfohlene Einstellungen für die Tabellenpufferung in Abhängigkeit von der Datenklasse und der Auslieferungsklasse

Im Folgenden gehen wir kurz auf die wichtigsten technischen Eigenschafteneiner Tabelle und deren Bedeutung ein:

� AuslieferungsklasseDieser Parameter wird auf der Registerkarte Auslieferung und Pflege

gepflegt und legt fest, wie sich die Daten einer Tabelle bei Systeminstal-lation und -Upgrade, Mandantenkopie und beim Transport zwischenSystemen verhalten. Die wichtigsten Auslieferungsklassen sind A fürAnwendungsdaten (Stammdaten und transaktionale Daten) sowie C fürKonfigurationsdaten. Daneben gibt es noch die Klassen L, G, E, S und W.Genaueres erfahren Sie in der (F1)-Hilfe für das Feld Auslieferungsklasse.

� DatenklasseDieser Wert wird unter den Technischen Eigenschaften in TransaktionSE11 eingestellt. Für manche der von SAP unterstützten Datenbankplatt-formen legt dieser Wert fest, in welchem physischen Bereich der Daten-bank eine Tabelle abgelegt wird. Die Datenklasse wird vom Code Inspec-tor herangezogen, um eine Tabelle bezüglich der in ihr enthaltenen Dateneinstufen zu können, und wirkt sich auf einige der Prüfergebnisse aus. Siesollten daher korrekt pflegen, ob eine Tabelle der Datenklasse APPL0(Stammdaten), APPL1 (transaktionale Daten) oder APPL2 (Konfigurations-daten) angehört.

Auslieferungsklasse

APPL0Stammdaten

APPL1Transaktionale Daten

APPL2Konfigurationsdaten

SystemSystemdaten

Andere

C

Neutrale Kombination

Unerwünschte Kombination

Tabelle sollte gepuffert werden

Tabelle sollte nicht gepuffert werden

Tabelle sollte nicht gepuffert werden,Ausnahme: kleine Tabellen

P P P P

P P

P

P P

P P P P

P

P P

P* P*

P

G E S W A L

Datenklasse

P

P

P

P*

1706-4.book Seite 286 Montag, 4. Juli 2011 3:19 15

Performanceprüfungen 5.4

287

� GrößenkategorieDie Größenkategorie einer Tabelle wird ebenfalls in den Technischen

Eigenschaften gepflegt und ist dazu gedacht, den initialen Platzbedarf füreine Tabelle abzuleiten und auf der Datenbank zu reservieren. DieseGröße wird vom Code Inspector genutzt, um einen Hinweis auf die Größeeiner Tabelle im produktiven Gebrauch zu erhalten. Das Zählen der Ein-träge in einer Tabelle während einer Prüfung verbietet sich aus Perfor-mancegründen; außerdem kann das Prüfwerkzeug in einem Testsystemlaufen, in dem die Tabelle nur wenige Einträge hat. Da ist die vom Ent-wickler nach bestem Wissen gepflegte Größenkategorie schon aussage-kräftiger.

� Pufferung und PufferungstypTabellen, die im produktiven Betrieb häufig gelesen, aber selten geändertwerden (in der Regel Konfigurationstabellen) sollten gepuffert werden.Bei den Technischen Einstellungen kann hierzu die Pufferung einge-schaltet und die Art der Pufferung definiert werden. Das Einschalten derPufferung kann im Widerspruch zur gewählten Auslieferungs- oderDatenklasse oder auch zur Größenkategorie stehen – sehr große Tabellensollten zum Beispiel nicht gepuffert werden.

� IndizesHäufig ausgeführte Datenbankanweisungen sollten durch einen Daten-bankindex unterstützt werden, der eine schnelle Suche nach den ge-wünschten Datenbanksätzen ermöglicht. Es gibt einige Faustregeln für In-dizes: So sollte es für eine Tabelle nicht zu viele Indizes geben, ein Indexsollte nicht zu viele Felder enthalten, verschiedene Indizes einer Tabellesollten möglichst wenige Felder redundant aufweisen etc. Gerade hier giltaber wie bei allen Performanceregeln: Ein statisches Werkzeug wie derCode Inspector kann nur »Fragen« an den Entwickler stellen. Dieser mussdann den Sachverhalt prüfen und kann zu einem anderen Ergebnis kom-men als das Tool. Manchmal kann zum Beispiel ein zusätzlicher Indexoder ein Index mit »zu vielen« Feldern durchaus berechtigt sein.

Meldungen

� 0001, 0002»Keine Tabellen- oder Auslieferungsklasse ausgewählt«»Keine Datenklasse oder Größenkategorie ausgewählt«

Pflegen Sie diese Einstellungen, da diese vom Code Inspector zum Beispielbei der Analyse von Datenbankzugriffen verwendet werden.

1706-4.book Seite 287 Montag, 4. Juli 2011 3:19 15

Standardprüfungen des SAP Code Inspectors5

288

� 0003, 0004»›Pufferung erlaubt, aber ausgeschaltet‹ ausgewählt«

Diese Einstellung für die Tabellenpufferung ergibt aus Performancesichtkeinen Sinn. Der Entwickler sollte wissen, ob sich eine Tabelle für die Puf-ferung eignet oder nicht – später kann diese Entscheidung kaum nochjemand treffen. Einzig bei Tabellen, die im produktiven Betrieb abhängigvom Kunden sowohl sehr klein als auch sehr groß sein können, kann esangebracht sein, die Pufferung zu erlauben, aber das Ein- bzw. Ausschal-ten von den Gegebenheiten beim Kunden abhängig zu machen. Sonst gilt:Entscheiden Sie sich für oder gegen die Pufferung.

� 0010»Pufferungstyp ist initial, aber Auslieferungsklasse ist ›C‹, ›G‹, ›E‹ oder ›S‹«Die Auslieferungsklasse der gemeldeten Tabelle deutet darauf hin, dass essich um eine Konfigurations- (Auslieferungsklasse C oder G) oder System-tabelle (Auslieferungsklasse E oder S) handelt. Solche Tabellen sind in derRegel klein und werden selten geändert, eignen sich daher zur Pufferung.Für eine konsistente Einstellung sollten diese Tabellen der DatenklasseAPPL2 (Konfigurationsdaten) zugeordnet sein.

Sollte die Tabelle keine Konfigurations- oder Systemdaten enthalten,haben Sie vielleicht eine falsche Auslieferungsklasse gewählt.

� 0011»Pufferung ist aktiviert, aber Auslieferungsklasse ist ›A‹ oder ›L‹«

Die Auslieferungsklasse der gemeldeten Tabelle deutet darauf hin, dass essich um eine Anwendungstabelle (A) mit Stamm- oder Bewegungsdatenoder um eine Tabelle mit temporären Daten (L) handelt. Eine solcheTabelle hat in der Regel viele Daten und wird häufig geändert. Im Allge-meinen sollte eine solche Tabelle nicht gepuffert werden – eine Ausnahmekönnen kleine Stammdatentabellen bilden. Für eine konsistente Einstel-lung sollten diese Tabellen der Datenklasse APPL0 (Stammdaten) oderAPPL1 (Bewegungsdaten) zugeordnet sein.

Enthält die Tabelle nicht die beschriebene Art von Daten, ist vermutlichdie Auslieferungsklasse falsch gewählt.

� 0012»Pufferung ist aktiviert, aber Größenkategorie ist > 2«

Sehr große Tabellen sollten, auch wenn die anderen Bedingungen für einePufferung gegeben sind, nicht gepuffert werden. Dies kann nämlich zurFolge haben, dass zahlreiche kleinere gepufferte Tabellen aus dem Pufferverdrängt werden. Werden in einem Programm immer nur wenige Ein-

1706-4.book Seite 288 Montag, 4. Juli 2011 3:19 15

Performanceprüfungen 5.4

289

träge aus der großen Tabelle benötigt, kann eine Einzelsatzpufferung odereine feingranulare generische Pufferung der Tabelle angemessen sein.

Falls die Tabelle nur wenige Einträge hat und die Pufferung daher ver-nünftig ist, haben Sie wahrscheinlich die Größenkategorie der Tabellefalsch gepflegt.

� 0013, 0014»Pufferung ist initial, aber Datenklasse ist "APPL2"«»Pufferung ist aktiviert, aber Datenklasse ist "APPL0"/"APPL1"«

Datenklasse und Pufferung müssen zusammenpassen. In der Regel solltenTabellen der Datenklasse APPL2, das heißt Konfigurationstabellen, gepuf-fert sein. Tabellen der Datenklassen APPL0 bzw. APPL1, das heißt solchemit Stamm- oder Bewegungsdaten, sollten dagegen nicht gepuffert wer-den. Eine Ausnahme bilden wie gesagt kleine Stammdatentabellen, dieebenfalls gepuffert werden können.

� 0015»Pufferung ist aktiviert, aber kein Pufferungstyp ausgewählt«

Wählen Sie einen geeigneten Pufferungstyp aus. Wenn sich ein Entwick-ler für die Pufferung einer Tabelle entscheidet, dann sollte er auch denTyp der Pufferung (einzelsatz-, generisch, vollständig gepuffert) anhandder beabsichtigten Zugriffe festlegen.

� 0016, 0017»Pufferung ist erlaubt, aber Tabelle ist im DB-View dbview enthalten«»Pufferung ist erlaubt, aber Tabelle kann über DB-View geändert werden«

Zunächst zur zweiten Meldung: Ein Datenbank-View auf eine gepufferteTabelle, mit dem Einträge der Tabelle geändert werden können, warzumindest bis einschließlich Release 6.40 sehr kritisch. Es kam nämlichbei Datenänderungen über den View nicht zu einer Invalidierung desTabellenpuffers, was zu Inkonsistenzen beim Lesen der gepuffertenTabelle führen konnte. Ab Release 7.0 wird auch bei Änderungen derDaten über den Datenbank-View der Puffer invalidiert.

Die Meldung 0016 ist eine der umstrittensten Code-Inspector-Meldun-gen: Was soll schlecht daran sein, einen nicht gepufferten Datenbank-View für eine gepufferte Tabelle zu definieren – und warum gibt es eineMeldung für die Tabelle, und nicht für den Datenbank-View? Die Argu-mente der Prüfung sind: Wenn man sich schon die Mühe macht, Daten imSAP-Tabellenpuffer zu puffern, dann sollten die Daten auch in den aller-meisten Fällen aus dem Puffer gelesen werden und nicht doch von derDatenbank. Die Existenz eines Datenbank-Views auf den Daten zeigt aber

1706-4.book Seite 289 Montag, 4. Juli 2011 3:19 15

Standardprüfungen des SAP Code Inspectors5

290

an, dass der Entwickler auch noch andere Zugriffe beabsichtigt, die nichtdurch einen Puffer optimiert sind (ist der Datenbank-View zu einer gepuf-ferten Tabelle selbst ebenfalls gepuffert, wird keine Meldung erzeugt).Der »Besitzer« der gepufferten Tabelle erhält eine Meldung, da er in derRegel der Verantwortliche für die Daten ist und daher wissen sollte, wennein anderer Entwickler ein eigenes »Datenzugriffskonzept« – den Daten-bank-View eben – für diese Daten implementiert.

� 0020, 0021»Tabelle hat mehr als 100/700 Felder«

Eine Tabelle sollte nicht zu viele Felder aufweisen, einerseits weil es tech-nische Grenzen gibt, hauptsächlich aber der Übersichtlichkeit wegen. FürSAP Business ByDesign gilt hier die strengere Prüfung auf maximal 100Felder hin, sonst gilt die Grenze von 700 Feldern.

� 0022, 0023»Änderungsprotokoll aktiv trotz Datenklasse "APPL0" oder "APPL1"«»Änderungsprotokoll aktiv bei großer Tabelle«

Das Änderungsprotokoll für eine Tabelle wird in den Technischen Eigen-

schaften durch Setzen des Flags Datenänderungen protokollieren

aktiviert. Wurde zusätzlich der Systemparameter rec/client für denMandanten gesetzt, wird für jede Änderung der Tabelle ein Protokollein-trag geschrieben, der mit Transaktion SCU3 angezeigt werden kann. Esversteht sich, dass für Stamm- und Bewegungsdaten (Datenklassen APPL0und APPL1) sowie generell für große Tabellen (Größenkategorie > 2) keinÄnderungsprotokoll geschrieben werden sollte. Hier fallen einfach zuviele Daten an, deren Protokollierung zudem den Produktivbetrieb desSAP-Systems ausbremsen kann.

� 0030»Tabelle hat einen eindeutigen Sekundärindex«

Dies ist eine Informationsmeldung von geringer (Performance-)Relevanz.Jeder Entwickler, der in eine solche Tabelle Daten einfügt, sollte sich aberdes eindeutigen Indizes bewusst sein: Wird versucht, zur Laufzeit Sätze indie Datenbank einzufügen, die bezüglich des Sekundärindizes identischsind, kommt es zu einem Laufzeitfehler »Insert Duplicate Keys«.

� 0031, 0034, 0131, 0134»Tabelle hat mehr als 4 (7) Sekundärindizes, obwohl die Datenklasse "APPL0" ist«

1706-4.book Seite 290 Montag, 4. Juli 2011 3:19 15

Performanceprüfungen 5.4

291

»Tabelle hat mehr als 2 (5) Sekundärindizes, obwohl die Datenklasse "APPL1" ist«

Es sollte pro Datenbanktabelle nicht zu viele Sekundärindizes geben.Denn einerseits erhöht jeder Index die Kosten für Einfüge- und Ände-rungsoperationen für die Datenbanktabelle (Letztere nur, wenn bei einerÄnderung auch Felder des Sekundärindizes betroffen sind). Andererseitskann es sein, dass der kostenbasierte Optimierer der Datenbank, der dieStrategien für einen Datenbankzugriff berechnet, bei zu vielen Indizes denÜberblick verliert.

Abhängig von der Datenklasse, informiert diese Prüfung bei mehr als vierSekundärindizes (APPL0 = Stammdaten) bzw. bei mehr als zwei Sekun-därindizes (APPL1 = Bewegungsdaten). Eine Warnung gibt es bei mehr alssieben (APPL0) bzw. bei mehr als fünf Sekundärindizes (APPL1).

� 0032»Sekundärindex sec_index: mehr als 4 Felder«

»Fasse Dich kurz« gilt auch bei Indizes. Mehr als vier Felder können aus-nahmsweise, zum Beispiel bei einem beabsichtigten Index-only-Zugriff,vernünftig sein. In der Regel sollten Sie aber mit vier oder weniger Fel-dern auskommen. Die Prüfung zählt das Mandantenfeld nicht zu denIndexfeldern hinzu.

� 0033»Tabelle hat nicht-eindeutigen Sekundärindex, ist aber gepuffert«

Hier gilt Ähnliches wie bei einem Datenbank-View auf einer gepuffertenTabelle: Ein Sekundärindex deutet darauf hin, dass neben den gepuffertenZugriffen auch Zugriffe via Sekundärschlüssel beabsichtigt sind. Es musssichergestellt sein, dass der doppelte Aufwand sich lohnt und im Produk-tivbetrieb tatsächlich sowohl Puffer- als auch Indexzugriffe stattfinden.Die Einschränkung auf »nicht eindeutige« Sekundärindizes wurde vorge-nommen, da einige Entwickler einen eindeutigen Sekundärindex verwen-den, um in einer Tabelle Duplikate bezüglich bestimmter Schlüsselfelderauszuschließen.

� 0035»Mindestens 2 Felder ("dbfld_1" und "dbfld_2") sind in zwei Indizes enthalten«

Eine weitere umstrittene Prüfung! Mit ihr sollen Indizes gefunden wer-den, die bloße Permutationen anderer Indizes sind. Zum Beispiel ergibt eskaum Sinn, für eine Tabelle mit einem (Primär- oder Sekundär-)Index A

1706-4.book Seite 291 Montag, 4. Juli 2011 3:19 15

Standardprüfungen des SAP Code Inspectors5

292

für die Felder dbfld_1 dbfld_2 noch einen weiteren Index B mit dbfld_2dbfld_1 zu definieren. Anders sieht es bei einem Index dbfld_1 dbfld_2dbfld_3 aus: Hier kann ein weiterer Index mit den Feldern dbfld_3dbfld_2 unter Umständen berechtigt sein. Eine Prüfung, die wieder denganzen Entwickler fordert!

� 0036»Index "idx_1" ist linksbündig in Index "idx_2" enthalten«

Hier liegt der Fall einfacher als in der vorhergehenden Meldung: Beieinem Index dbfld_1 dbfld_2 dbfld_3 ergibt ein weiterer Index mit denFeldern dbfld_1 dbfld_2 keinen Sinn.

� 0037, 0137»Tabelle dbtab: Feld fld in Primär / Sekundärindex idx ist vom Typ FLOAT«

Beim Lesen von Feldern vom Typ FLOAT von der Datenbank kann es zuRundungsdifferenzen bei der Zuweisung an eine ABAP-Variable kommen.Ein FLOAT-Feld im Primärschlüssel bedeutet damit, dass ein bestimmterTabellenschlüssel unter Umständen aus ABAP heraus nicht mehr ange-sprochen werden kann, und führt daher zu einer Warnung durch denCode Inspector. Mit einem FLOAT-Feld im Sekundärindex lässt sich nurvernünftig arbeiten, wenn in der WHERE-Bedingung des Datenbankzugriffsimmer mit einem Wertebereich und nicht mit Gleichheitsbedingungenauf das Feld zugegriffen wird.

� 0038, 0039»Mandantenabhängige Tabelle dbtab: Sekundärindex idx ohne Mandantenfeld«»... Sekundärindex idx hat Mandant nicht als erstes Feld«

In der Regel sollte bei mandantenabhängigen Tabellen der Mandant alserstes Feld in jedem Sekundärindex enthalten sein. Der Mandant ist zwarkein selektives Feld (und Indizes sollten möglichst selektive Felder enthal-ten), aber er ist beim Zugriff praktisch immer bekannt. Bei Tabellenschlüs-seln, die aus GUIDs (Globally Unique Identifier) bestehen, die auch man-dantenübergreifend garantiert nur einmal existieren, kann auf den Man-danten im Sekundärschlüssel verzichtet werden.

� 0041»INDX-artige Tabelle dbtab ist gepuffert«

Sogenannte INDX-artige Tabellen ähneln in ihrer Struktur der SAP-System-tabelle INDX. Diese Tabellen werden in der Regel nicht durch SELECT-Anweisungen, sondern mit dem Befehl IMPORT FROM DATABASE gelesen.Dieser Befehl nutzt die SAP-Tabellenpufferung nicht; daher ist es seltensinnvoll, eine INDX-artige Tabelle zu puffern.

1706-4.book Seite 292 Montag, 4. Juli 2011 3:19 15

Performanceprüfungen 5.4

293

� 0042, 0043»View dbview: erstes Feld nicht Mandant, obwohl Basistabelle dbtab mandan-tenabhängig ist«»View dbview: Mandantenfeld der Basistabelle(n) dbtabs nicht über Join-Bedingung verknüpft«

Datenbank-Views über mandantenabhängige Tabellen sollten das Man-dantenfeld in der JOIN-Bedingung enthalten, und das erste Feld desDatenbank-Views sollte der Mandant sein. Anderenfalls können mit demDatenbank-View Daten mandantenübergreifend gelesen werden, wasschon aus funktionalen und Sicherheitsgründen suspekt ist. Der Perfor-manceaspekt dabei ist, dass ohne Mandant möglicherweise Indizes derdem Datenbank-View zugrunde liegenden Tabellen (die alle den Mandan-ten als erstes Feld enthalten sollten) nicht verwendet werden können, umden Datenbankzugriff zu optimieren.

� 0050, 0051»Sprachabhängige Tabelle dbtab: Sprache ist nicht erstes Feld (oder zweitesnach dem Mandanten)«»Sprachabhängige Tabelle dbtab ist nicht generisch bezüglich der Sprachegepuffert«

Auf sprachabhängige Tabellen wird in den meisten Fällen mit einerbestimmten Sprache in der WHERE-Bedingung zugegriffen, da der Benutzernur Texte in seiner Anmeldesprache lesen möchte. Daher ist es eine guteIdee, die Sprache als das erste Feld (bzw. als das zweite nach dem Man-danten) zu definieren, um einen Indexzugriff mit Sprache und Schlüsselzu ermöglichen. Meist werden solche Texttabellen Konfigurationstabellensein und daher gepuffert. Aufgrund der Zugriffe mit dem Sprachfeld soll-ten die Tabellen nicht vollständig, sondern generisch bezüglich der Spra-che gepuffert sein.

� 0060»Tabelle dbtab enthält lob_cnt STRING bzw. RAWSTRING Felder«

STRING- oder RAWSTRING-Felder werden in der Datenbank nicht zusammenmit den anderen Feldern einer Tabelle abgelegt, sondern aufgrund ihrerveränderlichen Länge als BLOB oder CLOB (Binary oder Character; LargeObject, LOB). Daher müssen Sie sich jeden Zugriff auf eine Tabelle miteinem LOB wie einen Zugriff auf mehrere Tabellen vorstellen: Für jedenLOB in der Tabellenstruktur muss auf eine extra Tabelle zugegriffen wer-den, was natürlich die Lese- und Einfüge-Zeiten entsprechend erhöht. AlsAbhilfe sollten Sie beim Lesen die (RAW)STRING-Felder nur dann mitlesen,wenn diese unbedingt benötigt werden. Es kann auch vorteilhaft sein,

1706-4.book Seite 293 Montag, 4. Juli 2011 3:19 15

Standardprüfungen des SAP Code Inspectors5

294

mehrere LOB-Felder zu einem einzigen zusammenzufassen und die benö-tigte Information bei Bedarf durch String-Operationen zu extrahieren.

5.4.18 Performanceprüfungen, die es nicht gibt

In vielen Foren stößt man immer wieder auf Gruselmärchen bezüglich derPerformance, bei denen bestimmte ABAP-Anweisungen – insbesondereeinige Varianten der SELECT-Anweisung – zu Unrecht die Rolle der bösenHexe übernehmen müssen. Es gibt sogar Kundenentwicklungen von Code-Inspector-Prüfungen, die nach diesen vermeintlichen Performanceproble-men suchen. Damit Sie nicht ebenfalls beginnen, solche Prüfungen zu imple-mentieren, begründen wir hier, warum es für die folgenden Varianten derSELECT-Anweisung im Code Inspector keine Prüfungen gibt.

� Suche nach SELECT ... ENDSELECTOft wird behauptet, die Verwendung der SELECT-ENDSELECT-Schleife seigenerell zu vermeiden, da hier Einzelsätze von der Datenbank gelesenwürden. Das ist aber falsch: SELECT ... ENDSELECT ist ein Array-Zugriff, eswerden demnach mit einem Roundtrip gleich mehrere Sätze von derDatenbank gelesen. Damit ist die SELECT-ENDSELECT-Schleife für Verarbei-tungen geeignet, bei denen die gelesenen Daten gleich in der Schleife wei-terverarbeitet werden. Sollen die Daten dagegen in eine interne Tabelleeingestellt und später weiterverwendet werden, ist ein Array-Select mitSELECT ... INTO TABLE vorzuziehen.

� Verwendung von SELECT * FROM dbtab … Diese Anweisung liest für jeden Satz in der Treffermenge einer Daten-bankselektion alle Felder von der Datenbanktabelle. Manchmal findetman den Hinweis, dass immer Feldlisten anstelle des * verwendet werdensollten, das heißt die Anweisung SELECT fld_1 fld_2 fld_3 ... FROMdbtab. Eine solche explizite Feldliste lohnt sich aber erst, wenn diese zueiner deutlichen Reduktion der zu übertragenden Datenmenge führt. DieFelder der Feldliste sollten daher einige Hundert Bytes weniger Datenumfassen als die komplette Tabellenzeile.

Einen deutlichen Performancevorteil kann allerdings ein Zugriff erzielen,bei dem nur Felder des zur Suche verwendeten Datenbankindizes gelesenwerden (Index-only-Zugriff). Dann müssen in der Datenbank nurIndexblöcke durchsucht und gelesen werden; teure Absprünge in die

Empfehlung

Da diese Prüfung wichtige Aspekte der Eigenschaften von Datenbanktabellenuntersucht, sollte sie bei allen Performanceuntersuchungen eingeschaltet sein.

1706-4.book Seite 294 Montag, 4. Juli 2011 3:19 15

Sicherheitsprüfungen 5.5

295

Datenblöcke, die mit höherer Wahrscheinlichkeit mit Disk-I/O verbundensind, sind nicht notwendig.

� Verwendung von SELECT … FOR ALL ENTRIES IN itabDiese Anweisung bildet einen Join zwischen einer Datenbanktabelle undeiner internen Tabelle ab. Sie ist zum Beispiel dazu geeignet, einen Daten-bank-Join über zwei Tabellen zu ersetzen, bei dem eine oder beide Tabel-len gepuffert sind.

Beachten Sie, dass die Option FOR ALL ENTRIES bei einzelsatzgepuffertenTabellen zum Umgehen des Tabellenpuffers führt, auch wenn der Primär-schlüssel in der WHERE-Bedingung vollständig gegeben ist. In einem sol-chen Fall kann es angebracht sein, den Aufruf SELECT ... FOR ALL ENTRIESIN itab auf einzelne SELECT SINGLE-Aufrufe innerhalb einer Schleife überdie interne Tabelle itab umzustellen.

Bezüglich der Performanceaspekte der Anweisung FOR ALL ENTRIES möch-ten wir noch erwähnen, dass diese Anweisung nicht zum SQL-Standardgehört und daher abhängig von der jeweiligen Datenbankplattform unter-schiedlich umgesetzt wird. Eine Beschreibung der Profilparameter, die dieArt und Weise dieser Umsetzung regeln, finden Sie in SAP-Hinweis48230. Falsch gewählte Profilparameter können dazu führen, dass dieAnweisung SELECT ... FOR ALL ENTRIES von der Datenbank nicht optimalausgeführt wird.

Ein weiterer kritischer Punkt beim SELECT ... FOR ALL ENTRIES IN itab isteine zur Laufzeit leere interne Tabelle itab. Wir besprechen dieses Pro-blem in Abschnitt 5.7, »Robuste Programmierung (ab Release 7.0 EHP2)«.

5.5 Sicherheitsprüfungen

Wie bei anderen Produktstandards gilt auch für den Sicherheitsstandard,dass statische Prüfungen nur einen Teilaspekt innerhalb eines umfassendenTestkonzeptes sein können. Um die Sicherheit Ihrer ABAP-Anwendungen zuüberprüfen, empfehlen wir Ihnen ein dreistufiges Vorgehen:

� manuelle Design- und Codeanalysen, bei denen als sicherheitskritischerkannte Programme im Zentrum stehen

� automatisierte statische Prüfungen mit dem Code Inspector

� Hacker-Tests, bei denen versucht wird, den ausgeführten Code durchBenutzereingaben so zu manipulieren, dass dadurch unerwünschte,sicherheitskritische Effekte erzielt werden

1706-4.book Seite 295 Montag, 4. Juli 2011 3:19 15

455

Index

A

ABAPABAPHELP 313, 321Datenbank-Connector 307Dump-Analyse 83Entwicklung 93Klasse 346Laufzeitanalyse 32Proxy-Objekt 384Syntaxprüfung 30

ABAP Debugger 31ABAP Dictionary 285ABAP Unit 32, 128

Prüfung 333Test 351

ABAP-Scan-Engine 162, 205, 216Beispiel Token-Tabelle 221Empfehlung 229erzeugte Tabelle 217Level-Tabelle 226, 228, 229Statement-Tabelle 221, 222, 224Structure-Tabelle 224, 226Token-Tabelle 218, 219Zusammenhang der Tabellen 218

Accessibility 361ADBC-Schnittstelle 307Aggregatfunktion 256Analysewerkzeug 29ändernde Datenbankanweisung 254Änderungsprotokoll 290Anweisung

deklarative 241dynamische 247operative 241

Anweisungsmuster 364APPEND 322Array-Zugriff 262ASSIGN, dynamischer 306Attribut 345Ausdruck, regulärer 330Ausgabeparameter 273Auslieferungsklasse 245, 286, 288Ausnahme, tabellenbasierte 298AUTHORITY-CHECK 305

automatisierte Prüfung 125Fragestellung 155Planung 155Szenario 125

B

BAdI 282BAdI-Builder 136Dokumentation 136

Benutzerfreundlichkeit 361Berechtigungsobjekt

s_cov_adm 67, 98, 99, 102, 116, 120, 191

s_cts_admi 131Bewertung, Prüfung 237BLOB 293Business Server Pages 296

C

c_exceptn_by_table_entry 202, 203c_exceptn_imposibl 202CALL 'cfunc' 298CALL TRANSACTION 298Call-By-Reference 270Call-By-Value 270C-Calls 298CHANGING-Parameter 273CHECK 261Checkman 313cl_chk_enh_conflicts 381cl_ci_category_general 187cl_ci_category_template 166, 167cl_ci_category_top 167, 187cl_ci_check 150, 151, 152, 153, 154, 157cl_ci_checkvariant 141, 150, 157cl_ci_collector_akb_tabl 384cl_ci_inspection 144, 145, 150, 157cl_ci_objectset 143, 150, 157cl_ci_tabnames_public 243cl_ci_test_abap_compiler 163, 382cl_ci_test_abap_generate 316

SIX.fm Seite 455 Dienstag, 5. Juli 2011 10:22 10

456

Index

cl_ci_test_abap_naming 230, 328cl_ci_test_abap_naming_new 194, 330cl_ci_test_append_to_sorted 322cl_ci_test_class_consistence 311cl_ci_test_complex_where 323cl_ci_test_critical_statements 297cl_ci_test_crossref 382cl_ci_test_ddic 162cl_ci_test_ddic_tables 284cl_ci_test_dynpro_generate 360cl_ci_test_dynpro_usab_acc 361cl_ci_test_empty 383cl_ci_test_extended_check 313cl_ci_test_find_badi_call 282cl_ci_test_find_dyn_sql 307cl_ci_test_free_search 221, 224, 363cl_ci_test_hr_itclass 370cl_ci_test_imud_nested 263cl_ci_test_imud_not_vb 308cl_ci_test_imud_taw_a 254cl_ci_test_imud_taw_int_a 375cl_ci_test_imud_taw_sec01 303cl_ci_test_include 239cl_ci_test_index_usage 280cl_ci_test_invalidate_buffer 278cl_ci_test_itab_performance 266cl_ci_test_langu_word_freq 350cl_ci_test_loop_at 274cl_ci_test_metric_langu_comm 342cl_ci_test_metric_noes 335cl_ci_test_metric_oo_size 345cl_ci_test_metric_proc 337cl_ci_test_metric_struct 341cl_ci_test_metric_wdyn 347cl_ci_test_move_performance 265cl_ci_test_program 239cl_ci_test_proxy 385cl_ci_test_scan 163, 240cl_ci_test_scan_nested 264cl_ci_test_scan_statistics 245cl_ci_test_scan_statistics2 241cl_ci_test_scan_template 163, 166, 172cl_ci_test_search_abap_pattern 364cl_ci_test_search_unwanted 365cl_ci_test_search_write 367cl_ci_test_select 163cl_ci_test_select_correspond 284cl_ci_test_select_exit 276cl_ci_test_select_nested 262cl_ci_test_select_taw_a 249

cl_ci_test_select_taw_bybuf 203, 255cl_ci_test_select_taw_int_a 373cl_ci_test_select_taw_intbybuf 376cl_ci_test_select_taw_sec01 301cl_ci_test_select_then_check 260cl_ci_test_sho_client 309cl_ci_test_spec_crit_stmnts 300cl_ci_test_sql_trace_explain 379cl_ci_test_susp_conversions 317cl_ci_test_syntax_check 312cl_ci_test_sysubrc 304cl_ci_test_table_extension 383cl_ci_test_table_settings 244cl_ci_test_usab_gui 204, 355cl_ci_test_value_parameter 269cl_ci_tests 146, 150cl_saunit_legacy_ci_check 352cl_saunit_legacy_ci_check_conv 333cl_wdy_ci_test_component_def 356cl_wdy_ci_test_conventions 358CLIENT SPECIFIED 250, 257CLOB 293Code-Injection 296, 298, 299, 300Codekomplexität 340COUNT(*) 259Coverage Analyzer 32, 81

Testabdeckung 82cProject 84Cross-Site-Scripting 296, 449CTS � SAP-TransportwesenCTS_REQUEST_CHECK 136CUST_PRIORITIES 214

D

Datenkopieren 265transaktionale 286

Datenaufbereitungsklasse 239Datenbankanweisung 243

ändernde 254dynamische 372

Datenbank-Explain 379Datenbankhinweis 299, 368Datenbankindex 280Datenbankoptimierer 253Datenbank-View 289Datenflussanalyse 296Datenklasse 286

SIX.fm Seite 456 Dienstag, 5. Juli 2011 10:22 10

457

Index

Datensammler, Hinweis 163DEFAULT 42, 90deklarative Anweisung 241DELETE ... WHERE 278DELETE DYNPRO 299DELETE REPORT 299Directory Traversal 296DO ... ENDDO 264DROP TABLE 302dynamische Anweisung 247dynamische Datenbankanweisung 372dynamischer ASSIGN 306Dynpro 355, 356

E

E070 139eCATT 33EDITOR-CALL FOR REPORT 298Eigene Prüfung

Attribut ref_scan 206, 212, 215Attribut typelist 191, 212, 215Backend 159, 164, 205BAdI 230CLASS ... DEFINITION LOAD 194Datensammler 162Dokumentation 188, 204Empfehlung 171Enhancement 230erstellen 159Event message 206, 209, 211Fazit 234Frontend 159, 164, 179, 205generelle Planung 161Gesamtübersicht 159Grundlage 164Helfermethode 216Hinweis 163, 166, 175, 178, 181, 186,

194, 197, 199, 211Kategorieneintrag erstellen 167Konstante c_my_name 176, 195Listing fill_attributes 185Listing get_attributes 186Listing Kategorieneintrag 169Listing Prüfungseintrag 173Meldungscode 174, 203Methode add_obj_type 215Methode consolidate_for_display 190,

206, 213

Methode constructor 167, 172, 187, 193, 200

Methode display_documentation 204Methode exception 204Methode fill_attributes 179, 183Methode fill_messages 179, 200Methode generic 185, 193, 195Methode get 206, 215Methode get_attributes 176, 185, 188Methode get_include 209Methode get_message_text 177Methode inform 201, 206, 209Methode navigate 204Methode put_attributes 176, 185, 188Methode query_attributes 183, 185,

189, 193, 194, 195Methode run 165, 176, 200, 205, 212,

215Methode run_begin 212Methode run_end 206, 212, 214möglicher Anbindungsweg 230Parameterauswahlbildschirm 180, 181,

183, 189, 195, 196, 197Prüfungseintrag aktivieren 177Prüfungseintrag erstellen 172Prüfvariante erstellen 179Prüfvariantenbaum 165, 177, 180redefinieren 176, 177, 193Textelement 169, 174, 185Versionierung 188Vorüberlegung 160zur Kategorie zuordnen 187zur Problemstelle springen 204

Eingabeparameter 272Einprozessorsystem 80Einstellung, transportieren 70E-Mail

Berechtigung 120Empfangsbestätigung 120Empfehlung 117Ergebnisliste 117Fazit 123Formulierungsvorlage 120, 122Lesebestätigung 120nachverfolgen 120Report rs_ci_emailtemplate 122versenden 116, 119

ENHANCEMENT-SECTION 381Entwicklungsrichtlinie 155Entwicklungssystem 29

SIX.fm Seite 457 Dienstag, 5. Juli 2011 10:22 10

458

Index

Ergebnis, Gruppierung 242Ergebnisanzeige

drucken 63filtern 62in Tabelle 63konsolidieren 190Objektstatistik 61SCI_SHOW_RESULTS 147sortieren 61Statistik 60

erweiterte Programmprüfung 31, 310Erweiterungskategorie 384EVENT-Parameter 272, 273Existenz, eines Programms 239Existenznachweis 276, 277EXIT 276EXPORT DYNPRO 299EXPORT NAMETAB 300EXPORTING-Parameter 273externe Programmierschnittstelle, cl_ci_

check 150

F

Fehler, handwerklicher 247FLOAT-Feld 292FOR ALL ENTRIES 256Full Table Scan 252Funktionsbaustein, RS_EU_CROSSREF

383

G

Genehmigungsverfahren 95, 204Antrag 97Antrag ablehnen 104, 106Antrag ändern 103Antrag genehmigen 104Ausnahme beantragen 98Ausnahme löschen 108Ausnahmegenehmigung 102Ausnahme-Icon 99, 103Beispiel 98Berechtigung 98, 99, 102Dokumentation 97Fazit 108Genehmigender 100Gültigkeit 101

Meldungspriorität 96Überblick 96

GENERATE 299GENERATE DYNPRO 299, 360GENERATE REPORT 299, 316GENERATE SUBROUTINE POOL 298,

299GET BADI 282globale Performanceanalyse 372globale Variable, Übergabe 273Größenkategorie 245, 252, 287GROUP BY 256, 259, 303Gruppierung, Ergebnisse 242GUID 153

H

Halstead-Metrik 340handwerklicher Fehler 247HASHED TABLE 267HAVING 303Hintergrundjob 123

CODE_INSPECTOR_DELETION 123Hinweis 124Jobname 129Teilaufgabe Import 124Teilaufgabe Löschung 123

Hintergrundjob des Code Inspectors, CODE_INSPECTOR_DELETION 129

HR-Infotyp 370

I

I18N 171IMPORT DYNPRO 299IMPORT FROM DATABASE 285, 292IMPORT NAMETAB 299IMPORTING-Parameter 272Include 241Index 245, 287Indexlücke 250Index-only-Zugriff 294Indextabelle 322Indexzugriff 268INDX-artige Tabelle 292IN-Liste 257, 259INSERT 278, 322INSERT REPORT 298, 299

SIX.fm Seite 458 Dienstag, 5. Juli 2011 10:22 10

459

Index

Inspektion 55als Hintergrundjob 126ändern 37anlegen 56anzeigen 37Auftrag/Aufgabe 57ausführen 58Ausführungsoption 127Ausnahme 60cl_ci_inspection 144, 145, 150, 157einzelnes Entwicklungsobjekt 57Empfehlung 130Ergebnisanzeige 58Fundstelle von Meldung 60Hinweis 57, 129kopieren 37Meldungstyp 59Objektauswahl 56Objektmenge 56Prüfvariante 57Servergruppe 127vergleichen 111, 114Version 56

Interface 345interne Tabelle 266INTO CORRESPONDING FIELDS 284INTO TABLE 256, 260IS NULL 256

J

Jobsteuerung 125, 129Jobübersicht 129JOIN 325JOIN-Bedingung 293

K

Kategorieneintrag, Hinweis 166Klasse

cl_ci_category_general 187cl_ci_category_template 166, 167cl_ci_category_top 167, 187cl_ci_check 150, 151, 152, 153, 154,

157cl_ci_checkvariant 141, 150, 157cl_ci_inspection 144, 145, 150, 157

cl_ci_objectset 143, 150, 157cl_ci_test_abap_compiler 163cl_ci_test_abap_naming 230cl_ci_test_abap_naming_new 194cl_ci_test_ddic 162cl_ci_test_free_search 221, 224cl_ci_test_scan 163cl_ci_test_scan_template 163, 166, 172cl_ci_test_select 163cl_ci_test_select_taw_bybuf 203cl_ci_test_usab_gui 204cl_ci_tests 146, 150

Kommentar 342Kommentarsprache 343Komplexität 334

zyklomatische 339Konfigurationsdaten 286Konsolidierungssystem 29Konstante

c_exception_imposibl 202c_exceptn_by_table_entry 202, 203

Kopieren, Daten 265kostenbasierter Optimierer 291Kundennamensraum 39

L

Laufzeit 238Laufzeitanalyse 76

Transaktion SAT 76Transaktion SE30 77

Laufzeitfehler 83Laufzeitverhalten, quadratisches 267,

268Lines of Code 334LOB 293LOOP ... ENDLOOP 264LOOP AT itab ASSIGNING 274LOOP AT itab REFERENCE INTO dref

275

M

Mandant 292Mehrprozessorsystem 80Meldung, unterdrücken 87Meldungscode 201, 211

SIX.fm Seite 459 Dienstag, 5. Juli 2011 10:22 10

460

Index

Meldungspriorität 200, 201, 210ändern 74Hinweis 75Standardpriorität 73, 74verwalten 73

Meldungstext 74Meldungstyp 73Memory Inspector 32Menu Painter 356Messdatendatei 76Methode 345Modultest 333, 352

N

Namenskonvention 327Native SQL 257, 298Nested Loop 264

O

Objektdefinition 82Objektkatalogeintrag 47, 152Objektkollektor 54, 75

Dokumentation 55, 72Einstellung 55Hinweis 76Name der Klasse 71nur Selektionen sichern 76Objekte aus Coverage Analyzer 81Objekte aus cProjects 84Objekte aus Datei-Upload 82Objekte aus eingebetteten Paketen 85Objekte aus Laufzeitfehlern 83Objekte aus Umfeldermittlung 79Objekte aus Verwendungsnachweis 80Programme aus der Laufzeitanalyse 76Programme aus Katalog der Report-

Sourcen 86, 87Transaktion SE61 72Verwaltung 71Verwendungsnachweis für Tabellen 78Wertehilfe 55

Objektkollektorklasse, cl_ci_collector_akb_tabl 384

Objektmenge 43ändern 37anlegen 43

anzeigen 37aus Transportaufgabe 53, 56aus Transportauftrag 53, 56cl_ci_objectset 143, 150, 157Empfehlung 45Hinweis 46kopieren 37Löschdatum 43nur Selektion sichern 44Objekt anzeigen 45Objektübersicht 45Registerkarte ObjKollektoren 54Registerkarte ObjMenge aus Auftrag 53Registerkarte ObjMenge aus Ergebnis 51Registerkarte ObjMenge bearbeiten 51Registerkarte ObjMenge selektieren 46,

86Version 43

Objektname 48, 79, 81Objektprüfung bei Aufgabenfreigabe

135Beispiel 136check_before_release 139Fazit 150Szenario 135

Objektprüfung bei Auftragsfreigabe 135Objekttyp 48, 79, 80Open SQL 302

Join 256, 258operative Anweisung 241Optimierer, kostenbasierter 291optimierter Zugriff 268ORDER BY 256, 259, 303Originalsystem 47

P

Paketkonzept 302Paketstruktur 85Parallelbearbeitung 239parallele Suche 80PCode 405PERFORMANCE_CHECKLIST 42Performanceanalyse, globale 372Performanceprüfung 42Performance-Trace 372Pragmas 89proaktive Qualitätssicherung 155

SIX.fm Seite 460 Dienstag, 5. Juli 2011 10:22 10

461

Index

Produktivsystem 30Produktstandard 235Programm, Existenz 239Programmgenerierung 316Programmprüfung, erweiterte 310PROVIDE ... ENDPROVIDE 264Proxy 384Prozessverantwortlicher 155Prüfkategorie 70

Allgemeine Prüfung 64, 240Anwendungsprüfung 66, 370deaktivieren 71Dynamischer Test 65, 351Dynpro-Prüfung 360Implizite Prüfung 239Interner Performancetest 66, 371Interner Test 66, 380Metrik und Statistik 65, 334Oberfläche 66, 355Performanceprüfung 64, 246Programmierkonvention 65, 327Proxy-Prüfung 66, 384Robuste Programmierung 65, 295, 321Sicherheitsprüfung 64, 295Suchfunktion 66, 362Syntaxprüfung/Generierung 65

Prüfklassecl_chk_enh_conflicts 381cl_ci_tabnames_public 243cl_ci_test_abap_compiler 382cl_ci_test_abap_generate 316cl_ci_test_abap_naming 328cl_ci_test_abap_naming_new 330cl_ci_test_append_to_sorted 322cl_ci_test_class_consistence 311cl_ci_test_complex_where 323cl_ci_test_critical_statements 297cl_ci_test_crossref 382cl_ci_test_ddic_tables 284cl_ci_test_dynpro_generate 360cl_ci_test_dynpro_usab_acc 361cl_ci_test_empty 383cl_ci_test_extended_check 313cl_ci_test_find_badi_call 282cl_ci_test_find_dyn_sql 307cl_ci_test_free_search 363cl_ci_test_hr_itclass 370cl_ci_test_imud_nested 263cl_ci_test_imud_not_vb 308

cl_ci_test_imud_taw_a 254cl_ci_test_imud_taw_int_a 375cl_ci_test_imud_taw_sec01 303cl_ci_test_include 239cl_ci_test_index_usage 280cl_ci_test_invalidate_buffer 278cl_ci_test_itab_performance 266cl_ci_test_langu_word_freq 350cl_ci_test_loop_at 274cl_ci_test_metric_langu_comm 342cl_ci_test_metric_noes 335cl_ci_test_metric_oo_size 345cl_ci_test_metric_proc 337cl_ci_test_metric_struct 341cl_ci_test_metric_wdyn 347cl_ci_test_move_performance 265cl_ci_test_ora_rule_hint 368cl_ci_test_program 239cl_ci_test_proxy 385cl_ci_test_scan 240cl_ci_test_scan_nested 264cl_ci_test_scan_statistics 245cl_ci_test_scan_statistics2 241cl_ci_test_search_abap_pattern 364cl_ci_test_search_unwanted 365cl_ci_test_search_write 367cl_ci_test_select_correspond 284cl_ci_test_select_exit 276cl_ci_test_select_nested 262cl_ci_test_select_taw_a 249cl_ci_test_select_taw_bybuf 255cl_ci_test_select_taw_int_a 373cl_ci_test_select_taw_intbybuf 376cl_ci_test_select_taw_sec01 301cl_ci_test_select_then_check 260cl_ci_test_sho_client 309cl_ci_test_spec_crit_stmnts 300cl_ci_test_sql_trace_explain 379cl_ci_test_susp_conversions 317cl_ci_test_syntax_check 312cl_ci_test_sysubrc 304cl_ci_test_table_extension 383cl_ci_test_table_settings 244cl_ci_test_usab_gui 355cl_ci_test_value_parameter 269cl_saunit_legacy_ci_check 352cl_saunit_legacy_ci_check_conv 333cl_wdy_ci_test_component_def 356cl_wdy_ci_test_conventions 358

SIX.fm Seite 461 Dienstag, 5. Juli 2011 10:22 10

462

Index

Prüfung 235’EXIT’ oder keine Anweisung in SELECT-

ENDSELECT-Schleife 276ABAP Unit 352ABAP-Token-Statistik 245Analyse der WHERE-Bedingung für

SELECT 249Analyse der WHERE-Bedingung für

UPDATE und DELETE 254Ändernde Datenbank-Zugriffe außerhalb

von Verbuchungsbausteinen 308Ändernde Datenbankzugriffe in Schleifen

263Anweisungsstatistik 241Anzahl der ausführbaren Anweisungsme-

trik 335Attribut 41bei Aufgabenfreigabe 135bei Auftragsfreigabe 130, 131Bewertung 237cl_ci_tests 146, 150Datensammler 162Dokumentation 40, 69Dynamische und mandantenabhängige

Zugriffe 301, 303Dynpro-Generierung 360Dynpro-Prüfung auf Usability und Acces-

sibility 361Einstellungsmöglichkeit 41Erkennen von totem Coding 382Erweiterte Namenskonventionen für Pro-

gramme 330Erweiterte Programmprüfung 313Fan-out-strukturelle Metrik 341Generieren von ABAP-Programmen 316Geschachtelte Schleifen 264GUI-Usability-Prüfung 355Hinweis 133implizite Prüfung 236Inperformante Operationen auf internen

Tabellen 266Inperformante Parameterübergabe 269Instanzerzeugung von BAdIs 282Invalidierung des SAP-Tabellenpuffers

278Klassen/Interface-Konsistenz 311Kommentarsprache-Metrik 342Komplexe WHERE-Bedingung in SELECT-

Anweisung 323

Kopieren der aktuellen Tabellenzeile bei LOOP AT… 274

Kopieren großer Datenobjekte 265Kritische Anweisungen 297Leerer Test 383Mandantenabhängige Shared-Objects-

Methoden 309Metrik der ausführbaren Anweisungen

335Name der Klasse 68Namenskonvention 328OO-Größenmetrik 345Performanceprüfungen, die es nicht gibt

294Proxy-Prüfungen 385Prozedurale Metrik 337Prüfung der Infotypklassen 370Prüfung der SY-SUBRC-Behandlung 304Prüfung der Tabelleneigenschaften 284Prüfung SQL-Trace 373, 375, 376, 379SAP GUI-Bedienbarkeit 355SAP-Standardprüfung 63selbst erstellen 159SELECT in Schleifen 262SELECT INTO CORRESPONDING

FIELDS bei gepufferten Tabellen 284SELECT-Anweisungen mit anschlie-

ßendem CHECK 260SELECT-Anweisungen, die am Tabellen-

puffer vorbei lesen 255Statistik der Tabelleneigenschaften 244Suche nach APPEND und INSERT ...

INDEX bei SORTED-Tabellen 322Suche nach bestimmten kritischen Anwei-

sungen 300Suche nach unerwünschten Sprachele-

menten 365Suche Oracle Rule Hints 368Suche von ABAP-Anweisungsmustern

364Suche von ABAP-Token 363Suche von WRITE-Anweisungen 367Suspekte Konvertierungen 317Syntaxprüfung 312Syntaxprüfung/Generierung 310Tabellennamen aus SELECT-Anweisung

243Test zu CL_ABAP_COMPILER 382Test zu ENHANCEMENT-SECTION 381

SIX.fm Seite 462 Dienstag, 5. Juli 2011 10:22 10

463

Index

Testkonventionen von ABAP Unit 333Transaktion SE61 69Überprüfung der Erweiterbarkeit von

Tabellen 78, 383Verfahrenstechnische Metrik 337Verwendung der ADBC-Schnittstelle

307Verwendung von Indizes in der SELECT-

Anweisung 280Web-Dynpro-Metrik 347Web-Dynpro-Programmierkonventi-

onen 358Web-Dynpro-Standardprüfung 356Worthäufigkeit von Kommentaren 350

Prüfvariante 38, 156ändern 37anlegen 39anzeigen 37besondere 42cl_ci_checkvariant 141, 150, 157DEFAULT 42, 90importieren 124kopieren 37PERFORMANCE_CHECKLIST 42Prüfvariantenbaum 40, 70sichern 41Standardprüfvariante 42TRANSPORT 42, 133transportierbare 39

Pseudoattribut, Hinweis 175Pseudokommentar 75, 88, 200, 202,

203, 204, 211, 372Beispiel 89Dokumentation 93Empfehlung 89, 95Hinweis 89Icon 91, 93Kennung 88Position 88Prüfungsdokumentation 91Überblick 94universeller 95

Puffereinstellung 285Pufferinvalidierung 279Puffersynchronisation 257Pufferung 287

Einstellung 244Pufferungstyp 287

Q

quadratisches Laufzeitverhalten 267, 268

Qualitätsmanager 130, 133Qualitätssicherung, proaktive 155Qualitätsstandard 155Quelltext-Plug-in 381

R

READ REPORT 299READ TABLE...BINARY SEARCH 269,

326Referenzübergabe 270regulärer Ausdruck 330Relevanz 237Rendering 349Report

rs_ci_compare 111rs_ci_email 119rs_ci_emailtemplate 122

REPOSRC 86RETURNING-Parameter 270, 272, 273ROLLBACK WORK 298Roundtrip 258, 294rs_ci_diff 114rs_eu_crossref 383Rückgabeparameter 273Rule Hint 369Run Time Monitor 33RZ12 128

S

s_cov_adm 191s_cts_admi 131S_MEMORY_INSPECTOR 32, 248SAKB5 78, 381, 384SAP Business Workplace 118

Dokument 118SAP Code Inspector 31, 34, 36, 71, 90,

101, 124, 126, 164, 177Berechtigung 67Einstellung 67Empfehlung 71Integration in eigenen Code 157

SIX.fm Seite 463 Dienstag, 5. Juli 2011 10:22 10

464

Index

Paket s_code_inspector 141, 150, 166, 167, 172

Start 34Testverwaltung 68

SAPconnect 117, 120SAP-Hinweis

123546 2451296076 3061487337 3001502272 3001525427 2971570378 1291577509 2461583627 32748230 295537844 283543359 26783088 386886682 386

SAPscript-Editor, Empfehlung 171SAP-Standardprüfung 63SAP-Systemverbund 130SAP-Tabellenpuffer 255, 377

umgehen 255SAP-Transportwesen 125, 130, 136

CTS_REQUEST_CHECK 136Hinweis 133

SAT 32, 76, 248, 263SAUNIT_CLIENT_SETUP 353SCAN ABAP-SOURCE 217, 239Schlüsselwortdokumentation 313SCI � SAP Code Inspectorsci_attent 196, 197, 199sci_atttab 195, 196SCI_SHOW_RESULTS 147SCICHKV_PA 185SCIERRTY 202SCIEXCEPTN 95, 105, 108SCIEXCEPTN_APPL 101, 106, 108SCII 34scimessage 200, 201, 202, 210, 211scimessages 200, 201, 212SCIPRIORITIES 210, 214scir_objt 191SCOT 118SCOV 32, 81Screen Painter 360SCU3 290SE03 53, 130SE09 131, 314

SE10 131SE11 35, 252, 285, 286SE18 136SE19 136, 137, 139SE24 35SE30 32, 76, 77, 248, 263SE37 35SE38 35, 111, 115, 119SE54 366SE61 69, 72, 169, 171, 174, 204SE80 34, 80, 86, 90, 98, 105, 109, 134,

152, 171, 229, 348SECATT 33Sekundärindex 285, 290SELECT * 294SELECT ... BYPASSING BUFFER 257SELECT ... ENDSELECT 261, 264, 276,

294SELECT ... FOR ALL ENTRIES 258, 295SELECT ... FOR ALL ENTRIES IN itab

326SELECT ... FOR UPDATE 257SELECT COUNT(*) 277SELECT DISTINCT 256, 259SELECT SINGLE 256sequenzieller Zugriff 267Servergruppe 127

pflegen 128SGEN 317Shared Object 309SHMA 310Sichtbarkeit

globale 37lokale 37

Skalierbarkeit 267SLIN 31, 192, 311, 313, 316SM36 129SNAP 83Softwarekomponente 47SORTED TABLE 267, 322Sortierreihenfolge 322, 323SOST 117Spaghetticode 334sprachabhängige Tabelle 293Spracherkennung 344SPROXY 384SQL-Injection 296, 299, 300, 302SQL-Trace 32, 33, 372SRTM 33ST05 32, 248, 263, 372, 375, 376, 379ST22 83

SIX.fm Seite 464 Dienstag, 5. Juli 2011 10:22 10

465

Index

ST30 372, 375, 376, 379STAD 248Stammdaten 286Standardprüfung 63, 235statisches Testverfahren 33Statistik, operative Anweisung 241Struktur

sci_attent 196, 197, 199scimessage 200, 201, 202, 210, 211scir_objt 191

SU01 116, 122SUBMIT 298Subquery 256Suche 362, 363

parallele 80Suchmuster 365Suchtiefe 80Switch Framework 381Syntaxfehler 312Syntaxprüfung 310SYSTEM-CALL 298Systemprogramm 77SY-SUBRC 304

T

TabelleCUST_PRIORITIES 214E070 139INDX-artige 292interne 266REPOSRC 86SCICHKV_PA 185SCIERRTY 202SCIEXCEPTN 95, 105, 108SCIEXCEPTN_APPL 101, 106, 108SCIPRIORITIES 210, 214Sharing 265, 271SNAP 83sprachabhängige 293TADIR 48, 83, 149, 152, 192, 209TRDIR 49, 86

tabellenbasierte Ausnahme 298Tabelleneigenschaft, technische 244,

285, 286Tabellenerweiterung 245Tabellentyp

sci_atttab 195, 196scimessages 200, 201, 212

TADIR 48, 83, 149, 152, 192, 209technische Tabelleneigenschaft 244,

285, 286Testgruppe 82Testverfahren, statisches 33Testwerkzeug 29Texttabelle 293Transaktion

ABAPHELP 313, 321I18N 171RZ12 128S_MEMORY_INSPECTOR 32, 248SAKB5 78, 381, 384SAT 32, 248, 263SAUNIT_CLIENT_SETUP 353SCI � SAP Code InspectorSCII 34SCOT 118SCOV 32, 81SCU3 290SE03 53, 130SE09 131, 314SE10 131SE11 35, 252, 285, 286SE18 136SE19 136, 137, 139SE24 35SE30 32, 76, 77, 248, 263SE37 35SE38 35, 111, 115, 119SE54 366SE61 69, 72, 169, 171, 174, 204SE80 80, 86, 90, 98, 105, 109, 134,

152, 171, 229, 348SECATT 33SGEN 317SHMA 310SLIN 31, 192, 311, 313, 316SM36 129SOST 117SPROXY 384SRTM 33ST05 32, 248, 263, 372, 375, 376, 379ST22 83ST30 372, 375, 376, 379STAD 248SU01 116, 122

transaktionale Daten 286TRANSPORT 42, 133

SIX.fm Seite 465 Dienstag, 5. Juli 2011 10:22 10

466

Index

Transport Organizer 130, 135Berechtigung 131

Transportaufgabe 133, 135, 191Transportauftrag 42, 133, 135, 191Transportschicht 47Transportwesen 31TRDIR 49, 86Typkonvertierung 318

U

Übergabe, globale Variable 273Umgehung, SAP-Tabellenpuffer 255UPDATE ... WHERE 278Usability 361USING-Parameter 272

V

VALUE-Parameter 271Verantwortlicher 36, 38, 47Verbuchung 308Verwendungsnachweis 80, 109, 383

Objektmenge 110Prüfvariante 109

W

Web Dynpro 356ABAP 355ABAP-Component 347

Wertübergabe 270WHERE-Bedingung 249WHERE-Klausel 323WHILE ... ENDWHILE 264Workarea 275Worthäufigkeit 350WRITE 368

X

XSS 296, 449

Z

Zugänglichkeit 361Zugriff

optimierter 268sequenzieller 267

Zuverlässigkeit 237zyklomatische Komplexität 339

SIX.fm Seite 466 Dienstag, 5. Juli 2011 10:22 10