Niet onderhoudbare software in 10 makkelijke stappen

50

description

Ontwikkelde software eindigt vaker dan ons lief is in moeilijk te onderhouden code en een minder productieve organisatie. Ondanks goede intenties blijken simpele wensen moeilijker te implementeren dan nodig. Er ontstaan meer problemen dan verwacht. In het begin ging het allemaal nog zo snel, makkelijk en foutloos. Waar ging het mis? In deze sessie gaan we die vraag beantwoorden door onderscheid te maken tussen wat makkelijk lijkt en wat eenvoudig is. We behandelen bewezen technieken alsmede veelbelovende ontwikkelingen. Uiteraard kijken we verder dan het coderen, want software ontwikkeling blijft mensenwerk.

Transcript of Niet onderhoudbare software in 10 makkelijke stappen

Page 1: Niet onderhoudbare software in 10 makkelijke stappen
Page 2: Niet onderhoudbare software in 10 makkelijke stappen

Niet onderhoudbare software in 10 makkelijke stappen Rick Beerendonk (NForza)@[email protected]

Page 3: Niet onderhoudbare software in 10 makkelijke stappen

Wat is ononderhoudbaar?We zijn niet voorbereid op deze situatie

Page 4: Niet onderhoudbare software in 10 makkelijke stappen

Waarom is onderhoudbare software belangrijk?

Page 5: Niet onderhoudbare software in 10 makkelijke stappen

Onderhoudbaar==Productief

Page 6: Niet onderhoudbare software in 10 makkelijke stappen

Maximaliseer bezettingsgraad.

Planning

Maximaliseer bezettingsgraad.Beperk queue-size!Software Development is geen lopende band met 99% betrouwbaarheid/zekerheid.

OnderhoudbaarStap 1

Page 7: Niet onderhoudbare software in 10 makkelijke stappen

Maximaliseer bezettingsgraad

Wachtrij calculator

M/M/1 wachtrij

Page 8: Niet onderhoudbare software in 10 makkelijke stappen

Afstemming

Wetenschap neemt een vlucht zodra gekozen wordt voor standaard namen een eenheden.

OnderhoudbaarStap 2

Page 9: Niet onderhoudbare software in 10 makkelijke stappen

Naamgeving

•Beschrijf wat het doet•Uitspreekbaar•Zoekbaar

Page 10: Niet onderhoudbare software in 10 makkelijke stappen

Code layout

•Kies er één

Page 11: Niet onderhoudbare software in 10 makkelijke stappen

Limit yourself!Exchange current flexibility for future flexibility.

Page 12: Niet onderhoudbare software in 10 makkelijke stappen

Real Options1. Options have value2. Options expire3. Never commit early unless you know why

Technical Debt is a sold option!

Page 13: Niet onderhoudbare software in 10 makkelijke stappen

Design patterns

Houden opties open

OnderhoudbaarStap 3

Page 14: Niet onderhoudbare software in 10 makkelijke stappen

“We know brains are brilliant at detecting patterns. So we should be reeeeeallly careful about the patterns we were/are exposed to.”Kathy Sierra

Page 15: Niet onderhoudbare software in 10 makkelijke stappen

Abstracties

Hoe specifieker de interface hoe generieker het gebruik

OnderhoudbaarStap 4

Page 16: Niet onderhoudbare software in 10 makkelijke stappen

Abstracties

•Zelfde namen•Zelfde layout•Zelfde volgorde•Single Responsibility

Hoe te herkennen?

Page 17: Niet onderhoudbare software in 10 makkelijke stappen

Abstracties

var a = [1, 2, 3, 4, 5, 6];

for (var i = 0; i < a.length; i++) { var double = 2 * a[i]; document.write(double);}

a.forEach(function (e) { document.write(e + e); });

Voorbeeld: Moeilijk te vinden

Page 18: Niet onderhoudbare software in 10 makkelijke stappen

AbstractiesVoorbeeld: Kan specifieker (1)

public interface IEnumerable<out T>{        IEnumerator<T> GetEnumerator();}

Page 19: Niet onderhoudbare software in 10 makkelijke stappen

AbstractiesVoorbeeld: Kan specifieker (2)

