Bra kod luktar inte, den doftar. Data-Tjej, 2014-02-06 - Linköping Daniel Deogun Twitter: @DanielDeogun



Relevanta dokument
This work by. Fredrik Wendt. is licensed under a. Creative Commons

Småprat Small talk (stressed vowels are underlined)

Preschool Kindergarten

FÖRBERED UNDERLAG FÖR BEDÖMNING SÅ HÄR

12.6 Heat equation, Wave equation

Isometries of the plane

Problem som kan uppkomma vid registrering av ansökan

Support Manual HoistLocatel Electronic Locks

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Förskola i Bromma- Examensarbete. Henrik Westling. Supervisor. Examiner

Styrteknik: Binära tal, talsystem och koder D3:1

Health café. Self help groups. Learning café. Focus on support to people with chronic diseases and their families

Make a speech. How to make the perfect speech. söndag 6 oktober 13

Authentication Context QC Statement. Stefan Santesson, 3xA Security AB

1. Compute the following matrix: (2 p) 2. Compute the determinant of the following matrix: (2 p)

Michael Q. Jones & Matt B. Pedersen University of Nevada Las Vegas

Isolda Purchase - EDI

Recitation 4. 2-D arrays. Exceptions

Workplan Food. Spring term 2016 Year 7. Name:

Scalable Dynamic Analysis of Binary Code

Beijer Electronics AB 2000, MA00336A,

Föreläsning 4 IS1300 Inbyggda system

Lösenordsportalen Hosted by UNIT4 For instructions in English, see further down in this document

denna del en poäng. 1. (Dugga 1.1) och v = (a) Beräkna u (2u 2u v) om u = . (1p) och som är parallell

Plats för projektsymbol. Nätverket för svensk Internet- Infrastruktur

Webbregistrering pa kurs och termin


FANNY AHLFORS AUTHORIZED ACCOUNTING CONSULTANT,

Urban Runoff in Denser Environments. Tom Richman, ASLA, AICP

Pre-Test 1: M0030M - Linear Algebra.

Materialplanering och styrning på grundnivå. 7,5 högskolepoäng

Enterprise App Store. Sammi Khayer. Igor Stevstedt. Konsultchef mobila lösningar. Teknisk Lead mobila lösningar

Webbreg öppen: 26/ /

ISO STATUS. Prof. dr Vidosav D. MAJSTOROVIĆ 1/14. Mašinski fakultet u Beogradu - PM. Tuesday, December 09,

Vässa kraven och förbättra samarbetet med hjälp av Behaviour Driven Development Anna Fallqvist Eriksson

LARS. Ett e-bokningssystem för skoldatorer.

Scaled Agile Framework

This exam consists of four problems. The maximum sum of points is 20. The marks 3, 4 and 5 require a minimum

Mina målsättningar för 2015

DVG C01 TENTAMEN I PROGRAMSPRÅK PROGRAMMING LANGUAGES EXAMINATION :15-13: 15

Kvalitetsarbete I Landstinget i Kalmar län. 24 oktober 2007 Eva Arvidsson

Service och bemötande. Torbjörn Johansson, GAF Pär Magnusson, Öjestrand GC

Om oss DET PERFEKTA KOMPLEMENTET THE PERFECT COMPLETION 04 EN BINZ ÄR PRECIS SÅ BRA SOM DU FÖRVÄNTAR DIG A BINZ IS JUST AS GOOD AS YOU THINK 05

Helping out in the kitchen or how to measure engagement

6 th Grade English October 6-10, 2014

Användning av Erasmus+ deltagarrapporter för uppföljning

Att fastställa krav. Annakarin Nyberg

Hur fattar samhället beslut när forskarna är oeniga?

Discovering!!!!! Swedish ÅÄÖ. EPISODE 6 Norrlänningar and numbers Misi.se

Syns du, finns du? Examensarbete 15 hp kandidatnivå Medie- och kommunikationsvetenskap

Ökat personligt engagemang En studie om coachande förhållningssätt

EXPERT SURVEY OF THE NEWS MEDIA

Collaborative Product Development:

Biblioteket.se. A library project, not a web project. Daniel Andersson. Biblioteket.se. New Communication Channels in Libraries Budapest Nov 19, 2007

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

CARRY YOU HOME. I've been knocked down, I've been lost With the ground shaking under my feet I gave it all to someone, who'd said fire, run

BOENDEFORMENS BETYDELSE FÖR ASYLSÖKANDES INTEGRATION Lina Sandström

Från extern till intern på tre dagar Erfarenheter från externa lärares pedagogiska kompetensutveckling

