Lectures at Advanced Programming Concepts 2017

26-30 June 2017- DESY, Hamburg, Germany - School web site

Introduction to the Software Development Process

This brief introduction illustrates the main concepts of the software development process and overviews some models of software development. It is propedeutic to the following topics.

Lecture

References for further study

Ian Sommerville, Software Engineering, Pearson, 2015 (10th ed.)

Robert C. Martin, Agile Software Development, Principles, Patterns, and Practices, Pearson, 2002
B. Boehm, “Get Ready for Agile Methods, With Care”, IEEE Computer, 2002
D. Astels, Test Driven Development: A Practical Guide, Prentice Hall, 2003
K. Schwaber and M. Beedle, Agile Software Development with Scrum, Prentice Hall, 2001
B. Meyer, Agile!: The Good, the Hype and the Ugly, Springer, 2014

I. Jacobson, G. Booch, J. Rumbaugh, The Unified Software Development Process, Addison-Wesley Professional, 1999
Philippe Kruchten, The Rational Unified Process: An Introduction, Addison-Wesley Professional, 2003
Philippe_Kruchten, "A Software Development Process for a Team of One", Rational Edge, 2002

Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship, Prentice Hall, 2008

Testing

This lecture introduces the main concepts of the software test process. Unit testing, which is illustrated here, is a fundamental component of the refactoring process; it is applied in the hands-on refactoring exercise described below.

Lecture

Useful links

Boost Unit Test Framework
Google Test

Refactoring

The lecture summarizes the main concepts of refactoring, with special attention to refactoring physics code.

Lecture

Exercise: The Video Store Example

This hands-on exercise is based on the "Video Store Example", described in Chapter 1 of M. Fowler's Refactoring book.

red77.gif Overview
red77.gif Online guidance for the exercise

References for further study

Martin Fowler, Refactoring: Improving the Design of Existing Code, Addison-Wesley Professional, 1999
G. Suryanarayana, G. Samarthyam, T. Sharma, Refactoring for Software Design Smells, Morgan Kaufmann, 2014
Michael C. Feathers, Working Effectively with Legacy Code, Prentice Hall, 2004
Serge Demeyer, Stéphane Ducasse, Oscar Nierstrasz, Object-Oriented Reengineering Patterns, 2009
Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship, Prentice Hall, 2008

Useful links

Martin Fowler's Refactoring web site
Refactoring catalog
Smells to Refactoring Quick Reference

Programming with templates

This lecture is a brief introduction to programming techniques exploiting C++ templates. As an example, policy-based class design is illustrated.
Lecture

References for further study

David Vandevoorde, Nicolai M. Josuttis, C++ Templates, Addison-Wesley, 2002
Andrei Alexandrescu, Modern C++ Design,  Addison-Wesley, 2001
David Abrahams, Aleksey Gurtovoy,  C++ Template Metaprogramming, Addison-Wesley, 2004

Computing  environment for the exercise

Accounts for the APC students have been preset at DESY on naf-school01.desy.de and naf-school02.desy.de. No further software installation is necessary on the computers dedicated to the school. The following information is provided, if you wish to reproduce the exercise in your own computing environment.

The exercise has been tested on the following platforms:
The instructions below are given for these platforms; please adapt them to your own computing environment, if necessary.

Version control

red77.gif Git
red77.gif Pro Git book
Repository of the source code for the exercise

Build

red77.gif cmake (needed to build GoogleTest)

Unit testing

Google Test (the repository gives access to the Google Test Primer to get started)
Installing googletest for the exercise: quick and simple guidance, it does not replace the more extensive documentation of the Google Test Primer