Mer om kodkvalitet. Mer om kodkvalitet. Hur kan man jobba med kodkvalité? Hur kan man jobba med kodkvalité? Hur kan man jobba med kodkvalité?

Relevanta dokument
Projekt. Roller i ett industriellt projekt. Projekt. Roller. Roller

Grundläggande termer. Några olika system. F11 Grunderna i Versionshantering. Git basic. Origin. Git basic. Git basic. Local #1. Local #3.

Dokumentera program. Dokumentation. Dokumentation. Javadoc. Javadoc 2

Versionshantering med Git. Henrik Henriksson 17 april 2018

Versionshantering. Problem som uppstår i större (samt även mindre) projekt:

TDP005. Föreläsning 2. Filip Strömbäck

JUnit. Junit Unit Testing. JUnit 3. JUnit 3 forts. Villkorskontroller i test. Exempel JUnit3

Versionshantering. Jan Erik Moström

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20

Programdesign. Dokumentera. Dokumentera

Versionshantering med Git

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

1 Vad är Versionshantering? 2 Git. 2.1 GitHub

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

UTVECKLINGSVERKTYG. Praktiska tips för PUM-projekten

Verktyg och Utvecklingsmiljö. Jochim von Hacht

Introduktion till Git

Några grundläggande begrepp

på ett stort spelföretag Andreas Ström

Introduktion till git

Projektarbete. Johan Eliasson

Verktyg och Utvecklingsmiljö. Föreläsning 2 Eclipse

SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS

Uppgift v1: Teststrategi i sammanhang Terese Berger. Teststrategi. Projekt CiviCRM. Version 0.9. Sida 1(7)

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Gränssnitt för FakeGranska. Lars Mattsson

Analys och design. Objekt. Klass. med hjälp av CRC. Klassdiagram

TDDI02. Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Configuration testing Why? Vad det är tänkt att koden ska göra. Performance testing Kommentarer Skriva om koden som kommentar

CVS-Introduktion. CyberRymden Introduktion till CVS,17 november (27) Marcus Rejås

Felsökning. Översikt. Felsökning (debugging) Kodstandard. Kommentarer. Kommentarer. Praktiska råd

Objektorienterad Programmering DAT043. Föreläsning 10 13/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Introduktionsmöte Innehåll

Användning av testautomation inom Extendas utvecklingsorganisation

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...

Inkapsling (encapsulation)

Enhetstester på.netplattformen

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PMM (Process Maturity Metrics) Allmänt. Mätetal för framgångsfaktorer. 1. CM konfigurationsstyrning

Pragmatisk programmering. Cyberrymden Marcus Rejås Pragmatisk programmering,16 december (29)

BILAGA E till Programvaruprojekt ÅTERSTÅENDE PROBLEM MultiPC v1.0. Innehållsförteckning

Dr. Gustav Taxén MDI-Gruppen, CSC / VIC-Sthlm gustavt@kth.se

Proj-Iteration 5B. Plan för återstående iterationer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Testplanering, test-first, testverktyg

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

Labb 1: Vad, hur, och varför?

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Börja med git och GitHub - Windows

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Visuell GUI Testning

V!cto. Att tjäna pengar genom bättre testning med

DI Studio nyheter

Grundläggande datalogi - Övning 9

Testplan Cykelgarage

PROGRAMMERINGSTEKNIK TIN212

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Version Testteam 4 Testledare: Patrik Bäck

Praktikum i programvaruproduktion

Classes och Interfaces, Objects och References, Initialization

Testning av program. Verklig modell för programutveckling

Programvaruutveckling - Metodik 2016 Jonas Wisbrant

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

Metoder (funktioner) Murach s: kap Winstrand Development

ID1004 Laboration 4, November 2012

Objekt-orienterad Programmering och Design. TDA552 Alex Gerdes, HT-2018

Agil testning i SCRUM

Programvara på Nada. Johan Berglund Systemgruppen, Nada

Objektorienterad Programkonstruktion. Föreläsning jan 2017

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

Övning 3. Datateknik A, Java I, 5 poäng

TUTORIAL: KLASSER & OBJEKT

TUTORIAL: SAMLING & KONSOLL

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Erfarenheter av automatiserad testning

