+ All Categories
Home > Internet > Den falschen plan perfekt ausführen

Den falschen plan perfekt ausführen

Date post: 22-Jan-2018
Category:
Upload: nils-langner
View: 174 times
Download: 2 times
Share this document with a friend
52
Den falschen Plan perfekt ausführen. Den falschen Plan perfekt ausführen. Nils Langner & Mike Lohmann
Transcript
Page 1: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Den falschen Plan perfekt ausführen.Nils Langner & Mike Lohmann

Page 2: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.Den falschen Plan perfekt ausführen.

Webentwickler seit 18 Jahren

Gründer www.leankoala.com

Head of Quality Management

Qualitätsmanager seit 10 Jahren

Blogger www.phphatesme.com

Seepferdchen seit 31 Jahren

@leankoala

@leankoala

Page 3: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Webentwickler seit 19 Jahren

Partner www.elbstack.com

Software Architect

Software Architect seit 10 Jahren

@elbstack

Page 4: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Das macht keinen Sinn!

Hä?

Klappt das auch für mich?

Sehe ich ganz anders!

Wieso liegt da eigentlich Stroh?!

Bei Fragen: fragenRaus damit

WAS machen die da vorne eigentlich?

Page 5: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Wer seid ihr?IPC 2017

Entwickler?

Qualitätsmanager / Tester?

PHP?

JavaScript?

Umbau auf Micro Services?

Page 6: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Gut, besser, am besten?Was ist guter Code?

Page 7: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Drauflos-Stil - A IPC 2017

Idee: Office-Anwesenheits-Trigger

Brauche einen Trigger

Brauche einen Store für einen Counter

Brauche eine Komponente die Nachrichten verschickt

Brauche statistische Auswertungen

Page 8: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

'use strict';const DynamoDb = require('aws-sdk/clients/dynamodb');const AWS = require('aws-sdk');

const Promise = require('bluebird');const https = require('https');const url = require('url');

AWS.config.setPromisesDependency(Promise);const dynamoDb = new DynamoDb({ params: { region: 'eu-central-1', }});

const tableName = process.env.DDB_TABLE;

function updateUsage(serialNumber, value) { return dynamoDb.updateItem({ TableName: tableName, Key: { deviceId: { S: serialNumber } }, ReturnValues: 'ALL_NEW', AttributeUpdates: { counter: { Action: 'ADD', Value: { N: value.toString() } } } }).promise() .then(data => { console.log("DynamoDB update response", data); return data; })}

function createSlackMessage(channel, value) { return { channel: channel, username: 'OfficeNotificationBotIoT', attachments: [{ text: `Momentan sind ${value} im Office.`, color: 'good', ts: new Date().getTime() / 1000, }] };}

function notify(slackUrl, channel, value, callback) { const message = JSON.stringify(createSlackMessage(channel, value)); const options = url.parse(slackUrl); options.method = 'POST'; options.headers = { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(message), };

const postReq = https.request(options, res => { const chunks = []; res.setEncoding('utf8'); res.on('data', chunk => { return chunks.push(chunk); }); res.on('end', () => { const body = chunks.join('');

return callback(null, { body: body, statusCode: res.statusCode, statusMessage: res.statusMessage });

}).on('error', callback); });

postReq.write(message); postReq.end();}

function handleUpdate(serialNumber, value, callback) { return updateUsage(serialNumber, value) .then(data => { notify( data.Attributes.hookUrl.S, data.Attributes.channel.S, data.Attributes.counter.N, callback ); }) .catch(err => { console.error('Error notifying channel'); return callback(err); })}

exports.handler = (event, context, callback) => { console.log('Received event:', event.clickType);

if (event.clickType === "SINGLE") { handleUpdate(event.serialNumber, 1, callback); } else { handleUpdate(event.serialNumber, -1, callback); }};

1 2 3Brauche einen Store für einen Counter

Brauche eine Komponente die Nachrichten verschickt Brauche einen Trigger-(Handler)

Page 9: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

require_once 'Spreadsheet_Excel_Writer.php';

