SlideShare ist ein Scribd-Unternehmen logo
1 von 80
SAUBERER CODE
„Clean Code“
DANK VISUAL STUDIO
Der Sprecher
Hendrik Lösch
Senior Consultant & Coach
Hendrik.Loesch@saxsys.de
@HerrLoesch
Just-About.Net
Technische Schuld
Quelle: Ron Jeffries http://xprogramming.com/articles/refactoring-not-on-the-backlog
Technische Schuld
Zeit
Produktivität
Technische Schuld
Quelle: Martin Fowler http://martinfowler.com/bliki/TechnicalDebtQuadrant.html
Ward Cunningham
rücksichtslos umsichtig
überlegt
versehentlich
„Wir haben keine
Zeit für ein
Design.“
„Wir müssen jetzt
liefern und uns später
um die Konsequenzen
kümmern.“
„Jetzt wissen wir wie
wir es hätten machen
müssen.“
„Layer? Was ist
das?“
CODE STIL & LESBARKEIT
Lesbarkeit & Code Stil
Gmäeß eneir Sutide eneir elgnihcesn Uvinisterät ist es nchit witihcg, (…)
Gmäes enia Shutidce ebneir älgnihcesn Uveinihnstert ißt es nchit whcitich, (...)
Quelle: http://www.fehler-haft.de/wissen/buchstabensalat.html
Lesbarkeit & Code Stil
Quelle: Johannes Hofmeister, http://empathic.herokuapp.com
Lesbarkeit & Code Stil
Lesbarkeit & Code Stil
StyleCop
Statische Analyse von Code mit Einbindung
in den Build
Adressiert:
• Dokumentation
• Layout
• Wartbarkeit
• Namensgebung
• Lesbarkeit
Basiert auf den Framework Design Guidelines von Microsoft
private string name;
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
private string m_name;
public string Name
{
get { return m_name; }
set { m_name = value; }
}
Religionskriege
var name = "Hendrik";
string name = "Hendrik";
StyleCop
Legacy Software Visual Studio Projekttemplate
StyleCop
Kommentare
StyleCop vs. Ghost Doc & Resharper
Kommentare
STATISCHE CODE ANALYSE
FX Cop
Statische Analyse von kompiliertem Code mit Einbindung in den
Build
Adressiert:
• Performance
• Sicherheit
• Namensgebung
• Interoperabilität
• …
FX Cop
QUALITÄTSMETRIKEN
Code Metriken ermitteln
Code Metriken ermitteln
Lines of Code
SLOC
(in Mio.)
Windows NT 3.1 (1993) 4–5
Windows NT 3.5 (1994) 7–8
Windows NT 4.0 (1996) 11–12
Windows 2000 (2000) > 29
Windows XP (2001) 40
Windows Server 2003 (2003) 50
Lines of Code
= 187 LoC
π •👍
Klasse < 500LoC
Methode < 50LoC ?
Class Coupling
1 2 3
π •👍
Methode <= 9
???
Class Coupling
π •👍
Methode <= 9
✄???
Class Coupling
π •👍
Methode <= 9
???
Depth of Inheritance
Depth of Inheritance
π •👍
Hierachieebene <= 6
Favour Composition over Inheritance!!!
public class ActionBarViewModel : ReactiveObject, IActionBarViewModel
Depth of Inheritance
π •👍
Hierachieebene <= 6
✓ Information Hiding Principle
✓ Interface Segregation Principle
Cyclomatic Complexity
Cyclomatic Complexity
Komplexität == 2
Cyclomatic Complexity
Komplexität == 3
public SourceSelectionViewModel(IEventAggregator eventAggregator)
{
this.eventAggregator = eventAggregator;
this.readDataCommand = new ReactiveCommand();
this.readDataCommand.Subscribe( _ => this.ReadData());
}
Cyclomatic Complexity
Komplexität == 2
Cyclomatic Complexity
Komplexität == 4
Komplexität == 4
Cyclomatic Complexity
π •👍
1 bis 10 = normal
11 bis 20 = moderat
21 bis 50 = riskant
> 50 = instabil
Maintainability Index
20 bis 100
9 bis 20
0 bis 9
Maintainability Index = MAX(0,(171 - 5.2 * log(Halstead Volume)
- 0.23 * (Cyclomatic Complexity)
- 16.2 * log(Lines of Code))*100 / 171)
Halstead Volume
Quelle: http://de.wikipedia.org/wiki/Halstead-Metrik
Maintainability Index
20 bis 100
9 bis 20
0 bis 9
Maintainability Index = MAX(0,(171 - 5.2 * log(Halstead Volume)
- 0.23 * (Cyclomatic Complexity)
- 16.2 * log(Lines of Code))*100 / 171)
Maintainability Index
Kopplung
Methode <= 9
LoC
Klasse < 500
Methode < 50
Komplexität
1 bis 10 = normal
11 bis 20 = moderat
21 bis 50 = riskant
> 50 = instabil
?
Code Clones
Code Clones
Code Clones
Code Clones
*.codeclonesettings
<CodeCloneSettings>
<Exclusions>
<File>GeneratedFiles*.cs</File>
</Exclusions>
</CodeCloneSettings>
Code Coverage aka Test Coverage
Code Coverage aka Test Coverage
Komplexität == 3
Code Coverage aka Test Coverage
Andere Werkzeuge
Resharper
Resharper
NDepend
NDepend
Ndepend V6
C.R.A.P.
“The C.R.A.P. (Change Risk Analysis and Predictions) index is designed
to analyze and predict the amount of effort, pain, and time required to
maintain an existing body of code.”
Alberto Savoia
Quelle: http://www.artima.com/weblogs/viewpost.jsp?thread=210575
C.R.A.P.(m) = CC(m)^2 * (1 – Coverage(m)/100)^3 + CC(m)
C.R.A.P.
Quelle: https://www.artima.com/weblogs/viewpost.jsp?thread=215899
C.R.A.P.(m) = CC(m)^2 * (1 – Coverage(m)/100)^3 + CC(m)
π •👍
30
Method’s CC % of coverage required to be below CRAPpy threshold
0 – 5 0%
10 42%
15 57%
20 71%
25 80%
30 100%
31+ No amount of testing will keep methods this complex out of CRAP
territory.
FAZIT
Vertrauen
Aufwand
Feedback
Wieviel ist gut für mich?
Quelle: Dr. Elmar Jürgens, CQSE
4
3
2
1
Keine Defizite
Keine Defizite in geändertem Code
Keine neuen Defizite
Egal
Pragmatismus vs. Overengineering
Pragmatismus Overengineering
Der Sprecher
Hendrik Lösch
Senior Consultant & Coach
Hendrik.Loesch@saxsys.de
@HerrLoesch
Just-About.Net
Peek Definition
Peek Definition
Code Map
Code Map
Architektur
CODE LESEN UND ANPASSEN
Code Contracts
Code Contracts
public double Divide(int number, int divisor )
{
if(divisor == 0)
{
throw new ArgumentOutOfRangeException();
}
return number / divisor;
}
Quelle: https://www.develop.com/csharpcodecontracts
Code Contracts
public double Divide(int number, int divisor )
{
Contract.Requires<ArgumentOutOfRangeException>( divisor != 0 );
return number / divisor;
}
Quelle: https://www.develop.com/csharpcodecontracts
Code Contracts
public double Divide(int number, int divisor )
{
Contract.Requires<ArgumentOutOfRangeException>( divisor != 0 );
return number / divisor;
}
public int RandomDivisor()
{
Contract.Ensures( Contract.Result<int>() != 0 );
int d = new Random().Next( 100 );
return d;
}
Quelle: https://www.develop.com/csharpcodecontracts
Code Contracts
public int RandomDivisor()
{
Contract.Ensures( Contract.Result<int>() != 0 );
int d = new Random().Next( 100 );
return d;
}
Quelle: https://www.develop.com/csharpcodecontracts
Code Contracts
public int RandomDivisor()
{
Contract.Ensures( Contract.Result<int>() != 0 );
int d = new Random().Next(1, 100 );
return d;
}
Quelle: https://www.develop.com/csharpcodecontracts
Code Contracts
public int RandomDivisor()
{
Contract.Ensures( Contract.Result<int>() != 0 );
int d = new Random().Next(1, 100 );
return d;
}
Quelle: https://www.develop.com/csharpcodecontracts
public void Test()
{
int n = 10;
int d = RandomDivisor();
Contract.Assume( d != 0, "We assume d is never zero." );
return Divide( n, d );
}
Code Contracts
Quelle: https://www.develop.com/csharpcodecontracts
public class SpecialPoint
{
public int X { get; set; }
public int Y { get; set; }
[ContractInvariantMethod]
private void ClassContract()
{
Contract.Invariant( Y > X );
}
}
Code Contracts
Quelle: https://www.develop.com/csharpcodecontracts
public class MyRandomizer : IRandom
{
public int RandomDivisor()
{
return 0;
}
}
[ContractClass( typeof( ContractForIRandom ) )]
public interface IRandom
{
int RandomDivisor();
}
[ContractClassFor( typeof( IRandom ) )]
public abstract class ContractForIRandom : IRandom
{
public int RandomDivisor()
{
Contract.Ensures( Contract.Result<int>() != 0 );
return default( int );
}
}
Code Lense
Code Lense
Code Lense
Code Lense