[SLUTRAPPORT: DRAWPIXLZ (ANDROID-APP)] Slutrapport. Författare: Zlatko Ladan. Program: Utvecklare av Digitala Tjänster 180P

SIL SOAP API 4.0. beta prerelease

Generiska konstruktioner. Kursbokens kapitel 13

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Testning. 1. Inledning

Konstruktion av datorspråk

Kopiering av objekt i Java

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Uppdragsbeskrivning. Paddel-appen Utmärkta kanotleder. Version 1.0 Mats Persson. Distributionslista. Namn Åtgärd Info.

Skolan för Datavetenskap och kommunikation. Programmeringsteknik. Föreläsning 16

TPFD - TestPlan Före Design BESKRIVNING AV AKTIVITETER

Problemlösning. Analys och design OOA&D. Programutveckling sker i faser OOA&D. Fastställa och analysera förutsättningarna/ kraven.

Översikt Föreläsning 1. Trivicalc. Vad är trivicalc? En cell. Områden på skärmen. SMD168/SMD135 Fredrik Bengtsson

F4 Testning och Parprogrammering i XP. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson,Datavetenskap, LTH

Att använda Java SE JDK 6

Continuous Integration med Jenkins. Linus Tolke Enea Experts

Mer om språk och Ruby

Slutrapport Get it going contracts

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Projektuppgift - Gymmet

EDAA01 Programmeringsteknik - fördjupningskurs

Testdriven utveckling. Magnus Jonsson Siemens Medical Solutions

Transkript:

Mer om kodkvalitet Hur kan man jobba med kodkvalité 1. Jobba strukturerat genom hela processen Skulle ni köpa/köra en bil som inte har besiktas de senaste åren, speciellt efter lagningen efter krocken Skulle köpa ett hus som är byggt och ombyggt utan ritningar 343 344 Hur kan man jobba med kodkvalité Fokusera på kvalité och inte kvantitet Bygg det viktigaste först Jobba tillsammans Gemensamt ansvar en för alla alla för en Kontinuerlig uppföljning av processen Kod-granskning Lätt att läsa, lätt att testa, förklara Koden följer grundläggande kodprinciper Koden, systemet är inte onödig svårt att förstå Involvera testning i ett tidigt skede av processen Hur kan man jobba med kodkvalité Tydlighet i förväntningar Tydliga krav vad som ska systemet ska kunna göra Tydliga definitioner när en funktion/del fungerar som den ska både i det lilla och i det stora Tydliga definitioner på när det inte fungerar (undantag, fel, etc) Bra design System/klassdesign/metoddesign Systemarkitektur, klasser, metoder, etc Dokumenterad testning på många nivåer Enhets, integrering, system, acceptans-test Hur ska man följa upp/garantera att koden fungerar även efter flera generationer Mer om det senare 345 346 Utvecklingprocess Mer om kodkvalitet Kodning Granskning Acceptans Leverans Dokumentation Hantera fel, & felsökning Versionshantering 347

