Michael Kutz
Quality Engineer at REWE digital, Conference Speaker about QA & Agile, Founder of Agile QA Cologne meetup, Freelance QA Consultant
@MichaKutz
@mkutz@mstdn.social
ein neues Feature hinzufügen
Qualität verbessern
Jede beobachtete statistische Kennzahl ist nur zu gebrauchen, solange auf sie kein Druck ausgeübt wird.
Gehen wir in die richtige Richtung?
Wo sind wir?
Was gemessen wird, verbessert sich.
–Peter Drucker
Input
Output
Impact
Möglichst nah am Impact messen!
UX Tests
User Tracking/
Observability
Service Level Objectives
Benutzer-beschwerden
@Test
void strike() {
var game = new Game();
var firstRollPins = 10;
var secondRollPins = 5;
var thirdRollPins = 3;
game.roll(firstRollPins);
game.roll(secondRollPins);
game.roll(thirdRollPins);
var score = game.score();
assertThat(score)
.isEqualTo(
firstRollPins +
(secondRollPins + thirdRollPins) * 2);
}
public int score() {
int score = firstRoll + secondRoll;
if (previous != null) {
if (previous.strike) {
score *= 2;
} else if (previous.spare) {
score += firstRoll;
}
}
return score;
}
@Test
void strike() {
var game = new Game();
var firstRollPins = 10;
var secondRollPins = 5;
var thirdRollPins = 3;
game.roll(firstRollPins);
game.roll(secondRollPins);
game.roll(thirdRollPins);
var score = game.score();
// assertThat(score)
// .isEqualTo(
// firstRollPins +
// (secondRollPins + thirdRollPins) * 2);
}
@Test
void strike() {
var game = new Game();
var firstRollPins = 10;
var secondRollPins = 5;
var thirdRollPins = 3;
game.roll(firstRollPins);
game.roll(secondRollPins);
game.roll(thirdRollPins);
var score = game.score();
assertThat(score
.isEqualTo(
firstRollPins +
(secondRollPins + thirdRollPins) * 2);
}
public int score() {
int score = firstRoll + secondRoll;
if (previous != null) {
if (previous.strike) {
score *= 2;
} else if (previous.spare) {
score += firstRoll;
}
}
return score;
}
AssertionFailedError:
expected: 26
but was: 14
Wie effektiv kannst du mit dem Code arbeiten?
Wie zuversichtlich bist du vor Deployments in Produktion?
Was würdest du brauchen um die Werte zu verbessern?
public int score() {
return firstRoll + secondRoll;
}
public int score() {
int score = firstRoll + secondRoll;
if (previous != null && previous.spare) {
score += firstRoll;
}
return score;
}
public int score() {
int score = firstRoll + secondRoll;
if (previous != null) {
if (previous.strike) {
score *= 2;
} else if (previous.spare) {
score += firstRoll;
}
}
return score;
}
previous
.spare
score *= 2;
previous
.strike
score += firstRoll;
previous != null
&& previous.spare
int score = firstRoll
+ secondRoll;
return score;
# Code Smells
- lange Methoden,
Methoden mit hoher Code-Komplexität,
viele Parameter,
- große Klassen,
viele Abhägigkeiten,
- Code Duplikate,
- …
Code
Smells
Code
Komplexität
Mutation
Testing
Team-
Umfragen
08:07:23 Deploy basket-service ✓
09:06:11 Migrate checkout-service DB ✓
09:56:54 Deploy checkout-service ✓
08:07:23 Deploy basket-service ✓
09:06:11 Migrate checkout-service DB ✓
09:56:54 Deploy checkout-service ✓
10:19:44 Deploy order-managment-service ✗
10:39:27 Rollback order-managemet-service ✓
08:07:23 Deploy basket-service ✓
09:06:11 Migrate checkout-service DB ✓
09:56:54 Deploy checkout-service ✓
10:19:44 Deploy order-managment-service ✗
10:39:27 Rollback order-managemet-service ✓
11:09:59 Update database cluster ✓
12:27:32 Migrate order-managemet-service DB ✓
13:19:22 Deploy order-managemet-service ✓
08:07:23 Deploy basket-service ✓
09:06:11 Migrate checkout-service DB ✓
09:56:54 Deploy checkout-service ✓
10:19:44 Deploy order-managment-service ✗
10:39:27 Rollback order-managemet-service ✓
11:09:59 Update database cluster ✓
12:27:32 Migrate order-managemet-service DB ✓
13:19:22 Deploy order-managemet-service ✓
14:45:55 Update database-cluster ✗
15:50:49 Update database-cluster ✓
08:07:23 Deploy basket-service ✓
09:06:11 Migrate checkout-service DB ✓
09:56:54 Deploy checkout-service ✓
10:19:44 Deploy order-managment-service ✗
10:39:27 Rollback order-managemet-service ✓
11:09:59 Update database cluster ✓
12:27:32 Migrate order-managemet-service DB ✓
13:19:22 Deploy order-managemet-service ✓
14:45:55 Update database-cluster ✗
15:50:49 Update database-cluster ✓
16:39:11 Deploy product-service ✓
17:44:56 Deploy customer-data-service ✓
08:07:23 Deploy basket-service ✓
09:06:11 Migrate checkout-service DB ✓
09:56:54 Deploy checkout-service ✓
10:19:44 Deploy order-managment-service ✗
10:39:27 Rollback order-managemet-service ✓
11:09:59 Update database cluster ✓
12:27:32 Migrate order-managemet-service DB ✓
13:19:22 Deploy order-managemet-service ✓
14:45:55 Update database-cluster ✗
15:50:49 Update database-cluster ✓
16:39:11 Deploy product-service ✓
17:44:56 Deploy customer-data-service ✓
Mittlere
Reperaturzeit
Fehlerrate bei Änderung
Deployment
Frequenz
Delivery
Lead Time
UX Tests
User Tracking/
Observability
Service Level Objectives
Benutzer-beschwerden
Code
Smells
Code
Komplexität
Mutation
Testing
Mittlere
Reperaturzeit
Fehlerrate bei Änderung
Deployment
Frequenz
Delivery
Lead Time
Team-
Umfragen
@MichaKutz
@mkutz@mstdn.social
Nicht alles, was zählt, kann gezählt werden, und
nicht alles, was gezählt werden kann, zählt!
This talk as an article 👇
By Michael Kutz
This presentation explores the topic of measuring quality in software development and the potential pitfalls that can arise from improper measurement. It discusses the importance of finding the right metrics and addresses various aspects of quality, including defectiveness, effectiveness, likability, and functionality.
Quality Engineer at REWE digital, Conference Speaker about QA & Agile, Founder of Agile QA Cologne meetup, Freelance QA Consultant