Weitere ähnliche Inhalte

Ähnlich wie Clean mit visual studio

Open icf (open identity connector framework) @ forgerock deutsch
Open icf (open identity connector framework) @ forgerock   deutschOpen icf (open identity connector framework) @ forgerock   deutsch
Open icf (open identity connector framework) @ forgerock deutschHanns Nolan
 
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...inovex GmbH
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Gregor Biswanger
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Jürg Stuker
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core ApplicationsRobin Sedlaczek
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
E-Commerce vs Architektur CodeTalks.Commerce_2018
E-Commerce vs Architektur CodeTalks.Commerce_2018E-Commerce vs Architektur CodeTalks.Commerce_2018
E-Commerce vs Architektur CodeTalks.Commerce_2018Johann-Peter Hartmann
 
Transportsicherheit - SSL und HTTPS
Transportsicherheit - SSL und HTTPSTransportsicherheit - SSL und HTTPS
Transportsicherheit - SSL und HTTPSMarkus Groß
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit RustJens Siebert
 
Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)GEEKcon
 
IT-Sicherheit und agile Entwicklung – geht das? Sicher!
IT-Sicherheit und agile Entwicklung – geht das? Sicher!IT-Sicherheit und agile Entwicklung – geht das? Sicher!
IT-Sicherheit und agile Entwicklung – geht das? Sicher!Carsten Cordes
 
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-AppsAber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-AppsGregor Biswanger
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
Technologieraum übergreifende Programmierung
Technologieraum übergreifende ProgrammierungTechnologieraum übergreifende Programmierung
Technologieraum übergreifende ProgrammierungFalk Hartmann
 
Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsQAware GmbH
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for BeginnersUlrich Krause
 
