http://creativecommons.org/licenses/by-nc-sa/4.0/
Continuous change
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
roberto.bettazzoni@agile42.com
linkedin.com/in/robertobettazzoni
@bettazzoni
Roberto Bettazzoni
http://creativecommons.org/licenses/by-nc-sa/4.0/
Continuous change
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
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
http://creativecommons.org/licenses/by-nc-sa/4.0/
Product complexity ?
• Internal
• Technical
• Unknown
• Cultural
Sources of complexity
http://creativecommons.org/licenses/by-nc-sa/4.0/
Product complexity
Internal
Technology
Unknown
Cultural
Start EndProduct development
http://creativecommons.org/licenses/by-nc-sa/4.0/
Cynefin framework is a trademark of Cognitive Edge - Kudos to David Snowden
Complicated
sense
analyse
respond
Obvious
sense
categorise
respond
Chaotic
act
sense
respond
Complex
probe
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
http://creativecommons.org/licenses/by-nc-sa/4.0/
Complicated
ObviousChaotic
Complex
v
http://creativecommons.org/licenses/by-nc-sa/4.0/
Scrum
XP
Complicated
ObviousChaotic
Complex
v
http://creativecommons.org/licenses/by-nc-sa/4.0/
ObviousComplex Complicated
Scrum
XP
http://creativecommons.org/licenses/by-nc-sa/4.0/
How can I measure the complexity?
You need indicators
http://creativecommons.org/licenses/by-nc-sa/4.0/
ObviousComplex Complicated
Statistics
Indicators Measures
Standard
Measure
Precise
Leading
Lagging
http://creativecommons.org/licenses/by-nc-sa/4.0/
ObviousComplex Complicated
0%
50%
100%
Planning Estimation precision
Good estimationsEstimations with errorsHigh error
Complexity indicators
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_OBJECT

private slots:

void toUpper();

};

void TestQString::toUpper(){

QString str = "Hello";

QCOMPARE(str.toUpper(), QString("HELLO"));

}

QTEST_MAIN(TestQString)

#include "testqstring.moc"

Micro tests
Complexity indicators
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 rejected
Tech expert time
http://creativecommons.org/licenses/by-nc-sa/4.0/
How can I change my way of working?
You need appropriate methods
http://creativecommons.org/licenses/by-nc-sa/4.0/
ObviousComplex Complicated
Scrum
XP
Safe to fail
experiments
http://creativecommons.org/licenses/by-nc-sa/4.0/
Roberto Bettazzoni
@bettazzoni
Q&A

Complexity indicators: estimation precision and test types