A Kiuwan es poden gestionar diferents models d’acord amb les necessitats d’anàlisi que es vulguin cobrir. Cada model té actives unes regles o unes altres.

Model de qualitat del CTTI

Des del CTTI s'ha establert un model propi que es basa en reduir els defectes crítics que proporciona la plataforma, i establir els que realment considerem crítics, en les regles de Fiabilitat i Eficiència amb criticitat Alta i Molt alta. La classificació de criticitat és el resultat d'un treball amb experts de desenvolupament per a cadascun dels llenguatges. En funció de la retroalimentació dels diferents proveïdors i la validació i suport per part de l'equip de Kiuwan es podria plantejar algun canvi de criticitat.

A continuació podeu trobar les regles crítiques considerades per a cada llenguatge de programació:

Regles llenguatge Java

Fiabilitat

Nom Prioritat Descripció
Avoid assigning values to variables inside for loops Molt Alta Ús excessiu de memòria del sistema
Do not declare an array field as volatile Molt Alta Provoca que les dades no siguin persistents (manca de fiabilitat) i sigui propens a errors.
Avoid removing listeners in finalize() methods Molt Alta Provoca una manca de fiabilitat ja que hi ha objectes o escoltadors sense eliminar de memòria.
Avoid implementing Runnable without a run() method Molt Alta Provoca errors de tipus d'execució, no es fa un ús correcte de les classes.
Avoid naming not-constructor methods with the same name than its class Molt Alta Dificulta la comprensió i la fiabilitat de les dades, perquè hi ha problemes d'escriptura de classes o constructors.
Avoid calling Thread.resume(), Thread.stop(), Thread.suspend(), or Runtime.runFinalizersOnExit() Molt Alta Provoquen errors de tractaments de fils, afegeix molta dificultat en la detecció d'errors.
Rollback transactions if an exception occurs Molt Alta Provoca errors de dades obsoletes motivat per a un mal processament d'errors.
If an inner class is persistent, it should be static Molt Alta Provoca problemes de persistència de dades, hibernate no pot persistir en classes no estàtiques.
Avoid capturing NullPointerExceptions Molt Alta Provoca una sobre càrrega de rendiment i afecta a la fiabilitat ja que dificulta la identificació dels múltiples errors capturats.

Eficiència

Nom Prioritat Descripció
Call super.finalize() in the finally block of finalize() methods Molt Alta El defecte provocarà que quedin recursos d'objectes en memòria sense eliminar després del seu ús empitjorant el rendiment de l'aplicació
Do not create Datasource variables in local methods Molt Alta La utilització de variables que implementen accions amb la BBDD als mètodes locals pot provocar múltiples activitats a la BBDD, de forma no controlada, que finalitza amb una saturació d'accions a realitzar a la BBDD
Avoid using method calls in a loop Alta Provoca un sobre esforç ja que ha d'invocar al mètode per a cada execució dins del bucle.
Avoid calling java.lang.Runtime from any servlet Molt Alta Limita l'eficiència de l'aplicació. Consumeix molts recursos i utilitats a nivell de sistema.
Avoid calling java.lang.Thread from any servlet Molt Alta Augmenta la complexitat. La seva implementació és propensa a errors i són mes difícil d'identificar.

Regles llenguatge Javascript

Fiabilitat