class XLS { private $workbook; private $format_header;

function __construct() {

// Creating a workbook $this->workbook = new Spreadsheet_Excel_Writer();

$this->format_header =& $this->workbook->addFormat(); $this->format_header->setBold(); $this->format_header->setFgColor('blue'); $this->format_header->setColor('white'); }

function add_sheet($sheetname='sheet', $data=array()) { …. }

function send($filename) { // Let's send the file - Hell Yeah!! Let's do it!! // sending HTTP headers if (!strpos(strtolower($filename),".xls")) { $filename .= ".xls"; } $this->workbook->send($filename); $this->workbook->close(); }}

/*** Send HTTP headers for the Excel file.** @param string $filename The filename to use for HTTP headers* @access public*/function send($filename){ header("Content-type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=\"$filename\""); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0,pre-check=0"); header("Pragma: public");}

4 Brauche statistische Auswertungen

Page 10: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

resource "aws_lambda_function" "SlackOfficeNotification" { description = "SlackOfficeNotification Dash Events" filename = "../SlackOfficeNotification.zip" source_code_hash = "${base64sha256(file("../SlackOfficeNotification.zip"))}" function_name = "SlackOfficeNotification" handler = "index.handler" timeout = 10 runtime = "nodejs4.3" role = "${aws_iam_role.iot_son_role.arn}”

environment { variables = { "DDB_TABLE" = "${aws_dynamodb_table.iot_son_dbtable.name}" "REGION" = "${var.aws_region}" }

}}

resource "aws_lambda_permission" "allow_SlackOfficeNotifications" { statement_id = "AllowExecutionFromEvents" action = "lambda:InvokeFunction" function_name = "${aws_lambda_function.SlackOfficeNotification.arn}" principal = "sns.amazonaws.com" source_arn = "${var.iot_son_source_arn}”

}

Semi-automatisches Deployment mit Terraform

Page 11: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Was ist mit Tests

Hardcoded Variablen

Gar nicht erweiterbar

Naja… Das geht doch einfach nicht! 100 Leute wurden gefragt: Was ist daran

schlecht?

Quiz

Page 12: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Page 13: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Jetzt besser machenWas ist guter Code?

Page 14: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Professional-Stil - BIPC 2017

Muss 100 Tsd Kunden verwalten können

Muss pro Kunde konfigurierbare Nachrichtenkanäle haben (Slack, SMS, you name it)

Verschiedene Nachrichten / Kunde / Location

85 % Unit-Testabdeckung

Funktionale Tests für 6 verschiedene Browser

Muss statistische Auswertung in einem Dashboard zeigen

Idee: Office-Anwesenheits-Trigger (diesmal professional!)

Page 15: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Page 16: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Jetzt perfekte Implementierung vorstellen.Imagination.

Page 17: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Was ist besser? A oder B?Raus damit

Nicht-funktionale Requirements alle beachtet

Klar B

Alles perfekt gebaut

Musterprojekt

Architektur durchdacht

Page 18: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Page 19: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Page 20: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

A - ~ 3 Tage (eigentlich sogar nur 1 Tag, aber ein bisschen schön sollte es doch sein) Auswertung

B - ~ 10 Wochen

Page 21: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Page 22: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Was ist besser? A oder B?Raus damit

Klar A

Weniger Zeit investiert

Geringere Kosten

Page 23: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Eine kurze Geschichte der ZeitErfahrungsbericht

Page 24: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

So viel verschwendete ZeitErfahrungsbericht

Polaris: ca. 2 Jahre amilio: 2 Jahre Freizeit

Page 25: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

So viel verschwendete ZeitErfahrungsbericht

Jubii-Pages: ca. 2 Jahre abspielbar: 2 Jahre Freizeit, 3 Jahre GmbH bis zur Insolvenz

Page 26: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

FazitVision

Projekte schlagen fehl

Das Leben ist hart

Page 27: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Ein paar Fakten

100.000

Technikgründungenpro Jahr in

Deutschland (KFW 2016)

1 von 10

Startups überleben das erste Jahr

80%

aller Features werden kaum oder gar nicht

verwendet(Chaos Report Standish

Group)

Page 28: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Ist Qualität unnötig?

Nein, doch, ohhh.

Qualität

Page 29: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Doing things rightDoing things

Doing the right thing

versus

Page 30: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

ThoughtlandDoing the right thing

If you are not embarrassed by the first version of your product, you’ve launched too late.

Page 31: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Wie baut elbstack Software?Vision

Software muss nur den Anforderungen genügen

YAGNI - Prinzip

Page 32: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Anforderungen definierenVision

Anforderungen mit Kunde formulieren

Anforderungen in Komponenten gliedern

Features pro Komponente definieren

Page 33: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Anforderungen priorisieren - MVPVision

Welche Features müssen ins MVP*?

Tasks für Features definieren

*https://hackernoon.com/the-mvp-is-dead-long-live-the-rat-233d5d16ab02 (Riskiest Assumption Tests)

Page 34: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Technologie (für MVP) festlegenVision

Was kann das Team?

Was kann das Team schnell lernen?

Was wird noch gebraucht für MVP?

Page 35: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Kernkomponente(n) festlegenVision

Was sind Kernkomponenten?

Unit Tests für Kernkomponenten - Ist Dein Freund

Page 36: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

MVP umsetzen Vision

Möglichst einfach und schnell

“Dreckig” ist erlaubt! - Solange kein Core

Lean Testing - Ist Dein Freund

Page 37: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

MVP deployen und am Markt testen Vision

Möglichst so, dass man schnell Bugfixes einbauen kann

(Semi) automatisiertes Deployment - Ist Dein Freund

Page 38: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Feedback einarbeiten - Nächste Iteration Vision

Und täglich grüßt das Murmeltier...

=> (Semi) automatisiertes Deployment - Ist Dein Freund

=> Unit Tests für Kernkomponenten - Ist Dein Freund

=> Lean Testing - Ist Dein Freund

Page 39: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Und wenn es doch groß wird?!Vision

Refactorings

=> (Semi)automatisiertes Deployment - Ist Dein Freund

=> Unit Tests für Kernkomponenten - Ist Dein Freund

=> Lean Testing - Ist Dein Freund

Page 40: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Wie sollte ich Software testen?Qualität

Page 41: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Projekte im InternetQualität

Page 42: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Was ist Qualität?Qualität

„Grad, in dem ein Satz inhärenter Merkmale eines Objekts Anforderungen erfüllt.

„Übereinstimmung von Leistungen mit Ansprüchen.“

Norm DIN EN ISO 9000:2015-11

Gablers Wirtschaftslexikon

Page 43: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Was ist Risiko?Qualität

Risiko = Eintrittswahrscheinlichkeit * Kosten

Page 44: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Wird mein Projekt ein Erfolg?Qualität

90% aller Startups scheitern

80% aller Features werde nicht genutzt

NEIN, dein Projekt wird kein Erfolg

Page 45: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Was muss ich dann testen?Qualität

niente

nichts

nada

nothing

Na gut, vielleicht ein wenig.

Page 46: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Testen muss schlank seinQualität

Lean Testing

Crowd TestingMonitoring based Testing

Page 47: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Lean TestingLean Testing

Semantischer Fehler im Controller

Datenbankprobleme

Fehler im Template

Syntaktische Fehler im Controller

Bug in Bibliothek

Fehlender Content

HTTP-Status-Code != 200

Ursachen Symptome

Page 48: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Nur was für Startups?Lean Testing

Page 49: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

LeankoalaLeankoala

www.leankoala.com

Page 50: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Leankoala - 4 Schritte zum Test-SetupLeankoala

www.leankoala.com

www.bravo.de

Enter homepage url

1

Scanning for equivalency classes

2

65%

Scanning for 1.227 widgets

3

22%

Test Setup completed

we found 38 components

you are using 32 widgets

34 anomalies already found

4

Innovation // Alleinstellungsmerkmal

Page 51: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

FazitEnde

Doing the right thing before doing things right

Dein Projekt wird kein Erfolg! Wahrscheinlich.

Page 52: Den falschen plan perfekt ausführen

Den falschen Plan perfekt ausführen.

Kontaktiert uns.Kontakt

Nils [email protected]@leankoala

Mike [email protected]@elbstack


Recommended