Flervariabel Analys för Civilingenjörsutbildning i datateknik

Mönster. Ulf Cederling Växjö University Slide 1

1. Varje bevissteg ska motiveras formellt (informella bevis ger 0 poang)

AGIL KRAVHANTERING. Hitta behoven bakom kraven!! Thomas Nilsson! Agile Coach & Mentor! CTO, Responsive

employee engagement concept (Eec) - a respectful work life designed around people -

Resultat av den utökade första planeringsövningen inför RRC september 2005

Module 6: Integrals and applications

STORSEMINARIET 3. Amplitud. frekvens. frekvens uppgift 9.4 (cylindriskt rör)

The reception Unit Adjunkten - for newly arrived pupils

Unit course plan English class 8C

Immigration Bank. Bank - General. Bank - Opening a bank account. Can I withdraw money in [country] without paying fees?

F ξ (x) = f(y, x)dydx = 1. We say that a random variable ξ has a distribution F (x), if. F (x) =

Kursplan. MT1051 3D CAD Grundläggande. 7,5 högskolepoäng, Grundnivå 1. 3D-CAD Basic Course

Kursplan. EN1088 Engelsk språkdidaktik. 7,5 högskolepoäng, Grundnivå 1. English Language Learning and Teaching

Consumer attitudes regarding durability and labelling

Immigration Studying. Studying - University. Stating that you want to enroll. Stating that you want to apply for a course.

Love og regler i Sverige Richard Harlid Narkos- och Intensivvårdsläkare Aleris FysiologLab Stockholm

Grammar exercises in workbook (grammatikövningar i workbook): WB p 121 ex 1-3 WB p 122 ex 1 WB p 123 ex 2

Solowheel. Namn: Jesper Edqvist. Klass: TE14A. Datum:

#minlandsbygd. Landsbygden lever på Instagram. Kul bild! I keep chickens too. They re brilliant.

Windlass Control Panel v1.0.1

EU:s ministerkonferens för e-förvaltning under det svenska ordförandeskapet

CEEQUAL i upphandling och kontrakt: Erfarenheter från OS i London

Lektion 3. Anteckningar

Teknikprogrammet Klass TE14A, Norrköping. Jacob Almrot. Självstyrda bilar. Datum:

Stad + Data = Makt. Kart/GIS-dag SamGIS Skåne 6 december 2017

Module 1: Functions, Limits, Continuity

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Kursutvärderare: IT-kansliet/Christina Waller. General opinions: 1. What is your general feeling about the course? Antal svar: 17 Medelvärde: 2.

Design Service Goal. Hantering av demonterbara delar som ingår i Fatigue Critical Baseline Structure List. Presentatör

Tänder din grill på sextio sekunder. Lights your grill in sixty seconds.

Swell code book (error taxonomy + examples)

Här kan du sova. Sleep here with a good conscience

Kanban är inte din process. (låt mig berätta varför) #DevLin Mars 2012

Ready for Academic Vocabulary?

Boiler with heatpump / Värmepumpsberedare

Sammanfattning. Revisionsfråga Har kommunstyrelsen och tekniska nämnden en tillfredställande intern kontroll av att upphandlade ramavtal följs.

The Municipality of Ystad

Högskolan i Skövde (SK, JS) Svensk version Tentamen i matematik

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

Thesis Production Time plan, preparation and Word templates

Förändrade förväntningar

Transkript:

Bra kod luktar inte, den doftar Data-Tjej, 2014-02-06 - Linköping Daniel Deogun Twitter: @DanielDeogun

Daniel Deogun Senior konsult & konsultchef på Omegapoint i Stockholm! Arbetat i drygt 6 år med patientkritisk mjukvara (pacemaker- och ICD-system) Arbetat med agila utvecklingsprocesser sedan 2005 (Scrum och Kanban)! Arbetat med Domain Driven Design (DDD) och Test Driven Development (TDD) i ca 9 år! En av Omegapoints kursledare i DDD och TDD! Nuvarande uppdrag! Lead developer på Hi3G Access AB

Bakgrund Varför uppstår... [1] [1] http://upload.wikimedia.org/wikipedia/commons/9/9d/graduation_thinker_lumaxart.jpg By lumaxart (EbonyG00052_LuMaxArt) [CC-BY-SA-2.0 (http://creativecommons.org/licenses/by-sa/2.0) or CC-BY-SA-2.0 (http://creativecommons.org/licenses/by-sa/2.0)], via Wikimedia Commons