public interface ICollection<T>{    int Count { get; }    void Add(T item);    void Clear();    bool Remove(T item);    (…)}

Page 20: Niet onderhoudbare software in 10 makkelijke stappen

AbstractiesVoorbeeld: Kan specifieker (3)

public interface ICollection<T>{    int Count { get; }    void Add(T item);    void Clear();    bool Remove(T item);    (…)}

Page 21: Niet onderhoudbare software in 10 makkelijke stappen

Abstracties

• Investeer tijd in het abstraheren van code. Refactor!

De weg naar flexibeler code die op de toekomst in voorbereid!

Page 22: Niet onderhoudbare software in 10 makkelijke stappen

Makkelijk

Geriefelijk, geen inspanning kostend(geen leercurve, snelle installatie, bekend)Subjectief

Page 23: Niet onderhoudbare software in 10 makkelijke stappen

Eenvoudig

Één rol, taak, concept of dimensieObjectief

OnderhoudbaarStap 5

Page 24: Niet onderhoudbare software in 10 makkelijke stappen

Simple vs EasyEasy: A+B+Cfunction DoAll() { DoA code; DoB code; DoC code;}

DoAll();

Simple: A, B, C, A+B, A+C, B+C, A+B+Cfunction DoA() {}function DoB() {}function DoC() {}

DoA();DoB();DoC();

Page 25: Niet onderhoudbare software in 10 makkelijke stappen

Immutable state

OO o o o…Feiten veranderen niet. Waarom wel in onze software?

OnderhoudbaarStap 6

Page 26: Niet onderhoudbare software in 10 makkelijke stappen

Is mutable state eenvoudig?

function change(obj) { obj.test = "No longer hola!";}

var a = { test: "hola"};var b = a;

change(b);document.write(a.test); // result: "No longer hola!"

Page 27: Niet onderhoudbare software in 10 makkelijke stappen

Mutable exampleusing System;using System.Collections.Generic;using System.Collections.Immutable;using System.Linq;

namespace MutableApp{ class Program { static void Main(string[] args) { ICollection<string> nforza = new List<string> { "Ronald", "Thomas", "Esther", "Hendrika" };

int nforza2012Count = nforza.Count(); IEnumerable<string> nforza2012 = nforza; //.ToList();

nforza.Add("Rick");

Console.WriteLine(nforza2012Count); foreach (var item in nforza2012) { Console.WriteLine(item); } } }}

Page 28: Niet onderhoudbare software in 10 makkelijke stappen

Immutable exampleusing System;using System.Collections.Generic;using System.Collections.Immutable; // NuGet: Microsoft Immutable Collectionsusing System.Linq;

namespace ImmutableApp{ class Program { static void Main(string[] args) { IImmutableList<string> nforza = ImmutableList.Create<string>("Ronald", "Thomas", "Esther", "Hendrika");

int nforza2012Count = nforza.Count(); IEnumerable<string> nforza2012 = nforza;

nforza = nforza.Add("Rick");

Console.WriteLine(nforza2012Count); foreach (var item in nforza2012) { Console.WriteLine(item); } } }}

Page 29: Niet onderhoudbare software in 10 makkelijke stappen

Mutable state

•Copy strategy•Locking strategy•Thread safe objects•One big fat DB query

“70ies problems solutions”

Page 30: Niet onderhoudbare software in 10 makkelijke stappen

Neem niks aan

Blijf zelf nadenken

OnderhoudbaarStap 7

Page 31: Niet onderhoudbare software in 10 makkelijke stappen

Code is niet vanzelfsprekendIs het weloverwogen en doelbewust geschreven?

Page 32: Niet onderhoudbare software in 10 makkelijke stappen

Eenvoudig?

•State = waarde + tijd (zie “var”)• Alles wat state aanraakt wordt verbonden

•Object = state + identiteit•Methode = functie + state•Overerving = type + type• Imperatieve loops = wat + hoe•Frameworks = jouw code + framework (mogelijk)

Page 33: Niet onderhoudbare software in 10 makkelijke stappen

Separation of Concerns

Maakt redeneren over code mogelijk.Limiteert de dingen die je moet onthouden.Verkleint de scope.

OnderhoudbaarStap 8

Page 34: Niet onderhoudbare software in 10 makkelijke stappen

