SlideShare a Scribd company logo
1 of 60
Download to read offline
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Programming Practices and Project Management
for Professional Software Development
Sébastien Jodogne
CHU of Liège
Interfaces-Entreprises ULg, May 28th, 2013
1 / 34
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Who Am I?
PhD in Computer Science, ULg. Domains of interest:
Image Processing,
Machine Learning,
High-Performance Computing,
Theoretical Computer Science.
5-year professional experience in private companies:
CCTV – Closed Circuit Television (Secosys, Euresys),
Machine Vision (Euresys),
Broadcasting (EVS).
Now: Medical imaging engineer in the Department of Medical
Physics at the CHU of Liège.
This talk: Industrial practices for compiled languages.
2 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Case Study
Summary
Lightweight, scriptable server for medical imaging.
Open-source (GPLv3).
Developed with an industrial methodology.
Main languages:
Core: C++.
GUI: HTML5, JavaScript.
3 / 34
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
Put Your Code in Revision Control Software
Advantages
Keep track of all the changes to the code.
Share across multiple computers, with multiple collaborators.
Track the various versions of the software (“tagging”).
Backup (recover deleted or modified files).
Avoid the ZIP mess (which version is the latest one?).
Candidates
1 Mercurial.
2 Git (more adapted to geeks).
3 Subversion (becomes legacy).
4 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
Questions When Starting a Project
Choose a licensing model (cf. Jérémie Fays). GPLv3 is the
de-facto choice.
Choose a software forge:
For closed-source (private): BitBucket, SourceForge.
For open-source (public): GitHub, Google Code.
For confidential code (medical data, spin-off): ???
5 / 34
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
Choose (and Stick to) a Coding Style
6 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
Documentation
Document functions and classes in the source code
⇒ Doxygen (C/C++), Javadoc (Java), XML (C#).
Document architecture and algorithms elsewhere (separate
files or Wiki).
Don’t forget the User Manual (PDF or Wiki).
Be verbose and use explicit names (possibly long) for variables,
functions and methods.
⇒ “Self-Documented Code”.
Do not reuse variables and introduce them only when they are
needed (not at the top of a function as in C).
7 / 34
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
Don’t Reinvent the (Squared) Wheel
Use third-party libraries.
⇒ Know your ecosystem (language, frameworks, StackOverflow).
Recommended libraries for C++: STL, Boost, SQLite, Qt. . .
Caveats:
Minimize the number of dependencies!
Avoid heavyweight, not supported or “exotic” libraries.
Pay attention to portability (Windows, Mac OS).
License compatibility.
8 / 34
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
Anti-Patterns (Don’ts!)
Programs whose structure is
barely comprehensible, espe-
cially because of misuse of code
structures (especially GOTO).
9 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
Anti-Patterns (Don’ts!)
Classes not properly encapsulated,
thus permitting unrestricted access to
their internals.
10 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
Anti-Patterns (Don’ts!)
An object that knows too much
or does too much.
11 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
Anti-Patterns (Don’ts!)
Conclusions
Learn and recognize bad software architectures.
Inventories do exist!
Lasagna code,
Magic numbers,
Poltergeists,
Error hiding. . .
[Antipatterns, Code smells, Fifth-System Effect]
12 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
Design Patterns (Do’s!)
Recurring solutions to common
problems in software design.
13 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
Design Patterns (Do’s!)
Basic Philosophy
Uncouple the software components by adding abstractions (“Java
interfaces”), thanks to object-oriented programming.
[Wikipedia, Head First Design Patterns]
Some Common Patterns
Singleton.
Factory.
Observer.
Model-View-Controller (aka. separate GUI and core).
14 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
RAII — Resource Acquisition Is Initialization
Most useful design pattern for C++.
Automatic release of a resource on leaving scope or on
exception ⇒ Never any leak!
Applicable to memory allocation, I/O, multithreading. . .
class FileWriter
{
private:
FILE* fp_;
public:
FileWriter(const char* filename)
{
fp_ = fopen(filename, "w");
}
~FileWriter()
{
printf("Closing filen");
fclose(fp_);
}
};
void Demo1()
{
FileWriter w1("/tmp/hello.txt");
// Leaving scope => closing "w1.fp_"
}
void Demo2()
{
FileWriter w2("/tmp/hello.txt");
throw std::runtime_error("Sorry guy");
// Exception => closing "w2.fp_"
}
15 / 34
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
Other Recommendations
1 KISS (“Keep it simple, stupid”) — A code is written once, but
read many times by different people!
2 DRY (“Don’t repeat yourself”) — Implement some
computation at a single place to ensure consistency.
3 “Premature optimization is the root of all evil” [D. Knuth].
4 Use exceptions, never return error codes (except in C).
5 Use a build system (CMake, SCons or Visual Studio).
6 Windows-only: Do not create DLL and favor static linking,
except if you know what you are doing (ABI, DLL hell)!
7 Learn debugging tools:
Debuggers (Visual Studio, Eclipse, gdb. . . ).
Linux-only: Valgrind (memory leaks, access violations. . . ).
16 / 34
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
What is Legacy Code?
Legacy code is defined as
code without tests.
⇓
Impossible to know when
things get broken (i.e. to
detect regressions).
⇓
Impossible to refactor.
17 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
“Testing is up to the Testers and the Users!”
18 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
“Testing is up to the Testers and the Users!”
Really? Bugs detected at the
code level are:
Easier to understand,
Easier to reproduce,
Easier and cheaper to fix,
More contained.
⇓
Software engineers are part of
the testing process!
18 / 34
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
Assertion-Driven Testing (aka. Invariants/Preconditions)
#include <assert.h>
#include <stdio.h>
int factorial(int value)
{
assert(value >= 0);
if (value == 0)
return 1;
else
return value * factorial(value - 1);
}
int main()
{
printf("%dn", factorial(-5)); /* => crash */
}
19 / 34
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
Unit Testing
int main()
{
printf("%dn", factorial(0)); /* 1 */
printf("%dn", factorial(1)); /* 1 */
printf("%dn", factorial(2)); /* 2 */
printf("%dn", factorial(3)); /* 6 */
printf("%dn", factorial(4)); /* 24 */
printf("%dn", factorial(5)); /* 120 */
}
20 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
Unit Testing
int main()
{
printf("%dn", factorial(0)); /* 1 */
printf("%dn", factorial(1)); /* 1 */
printf("%dn", factorial(2)); /* 2 */
printf("%dn", factorial(3)); /* 6 */
printf("%dn", factorial(4)); /* 24 */
printf("%dn", factorial(5)); /* 120 */
}
⇒
TEST(Example, Factorial)
{
ASSERT_EQ(1, factorial(0));
ASSERT_EQ(1, factorial(1));
ASSERT_EQ(2, factorial(2));
ASSERT_EQ(6, factorial(3));
ASSERT_EQ(24, factorial(4));
ASSERT_EQ(120, factorial(5));
}
20 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
Unit Testing
int main()
{
printf("%dn", factorial(0)); /* 1 */
printf("%dn", factorial(1)); /* 1 */
printf("%dn", factorial(2)); /* 2 */
printf("%dn", factorial(3)); /* 6 */
printf("%dn", factorial(4)); /* 24 */
printf("%dn", factorial(5)); /* 120 */
}
⇒
TEST(Example, Factorial)
{
ASSERT_EQ(1, factorial(0));
ASSERT_EQ(1, factorial(1));
ASSERT_EQ(2, factorial(2));
ASSERT_EQ(6, factorial(3));
ASSERT_EQ(24, factorial(4));
ASSERT_EQ(120, factorial(5));
}
Basic Idea
Accumulate a database of tests!
20 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
Unit Testing In Practice
Use a unit testing framework (e.g. Google Test).
Move your main() tests as unit tests.
Keep your unit tests small and fast.
Add unit tests each time a function or a class is added.
Add an unit test for each solved bug.
Execute the unit tests as a step of the build process!
Even better: Write tests before writing the code (aka. TDD
— Test-Driven Development).
21 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
Continuous Integration Server (Build + Unit tests)
22 / 34
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
Different Flavors of Quality Assurance
Classes
Functions
Executable
Hardware/OS
Unit testing
Integration testing
System testing
23 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
Integration Tests
“End-to-end” tests on the final binaries (black box).
Typically less automated and much more lengthy than unit
tests (white box).
Possible approaches:
1 Inject stimuli, compare outputs with expected results.
2 GUI automation testing.
3 Challenge the API (cf. Orthanc).
Run integration tests (at least) before each release, or even
better as part of the nightly builds.
System Tests
At last, the testing team makes user-level tests.
24 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
Issue Tracker: Link between Engineers, Testers and Users
Common Choices
Bugzilla, JIRA, FogBugz, Redmine, Trac.
Often integrated within the software forge.
25 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
The Software Quality Iceberg
26 / 34
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Agile Methodologies
Scrum
Extreme Programming
A New Vision of Project Management
The cathedral (monolithic)
27 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Agile Methodologies
Scrum
Extreme Programming
A New Vision of Project Management
⇒
The cathedral (monolithic) The bazaar (agile)
27 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Agile Methodologies
Scrum
Extreme Programming
Agility: Cut Down Release Cycles
28 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Agile Methodologies
Scrum
Extreme Programming
Agility: Cut Down Release Cycles
28 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Agile Methodologies
Scrum
Extreme Programming
Agility: Cut Down Release Cycles
⇒
Features are incrementally added.
Software architecture is continuously refactored.
28 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Agile Methodologies
Scrum
Extreme Programming
Continuous Testing is at the Center of Agile Development
⇒
The cathedral (monolithic) The bazaar (agile) 29 / 34
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Agile Methodologies
Scrum
Extreme Programming
Scrum: Most Popular Agile Methodology
30 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Agile Methodologies
Scrum
Extreme Programming
Scrum: The Product Backlog of Orthanc in Trello
31 / 34
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Agile Methodologies
Scrum
Extreme Programming
Extreme Programming: Agile Engineering Practices
32 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Agile Methodologies
Scrum
Extreme Programming
Extreme Programming: Agile Engineering Practices
32 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Agile Methodologies
Scrum
Extreme Programming
Extreme Programming: Agile Engineering Practices
32 / 34
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
1 Introduction
2 Best Programming Practices
Put Your Code in Revision Control Software
Coding Style and Documentation
Don’t Reinvent the (Squared) Wheel
Design Patterns
Other Recommendations
3 Software Quality
Software Engineers are Part of the Testing
Assertion-Driven Testing
Unit Testing
Integration and System Testing
4 Project Management
Agile Methodologies
Scrum
Extreme Programming
5 Summary
Score Your Project!
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Score Your Project!
Score Your Project!
33 / 34
Introduction
Best Programming Practices
Software Quality
Project Management
Summary
Score Your Project!
Any Question?
34 / 34

More Related Content

What's hot

Codingstandards matiar
Codingstandards matiarCodingstandards matiar
Codingstandards matiarMatiar Rahman
 
Parasoft .TEST, Write better C# Code Using Data Flow Analysis
Parasoft .TEST, Write better C# Code Using  Data Flow Analysis Parasoft .TEST, Write better C# Code Using  Data Flow Analysis
Parasoft .TEST, Write better C# Code Using Data Flow Analysis Engineering Software Lab
 
Code quality as a built-in process
Code quality as a built-in processCode quality as a built-in process
Code quality as a built-in processElad Maimon
 
Frank's Learning Summary - Evolution of agile testing
Frank's Learning Summary - Evolution of agile testingFrank's Learning Summary - Evolution of agile testing
Frank's Learning Summary - Evolution of agile testingFrank Lee
 
Java Code Review Checklist
Java Code Review ChecklistJava Code Review Checklist
Java Code Review ChecklistMahesh Chopker
 
Java Code Quality Tools
Java Code Quality ToolsJava Code Quality Tools
Java Code Quality ToolsOrest Ivasiv
 
Software defect prevention example project
Software defect prevention example projectSoftware defect prevention example project
Software defect prevention example projectZarko Acimovic
 
Peer Code Review An Agile Process
Peer Code Review An Agile ProcessPeer Code Review An Agile Process
Peer Code Review An Agile Processgsporar
 
Static code analysis
Static code analysisStatic code analysis
Static code analysisRune Sundling
 
Software audit form blank(1)
Software audit form blank(1)Software audit form blank(1)
Software audit form blank(1)Oliver-Ingham
 
Code Review
Code ReviewCode Review
Code Reviewrantav
 
Top 10 static code analysis tool
Top 10 static code analysis toolTop 10 static code analysis tool
Top 10 static code analysis toolscmGalaxy Inc
 
ISTQB Advance Material
ISTQB Advance MaterialISTQB Advance Material
ISTQB Advance MaterialMandar Kharkar
 
Code review in practice
Code review in practiceCode review in practice
Code review in practiceEdorian
 
Static Analysis Techniques For Testing Application Security - Houston Tech Fest
Static Analysis Techniques For Testing Application Security - Houston Tech FestStatic Analysis Techniques For Testing Application Security - Houston Tech Fest
Static Analysis Techniques For Testing Application Security - Houston Tech FestDenim Group
 

What's hot (20)

Codingstandards matiar
Codingstandards matiarCodingstandards matiar
Codingstandards matiar
 
Parasoft .TEST, Write better C# Code Using Data Flow Analysis
Parasoft .TEST, Write better C# Code Using  Data Flow Analysis Parasoft .TEST, Write better C# Code Using  Data Flow Analysis
Parasoft .TEST, Write better C# Code Using Data Flow Analysis
 
Code quality as a built-in process
Code quality as a built-in processCode quality as a built-in process
Code quality as a built-in process
 
Frank's Learning Summary - Evolution of agile testing
Frank's Learning Summary - Evolution of agile testingFrank's Learning Summary - Evolution of agile testing
Frank's Learning Summary - Evolution of agile testing
 
Static Code Analysis
Static Code AnalysisStatic Code Analysis
Static Code Analysis
 
Java Code Review Checklist
Java Code Review ChecklistJava Code Review Checklist
Java Code Review Checklist
 
Parasoft fda software compliance part2
Parasoft fda software compliance   part2Parasoft fda software compliance   part2
Parasoft fda software compliance part2
 
Introduction to Parasoft C++TEST
Introduction to Parasoft C++TEST Introduction to Parasoft C++TEST
Introduction to Parasoft C++TEST
 
Java Code Quality Tools
Java Code Quality ToolsJava Code Quality Tools
Java Code Quality Tools
 
Software defect prevention example project
Software defect prevention example projectSoftware defect prevention example project
Software defect prevention example project
 
Parasoft fda software compliance part1
Parasoft fda software compliance   part1Parasoft fda software compliance   part1
Parasoft fda software compliance part1
 
Peer Code Review An Agile Process
Peer Code Review An Agile ProcessPeer Code Review An Agile Process
Peer Code Review An Agile Process
 
Static code analysis
Static code analysisStatic code analysis
Static code analysis
 
Software audit form blank(1)
Software audit form blank(1)Software audit form blank(1)
Software audit form blank(1)
 
Code Review
Code ReviewCode Review
Code Review
 
Top 10 static code analysis tool
Top 10 static code analysis toolTop 10 static code analysis tool
Top 10 static code analysis tool
 
Verification Challenges and Methodologies
Verification Challenges and MethodologiesVerification Challenges and Methodologies
Verification Challenges and Methodologies
 
ISTQB Advance Material
ISTQB Advance MaterialISTQB Advance Material
ISTQB Advance Material
 
Code review in practice
Code review in practiceCode review in practice
Code review in practice
 
Static Analysis Techniques For Testing Application Security - Houston Tech Fest
Static Analysis Techniques For Testing Application Security - Houston Tech FestStatic Analysis Techniques For Testing Application Security - Houston Tech Fest
Static Analysis Techniques For Testing Application Security - Houston Tech Fest
 

Viewers also liked

Software Quality Analyst and Software Quality Management
Software Quality Analyst and Software Quality ManagementSoftware Quality Analyst and Software Quality Management
Software Quality Analyst and Software Quality Managementنور شزننا
 
Science behind Staging
Science behind StagingScience behind Staging
Science behind StagingMáté Thurzó
 
Mapping GSD and PMBOK Guide
Mapping GSD and PMBOK GuideMapping GSD and PMBOK Guide
Mapping GSD and PMBOK GuideAchmad Giovani
 
Creating value from Software Development though Project management
Creating value from Software Development though Project managementCreating value from Software Development though Project management
Creating value from Software Development though Project managementCharles Muzonzini
 
Software Project Management lecture 8
Software Project Management lecture 8Software Project Management lecture 8
Software Project Management lecture 8Syed Muhammad Hammad
 
Construx Course Catalog - 2016
Construx Course Catalog - 2016Construx Course Catalog - 2016
Construx Course Catalog - 2016ConstruxSoftware
 
Software project management
Software project managementSoftware project management
Software project managementNarendra Mishra
 
Software development project management
Software development project managementSoftware development project management
Software development project managementRoni Banerjee
 
Managing Agile Software Development Projects
Managing Agile Software Development ProjectsManaging Agile Software Development Projects
Managing Agile Software Development ProjectsMartina Šimičić
 
Testing 01 sw_development
Testing 01 sw_developmentTesting 01 sw_development
Testing 01 sw_developmentNovita Basin
 
Analisis kebutuhan perangkat lunak
Analisis kebutuhan perangkat lunakAnalisis kebutuhan perangkat lunak
Analisis kebutuhan perangkat lunakHanum Dinda
 
Managing RightScale on RightScale
Managing RightScale on RightScaleManaging RightScale on RightScale
Managing RightScale on RightScaleRightScale
 
Migraine Drupal - syncing your staging and live sites
Migraine Drupal - syncing your staging and live sitesMigraine Drupal - syncing your staging and live sites
Migraine Drupal - syncing your staging and live sitesdrupalindia
 
Tahapan pengembangan perangkat lunak
Tahapan pengembangan perangkat lunakTahapan pengembangan perangkat lunak
Tahapan pengembangan perangkat lunakRobbyyanto Robbyyanto
 
Software development life cycles (sdlc)
Software development life cycles (sdlc)Software development life cycles (sdlc)
Software development life cycles (sdlc)Yuriy Kravchenko
 
SDPM - Lecture 5 - Software effort estimation
SDPM - Lecture 5 - Software effort estimationSDPM - Lecture 5 - Software effort estimation
SDPM - Lecture 5 - Software effort estimationOpenLearningLab
 
MPPL Chapter 4
MPPL Chapter 4MPPL Chapter 4
MPPL Chapter 4beiharira
 
MPPL Chapter 3
MPPL Chapter 3MPPL Chapter 3
MPPL Chapter 3beiharira
 

Viewers also liked (20)

Software Quality Analyst and Software Quality Management
Software Quality Analyst and Software Quality ManagementSoftware Quality Analyst and Software Quality Management
Software Quality Analyst and Software Quality Management
 
Softwarequalität: Definitionen, Grenzen, Wünsche - Vortrag IKS-Meeting im Jan...
Softwarequalität: Definitionen, Grenzen, Wünsche - Vortrag IKS-Meeting im Jan...Softwarequalität: Definitionen, Grenzen, Wünsche - Vortrag IKS-Meeting im Jan...
Softwarequalität: Definitionen, Grenzen, Wünsche - Vortrag IKS-Meeting im Jan...
 
Science behind Staging
Science behind StagingScience behind Staging
Science behind Staging
 
Mapping GSD and PMBOK Guide
Mapping GSD and PMBOK GuideMapping GSD and PMBOK Guide
Mapping GSD and PMBOK Guide
 
Creating value from Software Development though Project management
Creating value from Software Development though Project managementCreating value from Software Development though Project management
Creating value from Software Development though Project management
 
Software Project Management lecture 8
Software Project Management lecture 8Software Project Management lecture 8
Software Project Management lecture 8
 
Construx Course Catalog - 2016
Construx Course Catalog - 2016Construx Course Catalog - 2016
Construx Course Catalog - 2016
 
Software project management
Software project managementSoftware project management
Software project management
 
Software development project management
Software development project managementSoftware development project management
Software development project management
 
Managing Agile Software Development Projects
Managing Agile Software Development ProjectsManaging Agile Software Development Projects
Managing Agile Software Development Projects
 
Testing 01 sw_development
Testing 01 sw_developmentTesting 01 sw_development
Testing 01 sw_development
 
Analisis kebutuhan perangkat lunak
Analisis kebutuhan perangkat lunakAnalisis kebutuhan perangkat lunak
Analisis kebutuhan perangkat lunak
 
Managing RightScale on RightScale
Managing RightScale on RightScaleManaging RightScale on RightScale
Managing RightScale on RightScale
 
Migraine Drupal - syncing your staging and live sites
Migraine Drupal - syncing your staging and live sitesMigraine Drupal - syncing your staging and live sites
Migraine Drupal - syncing your staging and live sites
 
Tahapan pengembangan perangkat lunak
Tahapan pengembangan perangkat lunakTahapan pengembangan perangkat lunak
Tahapan pengembangan perangkat lunak
 
Software development life cycles (sdlc)
Software development life cycles (sdlc)Software development life cycles (sdlc)
Software development life cycles (sdlc)
 
2010 ICGSE - Challenges and Solutions in Distributed Software Development Pro...
2010 ICGSE - Challenges and Solutions in Distributed Software Development Pro...2010 ICGSE - Challenges and Solutions in Distributed Software Development Pro...
2010 ICGSE - Challenges and Solutions in Distributed Software Development Pro...
 
SDPM - Lecture 5 - Software effort estimation
SDPM - Lecture 5 - Software effort estimationSDPM - Lecture 5 - Software effort estimation
SDPM - Lecture 5 - Software effort estimation
 
MPPL Chapter 4
MPPL Chapter 4MPPL Chapter 4
MPPL Chapter 4
 
MPPL Chapter 3
MPPL Chapter 3MPPL Chapter 3
MPPL Chapter 3
 

Similar to Programming practises and project management for professionnal software development

DevOps interview questions and answers
DevOps interview questions and answersDevOps interview questions and answers
DevOps interview questions and answersHopeTutors1
 
Rhapsody Software
Rhapsody SoftwareRhapsody Software
Rhapsody SoftwareBill Duncan
 
Metodologías agiles de desarrollo de software
Metodologías agiles de desarrollo de softwareMetodologías agiles de desarrollo de software
Metodologías agiles de desarrollo de softwareJuan Gomez
 
Software Engineering- Crisis and Process Models
Software Engineering- Crisis and Process ModelsSoftware Engineering- Crisis and Process Models
Software Engineering- Crisis and Process ModelsNishu Rastogi
 
Software Architecture - Allocation taxonomies: building, deployment and distr...
Software Architecture - Allocation taxonomies: building, deployment and distr...Software Architecture - Allocation taxonomies: building, deployment and distr...
Software Architecture - Allocation taxonomies: building, deployment and distr...Jose Emilio Labra Gayo
 
Practices of agile developers
Practices of agile developersPractices of agile developers
Practices of agile developersDUONG Trong Tan
 
Software Engineering PPT Unit I.pptx
Software Engineering PPT Unit I.pptxSoftware Engineering PPT Unit I.pptx
Software Engineering PPT Unit I.pptxomgadekar25
 
Building Scalable Development Environments
Building Scalable Development EnvironmentsBuilding Scalable Development Environments
Building Scalable Development EnvironmentsShahar Evron
 
Software Development Standard Operating Procedure
Software Development Standard Operating Procedure Software Development Standard Operating Procedure
Software Development Standard Operating Procedure rupeshchanchal
 
Coding and testing in Software Engineering
Coding and testing in Software EngineeringCoding and testing in Software Engineering
Coding and testing in Software EngineeringAbhay Vijay
 
Code Craftsmanship Checklist
Code Craftsmanship ChecklistCode Craftsmanship Checklist
Code Craftsmanship ChecklistRyan Polk
 

Similar to Programming practises and project management for professionnal software development (20)

DevOps interview questions and answers
DevOps interview questions and answersDevOps interview questions and answers
DevOps interview questions and answers
 
Rhapsody Software
Rhapsody SoftwareRhapsody Software
Rhapsody Software
 
Ensuring code quality
Ensuring code qualityEnsuring code quality
Ensuring code quality
 
Metodologías agiles de desarrollo de software
Metodologías agiles de desarrollo de softwareMetodologías agiles de desarrollo de software
Metodologías agiles de desarrollo de software
 
Cnpm bkdn
Cnpm bkdnCnpm bkdn
Cnpm bkdn
 
Software Engineering- Crisis and Process Models
Software Engineering- Crisis and Process ModelsSoftware Engineering- Crisis and Process Models
Software Engineering- Crisis and Process Models
 
Software Architecture - Allocation taxonomies: building, deployment and distr...
Software Architecture - Allocation taxonomies: building, deployment and distr...Software Architecture - Allocation taxonomies: building, deployment and distr...
Software Architecture - Allocation taxonomies: building, deployment and distr...
 
1.Basic Introduction (1).ppt
1.Basic Introduction (1).ppt1.Basic Introduction (1).ppt
1.Basic Introduction (1).ppt
 
Practices of agile developers
Practices of agile developersPractices of agile developers
Practices of agile developers
 
Unit iv
Unit ivUnit iv
Unit iv
 
Software Engineering PPT Unit I.pptx
Software Engineering PPT Unit I.pptxSoftware Engineering PPT Unit I.pptx
Software Engineering PPT Unit I.pptx
 
Building Scalable Development Environments
Building Scalable Development EnvironmentsBuilding Scalable Development Environments
Building Scalable Development Environments
 
lecture 1.pdf
lecture 1.pdflecture 1.pdf
lecture 1.pdf
 
Sdlc
SdlcSdlc
Sdlc
 
Software Development Standard Operating Procedure
Software Development Standard Operating Procedure Software Development Standard Operating Procedure
Software Development Standard Operating Procedure
 
reaserch ppt.pptx
reaserch ppt.pptxreaserch ppt.pptx
reaserch ppt.pptx
 
Software coding and testing
Software coding and testingSoftware coding and testing
Software coding and testing
 
Coding and testing in Software Engineering
Coding and testing in Software EngineeringCoding and testing in Software Engineering
Coding and testing in Software Engineering
 
Code Craftsmanship Checklist
Code Craftsmanship ChecklistCode Craftsmanship Checklist
Code Craftsmanship Checklist
 
07 fse implementation
07 fse implementation07 fse implementation
07 fse implementation
 

More from Interface ULg, LIEGE science park

Réforme code des sociétés - Le Point du LIEGE science park - 25 janvier 2019
Réforme code des sociétés - Le Point du LIEGE science park - 25 janvier 2019Réforme code des sociétés - Le Point du LIEGE science park - 25 janvier 2019
Réforme code des sociétés - Le Point du LIEGE science park - 25 janvier 2019Interface ULg, LIEGE science park
 
SISEM, motivation des équipes projets - Le Point du LIEGE science park - 30 m...
SISEM, motivation des équipes projets - Le Point du LIEGE science park - 30 m...SISEM, motivation des équipes projets - Le Point du LIEGE science park - 30 m...
SISEM, motivation des équipes projets - Le Point du LIEGE science park - 30 m...Interface ULg, LIEGE science park
 
Aides à l'Innovation de la Région Wallonne - Le Point du LIEGE science park -...
Aides à l'Innovation de la Région Wallonne - Le Point du LIEGE science park -...Aides à l'Innovation de la Région Wallonne - Le Point du LIEGE science park -...
Aides à l'Innovation de la Région Wallonne - Le Point du LIEGE science park -...Interface ULg, LIEGE science park
 
Protocole NAGOYA - Le Point du LIEGE science park - 27 octobre 2017
Protocole NAGOYA - Le Point du LIEGE science park - 27 octobre 2017Protocole NAGOYA - Le Point du LIEGE science park - 27 octobre 2017
Protocole NAGOYA - Le Point du LIEGE science park - 27 octobre 2017Interface ULg, LIEGE science park
 
Actifs immatériels - enjeux levée de fonds - Le Point du LIEGE science park -...
Actifs immatériels - enjeux levée de fonds - Le Point du LIEGE science park -...Actifs immatériels - enjeux levée de fonds - Le Point du LIEGE science park -...
Actifs immatériels - enjeux levée de fonds - Le Point du LIEGE science park -...Interface ULg, LIEGE science park
 
Incitants fiscaux R&D - Le Point du LIEGE science park - 19 mai 2017
Incitants fiscaux R&D - Le Point du LIEGE science park - 19 mai 2017Incitants fiscaux R&D - Le Point du LIEGE science park - 19 mai 2017
Incitants fiscaux R&D - Le Point du LIEGE science park - 19 mai 2017Interface ULg, LIEGE science park
 
20170428 - Le Point - Protection des données à caractère personnel - CRIDS
20170428 - Le  Point - Protection des données à caractère personnel - CRIDS20170428 - Le  Point - Protection des données à caractère personnel - CRIDS
20170428 - Le Point - Protection des données à caractère personnel - CRIDSInterface ULg, LIEGE science park
 
Intelligence artificielle - juridique - Le Point du LIEGE science park - 31 m...
Intelligence artificielle - juridique - Le Point du LIEGE science park - 31 m...Intelligence artificielle - juridique - Le Point du LIEGE science park - 31 m...
Intelligence artificielle - juridique - Le Point du LIEGE science park - 31 m...Interface ULg, LIEGE science park
 
20170224_Le Point_valoriser une entreprise technologique_deloitte
20170224_Le Point_valoriser une entreprise technologique_deloitte20170224_Le Point_valoriser une entreprise technologique_deloitte
20170224_Le Point_valoriser une entreprise technologique_deloitteInterface ULg, LIEGE science park
 
The competencies of the University of Liège for the aerospace cluster SKYWIN
The competencies of the University of Liège for the aerospace cluster SKYWINThe competencies of the University of Liège for the aerospace cluster SKYWIN
The competencies of the University of Liège for the aerospace cluster SKYWINInterface ULg, LIEGE science park
 
Impression 3D et droit des marques _ Le Point du LiEGE science park _ 27 janv...
Impression 3D et droit des marques _ Le Point du LiEGE science park _ 27 janv...Impression 3D et droit des marques _ Le Point du LiEGE science park _ 27 janv...
Impression 3D et droit des marques _ Le Point du LiEGE science park _ 27 janv...Interface ULg, LIEGE science park
 
ULg-Skywin - Multibody & mechatronic systems laboratory - MMS
ULg-Skywin - Multibody & mechatronic systems laboratory - MMSULg-Skywin - Multibody & mechatronic systems laboratory - MMS
ULg-Skywin - Multibody & mechatronic systems laboratory - MMSInterface ULg, LIEGE science park
 

More from Interface ULg, LIEGE science park (20)

20191129 - le point-diagnostic-pi - picarre
20191129 - le point-diagnostic-pi - picarre20191129 - le point-diagnostic-pi - picarre
20191129 - le point-diagnostic-pi - picarre
 
2019 09 26 - le point - Convaincre son banquier
2019 09 26 - le point - Convaincre son banquier2019 09 26 - le point - Convaincre son banquier
2019 09 26 - le point - Convaincre son banquier
 
2019 03 29_ le point_EUREKA_SPW
2019 03 29_ le point_EUREKA_SPW2019 03 29_ le point_EUREKA_SPW
2019 03 29_ le point_EUREKA_SPW
 
Réforme code des sociétés - Le Point du LIEGE science park - 25 janvier 2019
Réforme code des sociétés - Le Point du LIEGE science park - 25 janvier 2019Réforme code des sociétés - Le Point du LIEGE science park - 25 janvier 2019
Réforme code des sociétés - Le Point du LIEGE science park - 25 janvier 2019
 
20181130 le point-innovatech-analyse multicritere
20181130 le point-innovatech-analyse multicritere20181130 le point-innovatech-analyse multicritere
20181130 le point-innovatech-analyse multicritere
 
20181026 - le point - incitants fiscaux R&D - MoneyOak
20181026 - le point - incitants fiscaux R&D - MoneyOak20181026 - le point - incitants fiscaux R&D - MoneyOak
20181026 - le point - incitants fiscaux R&D - MoneyOak
 
SISEM, motivation des équipes projets - Le Point du LIEGE science park - 30 m...
SISEM, motivation des équipes projets - Le Point du LIEGE science park - 30 m...SISEM, motivation des équipes projets - Le Point du LIEGE science park - 30 m...
SISEM, motivation des équipes projets - Le Point du LIEGE science park - 30 m...
 
Aides à l'Innovation de la Région Wallonne - Le Point du LIEGE science park -...
Aides à l'Innovation de la Région Wallonne - Le Point du LIEGE science park -...Aides à l'Innovation de la Région Wallonne - Le Point du LIEGE science park -...
Aides à l'Innovation de la Région Wallonne - Le Point du LIEGE science park -...
 
Protocole NAGOYA - Le Point du LIEGE science park - 27 octobre 2017
Protocole NAGOYA - Le Point du LIEGE science park - 27 octobre 2017Protocole NAGOYA - Le Point du LIEGE science park - 27 octobre 2017
Protocole NAGOYA - Le Point du LIEGE science park - 27 octobre 2017
 
Actifs immatériels - enjeux levée de fonds - Le Point du LIEGE science park -...
Actifs immatériels - enjeux levée de fonds - Le Point du LIEGE science park -...Actifs immatériels - enjeux levée de fonds - Le Point du LIEGE science park -...
Actifs immatériels - enjeux levée de fonds - Le Point du LIEGE science park -...
 
Incitants fiscaux R&D - Le Point du LIEGE science park - 19 mai 2017
Incitants fiscaux R&D - Le Point du LIEGE science park - 19 mai 2017Incitants fiscaux R&D - Le Point du LIEGE science park - 19 mai 2017
Incitants fiscaux R&D - Le Point du LIEGE science park - 19 mai 2017
 
20170428 - Le Point - Protection des données à caractère personnel - CRIDS
20170428 - Le  Point - Protection des données à caractère personnel - CRIDS20170428 - Le  Point - Protection des données à caractère personnel - CRIDS
20170428 - Le Point - Protection des données à caractère personnel - CRIDS
 
Intelligence artificielle - juridique - Le Point du LIEGE science park - 31 m...
Intelligence artificielle - juridique - Le Point du LIEGE science park - 31 m...Intelligence artificielle - juridique - Le Point du LIEGE science park - 31 m...
Intelligence artificielle - juridique - Le Point du LIEGE science park - 31 m...
 
20170224_Le Point_valoriser une entreprise technologique_deloitte
20170224_Le Point_valoriser une entreprise technologique_deloitte20170224_Le Point_valoriser une entreprise technologique_deloitte
20170224_Le Point_valoriser une entreprise technologique_deloitte
 
The competencies of the University of Liège for the aerospace cluster SKYWIN
The competencies of the University of Liège for the aerospace cluster SKYWINThe competencies of the University of Liège for the aerospace cluster SKYWIN
The competencies of the University of Liège for the aerospace cluster SKYWIN
 
Impression 3D et droit des marques _ Le Point du LiEGE science park _ 27 janv...
Impression 3D et droit des marques _ Le Point du LiEGE science park _ 27 janv...Impression 3D et droit des marques _ Le Point du LiEGE science park _ 27 janv...
Impression 3D et droit des marques _ Le Point du LiEGE science park _ 27 janv...
 
ULg-Skywin - Multibody & mechatronic systems laboratory - MMS
ULg-Skywin - Multibody & mechatronic systems laboratory - MMSULg-Skywin - Multibody & mechatronic systems laboratory - MMS
ULg-Skywin - Multibody & mechatronic systems laboratory - MMS
 
ULg-Skywin - Modelling for aquatic systems - MAST
ULg-Skywin - Modelling for aquatic systems - MASTULg-Skywin - Modelling for aquatic systems - MAST
ULg-Skywin - Modelling for aquatic systems - MAST
 
ULg-Skywin - Microsys
ULg-Skywin - MicrosysULg-Skywin - Microsys
ULg-Skywin - Microsys
 
ULg-Skywin - Lentic
ULg-Skywin - LenticULg-Skywin - Lentic
ULg-Skywin - Lentic
 

Recently uploaded

APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsPrecisely
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 

Recently uploaded (20)

E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power Systems
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 

Programming practises and project management for professionnal software development

  • 1. Introduction Best Programming Practices Software Quality Project Management Summary Programming Practices and Project Management for Professional Software Development Sébastien Jodogne CHU of Liège Interfaces-Entreprises ULg, May 28th, 2013 1 / 34
  • 2. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 3. Introduction Best Programming Practices Software Quality Project Management Summary Who Am I? PhD in Computer Science, ULg. Domains of interest: Image Processing, Machine Learning, High-Performance Computing, Theoretical Computer Science. 5-year professional experience in private companies: CCTV – Closed Circuit Television (Secosys, Euresys), Machine Vision (Euresys), Broadcasting (EVS). Now: Medical imaging engineer in the Department of Medical Physics at the CHU of Liège. This talk: Industrial practices for compiled languages. 2 / 34
  • 4. Introduction Best Programming Practices Software Quality Project Management Summary Case Study Summary Lightweight, scriptable server for medical imaging. Open-source (GPLv3). Developed with an industrial methodology. Main languages: Core: C++. GUI: HTML5, JavaScript. 3 / 34
  • 5. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 6. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 7. Introduction Best Programming Practices Software Quality Project Management Summary Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations Put Your Code in Revision Control Software Advantages Keep track of all the changes to the code. Share across multiple computers, with multiple collaborators. Track the various versions of the software (“tagging”). Backup (recover deleted or modified files). Avoid the ZIP mess (which version is the latest one?). Candidates 1 Mercurial. 2 Git (more adapted to geeks). 3 Subversion (becomes legacy). 4 / 34
  • 8. Introduction Best Programming Practices Software Quality Project Management Summary Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations Questions When Starting a Project Choose a licensing model (cf. Jérémie Fays). GPLv3 is the de-facto choice. Choose a software forge: For closed-source (private): BitBucket, SourceForge. For open-source (public): GitHub, Google Code. For confidential code (medical data, spin-off): ??? 5 / 34
  • 9. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 10. Introduction Best Programming Practices Software Quality Project Management Summary Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations Choose (and Stick to) a Coding Style 6 / 34
  • 11. Introduction Best Programming Practices Software Quality Project Management Summary Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations Documentation Document functions and classes in the source code ⇒ Doxygen (C/C++), Javadoc (Java), XML (C#). Document architecture and algorithms elsewhere (separate files or Wiki). Don’t forget the User Manual (PDF or Wiki). Be verbose and use explicit names (possibly long) for variables, functions and methods. ⇒ “Self-Documented Code”. Do not reuse variables and introduce them only when they are needed (not at the top of a function as in C). 7 / 34
  • 12. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 13. Introduction Best Programming Practices Software Quality Project Management Summary Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations Don’t Reinvent the (Squared) Wheel Use third-party libraries. ⇒ Know your ecosystem (language, frameworks, StackOverflow). Recommended libraries for C++: STL, Boost, SQLite, Qt. . . Caveats: Minimize the number of dependencies! Avoid heavyweight, not supported or “exotic” libraries. Pay attention to portability (Windows, Mac OS). License compatibility. 8 / 34
  • 14. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 15. Introduction Best Programming Practices Software Quality Project Management Summary Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations Anti-Patterns (Don’ts!) Programs whose structure is barely comprehensible, espe- cially because of misuse of code structures (especially GOTO). 9 / 34
  • 16. Introduction Best Programming Practices Software Quality Project Management Summary Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations Anti-Patterns (Don’ts!) Classes not properly encapsulated, thus permitting unrestricted access to their internals. 10 / 34
  • 17. Introduction Best Programming Practices Software Quality Project Management Summary Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations Anti-Patterns (Don’ts!) An object that knows too much or does too much. 11 / 34
  • 18. Introduction Best Programming Practices Software Quality Project Management Summary Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations Anti-Patterns (Don’ts!) Conclusions Learn and recognize bad software architectures. Inventories do exist! Lasagna code, Magic numbers, Poltergeists, Error hiding. . . [Antipatterns, Code smells, Fifth-System Effect] 12 / 34
  • 19. Introduction Best Programming Practices Software Quality Project Management Summary Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations Design Patterns (Do’s!) Recurring solutions to common problems in software design. 13 / 34
  • 20. Introduction Best Programming Practices Software Quality Project Management Summary Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations Design Patterns (Do’s!) Basic Philosophy Uncouple the software components by adding abstractions (“Java interfaces”), thanks to object-oriented programming. [Wikipedia, Head First Design Patterns] Some Common Patterns Singleton. Factory. Observer. Model-View-Controller (aka. separate GUI and core). 14 / 34
  • 21. Introduction Best Programming Practices Software Quality Project Management Summary Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations RAII — Resource Acquisition Is Initialization Most useful design pattern for C++. Automatic release of a resource on leaving scope or on exception ⇒ Never any leak! Applicable to memory allocation, I/O, multithreading. . . class FileWriter { private: FILE* fp_; public: FileWriter(const char* filename) { fp_ = fopen(filename, "w"); } ~FileWriter() { printf("Closing filen"); fclose(fp_); } }; void Demo1() { FileWriter w1("/tmp/hello.txt"); // Leaving scope => closing "w1.fp_" } void Demo2() { FileWriter w2("/tmp/hello.txt"); throw std::runtime_error("Sorry guy"); // Exception => closing "w2.fp_" } 15 / 34
  • 22. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 23. Introduction Best Programming Practices Software Quality Project Management Summary Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations Other Recommendations 1 KISS (“Keep it simple, stupid”) — A code is written once, but read many times by different people! 2 DRY (“Don’t repeat yourself”) — Implement some computation at a single place to ensure consistency. 3 “Premature optimization is the root of all evil” [D. Knuth]. 4 Use exceptions, never return error codes (except in C). 5 Use a build system (CMake, SCons or Visual Studio). 6 Windows-only: Do not create DLL and favor static linking, except if you know what you are doing (ABI, DLL hell)! 7 Learn debugging tools: Debuggers (Visual Studio, Eclipse, gdb. . . ). Linux-only: Valgrind (memory leaks, access violations. . . ). 16 / 34
  • 24. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 25. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 26. Introduction Best Programming Practices Software Quality Project Management Summary Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing What is Legacy Code? Legacy code is defined as code without tests. ⇓ Impossible to know when things get broken (i.e. to detect regressions). ⇓ Impossible to refactor. 17 / 34
  • 27. Introduction Best Programming Practices Software Quality Project Management Summary Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing “Testing is up to the Testers and the Users!” 18 / 34
  • 28. Introduction Best Programming Practices Software Quality Project Management Summary Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing “Testing is up to the Testers and the Users!” Really? Bugs detected at the code level are: Easier to understand, Easier to reproduce, Easier and cheaper to fix, More contained. ⇓ Software engineers are part of the testing process! 18 / 34
  • 29. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 30. Introduction Best Programming Practices Software Quality Project Management Summary Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing Assertion-Driven Testing (aka. Invariants/Preconditions) #include <assert.h> #include <stdio.h> int factorial(int value) { assert(value >= 0); if (value == 0) return 1; else return value * factorial(value - 1); } int main() { printf("%dn", factorial(-5)); /* => crash */ } 19 / 34
  • 31. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 32. Introduction Best Programming Practices Software Quality Project Management Summary Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing Unit Testing int main() { printf("%dn", factorial(0)); /* 1 */ printf("%dn", factorial(1)); /* 1 */ printf("%dn", factorial(2)); /* 2 */ printf("%dn", factorial(3)); /* 6 */ printf("%dn", factorial(4)); /* 24 */ printf("%dn", factorial(5)); /* 120 */ } 20 / 34
  • 33. Introduction Best Programming Practices Software Quality Project Management Summary Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing Unit Testing int main() { printf("%dn", factorial(0)); /* 1 */ printf("%dn", factorial(1)); /* 1 */ printf("%dn", factorial(2)); /* 2 */ printf("%dn", factorial(3)); /* 6 */ printf("%dn", factorial(4)); /* 24 */ printf("%dn", factorial(5)); /* 120 */ } ⇒ TEST(Example, Factorial) { ASSERT_EQ(1, factorial(0)); ASSERT_EQ(1, factorial(1)); ASSERT_EQ(2, factorial(2)); ASSERT_EQ(6, factorial(3)); ASSERT_EQ(24, factorial(4)); ASSERT_EQ(120, factorial(5)); } 20 / 34
  • 34. Introduction Best Programming Practices Software Quality Project Management Summary Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing Unit Testing int main() { printf("%dn", factorial(0)); /* 1 */ printf("%dn", factorial(1)); /* 1 */ printf("%dn", factorial(2)); /* 2 */ printf("%dn", factorial(3)); /* 6 */ printf("%dn", factorial(4)); /* 24 */ printf("%dn", factorial(5)); /* 120 */ } ⇒ TEST(Example, Factorial) { ASSERT_EQ(1, factorial(0)); ASSERT_EQ(1, factorial(1)); ASSERT_EQ(2, factorial(2)); ASSERT_EQ(6, factorial(3)); ASSERT_EQ(24, factorial(4)); ASSERT_EQ(120, factorial(5)); } Basic Idea Accumulate a database of tests! 20 / 34
  • 35. Introduction Best Programming Practices Software Quality Project Management Summary Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing Unit Testing In Practice Use a unit testing framework (e.g. Google Test). Move your main() tests as unit tests. Keep your unit tests small and fast. Add unit tests each time a function or a class is added. Add an unit test for each solved bug. Execute the unit tests as a step of the build process! Even better: Write tests before writing the code (aka. TDD — Test-Driven Development). 21 / 34
  • 36. Introduction Best Programming Practices Software Quality Project Management Summary Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing Continuous Integration Server (Build + Unit tests) 22 / 34
  • 37. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 38. Introduction Best Programming Practices Software Quality Project Management Summary Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing Different Flavors of Quality Assurance Classes Functions Executable Hardware/OS Unit testing Integration testing System testing 23 / 34
  • 39. Introduction Best Programming Practices Software Quality Project Management Summary Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing Integration Tests “End-to-end” tests on the final binaries (black box). Typically less automated and much more lengthy than unit tests (white box). Possible approaches: 1 Inject stimuli, compare outputs with expected results. 2 GUI automation testing. 3 Challenge the API (cf. Orthanc). Run integration tests (at least) before each release, or even better as part of the nightly builds. System Tests At last, the testing team makes user-level tests. 24 / 34
  • 40. Introduction Best Programming Practices Software Quality Project Management Summary Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing Issue Tracker: Link between Engineers, Testers and Users Common Choices Bugzilla, JIRA, FogBugz, Redmine, Trac. Often integrated within the software forge. 25 / 34
  • 41. Introduction Best Programming Practices Software Quality Project Management Summary Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing The Software Quality Iceberg 26 / 34
  • 42. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 43. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 44. Introduction Best Programming Practices Software Quality Project Management Summary Agile Methodologies Scrum Extreme Programming A New Vision of Project Management The cathedral (monolithic) 27 / 34
  • 45. Introduction Best Programming Practices Software Quality Project Management Summary Agile Methodologies Scrum Extreme Programming A New Vision of Project Management ⇒ The cathedral (monolithic) The bazaar (agile) 27 / 34
  • 46. Introduction Best Programming Practices Software Quality Project Management Summary Agile Methodologies Scrum Extreme Programming Agility: Cut Down Release Cycles 28 / 34
  • 47. Introduction Best Programming Practices Software Quality Project Management Summary Agile Methodologies Scrum Extreme Programming Agility: Cut Down Release Cycles 28 / 34
  • 48. Introduction Best Programming Practices Software Quality Project Management Summary Agile Methodologies Scrum Extreme Programming Agility: Cut Down Release Cycles ⇒ Features are incrementally added. Software architecture is continuously refactored. 28 / 34
  • 49. Introduction Best Programming Practices Software Quality Project Management Summary Agile Methodologies Scrum Extreme Programming Continuous Testing is at the Center of Agile Development ⇒ The cathedral (monolithic) The bazaar (agile) 29 / 34
  • 50. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 51. Introduction Best Programming Practices Software Quality Project Management Summary Agile Methodologies Scrum Extreme Programming Scrum: Most Popular Agile Methodology 30 / 34
  • 52. Introduction Best Programming Practices Software Quality Project Management Summary Agile Methodologies Scrum Extreme Programming Scrum: The Product Backlog of Orthanc in Trello 31 / 34
  • 53. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 54. Introduction Best Programming Practices Software Quality Project Management Summary Agile Methodologies Scrum Extreme Programming Extreme Programming: Agile Engineering Practices 32 / 34
  • 55. Introduction Best Programming Practices Software Quality Project Management Summary Agile Methodologies Scrum Extreme Programming Extreme Programming: Agile Engineering Practices 32 / 34
  • 56. Introduction Best Programming Practices Software Quality Project Management Summary Agile Methodologies Scrum Extreme Programming Extreme Programming: Agile Engineering Practices 32 / 34
  • 57. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 58. 1 Introduction 2 Best Programming Practices Put Your Code in Revision Control Software Coding Style and Documentation Don’t Reinvent the (Squared) Wheel Design Patterns Other Recommendations 3 Software Quality Software Engineers are Part of the Testing Assertion-Driven Testing Unit Testing Integration and System Testing 4 Project Management Agile Methodologies Scrum Extreme Programming 5 Summary Score Your Project!
  • 59. Introduction Best Programming Practices Software Quality Project Management Summary Score Your Project! Score Your Project! 33 / 34
  • 60. Introduction Best Programming Practices Software Quality Project Management Summary Score Your Project! Any Question? 34 / 34