Mer om kodkvalitet Bra klasser Bra metoder Testat Typsäkerhet Men det finns mer Dokumentation Att jobba med dåligt kommenterar kod är som att leka viskningsleken Har vi råd att inte dokumentera När man inser att det sitter 5000 andra i Indien och jobbar med den kod jag bygger vidare på. 349 350 Dokumentera program Ett program används sällan endast av den som utvecklat den Användaren behöver få veta hur programmet fungerar Ett program underhålls inte alltid av den som skrivit det Den som ska underhålla programmet behöver info Ett program utvecklas ofta av många personer De andra i utvecklingstemet behöver info Vad kan behöva dokumenteras Exempel på delar som bör ingå: Användarhandledning GUI API:er Systembeskrivning Hur sitter systemet ihop Hur flödar datat, kontrollen, mm Algoritmbeskrivning Lösningens begränsning Testkörningar Källkod Olika delar vänder sig till olika läsare. 351 352 Kod-dokumentation Bör också se prydlig ut då det är den mest detaljerade formen av dokumentation. Dokumentation i form av kommentarer behövs i koden Kommentarer räcker dock inte (rätt jobbigt att alltid behöva läsa källkod) Lösning på en del av problematiken att man vill ha två olika typer av dokumentation som till stor del innehåller samma info: Javadoc Javadoc Speciella kommentarer som kan användas för att generera dokumentation av koden man har skrivit Eclipse har möjlighet att generera denna dokumentation /** startar en javadoc kommentar Måste skrivas innan en klass, attribut, konstruktor eller metod deklaration Första raden skall vara en kort förklaring av vad metoden gör Efter den första raden som börjar med @ så slutar den allmänna beskrivningen av metoden 353 354

Javadoc 2 @author (endast klasser och interface) @version (endast klasser och interface) @param (endast metoder och konstruktorer) @return (endast metoder) @exception (även @throws sedan Javadoc 1.2) @see @since @serial (eller @serialfield eller @serialdata) @deprecated API beskrivningen på nätet är uppbyggd med hjälp av javadoc För mer info se: http://java.sun.com/j2se/ javadoc/ 355 Källkod/Indentering Hur man formaterar sin kod Flytta alltid in all kod som står ett block 3-4 tecken Detsamma för enkel sats som hör till t.ex. if- whileoch for- satser Tänk på att inte skriva för långa rader Om du måste bryta upp ett uttryck/sats p.g.a. att raden skulle ha blivit för lång så flytta in resten av uttrycket minst till positionen för starten av uttrycket/satsen Mer info se: http://java.sun.com/docs/codeconv/ 356 Användarhandledning Hur används programmet. Viktigt för användare av programmet Hur ska man gå till väga för att kompilera din källkod. Viktigt för andra utvecklare. Större program är ofta inte helt triviala att bygga och ska ngn annan kunna göra det så behöver det dokumenteras. API Typ av API, anrop, svarskoder, parametrar, 357 begränsningar, exempel, mm. Systembeskrivning Ska beskriva systemets interna uppbyggnad och struktur. Beskriv varje klass och syftet med denna och dess del av helheten. För att beskriva klassen behöver man också beskriva tex de metoder som finns i den. Här kan det gå bra att använda sig av javadoc för att automatgenerera delar av beskrivningen (klistra inte in dessa i rapporten utan hänvisa istället till vart man kan hitta dessa). Beskriv relationer mellan klasser, med figurer och kommentarer till dessa (här passar ett eller flera 358 UML-diagram). Algoritmbeskrivning Om du har använt några icke självklara algoritmer, t.ex. en sorteringsalgoritm, en sökalgoritm eller något annat, ska du beskriva den/dem. Tex i form av pseudokod. Försök undvika att använda element som är direkt kopplade till koden, t ex variabelnamn och dylikt. Syftet med detta avsnitt är att en läsare ska kunna få förståelse för hur en komplicerad del löses utan att behöva lusläsa kod och utifrån denna inse vad som händer. Lösningens begränsningar Beskriver alla begränsningar som du kan komma att tänka på, eller har stött på under testningen. Du bör tala om alla de begränsningar som strider mot specifikationen. Nästan alla lösningar innehåller någon begränsning, tänk till lite bara. Hur kan/kunde begränsningarna undvikas 359 360

Hur programmet är testat. Beskriv hur programmet är testat utifrån Vad det ska klara av Definition of Done Vad kan tänkas vara svårt för programmet Testfall. Kommentera testfallen. Varför valde du detta testfall Blev resultatet som det var meningen att det skulle bli Tänk på att tester kan göras på olika delar separat och på det färdiga programmet. Enhetstester, integrationstest, systemtest GUI-tester Prestandatester Varför Vad Hur När 361 362 Varför Visa att systemet gör det ska göra Vad Visa att systemet kan hantera abnorma situationer Garantera att det systemet uppträder som det ska även efter förändringar av koden Med tester ska fel hittas och inte undvikas Allt som man har inte har råd att inte testa Fel kan innebära höra kostnader och katastrofer» Även en pyspunka kan få katastrofala följder Design, processer, koden, migreringar, integreringar, 363 När Hur Så tidigt som möjligt Designen ska testas (CRC, Mock-up:er, ) Koden som precis har skrivits ska det finnas tester för Samt så sent som möjligt Innan man levererar koden Ska inte gå att leverera kod som inte uppfyller baskraven för testning Olika kritiskt beroende på närheten till produktion Även om det är allas ansvar att koden fungerar så måste varje medlem i teamet ta sitt ansvar för sin kod. Även om man har speciella testare/testavdelningar så måste varje medlem i teamet ta sitt ansvar för sin kod. Automatiska Manuella Regressionstest - https://en.wikipedia.org/wiki/regression_testing 364 ANALYS SYSTEM DESIGN PROGRAM DESIGN V modellen Validera kraven Verifiera designen KODNING SYSTEMTEST ENHETS- & INTE- GRATIONSTEST DRIFT & UNDERHÅLL ACCEPTANS- TEST 365 Att konstruera tester Oavsett nivå på det som ska testas Kontrakt på modulen (villkor för leverans ) Definition of Done Vilka typer av giltiga indata finns det för den modulen Vilka giltiga utdata är det från de olika typerna av indata Vilka konstigheter kan uppstå Vilka påverkas systemet av modulen som testas Vilka delar av systemet påverkar modulen som ska testas Hur ser gränssnittet ut på det som ska testas På vilka sätt kan man påverka modulen som ska testas På vilka sätt kan man läsa av tillståndet på modulen som ska testas. Jobba strukturerat med testerna Ha en modell för (varför, vad, hur, när, ) Dokumentera 366

Att testa Koden som ska testas och testdesign måste ske isolerat så man inte skriver tester utifrån koden, utan kod som uppfyller testerna Konstruera tester och testfallen innan man skriver koden Tester måste konstrueras för extremer, svagheter och gränsfall, men också för normaliteten Mer om testning Test-Driven-Development 367 368 JUnit När$det$inte$går$bra$ Unit testing för java Används för att testa att metoder/klasser beter sig som det var tänkt Många IDE:er tex Eclipse har inbyggt stöd för detta. Typsäkerhet Jan Erik Moström Bugg-fixar I produktion, måste gradera skadan Katastrof (Hot-fix) Kritisk (ASAP) Mindre kritisk (Nästa release) Okritisk (När det finns utrymme eller den har varit med för länge) I utvecklingen - vilken kvalitet ska/vill man ha Dokumentera kända begränsningar, fel Versionhantering är en viktig nyckel för hantera 371 buggar Debugger Verktyg för att hitta fel i program Tillåter att man stegar igenom program (sats för sats) och undersöker värden som variabler i programmet har Breakpoint Plats i koden där programmet ska stanna upp 372

Grundläggande termer Grunderna i Versionshantering Hålla koll på olika version, kunna gå tillbaka, etc. Repo/Repository - förvaring/administrering av förändringar Centraliserad/Decentraliserad Lokal repo/ remote -repo Revisioner - namnge/tagga Trunk/Master-spår Branch -gren/spår clone, commit, revert, rebase, merge, pull, cherry-pick, stash Merge-konflikter som måste hanteras Commits namnges med SHA-hash http://www.dwahlberg.se/2011/versionshantering-for-nyborjare/ 374 Några olika system Det finns mängder av programvaror GIT Mercurial CVS SVN (Subversion). Senare programvara. Åtgärdar några av problemen som finns i CVS Dom flesta kör man i grunden i terminal-fönster Det finns även en mängd Program/web-tjänster som lägger på ett grafisk gränssnitt BitBucket, SourceTree, etc Det finns plug-ins/utökningar till många IDE:er för de vanligaste versionshanteringssystemen Eclips+Git, Eclipse+SVN, IntelliJ+Git, IntelliJ+ Mercurial,.. 375 Origin Local #1 Local #3 Local #2 https://git-scm.com/book/en/v2/git-basics-recording-changes-to-the-repository http://marklodato.github.io/visual-git-guide/index-en.html http://onlywei.github.io/explain-git-with-d3/#

Arbetsflöden Några grundläggande arbetsflöden Loggning av förändringar Backa till en tidigare version och fortsätta på den Jobba samtidigt med olika features Hantera olika versioner av samma system Jobba med de grundläggande arbetsflöden tillsammans med andra Logga och delge förändringar Kräver att man kan synkronisera vad olika 380 användare förändrar, mm Don t panic! GitFlow