Nom Prioritat Descripció
Avoid assignments into conditional statements Molt Alta Recordeu que l'assignació "a = b" en un context booleà es pren com a valor booleà de b, que pot resultar en errors i bucles infinits.
Avoid declaring a variable with a name that is already used Alta No duplicar noms de variables per evitar possibles errors i millorar la llegibilitat.
Avoid duplicated argument names in function declarations Alta Condueix a un codi confús i redueix la llegibilitat.
Avoid duplicating property names in object literals Alta Duplicar el nom de la propietat d'un objecte literal sobreescriu el valor anterior de la propietat, això pot provocar confusions i errors.
Avoid registering event listeners on the $rootScope in controllers Alta Quan el controlador es destrueix, aquesta referència es manté viva i el listener continua processant esdeveniments. Registrar els listerners de l'esdeveniment a l'abast del controlador propi no és un problema.
Avoid using 'with' statement Alta Crear una referència a l'objecte reutilitzat i utilitzeu-lo per resoldre referències.
Avoid using the + and - unary operators with objects Alta Evitar operacions confuses i propensas a errors millora la fiabilitat.
Avoid WHEN OTHERS THEN NULL in exceptions Alta Millora la seguretat de l'aplicació i manté totes les excepcions ateses.
Bind to objects in scope, instead of binding to properties Molt Alta Evita comportaments inesperats
Check NO_DATA_FOUND exception when SELECT with INTO statement is used Alta Cal tenir en compte les excepcions que es coneixen per evitar errors.
Define variables with var Alta Disminueix la probabilitat d'efectes secundaris no intencionats.
Delete operator can be only properly used with object properties Alta Evitar l'ús incorrecte dels operaris redueix els errors, millorant la fiabilitat.
Detects dead code after GOTO statements Molt Alta Els GOTO trenquen el flux del programa. El codi que hi ha darrere no s'executarà.
Do not put queries after RAISE and RAISE_APPLICATION_ERROR Molt Alta Qualsevol consulta després de RAISE i RAISE_APPLICATION_ERROR no s'executarà.
Potential infinite loops Alta Aquestes inconsistències poden causar inestabilitat i bucles infinits.
Prevent name collision in AngularJS component definition Alta Eviteu la col.lisió de noms en l'àmbit global, que conduiria a un comportament inesperat.
Restrict directives to elements and attributes Alta Eviteu efectes secundaris no desitjats. Es recomana restringir l'ús de directives als noms i atributs dels elements.
Use 'RAISE_APPLICATION_ERROR' after 'EXCEPTION WHEN OTHERS' Molt Alta Sense una crida al mètode RAISE_APPLICATION_ERROR, quan hi hagi una excepció, no hi haurà errors ni definició.
Use "controller as" syntax in views Molt Alta Evitar fer un seguiment dels errors en accedir als àmbits i les seves propietats i mètodes.
Use minification-safe annotations in dependency injection Molt Alta Evitar errors d'execució quan utilitzeu minification-safe annotations.
Use of INSERT, UPDATE and DELETE with COMMIT and ROLLBACK invocations Molt Alta Permetre que la transaccionalitat de l'operació sigui controlada de vegades per la base de dades (si procediments i funcions amb COMMIT i ROLLBACK) i altres vegades per una capa superior, genera un control de buit que pot conduir, en cas d'errors, a operacions no consolidades o parcialment consolidades.
WHEN OTHERS clause must be included in exceptions Alta Millora la seguretat de l'aplicació i manté totes les excepcions ateses.

Eficiència

Nom Prioritat Descripció
Always use ng-src for images when including an AngularJS expression Alta Eviteu la sol·licitud d'error per carregar la imatge. Quan s'inclogui una expressió AngularJS dins del text de la font d'una imatge, s'ha d'utilitzar l'atribut ng-src.
Avoid complex AngularJS expressions in HTML Alta Les expressions AngularJS són expressions de JavaScript i es poden incloure en HTML, generalment tancat per {{}}. Evitar avaluar diverses operacions complexes diverses vegades.
Avoid object instantiation into loops Alta Evitar la creació d'objectes temporals dins d'un bucle disminueix l'excés de gestió de la memòria, millorant-ne l'eficiència.
Avoid too big JavaScript files Molt Alta Els fitxers petits proporcionaran millors temps de descàrrega del navegador, millorant el rendiment percebut.
Define variables as VARCHAR2, nor as VARCHAR Molt Alta VARCHAR2 fa un millor ús de l'espai.
Do not access to inserted, updated or deleted registers to obtain fields (before or after the operation) Molt Alta És millor utilitzar les construccions INSERT / UPDATE / DELETE RETURNING … INTO … Per estalvi de temps.
Do not use eval() function, for security and performance reasons Molt Alta Si l'usuari final té control sobre el codi avaluat (perquè el codi es concatenava amb les dades de l'usuari), això condueix a vulnerabilitats d'injecció de scripts, Atacs de seguretat coneguts com a scripting entre llocs.
Do not use GROUP BY in fields that are not present in the select Molt Alta No es permet utilitzar GROUP BY en consultes que obtinguin dades de les funcions d'agregació, però no dels camps GROUP BY.
Do not use the same WHERE clause in two consecutive queries Alta No es permet accedir a la mateixa taula amb la mateixa clàusula WHERE en dues consultes consecutives
It is not allowed to confirm the existence of a record before updating it Molt Alta No es permet l'ús de SELECT abans de l'ACTUALITZACIÓ per motius d'eficiència.
Resolve controller dependencies in routing Alta Permet millorar la percepció del rendiment, separar responsabilitats i millorar la probabilitat.
Use $watchCollection instead of $watch with three parameters Molt Alta La funció $ watch té dos paràmetres obligatoris i un tercer paràmetre opcional. Quan aquest paràmetre és cert, AngularJS realitzarà una comparació de l'arbre de l'objecte profund. Aquesta és una operació molt pesada.
Use BIND variables Alta Fa que el codi sigui més fàcil de llegir i més clar.

