Software Development

Dr Andy Evans

[Fullscreen]

Development Processes

  • Considerable debate exists around how best to manage software development.
  • Most proposed 'processes' have a parentage in the 'Waterfall Model'; roughly:
    • Requirements
    • Design
    • Coding
    • Testing
    • Installation
    • Maintenance
  • Like a good many parents who try their best, its children have nothing good to say about it.

Critiques

  • Largely focused on the fact that software was never fully completed, but always being re-visited at different scales. In particular, it is unhelpful not to go back to users and consult once a basic system is drafted.
  • Popular alterative is Iterative and Incremental development, where, after initial Requirements are outlined, there is a cycling through the development units, taking important and high-risk elements first.
  • This is sometimes combined with the Waterfall model as the 'Iterfall model'. Experience suggests the broad sweep of this matches with beginner's natural inclinations.

New processes

  • Based on the Iterative and avoiding the over-management of the Waterfall method: Agile software development processes include:
    • Rational Unified Process
    • Extreme Programming
    • Kanban and SCRUM for communication
    • Short development sprints
    • Continuous Integration
  • Main issue is to concentrate on user needs.

UML

  • An intrinsic part of the development process.
    From: Use Cases
    Through: Class Diagrams
    To: Activity Diagrams

Initial consultation

  • User consultation is a vital part of development.
  • Users should be consulted first. If the users don't like your software, you're sunk.
  • Find out what people expect to get from the system before adding extras. If it helps draw UML User Case diagrams.
  • User Cases can be used to break a large project up into smaller bits. Do the most difficult important bits first if possible!
  • However, watch for "feature creep".

Usability testing

  • When you think you have a bit users are interested in up and running, test its 'usability'.
  • Sit your users down with the software and get them to play with it.
  • It's useful to set them common tasks to do.
  • See how long they take to do stuff, and what they do that's unexpected. Some companies use mirrored windows.
  • Remember, users don't make mistakes - it's your fault if you lead them the wrong way!

Development stages

  • Refining user requirements.
  • Dividing code (e.g. by important high-risk functions first).
  • Keeping users informed.
  • Development.
  • Usability testing.
  • Bug hunting.
  • Refactoring.
  • Alpha and Beta testing.
  • Releases.
  • Deciding on the next set of functions to tackle.
  • Increasingly releases tackle a few functions on a short timescale rather than major releases with a longer gap ("Release Early and Release Often": "RERO").

Summary

  • Always design assuming the user...
    • Will experiment rather than read the manual.
    • Will base these experiments on what they expect to find.
  • Always base the software design around what the user wants.
  • Always test the user's opinions and the usability as you develop.

Licensing

  • Different options on a spectrum:
  • Open source.
  • Maintenance contracts.
  • Open standards.
  • Community built.
  • Freeware.
  • Adware.
  • Commercial.

Installing

  • Broadly speaking, you have five levels of distribution:
    1. Send them the Python files to run / package as a zip.
    2. Add a .bat or .sh file to run the files.
    3. Produce a proper distribution with a setup.py file to install at the command line.
    4. Upload to PyPi and configure for online installation through pip.
    5. Build a binary for a specific operating system.

Distributing and installing

Executables

Internationalisation

Summary

  • Getting a strong project outline at the start will help you resource a project, as will having a clear delimitation of coding activities.
  • However, project frameworks need to have flexibility built in to cope with project evolution. Start with an ordered list of functionalities, but consult with users frequently.
  • Look into formal software development processes if you have to work with teams.