This course is dedicated to my lost friend Jean-Michel Inglebert…​

blasonJMI
Figure 1. Students 2016 blazon: "Friday is troll day"

1. Projects management

1.1. What is a project ?

[…​] a project is an individual or collaborative enterprise, possibly involving research or design, that is carefully planned, usually by the project assigned team, to achieve a particular aim
— 2014
Wikipedia

1.2. Some facts…​

  • Start: was are the client needs expressed ?

    1. specifications,

    2. list of expected features,

    3. scenarios, use cases

    4. …​

  • End: when is the result product due ?

Avoid to answer : yesterday! (Otherwise it’s not a project anymore, but a rescue plan)

1.3. …​ and in between ?

Option 1

do your best by your own (like in 'DO the sales')

Option 2

run a process (like in '(RE)DO your passport')

Option 3

use project management techniques

1.4. How project management is doing so far …​

Out of 10, 7 projects are delivered late or never !

— January 2014
Programmez! journal

Possible reasons:

  • client expectations are vague

  • over-estimation of available resources

  • latency at the beginning

  • modification and updates get lost

  • overbooked teams

  • lost of knowledge during the project

  • risks are badly evaluated

  • meetings are not productive

In any case, it’s the development team fault.

— Often heard...

1.5. Why is it so hard ?

It should not be so hard:

  • The goal and target are well known (provided by the client)

  • The target satisfaction is often measurable (assessment)

The problem

There is no systematic method that can garanty that a project team will meet its goals.

Why ?

Because it requires to manage a domain complexity, a technical complexity and a human complexity, at the same time, with limited resources (time, money, …​)

In fact, the only predictable fact is :

it will be required to adapt!

1.6. What is a successfull project ?

A software project will end successfully if the team delivers an application that is reliable, robust and maintenable that meet the client expectations and need.

reliable

behave as expected in the expected conditions

robust

handle traffic, user mistakes, failures, etc.

maintenable

require few efforts to evolve

2. To produce applications

BUILD

make, ant, Maven, Ivy, Gradle, etc.

we’ll see that later (if needed)…​

Project Management tools

3. Methods

3.1. Waterfall and V Cycle

waterfall
Figure 2. The waterfall process

The V cycle adopts:

  • Cascading descending phases for analysis and design

  • Followed by an ascending for coding, tests and integration.

Vcycle
Figure 3. Typicall V cycle (source: https://en.wikipedia.org/wiki/V-Model)

In these kind of projects success means being able to go through the ascending branch of the 'V' successfully.

If project stops…​
  • No application can be delivered

  • At best some modules/classes can be reused

If project is late…​
  • coding and integration phases are shortened

  • delivered product is undertested

To summarize:

  • Cartesian way of reducing complexity

  • Test plans are produced in descending phases

  • Tests plans are veryfied during ascending phases

Well known limitations
  • ansence of maintenance and evolution phases

  • going back to design is very difficult

  • Hard to estimate a priori: what is the estimated complexity of the project ?

  • Does the delivered application conform to its documentation (and vice versa) ?

3.2. From V cycles to W ones

3.2.1. Let’s consider a trivial example

Example 1. A web application for managing URLs

Develop a web application capable of collecting and displaying URLs.

Cycle 0

Setup of the integration infrastructure

Chosen solution:

  • Development langage: PHP

  • Infrastructure : LAMP server

Cycle 1

Display the collected URLs

Chosen solution:

  • The server stores a urls table

  • Web page is returned using GET and displays urls as a list

Cycle 2

To collect urls

Chosen solution:

  • Web page propose a form to enter new urls

3.2.2. Overall process

w5rb2

3.2.3. Well known benefits

  • delivers an application that already runs in cycle 1

  • manage complexity and integration at each cycle

  • can be applied to a new development but also to an evolution

  • allows the client to adjust its requirements

Complete the sentence we’ve seen before:

A software project will end successfully if the team delivers an application that is reliable, robust and maintenable that meet the client expectations and need.

When it does not work ?
  • client can’t be involved regularly

  • the driving of the method is approximative (delays in releases)

  • tests are left over

New problems
  • importance of the initial infrastructure (cycle 0)

  • how to automate non regression tests: XP, T/BDD …​

  • spaghetti code ⇒ refactoring …​

  • frequent releases: continuous integration …​

  • what about documentation ???

3.3. V versus W

V
  • Requirements

  • Specifications

  • General and detailed design

  • Coding and (unit) testing

  • Integration and (integration) testing

  • Release

W
  • Cycle 0

  • Cycle 1 .. N

    • chose several features

    • …​ code/test …​

    • release

    • adjust expectations

3.4. What is important

  • Plan (more or less) next actions

  • Do as planned

  • Regularly evaluate progress towards the target

3.5. Evaluate progress towards the target

An important artifact to assess progress: tests!

Whatever the methodology, the project should address 'unit testing' and 'integration testing'.

You should
  • systematically write testing programs

  • execute them regularly

Quizz

QUESTION
socrative1