Regles llenguatge ABAP

Fiabilitat

Nom Prioritat Descripció
Avoid CLIENT SPECIFIED option Alta A causa d'errors lògics, les dades d'altres clients / empreses es poden filtrar.
Avoid configurable ASSERTs with side-effects Alta Pot provocar corrupció de dades, errors lògics i altres comportaments no desitjats. Els ASSERTS proporcionen una instal·lació per comprovar la correcció en un punt determinat i finalitzen l'execució del programa abans de la següent declaració.
Avoid using FREE MEMORY without explicit data cluster Molt Alta Elimina tots els clústers de dades des de la memòria ABAP, que pot provocar errors quan s'utilitzen els clústers de dades després.
Avoid write operations on sensitive database tables from ABAP code Molt Alta Algunes taules són per a ús intern de SAP, i escriure-hi pot corrompre el sistema SAP.
Do not catch CX_ROOT Alta CX_ROOT és el tipus d'excepció bàsic, és probable que prengui errors no desitjats, com els errors del sistema.
Do not set StretchedVertically in MatrixLayout Alta Pot produir molts errors en temps d'execució
Do not use WHERE/FROM/TO in LOOP AT with control level processing blocks (AT FIRST, AT NEW, AT END, AT LAST) Alta La interacció d'un LOOP restringit amb els blocs de processament a nivell de control AT … ENDAT no es defineix correctament.
Ensure that internal table in FOR ALL ENTRIES clause is not empty Alta Si la taula interna està buida, la clàusula WHERE s'ignora, i la instrucció SELECT retorna totes les files de la taula de base de dades, que probablement no és el resultat esperat.
Every open resource (cursor or dataset) should be closed Alta S'ha aplicat un límit pel sistema operatiu o la base de dades, sobre el nombre d'elements oberts que s'han obert simultàniament. Quan es supera aquest límit, obrir un nou fitxer fallarà amb un error de temps d'execució.
Invalid authorization fields in AUTHORITY-CHECK Alta Els camps referenciats s'han de definir a l'objecte d'autorització. D'una altra manera, la AUTHORITY-CHECK fallarà (amb un valor no igual a zero per sy-subrc), i l'autorització no tindrà èxit, fins i tot si l'usuari té assignada la funció correcta
Load only existing tables in SAP system Alta El fitxer InfoTableSystem.txt, s'utilitza per a la comprovació.
Only use existing transactions Alta El fitxer TransactionSystem.txt, s'utilitza per a verificacions.
Sort internal tables before removing duplicates Alta ABAP proporciona la instrucció DELETE ADJACENT DUPLICATES per eliminar registres duplicats de una taula interna.
Use only existing messages in the table T100 Alta Verifiqueu si les trucades es refereixen a un missatge existent a la taula S100 T100. S'utilitza MessageSystem.txt, exportat des de SAP.
Use SAP locking mechanism instead of SELECT SINGLE FOR UPDATE Molt Alta Els bloquejos de bases de dades implícites poden provocar colls d'ampolla i bloquejos. Es recomana utilitzar el mecanisme de bloqueig SAP (trucades a ENQUEUE_ / DEQUEUE_ functions) per a recursos de bloqueig lògic, en comptes de bloquejos de bases de dades.
Use WHILE instead of unconditional DO loops Alta Es suggereix utilitzar WHILE per fer explícita la lògica de finalització del bucle, evitant errors lògics que poden conduir a un bucle infinit.
WebDynpro Layout should be modified only in wdDoModifyView method Alta Es produirà una única infracció per mètode il·legal amb trucades per establir atributs de disseny.
Modification of input parameter passed by reference Alta Pass-by-reference, passar la referència d'un argument a la funció de trucada al paràmetre de la funció anomenada. La funció anomenada pot modificar el valor de l'argument usant la seva referència passada

