Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×

Niet onderhoudbare software in 10 makkelijke stappen

Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Cargando en…3
×

Eche un vistazo a continuación

1 de 50 Anuncio

Niet onderhoudbare software in 10 makkelijke stappen

Descargar para leer sin conexión

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.

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.

Anuncio
Anuncio

Más Contenido Relacionado

Similares a Niet onderhoudbare software in 10 makkelijke stappen (20)

Anuncio

Más reciente (20)

Niet onderhoudbare software in 10 makkelijke stappen

  1. 1. Niet onderhoudbare software in 10 makkelijke stappen Rick Beerendonk (NForza) @rickbeerendonk rick@nforza.nl
  2. 2. Wat is ononderhoudbaar? We zijn niet voorbereid op deze situatie
  3. 3. Waarom is onderhoudbare software belangrijk?
  4. 4. Onderhoudbaar == Productief
  5. 5. Maximaliseer bezettingsgraad. Planning Maximaliseer bezettingsgraad. Beperk queue-size! Software Development is geen lopende band met 99% betrouwbaarheid/zekerheid.
  6. 6. Maximaliseer bezettingsgraad Wachtrij calculator M/M/1 wachtrij
  7. 7. Afstemming Wetenschap neemt een vlucht zodra gekozen wordt voor standaard namen een eenheden.
  8. 8. Naamgeving •Beschrijf wat het doet •Uitspreekbaar •Zoekbaar
  9. 9. Code layout •Kies er één
  10. 10. Limit yourself! Exchange current flexibility for future flexibility.
  11. 11. Real Options 1. Options have value 2. Options expire 3. Never commit early unless you know why Technical Debt is a sold option!
  12. 12. Design patterns Houden opties open
  13. 13. “We know brains are brilliant at detecting patterns. So we should be reeeeeallly careful about the patterns we were/are exposed to.” Kathy Sierra
  14. 14. Abstracties Hoe specifieker de interface hoe generieker het gebruik
  15. 15. Abstracties •Zelfde namen •Zelfde layout •Zelfde volgorde •Single Responsibility Hoe te herkennen?
  16. 16. 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
  17. 17. Abstracties Voorbeeld: Kan specifieker (1) public interface IEnumerable<out T> { IEnumerator<T> GetEnumerator(); }
  18. 18. Abstracties Voorbeeld: Kan specifieker (2) public interface ICollection<T> { int Count { get; } void Add(T item); void Clear(); bool Remove(T item); (…) }
  19. 19. Abstracties Voorbeeld: Kan specifieker (3) public interface ICollection<T> { int Count { get; } void Add(T item); void Clear(); bool Remove(T item); (…) }
  20. 20. Abstracties •Investeer tijd in het abstraheren van code. Refactor! De weg naar flexibeler code die op de toekomst in voorbereid!
  21. 21. Makkelijk Geriefelijk, geen inspanning kostend (geen leercurve, snelle installatie, bekend) Subjectief
  22. 22. Eenvoudig Één rol, taak, concept of dimensie Objectief
  23. 23. Simple vs Easy Easy: A+B+C function DoAll() { DoA code; DoB code; DoC code; } DoAll(); Simple: A, B, C, A+B, A+C, B+C, A+B+C function DoA() {} function DoB() {} function DoC() {} DoA(); DoB(); DoC();
  24. 24. Immutable state OO o o o… Feiten veranderen niet. Waarom wel in onze software?
  25. 25. 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!"
  26. 26. Mutable example using 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); } } } }
  27. 27. Immutable example using System; using System.Collections.Generic; using System.Collections.Immutable; // NuGet: Microsoft Immutable Collections using 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); } } } }
  28. 28. Mutable state •Copy strategy •Locking strategy •Thread safe objects •One big fat DB query “70ies problems solutions”
  29. 29. Neem niks aan Blijf zelf nadenken
  30. 30. Code is niet vanzelfsprekend Is het weloverwogen en doelbewust geschreven?
  31. 31. 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)
  32. 32. Separation of Concerns Maakt redeneren over code mogelijk. Limiteert de dingen die je moet onthouden. Verkleint de scope.
  33. 33. Separation of Concerns •Gebruik modules •Minimaliseer Coupling •Gebruik Dependency Injection •Gebruik Queues i.p.v. rechtstreekse aanroepen
  34. 34. Tests Compileert het? Start het programma op? Werkt het zoals bedoeld?
  35. 35. Unit tests •Hebben waarde tijdens wijzigen van code •Kosten veel tijd om te schrijven •Bemoeilijken refactoring •Informatietheorie: Entropie = 0
  36. 36. Genereer tests public static int Negate(int value) { return -value; } Voorbeeld // Int.MaxValue = 2147483647; // Int.MinValue = -2147483648;
  37. 37. 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/
  38. 38. Reviews Bugs vroeg onderkennen. Verbeteren van design. Bevorderen samenwerking.
  39. 39. Reviews •Formeel of informeel •Laat de ontwikkelaar de code uitleggen •Wees aardig Hoe?
  40. 40. Automatiseer Builds Deployments Continues Integration
  41. 41. Team Hou ‘t klein. Opt-in, intrinsieke motivatie. Gedrag, accepteer falen.
  42. 42. "Productivity is a by-product of feeling good" Daniel Mezick
  43. 43. 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
  44. 44. Coaching
  45. 45. Coach •Slechte coach: Verbetert resultaat •Middelmatige coach: Verbetert oorzaak •Goede coach: Verbetert de pupil
  46. 46. Coaching •Ask (listen), don’t tell •Richt je op mensen, niet op taken •Laat mensen zichzelf coachen en verbeteren
  47. 47. Verbeter jezelf •Learn software development •Learn how to solve problems •Learn how to be a coach •Teach! Always remain curious, authentic and creative!
  48. 48. Aanpassers Flexibele mensen zijn het best voorbereid op de toekomst. Kick out de betweters.
  49. 49. 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

Notas del editor

  • Yardsvs Meters. Fahrenheit vs Celsius.

×