complexity indicators: estimation precision and test types
TRANSCRIPT
http://creativecommons.org/licenses/by-nc-sa/4.0/
Continuous changeComplexity 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
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
InternalTechnologyUnknownCultural
Start EndProduct development
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
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
PreciseLeading 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_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
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
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 failexperiments
http://creativecommons.org/licenses/by-nc-sa/4.0/
Roberto Bettazzoni @bettazzoni
Q&A