Eficiència

Nom Prioritat Descripció
Activate table buffering when needed Alta El buffering funciona millor per a taules que es llegeixen sovint però s'escriuen amb moderació.
Avoid declaring SORT statements inside a LOOP Molt Alta Fer un SORT a taula per iteració és una operació molt ineficaç, la millor solució és utilitzar SORTED TABLE.
Avoid declaring SUBMIT statements inside a LOOP Molt Alta L'execució d'un programa amb la instrucció SUBMIT per a cada iteració d'un LOOP i utilitzar RETURN amb SUBMIT, contribueix a una degradació del rendiment.
Avoid include SELECT sentences inside a loop Alta Es generaran instruccions SQL per a cada iteració de bucle. Normalment es codifica de manera més eficient com una sola SELECT amb una clàusula FOR ALL ENTERS
Avoid nested SELECT statements Molt Alta Els SELECTs niats es poden convertir, en la majoria dels casos, a una sola SELECT, fent servir JOIN entre les taules de destinació, utilitzant una vista de la base de dades o utilitzant FOR ALL ENTRIES.
Avoid NOT IN subquery in SELECT Alta NOT IN pot fer que les optimitzacions d'índex no estiguin disponibles i portar a l'escaneig complet de la taula
Avoid using the EXISTS clause Alta Per filtrar un conjunt de files determinat basat en els resultats de la subconsulta. EXISTS és ineficient.
Avoid using UP TO ROWS clause in combination with FOR ALL ENTRIES in SELECT statements Molt Alta Podria portar una pèrdua de rendiment així com resultats inesperats i inconsistents a través de diferents execucions.
Do not use wildcards (% or _) at the beginning of the literal used in LIKE comparisons in SQL statements Alta Provoca un índex complet d'escaneig de taula i disminueix el rendiment. Sobre tot en taules grans.
EXCEPTIONS and RAISE must match Alta La regla comprova que el mètode de funció / mètode inclou RAISE o MESSAGE RAISING per a cada tipus d'excepció declarada a l'addició EXCEPTIONS i que no es produeix cap excepció no declarada a EXCEPTIONS.
SELECT-OPTIONS must always include key or indexed fields Alta Camps no indexats o no clau en taules grans, produeix degradació del rendiment.
Try to limit the number of tables used in a SELECT query Alta Una SELECT en massa taules pot comportar un rendiment deficient, i pot implicar un disseny de base de dades incorrecte
Use BINARY SEARCH with WITH KEY when reading tables Alta La cerca binària d'una taula interna gran és més ràpida que una cerca seqüencial.
Use indexed columns in WHERE condition on large tables Alta Per motius de rendiment, el WHERE ha d'incloure camps d'índex.
Use join instead of select + loop + nested select Alta Per optimitzar

Regles llenguatge PHP

Fiabilitat