Bakgrund Varför uppstår... Null Pointer Exception [1] [1] http://upload.wikimedia.org/wikipedia/commons/9/9d/graduation_thinker_lumaxart.jpg By lumaxart (EbonyG00052_LuMaxArt) [CC-BY-SA-2.0 (http://creativecommons.org/licenses/by-sa/2.0) or CC-BY-SA-2.0 (http://creativecommons.org/licenses/by-sa/2.0)], via Wikimedia Commons

Bakgrund Varför uppstår... Null Pointer Exception [1] Wrong Argument Order [1] http://upload.wikimedia.org/wikipedia/commons/9/9d/graduation_thinker_lumaxart.jpg By lumaxart (EbonyG00052_LuMaxArt) [CC-BY-SA-2.0 (http://creativecommons.org/licenses/by-sa/2.0) or CC-BY-SA-2.0 (http://creativecommons.org/licenses/by-sa/2.0)], via Wikimedia Commons

Bakgrund Varför uppstår... Illegal Input Null Pointer Exception [1] Wrong Argument Order [1] http://upload.wikimedia.org/wikipedia/commons/9/9d/graduation_thinker_lumaxart.jpg By lumaxart (EbonyG00052_LuMaxArt) [CC-BY-SA-2.0 (http://creativecommons.org/licenses/by-sa/2.0) or CC-BY-SA-2.0 (http://creativecommons.org/licenses/by-sa/2.0)], via Wikimedia Commons

Bakgrund Varför uppstår... Illegal Input Null Pointer Exception [1] Wrong Argument Order Oväntade beteenden [1] http://upload.wikimedia.org/wikipedia/commons/9/9d/graduation_thinker_lumaxart.jpg By lumaxart (EbonyG00052_LuMaxArt) [CC-BY-SA-2.0 (http://creativecommons.org/licenses/by-sa/2.0) or CC-BY-SA-2.0 (http://creativecommons.org/licenses/by-sa/2.0)], via Wikimedia Commons

Bakgrund Varför uppstår... Illegal Input Null Pointer Exception [1] Wrong Argument Order Oväntade beteenden Komplex defensiv kod [1] http://upload.wikimedia.org/wikipedia/commons/9/9d/graduation_thinker_lumaxart.jpg By lumaxart (EbonyG00052_LuMaxArt) [CC-BY-SA-2.0 (http://creativecommons.org/licenses/by-sa/2.0) or CC-BY-SA-2.0 (http://creativecommons.org/licenses/by-sa/2.0)], via Wikimedia Commons

Requirements Möte Ett möte har en titel, start- och sluttid, en sammankallande och minst en inbjuden deltagare. Ett mötesrum får inte ha multipla möten under samma tidsperiod. När ett rum bokats skall samtliga inbjudna deltagare notifieras.

Code Review...

Code Review...

Code Review...

Code Review...

Code Review...

Code Review...

Code Review...

The Parameter Order Bug If a method signature contains multiple arguments of the same type, then there s a risk that parameter values get interchanged upon method invocation Example,!! Then the following invocations are valid from a complier perspective but semantically incorrect! setname(string first, String last) setname( Daniel, Deogun ); setname( Deogun, Daniel );

Strongly Typed Arguments One way to avoid the parameter order bug is to use strongly typed arguments! Example,!!! Hence, invoking the method with incorrect parameter order will yield a compiler error! setname(firstname first, LastName last)

Let s apply Strongly Typed Arguments

Let s apply Strongly Typed Arguments

Let s apply Strongly Typed Arguments

Let s Take a Look At... Dependencies

Definition of Dependency Merriam-Webster! [de pen den cy] noun \-dən(t)-sē\ : the quality of being dependent! [de pen dent] adjective \di-ˈpen-dənt\ : needing someone or something else for support, help, etc.

Dependency in Code Given a class A and class B! When class A needs logic in class B to execute! Then class A has a dependency to class B! A depends on B

Identifying Dependencies

Identifying Dependencies

Identifying Dependencies

Identifying Dependencies

Identifying Dependencies

Identifying Dependencies

Identifying Dependencies

Identifying Dependencies

Identifying Dependencies

Identifying Dependencies

Why does one need to study dependencies? Studying dependencies helps one to understand how tightly coupled the code is! Dependencies may complicate testing and code reuse! So how should one treat dependencies?

Dependency Injection The basic idea of Dependency Injection (DI) is to separate the assembly of an object from the client with the dependency By this way, the client becomes unaware of the implementation and only needs to focus on the API Assembler builds Object injects Client depends on

Let s apply Dependency Injection

Let s apply Dependency Injection

Let s apply Dependency Injection

Let s apply Dependency Injection

Let s apply Dependency Injection

Let s Take a Look At... Design by Contract