Separation of Concerns

•Gebruik modules•Minimaliseer Coupling•Gebruik Dependency Injection•Gebruik Queues i.p.v. rechtstreekse aanroepen

Page 35: Niet onderhoudbare software in 10 makkelijke stappen

Tests

Compileert het?Start het programma op?Werkt het zoals bedoeld?

OnderhoudbaarStap 9

Page 36: Niet onderhoudbare software in 10 makkelijke stappen

Unit tests

•Hebben waarde tijdens wijzigen van code•Kosten veel tijd om te schrijven•Bemoeilijken refactoring• Informatietheorie: Entropie = 0

Page 37: Niet onderhoudbare software in 10 makkelijke stappen

Genereer tests

public static int Negate(int value){    return -value;}

Voorbeeld

// Int.MaxValue = 2147483647;// Int.MinValue = -2147483648;

Page 38: Niet onderhoudbare software in 10 makkelijke stappen

Not enough

•Unit testing isn’t enough. You need static typing too.• Static typing isn’t enough. You need contracts too.•Contracts are not enough. You need generative testing too.•Generative testing is not enough. You need simulation testing too.• Simulation testing is not enough. You need fuzzing too.• Fuzzing is not enough. You need luck too.• Luck is not enough. You need user testing too.

In software development, no one thing will save your ass

Bron: http://blog.fogus.me/2012/06/20/not-enough/

Page 39: Niet onderhoudbare software in 10 makkelijke stappen

Reviews

Bugs vroeg onderkennen.Verbeteren van design.Bevorderen samenwerking.

OnderhoudbaarStap 10

Page 40: Niet onderhoudbare software in 10 makkelijke stappen

Reviews

•Formeel of informeel•Laat de ontwikkelaar de code uitleggen•Wees aardig

Hoe?

Page 41: Niet onderhoudbare software in 10 makkelijke stappen

Automatiseer

BuildsDeploymentsContinues Integration

OnderhoudbaarStap 11

Page 42: Niet onderhoudbare software in 10 makkelijke stappen

Team

Hou ‘t klein.Opt-in, intrinsieke motivatie.Gedrag, accepteer falen.

OnderhoudbaarStap 12

Page 43: Niet onderhoudbare software in 10 makkelijke stappen

"Productivity is a by-product of feeling good"Daniel Mezick

Page 44: Niet onderhoudbare software in 10 makkelijke stappen

Team & de buitenwereld

•Heb duidelijke grenzen en bewaak ze•Geef snelle feedback•Wees eerlijk en voorspelbaar•Leg uit wat de dynamiek van software development is

Page 45: Niet onderhoudbare software in 10 makkelijke stappen

Coaching

OnderhoudbaarStap 13

Page 46: Niet onderhoudbare software in 10 makkelijke stappen

Coach

•Slechte coach: Verbetert resultaat•Middelmatige coach: Verbetert oorzaak•Goede coach: Verbetert de pupil

Page 47: Niet onderhoudbare software in 10 makkelijke stappen

Coaching

•Ask (listen), don’t tell•Richt je op mensen, niet op taken•Laat mensen zichzelf coachen en verbeteren

Page 48: Niet onderhoudbare software in 10 makkelijke stappen

Verbeter jezelf

•Learn software development•Learn how to solve problems•Learn how to be a coach•Teach!

Always remain curious, authentic and creative!

Page 49: Niet onderhoudbare software in 10 makkelijke stappen

AanpassersFlexibele mensen zijn het best voorbereid op de toekomst.Kick out de betweters.

OnderhoudbaarBonus

Page 50: Niet onderhoudbare software in 10 makkelijke stappen

Laat ons weten wat u vindt van deze sessie! Vul de evaluatie in via www.techdaysapp.nl en maak kans op een van de 20 prijzen*. Prijswinnaars worden bekend gemaakt via Twitter (#TechDaysNL). Gebruik hiervoor de code op uw badge.

Let us know how you feel about this session! Give your feedback via www.techdaysapp.nl and possibly win one of the 20 prizes*. Winners will be announced via Twitter (#TechDaysNL). Use your personal code on your badge.

* Over de uitslag kan niet worden gecorrespondeerd, prijzen zijn voorbeelden – All results are final, prizes are examples