Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Complexity indicators: estimation precision and test types

281 views

Published on

This presentation is part of "Continuous change" (the practice to continuosly change the way of working according to the continuous change of the products needs)

This presentation is focused on the description of 2 complexity indicators: the user stories estimation precision and the type of the test that the team can plan|realize

Published in: Software
  • Be the first to comment

  • Be the first to like this

Complexity indicators: estimation precision and test types

  1. 1. http://creativecommons.org/licenses/by-nc-sa/4.0/ Continuous change Complexity indicators: estimation precision and test types
  2. 2. 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
  3. 3. http://creativecommons.org/licenses/by-nc-sa/4.0/ Continuous change
  4. 4. 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
  5. 5. 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
  6. 6. http://creativecommons.org/licenses/by-nc-sa/4.0/ Product complexity ? • Internal • Technical • Unknown • Cultural Sources of complexity
  7. 7. http://creativecommons.org/licenses/by-nc-sa/4.0/ Product complexity Internal Technology Unknown Cultural Start EndProduct development
  8. 8. 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
  9. 9. http://creativecommons.org/licenses/by-nc-sa/4.0/ Complicated ObviousChaotic Complex v
  10. 10. http://creativecommons.org/licenses/by-nc-sa/4.0/ Scrum XP Complicated ObviousChaotic Complex v
  11. 11. http://creativecommons.org/licenses/by-nc-sa/4.0/ ObviousComplex Complicated Scrum XP
  12. 12. http://creativecommons.org/licenses/by-nc-sa/4.0/ How can I measure the complexity? You need indicators
  13. 13. http://creativecommons.org/licenses/by-nc-sa/4.0/ ObviousComplex Complicated Statistics Indicators Measures Standard Measure Precise Leading Lagging
  14. 14. http://creativecommons.org/licenses/by-nc-sa/4.0/ ObviousComplex Complicated 0% 50% 100% Planning Estimation precision Good estimationsEstimations with errorsHigh error Complexity indicators
  15. 15. 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
  16. 16. 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
  17. 17. http://creativecommons.org/licenses/by-nc-sa/4.0/ How can I change my way of working? You need appropriate methods
  18. 18. http://creativecommons.org/licenses/by-nc-sa/4.0/ ObviousComplex Complicated Scrum XP Safe to fail experiments
  19. 19. http://creativecommons.org/licenses/by-nc-sa/4.0/ Roberto Bettazzoni @bettazzoni Q&A

×