Skip to content

Issues

Learning objectives

  • To be a good team member within a project
  • Use issues to communicate what needs to be done
  • Assign yourself to issues to communicate what you are working on
  • Convert requirements to issues
For teachers

Teaching goals:

  • Find out which learners are comfortable with functions

Prior:

  • How to keep track of what needs to be done in a project?
  • How to signal to the team what needs to be done?
  • How to prevent team members from working on the same thing?
  • How would you define what an issue is?
  • How do you call the webpage where a list of issues can be seen?

Lesson plans:

gantt
  title Lesson plan pair programming 1
  dateFormat X
  axisFormat %s
  Introduction : intro, 0, 5s
  Theory 1: theory_1, after intro, 5s
  Exercise 1: crit, exercise_1, after theory_1, 15s
  Feedback 1: feedback_1, after exercise_1, 5s
  Theory 2: theory_2, after feedback_1, 5s
  Exercise 2: crit, exercise_2, after theory_2, 10s
  Exercise 2 after the break: crit, after exercise_2, 5s

A good team member communicates. Here we show how to communicate to the rest of the team with minimal overhead.

  • What needs to be done?
  • Who is doing what now?

Issues

A bug-tracking database is not just a memory aid or ascheduling tool. It doesn 't make it easier to produce great software, it makes it possible to create great software.

Joel Spolsky [Gunderloy, 2007]

An issue is a unit of work, or something that needs to be done. All issues are stored in an issue tracker. The issue tracker is a fundamental communication tool in teams [Bertram, 2009] In any project, you should create a shared "to-do" list, such as an issue tracker [Wilson et al, 2017].

English Issue Describe
This needs to be done! Create an issue Why and what needs to be done
I am on it! Assign yourself to an issue -
You are best to do this! Assign someone else to an issue Why you think the other is best to do it
Done! Closing an issue Why it is done
Nah, it is not done yet! Re-opening an issue Why it was not done

The life cycle of a issue, from Bugzilla, 2009

The life cycle of a issue, from [Bugzilla, 2009]

Duplicates

Sometimes, two issues describe the same problem. This is called a duplicate. Because duplicates are not uncommon, there is an issue label called duplicate.

Managing issues

For a fresh project, there are many things to do. It is not uncommon to have an 'issue manager' that keeps an overview of all issues.

Issues with dependencies

Sometimes issues depend on other issues. This is typically indicated with a depends issue label. The learners' project has it too.

In the text write something like:

This issue dependends on #42

The hashtag (#) turns the #42 into a link to issue 42.

Issues based on requirements

Some issues originate from the requirements documents, as shown below.

In academia

In academia, instead of using a formal requirements document, you can use sentences from the 'Methods' section too.

Writing the 'Methods' section and issues goes hand-in-hand.

R1: Create testing parameter set

The requirements documentation states:

Requirement ID Requirement Description Acceptance Criteria Test Cases
R2 Create testing parameters A parameter set can be created to be used in testing The test parameter set must be a parameter set

To do so, create a function called create_test_parameters in a file called parameters.py

The function needs no input arguments.

The function creates a parameter set with reasonably normal default settings.

The data type of the parameter set must be a class called Parameters, but use a list of strings if this is not specified yet.

Note the related requirent R2: 'check that parameters are well-formed'

R2: check that parameters are well-formed

The requirements documentation states:

Requirement ID Requirement Description Acceptance Criteria Test Cases
R2 Can recognize valid parameters A valid parameter set can be recognized Parameters (such as R1) must be recognized as valid, others as invalid

To do so, create a function called are_parameters in a file called parameters.py

The function needs one argument, which is the value to determine if it is a parameter set.

The function returns True if the value is indeed a valid/well-formed/correct parameter set and returns False otherwise.

Note the related requirent R1: 'Create testing parameter set'

R3: Read parameters from file

The requirements documentation states:

Requirement ID Requirement Description Acceptance Criteria Test Cases
R3 Read parameters from file Parameters can be supplied as a file The simulation uses the same parameters as specified in a parameters file

To do so, create a function called read_parameters in a file called parameters.py

The function needs a filename as input and creates a dictionary of parameter name to parameter values, such as {'initial_number_of_bacteria': '1000', 'duration': '1000 timesteps'}.

Create a test parameters file, e.g. test_parameters.csv to test that the values read by read_parameters match those in the file.

R4: Create a test bacterium

The requirements documentation states:

Requirement ID Requirement Description Acceptance Criteria Test Cases
R4 Create a test bacterium A bacterium can be created to be used in testing The test bacterium must be a bacterium

To do so, create a function called create_test_bacterium in a file called bacterium.py

The function needs no input arguments.

The function creates a bacterium with reasonably normal default settings.

The data type of the bacterium must be a class called Bacterium, but use a list of strings if this is not specified yet.

R5: check that a bacteria is well-formed

The requirements documentation states:

Requirement ID Requirement Description Acceptance Criteria Test Cases
R5 Can recognize a bacterium A valid (in-memory) bacterium can be recognized A bacterius (such as R4) must be recognized as valid, others as invalid

To do so, create a function called is_bacterium in a file called bacterium.py

The function needs one argument, which is the value to determine if it is a bacterium.

The function returns True if the value is indeed a valid/well-formed/correct bacterium and returns False otherwise.

Note the related requirent R4: 'Create a test bacterium'

Our project

In our project we use the following rules:

  • Always work on an issue, create an issue if needed
  • Issues are always based on the requirements document
  • First part of an issue can be to add it to the requirements document. Sure, the product owner is usually is charge of this, but in this project, everyone is a bit of a product owner :-)

Exercises

Exercise 1: a typical issue lifecycle

Do the following in our student project:

  • Create a test issue. In the text, write why you create that issue and what needs to be done
  • Assign yourself to the issue
  • Close the issue. In the text, write why you close that issue

Exercise 2: learners' project: create an issue

For the learners' project:

  • create at least one issue for things that you think need to be done, based on the design document. Assign yourself to one issue

Discussion

Issues are useful to communicate:

  • what needs to be done
  • who is planning to do what
  • what is already done

However, an issue tracker is not designed to communicate what is actively being worked on. For that, a kanban board is used instead.

References

  • [Bertram, 2009] Bertram, Dane. "The social nature of issue tracking in software engineering." University of Calgary (2009).
  • [Bugzilla, 2009] Bugzilla (2009). Life Cycle of a Bug. Retrieved October 30, 2009 from https://www.bugzilla.org/docs/2.18/html/lifecycle.html
  • [Gunderloy, 2007] Gunderloy, Mike, ed. Painless project management with FogBugz. Berkeley, CA: Apress, 2007.
  • [Wilson et al, 2017] Wilson, Greg, et al. "Good enough practices in scientific computing." PLoS computational biology 13.6 (2017): e1005510. here