Clean Coding - Theorie und Praxis Guide.pptx
Clean Coding - Theorie und Praxis Guide.pptxClean Coding - Theorie und Praxis Guide.pptx
Clean Coding - Theorie und Praxis Guide.pptxkaftanenko
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & DominoUlrich Krause
 

Ähnlich wie Clean mit visual studio (20)

Open icf (open identity connector framework) @ forgerock deutsch
Open icf (open identity connector framework) @ forgerock   deutschOpen icf (open identity connector framework) @ forgerock   deutsch
Open icf (open identity connector framework) @ forgerock deutsch
 
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core Applications
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
E-Commerce vs Architektur CodeTalks.Commerce_2018
E-Commerce vs Architektur CodeTalks.Commerce_2018E-Commerce vs Architektur CodeTalks.Commerce_2018
E-Commerce vs Architektur CodeTalks.Commerce_2018
 
Transportsicherheit - SSL und HTTPS
Transportsicherheit - SSL und HTTPSTransportsicherheit - SSL und HTTPS
Transportsicherheit - SSL und HTTPS
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)
 
IT-Sicherheit und agile Entwicklung – geht das? Sicher!
IT-Sicherheit und agile Entwicklung – geht das? Sicher!IT-Sicherheit und agile Entwicklung – geht das? Sicher!
IT-Sicherheit und agile Entwicklung – geht das? Sicher!
 
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-AppsAber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
Technologieraum übergreifende Programmierung
Technologieraum übergreifende ProgrammierungTechnologieraum übergreifende Programmierung
Technologieraum übergreifende Programmierung
 
