Code Smells in high code software zijn een van de belangrijkste redenen om te refactoren. Code Smells in een low-code platform, dat lijkt op het eerste gezicht een tegenspraak. Hoewel traditionele Code Smells in OutSystems niet zo zeer zichtbaar zijn, kun je een aantal software patronen verre van ideaal noemen.

Hoe ontstaan Code Smells in OutSystems?

Code Smells zijn bijna niet te voorkomen. Veranderende functionaliteit zorgt ervoor dat de oplossing niet meer in lijn is met de huidige implementatie. Agile werken werkt veranderende functionaliteiten in de hand, en ook de architectuur van de oplossing veranderd bij een agile manier van werken. Verschillende Teams die aan een oplossing werken, hebben vaak een verschillende manier van werken. Overdracht van het ene team naar het andere is vaak een ondergeschoven kindje. Junior ontwikkelaars die nog weinig kennis en ervaring hebben van best practices. Tijdsdruk waardoor functionaliteit leveren belangrijker wordt dan kwaliteit. Gebrek aan kennis van ontwikkelaars van het domein waarvoor de oplossing ontwikkeld wordt. Onvoldoende testen. Het niet uitvoeren van peer reviews. Technical Debt.

Dit zijn een aantal redenen waardoor Code Smells ontstaan. Belangrijk hierbij is dat het vaak externe factoren zijn die Code Smells veroorzaken en niet “slechte” ontwikkelaars.

Code Smells in OutSystems

Wat voor soort “Code Smells” kun je nu in OutSystems tegenkomen:

Lange server acties of processen

  • Smell: Excessief lange server acties of processen
  • Probleem: Deze zijn moeilijk te begrijpen en onderhouden
  • Oplossing: Opdelen van complexe logica in kleinere beter beheersbare server acties

 

Ongebruikte variabelen, acties of entiteiten

  • Smell: Ongebruikte variabelen, acties of entiteiten
  • Probleem: Vertroebelt de logica en veroorzaakt onduidelijkheid
  • Oplossing: Verwijderen

 

Inconsistente naamgeving

  • Smell: Inconsistente naamgeving van variabelen, acties en entiteiten
  • Probleem: Maakt logica onduidelijk
  • Oplossing: Gebruik een heldere eenduidige verklarende naamgeving

 

Hard gecodeerde variabelen

  • Smell: Hard gecodeerde variabelen
  • Probleem: Verlaagd de onderhoudbaarheid en zorgt voor inflexibele code
  • Oplossing: Gebruik constanten of configuratie entiteiten om deze waarden te managen

 

Complexe conditionele logica

  • Smell: Geneste en over complexe logica
  • Probleem: Lastig te begrijpen en vaak oorzaak van fouten
  • Oplossing: Opdelen in kleinere leesbare expressies of maak gebruik van help functies.

 

Excessieve client side logica/acties

  • Smell: Excessieve client side logica/acties
  • Probleem: Zorgt voor vertraging in de UI
  • Oplossing: Optimaliseer client side logica of verplaats zware berekeningen naar server acties

 

Excessieve database query’s

  • Smell: Meerdere onnodige database queries in een acties
  • Probleem: Veroorzaakt performance problemen en suboptimaal gedrag
  • Oplossing: Combineer queries/aggregaties, gebruik lokale variabelen voor reeds opgehaalde waarden

 

Ongebruikte schermen of web blokken

  • Smell: Ongebruikte schermen of web blocken die niet meer in gebruik zijn
  • Probleem: Ongeorganiseerde/rommelige applicatie en veroorzaakt onduidelijkheid
  • Oplossing: Verwijderen

 

Grote modules

  • Smell: Modules met veel elementen
  • Probleem: Lastig te onderhouden en te navigeren
  • Oplossing: Opdelen in kleinere meer gefocuste modules.

 

Gebrek aan relevante documentatie

  • Smell: Te veel onnodige of ontbrekende documentatie/commentaar
  • Probleem: Vermindert de begrijpbaarheid van de logica.
  • Oplossing: Gebruik eenduidige verklarende naamgeving, geef alleen commentaar bij zaken die niet op het eerste gezicht duidelijk zijn waarom iets gedaan wordt.

 

Gedupliceerd Code

  • Smell: Gedupliceerd Code
  • Probleem: Code moet op meerdere plaatsen onderhouden worden.
  • Oplossing: Gebruik functies/sub acties om code te centraliseren.

 

Code Metrics/Technical debt in OutSystems

In het algemeen geldt hoe hoger de complexiteit, hoe lastiger is de oplossing te onderhouden. Om de complexiteit van een oplossing te bepalen zijn er verschillende mogelijkheden.

Het aantal elementen in een modules (schermen, acties, entiteiten, etc.), publiek of niet publiek. Het aantal dependencies van een module (van hoeveel modules is deze module afhankelijk en hoeveel modules zijn afhankelijk van deze module en het aantal elementen dat van een module gebruikt maakt).

De complexiteit van een actie of proces, hoeveel elementen zitten er in een actie en hoeveel mogelijke paden zitten er in een actie. Hoeveelheid dubbele code. Hoeveelheid custom code (javascript/c#). Etc.

Hoe voorkom je nu de meeste Code Smells?

  • Gebruik best practices
  • Maak duidelijke afspraken over naamgeving
  • Doe Peer Reviews
  • Train je ontwikkelaars
  • Koppel een junior ontwikkelaar aan een senior ontwikkelaar
  • Evalueer regelmatig je oplossingen
  • Test je oplossingen
  • Gebruik hulpmiddelen om inzicht te krijgen in mogelijk Code Smells en de complexiteit van je oplossingen

 

Technische hulpmiddelen

In OutSystems zijn er een aantal hulpmiddelen die je helpen Code Smells te voorkomen en te identificeren.

OutSystems Service Studio

  • Kijk naar de waarschuwingen!

 

Discovery

  • Los findings op
  • Kijk naar afhankelijkheden tussen modules
  • Controleer de architectuur

 

AIMentor

  • Report
  • Overview
  • Technical debt

 

Vooral AIMentor is een erg sterk hulpmiddel om Code Smells op te sporen. Onder Maintenance vind je alle code patterns (Code Smells) waarop gecontroleerd wordt. Afhankelijk van de belangrijkheid voor de organisatie/business kun je de impact van bepaalde code patterns aanpassen.

Voor elke gevonden Code Smell in het report wordt een mogelijke oplossing aangedragen en kun je het betreffende element meteen in Service Studio openen.

 

Outsystems lowcode codesmells softwarequality outsystemsdeveloper

Marc Wetters

Senior Software Architect at LowQode