19
http://creativecommons.org/licenses/by-nc-sa/4.0/ Continuous change Complexity indicators: estimation precision and test types

Complexity indicators: estimation precision and test types

Embed Size (px)

Citation preview

Page 1: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

Continuous changeComplexity indicators:

estimation precision and test types

Page 2: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

Software craftsman Trainer and coach for agile software development

[email protected] linkedin.com/in/robertobettazzoni @bettazzoni

Roberto Bettazzoni

Page 3: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

Continuous change

Page 4: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

Why should I change my way of working?

To build modern products in more effective way

Page 5: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

Why should I change my way of working?

To build complex products in more effective way

Page 6: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

Product complexity ?

• Internal

• Technical

• Unknown

• Cultural

Sources of complexity

Page 7: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

Product complexity

InternalTechnologyUnknownCultural

Start EndProduct development

Page 8: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

Cynefin framework is a trademark of Cognitive Edge - Kudos to David Snowden

Complicatedsense

analyse respond

Obvioussense

categorise respond

Chaoticact

sense respond

Complexprobe sense

respond

"Cynefin as of 1st June 2014" by Snowded - Own work. Licensed under CC BY-SA 3.0 via Commons - https://commons.wikimedia.org/wiki/File:Cynefin_as_of_1st_June_2014.png#/media/File:Cynefin_as_of_1st_June_2014.png

Disorder

Page 9: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

Complicated

ObviousChaotic

Complex

v

Page 10: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

Scrum

XP Complicated

ObviousChaotic

Complex

v

Page 11: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

ObviousComplex Complicated

Scrum

XP

Page 12: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

How can I measure the complexity?

You need indicators

Page 13: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

ObviousComplex Complicated

Statistics

Indicators Measures Standard Measure

PreciseLeading Lagging

Page 14: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

ObviousComplex Complicated

0%

50%

100%

Planning Estimation precision

Good estimationsEstimations with errorsHigh error

Complexity indicators

Page 15: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

ObviousComplex Complicated

cp src/*.c build/

No need for tests

#include "mainwindow.h"#include "ui_mainwindow.h"#include "alarm.h"#include <QTimer>#include <QtMultimedia>

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); ui->progressBar->setTextVisible(true); ui->LcdNumber->display("00:00"); timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(updateTime())); alarm = new Alarm(0); }

MainWindow::~MainWindow(){ delete ui; delete timer; delete alarm;}

void MainWindow::showOnScreen(int elapsed, int remaning){ int m = remaning/60; int s = remaning % 60; char buf[32]; sprintf(buf, ((s % 2 == 0)? "%02d:%02d": "%02d %02d"),m,s ); ui->LcdNumber->display(buf); ui->progressBar->setValue(elapsed);}

void MainWindow::updateTime(){ alarm->updateTime(); if (alarm->expired) { timer->stop(); playSound(); ui->LcdNumber->display("00:00"); } else { showOnScreen(alarm->elapsed_seconds, alarm->remaining_seconds); }}

void MainWindow::on_startButton_clicked(){ int m = ui->minSpinBox->value(); int s = ui->secSpinBox->value(); int totsec = m * 60 + s; if (totsec > 0) { ui->progressBar->setMaximum(totsec); alarm->setExpireTime(totsec); showOnScreen(alarm->elapsed_seconds, alarm->remaining_seconds); timer->start(500); }}

void MainWindow::on_pauseContinueButton_clicked(){ timer->stop();}

void MainWindow::playSound(){ QSound::play("/Users/taz/al/MacTimer/MacTimer/ezekiel.wav");}

Exact testsStatistical/Complex tests

#include <QtTest/QtTest>

class TestQString: public QObject{ Q_OBJECTprivate slots: void toUpper();};

void TestQString::toUpper(){ QString str = "Hello"; QCOMPARE(str.toUpper(), QString("HELLO"));}

QTEST_MAIN(TestQString)#include "testqstring.moc"

Micro tests

Complexity indicatorsTest types

Page 16: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

Product complexity indicators

Estimation precision

Test type

Scrum meeting duration

Capacity allocation

# spikes

# features rejectedTech expert time

Page 17: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

How can I change my way of working?

You need appropriate methods

Page 18: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

ObviousComplex Complicated

Scrum

XP

Safe to failexperiments

Page 19: Complexity indicators: estimation precision and test types

http://creativecommons.org/licenses/by-nc-sa/4.0/

Roberto Bettazzoni @bettazzoni

Q&A