Nom Prioritat Descripció
Assignment of a function call to a variable when the function does not have a return value Molt Alta Pot indicar que la funció no està implementada correctament.
Assign objects to a variable in instantiation Alta Quan un objecte es crea i no s'assigna a una variable, es pot produir una fuga de memòria.
Avoid $this in static methods Molt Alta L'ús de $this en un mètode estàtic provocarà un error en temps d'execució.
Avoid calling a function or method with more parameters than declared Molt Alta Pot donar lloc a un error lògic si es modifica la declaració de la funció.
Avoid duplicated argument names in function declarations Molt Alta Això condueix a un codi confús i redueix la llegibilitat.
Avoid unused function parameters Alta Paràmetres de funció no utilitzats. Poden provocar defectes en la lógica o no es van esborrar en el moment que es van deixar de utilitzar.
Avoid unused local variables Alta Variable local no utilitzada en una funció. Poden provocar defectes en la lógica o no es van esborrar en el moment que es van deixar de utilitzar.
Avoid unused private fields Alta Camp privat no utilitzat en una classe. Poden provocar defectes en la lógica o no es van esborrar en el moment que es van deixar de utilitzar.
Constructor returns a value Molt Alta El valor RETURN d'un constructor sempre és l'objecte en si. Intentar utilitzar una declaració de retorn en un constructor amb un altre propòsit és incorrecte.
Default arguments must be on the right side of any non-default arguments Alta Si qualsevol argument predeterminat no es troba a la dreta d'un argument no predeterminat, una crida a la funció que omet els arguments produirà resultats inesperats.
Do not use call-time pass-by-reference arguments in function calls Alta Els call-time pass-by-reference s'han de definir a les declaracions de funcions. Si no és així, provoca efectes colaterals.
Do not use include and its variants with parentheses Alta Include i variants (include_once, require, require_once) són declaracions, no funcions. Els parèntesis no han d'envoltar el nom del fitxer inclòs. Pot produir errors lògics, difícils de localitzar.

Eficiència

Nom Prioritat Descripció
Avoid &-ref-operator to substitute (or alias) a complex mutidim-array Alta No utilitzar ref-operator, millora el rendiment
Avoid doing SQL queries within a loop Molt Alta Ralentitza, el no ús millora el rendiment.
Do not use error suppression with @ Molt Alta La supressió d'errors amb @ és molt lenta.
Do not use POSIX Extended regular expression functions Molt Alta Utilitzeu sempre les funcions preg_ compatibles amb Perl (PCRE). PCRE és compatible amb Unicode i és més ràpid i més consistent en la sintaxi.
Smart substring matching Alta Utilitzeu strncmp () i strncasecmp () en lloc de substr (). Especialment en controls no sensibles a majúscules i minúscules, aquestes funcions són molt més ràpides.
Use persistent database connections Molt Alta Les connexions persistents poden proporcionar un guany de rendiment significatiu en connexions no persistents (consumeixen menys recursos al servidor de bases de dades).

Regles llenguatge PL-SQL

Fiabilitat

Nom Prioritat Descripció
Check NO_DATA_FOUND exception when SELECT with INTO statement is used Alta Cal tenir en compte les excepcions que es coneixen per evitar errors i facilitar la prova.
Detects dead code after GOTO statements Alta Els GOTO trenquen el flux del programa. El codi que hi ha darrere mai no serà possible.
Do not put queries after RAISE and RAISE_APPLICATION_ERROR Alta Qualsevol consulta després de RAISE i RAISE_APPLICATION_ERROR no s'executarà.
Use 'RAISE_APPLICATION_ERROR' after 'EXCEPTION WHEN OTHERS' Alta Sense una crida al mètode RAISE_APPLICATION_ERROR, no hi hauria errors ni definició de l'error.
Use of INSERT, UPDATE and DELETE with COMMIT and ROLLBACK invocations Alta No fer-ho, pot generar un control de buit que pot conduir, per error, a consolidar-se.
WHEN OTHERS clause must be included in exceptions Alta Millora la seguretat de l'aplicació i manté totes les excepcions ateses

Eficiència

Nom Prioritat Descripció
Define variables as VARCHAR2, nor as VARCHAR Molt Alta VARCHAR2 fa un millor ús de l'espai.
Do not access to inserted, updated or deleted registers to obtain fields (before or after the operation) Molt Alta És millor utilitzar les construccions INSERT / UPDATE / DELETE RETURNING … INTO … Per estalvi de temps.
Do not use GROUP BY in fields that are not present in the select Molt Alta No es permet utilitzar GROUP BY en consultes que obtinguin dades de les funcions d'agregació, però no dels camps GROUP BY. Consumeixen molt temps i recursos.
Do not use the same WHERE clause in two consecutive queries Alta No es permet accedir a la mateixa taula amb la mateixa clàusula WHERE en dues consultes consecutives.
It is not allowed to confirm the existence of a record before updating it Molt Alta No es permet l'ús de SELECT abans de l'ACTUALITZACIÓ per motius d'eficiència. Es recomana utilitzar l'opció SQL% ROWCOUNT.