Design By Contract The term was coined by Bertrand Meyer when designing the Eiffel programming language back in 1986! The main idea of DbC is the collaboration between software elements where mutual obligations and benefits exist! Let s look at an example...

Design By Contract Assume we have the following method! public void register(listener listener) What do we expect to happen when A. register(new Listener()) B. register(null)! If the call to register returns without an exception, what can be assumed?

Design By Contract If we use DbC, then the expectations and assumptions are expressed as Require and Ensurements! Hence, the method register could look like

Design By Contract If we use DbC, then the expectations and assumptions are expressed as Require and Ensurements! Hence, the method register could look like

Let s apply Design By Contract

Let s apply Design By Contract

Let s apply Design By Contract

Let s apply Design By Contract

Let s apply Design By Contract

Wow, Hold Your Horses

Wow, Hold Your Horses

Wow, Hold Your Horses

Wow, Hold Your Horses

Let s Take a Look At... Law of Demeter

Law of Demeter The Law of Demeter was proposed at Northeastern University back in 1987! The fundamental idea may be expressed as Each unit should only talk to its friends; don't talk to strangers.! - http://en.wikipedia.org/wiki/law_of_demeter

Law of Demeter Hence, one should never reach through an object for another object s functionality! Damian Guy tweeted back in 2009! Every time a mock returns a mock, a fairy dies! - Twitter @damianguy 2009 Oct 19 Dan Bergh Johnsson has written an excellent post on his blog Dear Junior - Letters to a junior programmer on how this affect testability ( Demeter Saves Mocking Fairies 16 nov 2009)

Let s Apply Law of Demeter

Let s Apply Law of Demeter

Let s Apply Law of Demeter

Let s Apply Law of Demeter

Let s Apply Law of Demeter

Let s Apply Law of Demeter

Let s Take a Look At... Tell, Don t Ask

Tell, Don t Ask Martin Fowler summarizes the Tell, Don t Ask principle in the following way! Tell-Don't-Ask is a principle that helps people remember that object-orientation is about bundling data with the functions that operate on that data. It reminds us that rather than asking an object for data and acting on that data, we should instead tell an object what to do. This encourages to move behavior into an object to go with the data.! - http://martinfowler.com/bliki/telldontask.html

Let s Apply Tell, Don t Ask

Let s Apply Tell, Don t Ask

Let s Apply Tell, Don t Ask

Let s Apply Tell, Don t Ask

Let s Apply Tell, Don t Ask

Let s Apply Tell, Don t Ask

Requirements Möte Ett möte har en titel, start- och sluttid, en sammankallande och minst en inbjuden deltagare. Ett mötesrum får inte ha multipla möten under samma tidsperiod. När ett rum bokats skall samtliga inbjudna deltagare notifieras.

Let s Refactor...

Let s Refactor...

Let s Refactor...

Så vad har vi lärt oss?

Så vad har vi lärt oss? Strongly Typed Objects

Så vad har vi lärt oss? Dependency Injection Strongly Typed Objects

Så vad har vi lärt oss? Dependency Injection Design by Contract Strongly Typed Objects

Så vad har vi lärt oss? Dependency Injection Design by Contract Strongly Typed Objects Law of Demeter

Så vad har vi lärt oss? Dependency Injection Design by Contract Strongly Typed Objects Tell, Don t Ask Law of Demeter

Is this a Silver Bullit? Detta till trots så kan oväntade beteenden förekomma!! Vanliga problem

Is this a Silver Bullit? Detta till trots så kan oväntade beteenden förekomma!! Vanliga problem Strongly Typed Objects Många typer Konstiga typhierarkier kan uppstå

Is this a Silver Bullit? Detta till trots så kan oväntade beteenden förekomma!! Vanliga problem Dependency Injection Felaktiga beroenden Onödiga tillstånd Shared mutable state

Is this a Silver Bullit? Detta till trots så kan oväntade beteenden förekomma!! Vanliga problem Design by Contract Avsaknad av kontrakt Svaga kontrakt Felaktiga kontrakt

Is this a Silver Bullit? Detta till trots så kan oväntade beteenden förekomma!! Vanliga problem Law of Demeter Duplicerade API:er

Is this a Silver Bullit? Detta till trots så kan oväntade beteenden förekomma!! Vanliga problem Tell, Don t Ask Kan upplevas som svårt

Is this a Silver Bullit? Detta till trots så kan oväntade beteenden förekomma!! Vanliga problem Generellt Felaktig exekveringsordning

Resultat

Resultat

Q & A http://commons.wikimedia.org/wiki/file:query-road.png

Tack! Twitter: @DanielDeogun