objectiF extrem
objectiF extremobjectiF extrem
objectiF extrem
 
DevOps & IoT
DevOps & IoTDevOps & IoT
DevOps & IoT
 
Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos Engineerings
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for Beginners
 
Clean Coding - Theorie und Praxis Guide.pptx
Clean Coding - Theorie und Praxis Guide.pptxClean Coding - Theorie und Praxis Guide.pptx
Clean Coding - Theorie und Praxis Guide.pptx
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & Domino
 

Mehr von Hendrik Lösch

Why (most) softwareprojects fail silently
Why (most) softwareprojects fail silentlyWhy (most) softwareprojects fail silently
Why (most) softwareprojects fail silentlyHendrik Lösch
 
We (don't) need a software architect!?!
We (don't) need a software architect!?!We (don't) need a software architect!?!
We (don't) need a software architect!?!Hendrik Lösch
 
Restrukturierung einer industriellen Großapplikation
Restrukturierung einer industriellen GroßapplikationRestrukturierung einer industriellen Großapplikation
Restrukturierung einer industriellen GroßapplikationHendrik Lösch
 
Vom Monolith zum Modulith
Vom Monolith zum ModulithVom Monolith zum Modulith
Vom Monolith zum ModulithHendrik Lösch
 
Der Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
Der Software auf den Zahn gefühlt - Einstieg in die ArchitekturbewertungDer Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
Der Software auf den Zahn gefühlt - Einstieg in die ArchitekturbewertungHendrik Lösch
 
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als SoftwarearchitektHendrik Lösch
 
Software ist was du draus machst!
Software ist was du draus machst!Software ist was du draus machst!
Software ist was du draus machst!Hendrik Lösch
 
Einstieg in das Vueniverse
Einstieg in das VueniverseEinstieg in das Vueniverse
Einstieg in das VueniverseHendrik Lösch
 
Survivalkit für Codehausmeister
Survivalkit für CodehausmeisterSurvivalkit für Codehausmeister
Survivalkit für CodehausmeisterHendrik Lösch
 
Confessions of a Codehausmeister
Confessions of a CodehausmeisterConfessions of a Codehausmeister
Confessions of a CodehausmeisterHendrik Lösch
 
WPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagWPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagHendrik Lösch
 
Advanced Refactoring Patterns
Advanced Refactoring PatternsAdvanced Refactoring Patterns
Advanced Refactoring PatternsHendrik Lösch
 
Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018Hendrik Lösch
 
Der Healthcheck für Softwareprojekte
Der Healthcheck für SoftwareprojekteDer Healthcheck für Softwareprojekte
Der Healthcheck für SoftwareprojekteHendrik Lösch
 

Mehr von Hendrik Lösch (20)

Why (most) softwareprojects fail silently
Why (most) softwareprojects fail silentlyWhy (most) softwareprojects fail silently
Why (most) softwareprojects fail silently
 
We (don't) need a software architect!?!
We (don't) need a software architect!?!We (don't) need a software architect!?!
We (don't) need a software architect!?!
 
Restrukturierung einer industriellen Großapplikation
Restrukturierung einer industriellen GroßapplikationRestrukturierung einer industriellen Großapplikation
Restrukturierung einer industriellen Großapplikation
 
Vom Monolith zum Modulith
Vom Monolith zum ModulithVom Monolith zum Modulith
Vom Monolith zum Modulith
 
Der Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
Der Software auf den Zahn gefühlt - Einstieg in die ArchitekturbewertungDer Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
Der Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
 
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
 
Software ist was du draus machst!
Software ist was du draus machst!Software ist was du draus machst!
Software ist was du draus machst!
 
Modular mit .NET
Modular mit .NETModular mit .NET
Modular mit .NET
 
.NET zu .NET Core
.NET zu .NET Core.NET zu .NET Core
.NET zu .NET Core
 
Workshop Vue js
Workshop Vue jsWorkshop Vue js
Workshop Vue js
 
Migrationsstrategien
MigrationsstrategienMigrationsstrategien
Migrationsstrategien
 
Einstieg in das Vueniverse
Einstieg in das VueniverseEinstieg in das Vueniverse
Einstieg in das Vueniverse
 
Survivalkit für Codehausmeister
Survivalkit für CodehausmeisterSurvivalkit für Codehausmeister
Survivalkit für Codehausmeister
 
Confessions of a Codehausmeister
Confessions of a CodehausmeisterConfessions of a Codehausmeister
Confessions of a Codehausmeister
 
Hey, wie geht es dir?
Hey, wie geht es dir?Hey, wie geht es dir?
Hey, wie geht es dir?
 
WPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagWPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF Rundumschlag
 
Advanced Refactoring Patterns
Advanced Refactoring PatternsAdvanced Refactoring Patterns
Advanced Refactoring Patterns
 
Codesmells
CodesmellsCodesmells
Codesmells
 
Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018
 
Der Healthcheck für Softwareprojekte
Der Healthcheck für SoftwareprojekteDer Healthcheck für Softwareprojekte
Der Healthcheck für Softwareprojekte
 

Clean mit visual studio

Hinweis der Redaktion

  1. Fachlicher Druck, wenn der Auftraggeber auf die Projektbeteiligten Druck ausübt, neue Fachlichkeiten schnell und bevor technische Aufräumarbeiten abgeschlossen sind, geliefert zu bekommen. Ungenügende qualitätssichernde Prozesse, wenn es in einem Projekt keine qualitätssichernden Prozesse gibt (oder diese nicht gelebt werden), welche die Technische Schuld laufend messen und Verbesserungsmaßnahmen einleiten. Ungenügendes technisches Wissen, um technische Entscheidungen treffen zu können, welche die Technische Schuld nicht erhöhen und im Optimalfall reduzieren. Ungenügende Kommunikation der gewählten technischen Lösungen und ihrer Hintergründe. Die Kommunikation kann auf vielerlei Arten erfolgen, beispielsweise durch selbsterklärenden Code, Dokumentation, Diagramme, Videos etc. Parallele Entwicklung in eigenen Branches (beispielsweise Featurebranches) führt zu erhöhten Zusammenführungsaufwänden und somit Technischer Schuld. Hintangestelltes Refactoring, wenn in Codeteilen, welche verbesserungswürdig sind, weiter Fachlichkeiten umgesetzt werden, ohne davor die Verbesserungen umzusetzen. Je mehr diese notwendigen Refactorings verzögert werden, desto aufwändiger werden sie bzw. die Umsetzung von Fachlichkeiten.
  2. Sehr umfangreiche Regelsammlung Einbindung in den Build möglich
  3. Die Regeln sollten eingehalten werden. Dinge die nicht absolut zwingend sind, sollten abgeschaltet sein. Beschreibung für private Member ist etwas schwer zu erreichen.
  4. Empfehlung – Kommentare nur verwenden wenn es wirklich notwendig ist. Ansonsten versuchen die Stellen mit Erklärungsbedarf aufzuteilen.
  5. Man kann: ein Workitem erstellen Direkt zur Erläuterung der Regel springen Zur Stelle springen wo die Regel verletzt wurde Die Aussage unterdrücken
  6. Lines of IL Code Referenzgröße die erlaubt Dinge in ein Verhältnis zueinander zu setzen
  7. - Die 9 wird von FX Cop als Maximal angesehen
  8. Jede Ableitung (außer Interfaces) erhöht den Wert um 1 Klassen starten mit 1 Interfaces gelten nicht als Klassen und haben deshalb 0 Wenn man von Frameworkelementen erbt, hat man automatisch eine höhere Vererbungstiefe. Die Zusammenfassung für die DLL/den Namensraum zeigt immer den höchsten Wert
  9. 1. The deeper a class in the hierarchy, the greater the number of methods it will probably inherit which makes it harder to predict its behavior. 2. Deeper trees involve greater design complexity since more classes and methods are involved. 3. Deeper classes in the tree have a greater potential for reusing inherited methods.   Assumptions 1 and 2 tell us that having a higher number for depth is bad. If that is where it ended we would be in good shape; however assumption 3 indicates that a higher number for depth is good for potential code reuse.
  10. Beim Design einer Schnittstelle sollte man sich fragen, welche Details außen unbedingt sichtbar sein müssen. Mit Schnittstelle sind hier nicht nur Interfaces im objektorientierten Sinne gemeint, sondern auch implizite Schnittstellen. Jede Klasse hat zwangsläufig eine implizite Schnittstelle – sie enthält alle nach außen sichtbaren Details. Je mehr Details von außen sichtbar sind, desto höher ist die Kopplung zwischen der Klasse und ihren Verwendern. Benutzen die Verwender einer Klasse erstmal ein Detail, wird es schwerer, dieses Detail zu verändern. Dies steht der Evolvierbarkeit der Software entgegen. Das Interface Segregation Principle besagt, dass ein Client nicht von Details eines Service abhängig sein soll, die er gar nicht benötigt. Je weniger in dessen Interface enthalten ist, desto geringer ist die Kopplung zwischen den beiden Komponenten.
  11. Spiegelt die Anzahl der Entscheidungen im Code wieder Wie oft muss der Code durchlaufen werden um alle Codepfade abzudecken Die Komplexität für Klassen und Namensräume wird kumuliert
  12. Unit Tests sollten immer eine CC von 1 haben!
  13. Unit Tests sollten immer eine CC von 1 haben!
  14. - Bei 25 gibt es eine Warnung von FX Cop
  15. Wert zwischen 0 und 100
  16. Wert zwischen 0 und 100
  17. Clones werden in Gruppen zusammengeführt. jede Gruppe enthält alle Codestellen die sich ähneln. Im Beispiel sind das 17 in 16 Dateien für Gruppe (Weak Match 3) In den Dateien werden die Clones farblich hervorgehoben.
  18. Je nachdem wie genau sich der Code gleicht wird eine Gruppe (weak, medium, strong und heavy) angelegt. - Rename identifiers. - Insert and delete statements. - Rearrange statements. What duplicates will not be found? Type declarations are not compared. For example, if you have two classes with very similar sets of field declarations, they will not be reported as clones. Only statements in methods and property definitions are compared. Analyze Solution for Code Clones will not find clones in methods that are less than 10 statements long. However, you can apply Find matching clones in solution to shorter fragments. Fragments with more than 40% changed tokens. If a project contains a .codeclonesettings file, code elements that are defined in that project will not be searched if they are named in the Exclusions section of the .codeclonesettings file. Some kinds of generated code: *.designer.cs, *.designer.vb InitializeComponent methods However, this does not automatically apply to all generated code. For example, if you use text templates, you might want to exclude the generated files by naming them in a .codeclonesettings file.
  19. A code block is a code path with a single entry point, a single exit point, and a set of instructions that are all run in sequence. A code block ends when it reaches a decision point such as a new conditional statement block, a function call, exception throw, enter, leave, try, catch, or a finally construct. For code coverage, a line of code is an executable line of code that excludes white space, comments, type declarations, and namespace declarations. A line of code can contain multiple code blocks. If a line of code contains multiple code blocks and only a portion of those code blocks were exercised by a test run, then it is calculated as a partial line.
  20. Es öffnet sich ein Editor Fenster im Editor Fenster Man kann in diesem Fenster auch programmieren
  21. - Code Map hilft dabei sich einen Überblick über die Abhängigkeiten im Code zu verschaffen
  22. a meaningful runtime exception will be thrown if we have runtime checking enabled.
  23. a meaningful runtime exception will be thrown if we have runtime checking enabled.
  24. a meaningful runtime exception will be thrown if we have runtime checking enabled.
  25. Mit GIT
  26. Anbindung an TFS Einbindung von Lync