SlideShare ist ein Scribd-Unternehmen logo
1 von 60
Downloaden Sie, um offline zu lesen
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, especially 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)!
Learn debugging tools:

7

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",
printf("%dn",
printf("%dn",
printf("%dn",
printf("%dn",
printf("%dn",
}

factorial(0));
factorial(1));
factorial(2));
factorial(3));
factorial(4));
factorial(5));

/*
/*
/*
/*
/*
/*

1
1
2
6
24
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",
printf("%dn",
printf("%dn",
printf("%dn",
printf("%dn",
printf("%dn",
}

factorial(0));
factorial(1));
factorial(2));
factorial(3));
factorial(4));
factorial(5));

/*
/*
/*
/*
/*
/*

1
1
2
6
24
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",
printf("%dn",
printf("%dn",
printf("%dn",
printf("%dn",
printf("%dn",
}

factorial(0));
factorial(1));
factorial(2));
factorial(3));
factorial(4));
factorial(5));

/*
/*
/*
/*
/*
/*

1
1
2
6
24
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

System testing

Integration testing

Unit testing

Hardware/OS

Executable

Classes
Functions

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
2
3

Inject stimuli, compare outputs with expected results.
GUI automation testing.
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

Weitere ähnliche Inhalte

Was ist angesagt?

07 Outsource To India Independent Testing
07 Outsource To India Independent Testing07 Outsource To India Independent Testing
07 Outsource To India Independent TestingoutsourceToIndia
 
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
 
TEA Presentation V 0.3
TEA Presentation V 0.3TEA Presentation V 0.3
TEA Presentation V 0.3Ian McDonald
 
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
 
Codingstandards matiar
Codingstandards matiarCodingstandards matiar
Codingstandards matiarMatiar Rahman
 
Java Code Review Checklist
Java Code Review ChecklistJava Code Review Checklist
Java Code Review ChecklistMahesh Chopker
 
Software Design for Testability
Software Design for TestabilitySoftware Design for Testability
Software Design for Testabilityamr0mt
 
Software defect prevention example project
Software defect prevention example projectSoftware defect prevention example project
Software defect prevention example projectZarko Acimovic
 
ISTQB Advance Material
ISTQB Advance MaterialISTQB Advance Material
ISTQB Advance MaterialMandar Kharkar
 
Peer Code Review An Agile Process
Peer Code Review An Agile ProcessPeer Code Review An Agile Process
Peer Code Review An Agile Processgsporar
 
Practical Guide To Software System Testing
Practical Guide To Software System TestingPractical Guide To Software System Testing
Practical Guide To Software System Testingvladimir zaremba
 
Software presentation
Software presentationSoftware presentation
Software presentationJennaPrengle
 
Automation testing by Durgasoft in Hyderabad
Automation testing by Durgasoft in HyderabadAutomation testing by Durgasoft in Hyderabad
Automation testing by Durgasoft in HyderabadDurga Prasad
 
Java Code Quality Tools
Java Code Quality ToolsJava Code Quality Tools
Java Code Quality ToolsOrest Ivasiv
 

Was ist angesagt? (20)

Static Code Analysis
Static Code AnalysisStatic Code Analysis
Static Code Analysis
 
07 Outsource To India Independent Testing
07 Outsource To India Independent Testing07 Outsource To India Independent Testing
07 Outsource To India Independent Testing
 
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
 
TEA Presentation V 0.3
TEA Presentation V 0.3TEA Presentation V 0.3
TEA Presentation V 0.3
 
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
 
Codingstandards matiar
Codingstandards matiarCodingstandards matiar
Codingstandards matiar
 
Parasoft fda software compliance part2
Parasoft fda software compliance   part2Parasoft fda software compliance   part2
Parasoft fda software compliance part2
 
Java Code Review Checklist
Java Code Review ChecklistJava Code Review Checklist
Java Code Review Checklist
 
Introduction to Parasoft C++TEST
Introduction to Parasoft C++TEST Introduction to Parasoft C++TEST
Introduction to Parasoft C++TEST
 
Static Code Analysis
Static Code AnalysisStatic Code Analysis
Static Code Analysis
 
Software Design for Testability
Software Design for TestabilitySoftware Design for Testability
Software Design for Testability
 
Software defect prevention example project
Software defect prevention example projectSoftware defect prevention example project
Software defect prevention example project
 
ISTQB Advance Material
ISTQB Advance MaterialISTQB Advance Material
ISTQB Advance Material
 
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
 
Practical Guide To Software System Testing
Practical Guide To Software System TestingPractical Guide To Software System Testing
Practical Guide To Software System Testing
 
Software presentation
Software presentationSoftware presentation
Software presentation
 
Automation testing by Durgasoft in Hyderabad
Automation testing by Durgasoft in HyderabadAutomation testing by Durgasoft in Hyderabad
Automation testing by Durgasoft in Hyderabad
 
Java Code Quality Tools
Java Code Quality ToolsJava Code Quality Tools
Java Code Quality Tools
 
Verification Challenges and Methodologies
Verification Challenges and MethodologiesVerification Challenges and Methodologies
Verification Challenges and Methodologies
 

Andere mochten auch

La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine
La qualité logicielle et l'intégration continue - Cas concret du projet CytomineLa qualité logicielle et l'intégration continue - Cas concret du projet Cytomine
La qualité logicielle et l'intégration continue - Cas concret du projet CytomineGeeks Anonymes
 
Open Source Community Management
Open Source Community ManagementOpen Source Community Management
Open Source Community ManagementGeeks Anonymes
 
Introduction à la qualité logicielle (1/5)
Introduction à la qualité logicielle (1/5)Introduction à la qualité logicielle (1/5)
Introduction à la qualité logicielle (1/5)Sylvain Leroy
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelleGeeks Anonymes
 
Modern c++ (C++ 11/14)
Modern c++ (C++ 11/14)Modern c++ (C++ 11/14)
Modern c++ (C++ 11/14)Geeks Anonymes
 
Jenkins - perdre du temps pour en gagner
Jenkins - perdre du temps pour en gagnerJenkins - perdre du temps pour en gagner
Jenkins - perdre du temps pour en gagnerGeeks Anonymes
 
When Biology Meets Computer Science
When Biology Meets Computer ScienceWhen Biology Meets Computer Science
When Biology Meets Computer ScienceGeeks Anonymes
 

Andere mochten auch (8)

La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine
La qualité logicielle et l'intégration continue - Cas concret du projet CytomineLa qualité logicielle et l'intégration continue - Cas concret du projet Cytomine
La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine
 
Open Source Community Management
Open Source Community ManagementOpen Source Community Management
Open Source Community Management
 
Introduction à la qualité logicielle (1/5)
Introduction à la qualité logicielle (1/5)Introduction à la qualité logicielle (1/5)
Introduction à la qualité logicielle (1/5)
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelle
 
Modern c++ (C++ 11/14)
Modern c++ (C++ 11/14)Modern c++ (C++ 11/14)
Modern c++ (C++ 11/14)
 
Jenkins - perdre du temps pour en gagner
Jenkins - perdre du temps pour en gagnerJenkins - perdre du temps pour en gagner
Jenkins - perdre du temps pour en gagner
 
When Biology Meets Computer Science
When Biology Meets Computer ScienceWhen Biology Meets Computer Science
When Biology Meets Computer Science
 
Unity - Game Engine
Unity - Game EngineUnity - Game Engine
Unity - Game Engine
 

Ähnlich wie 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
 
Software Development Standard Operating Procedure
Software Development Standard Operating Procedure Software Development Standard Operating Procedure
Software Development Standard Operating Procedure rupeshchanchal
 
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
 
Code Craftsmanship Checklist
Code Craftsmanship ChecklistCode Craftsmanship Checklist
Code Craftsmanship ChecklistRyan Polk
 
Coding and testing in Software Engineering
Coding and testing in Software EngineeringCoding and testing in Software Engineering
Coding and testing in Software EngineeringAbhay Vijay
 
Building Scalable Development Environments
Building Scalable Development EnvironmentsBuilding Scalable Development Environments
Building Scalable Development EnvironmentsShahar Evron
 
Lecture 2 | Industry, Career Paths, Essential Skills
Lecture 2 | Industry, Career Paths, Essential SkillsLecture 2 | Industry, Career Paths, Essential Skills
Lecture 2 | Industry, Career Paths, Essential Skillsosamahjaleel
 

Ähnlich wie 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
 
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
 
Unit iv
Unit ivUnit iv
Unit iv
 
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...
 
Software coding and testing
Software coding and testingSoftware coding and testing
Software coding and testing
 
1.Basic Introduction (1).ppt
1.Basic Introduction (1).ppt1.Basic Introduction (1).ppt
1.Basic Introduction (1).ppt
 
Software Development Standard Operating Procedure
Software Development Standard Operating Procedure Software Development Standard Operating Procedure
Software Development Standard Operating Procedure
 
Practices of agile developers
Practices of agile developersPractices of agile developers
Practices of agile developers
 
reaserch ppt.pptx
reaserch ppt.pptxreaserch ppt.pptx
reaserch ppt.pptx
 
Software Engineering PPT Unit I.pptx
Software Engineering PPT Unit I.pptxSoftware Engineering PPT Unit I.pptx
Software Engineering PPT Unit I.pptx
 
07 fse implementation
07 fse implementation07 fse implementation
07 fse implementation
 
Code Craftsmanship Checklist
Code Craftsmanship ChecklistCode Craftsmanship Checklist
Code Craftsmanship Checklist
 
Coding and testing in Software Engineering
Coding and testing in Software EngineeringCoding and testing in Software Engineering
Coding and testing in Software Engineering
 
Building Scalable Development Environments
Building Scalable Development EnvironmentsBuilding Scalable Development Environments
Building Scalable Development Environments
 
Sdlc
SdlcSdlc
Sdlc
 
lecture 1.pdf
lecture 1.pdflecture 1.pdf
lecture 1.pdf
 
Lecture 2 | Industry, Career Paths, Essential Skills
Lecture 2 | Industry, Career Paths, Essential SkillsLecture 2 | Industry, Career Paths, Essential Skills
Lecture 2 | Industry, Career Paths, Essential Skills
 

Mehr von Geeks Anonymes

Programmer sous Unreal Engine
Programmer sous Unreal EngineProgrammer sous Unreal Engine
Programmer sous Unreal EngineGeeks Anonymes
 
Implémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexesImplémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexesGeeks Anonymes
 
Managing Open Source Licenses (Geeks Anonymes)
Managing Open Source Licenses (Geeks Anonymes)Managing Open Source Licenses (Geeks Anonymes)
Managing Open Source Licenses (Geeks Anonymes)Geeks Anonymes
 
Reprendre le contrôle de ses données
Reprendre le contrôle de ses donnéesReprendre le contrôle de ses données
Reprendre le contrôle de ses donnéesGeeks Anonymes
 
Geeks Anonymes - Le langage Go
Geeks Anonymes - Le langage GoGeeks Anonymes - Le langage Go
Geeks Anonymes - Le langage GoGeeks Anonymes
 
Le rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testingLe rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testingGeeks Anonymes
 
Vulnérabilités au cœur des applications Web, menaces et contre-mesures
 Vulnérabilités au cœur des applications Web, menaces et contre-mesures Vulnérabilités au cœur des applications Web, menaces et contre-mesures
Vulnérabilités au cœur des applications Web, menaces et contre-mesuresGeeks Anonymes
 
191121 philippe teuwen cryptographie et attaques materielles
191121 philippe teuwen cryptographie et attaques materielles191121 philippe teuwen cryptographie et attaques materielles
191121 philippe teuwen cryptographie et attaques materiellesGeeks Anonymes
 
"Surfez couverts !" - Conseils de Cyber securité
"Surfez couverts !" - Conseils de Cyber securité "Surfez couverts !" - Conseils de Cyber securité
"Surfez couverts !" - Conseils de Cyber securité Geeks Anonymes
 
Introduction au développement mobile - développer une application iOS et Andr...
Introduction au développement mobile - développer une application iOS et Andr...Introduction au développement mobile - développer une application iOS et Andr...
Introduction au développement mobile - développer une application iOS et Andr...Geeks Anonymes
 
Intelligence artificielle et propriété intellectuelle
Intelligence artificielle et propriété intellectuelleIntelligence artificielle et propriété intellectuelle
Intelligence artificielle et propriété intellectuelleGeeks Anonymes
 
Pour une histoire plophonique du jeu video
Pour une histoire plophonique du jeu videoPour une histoire plophonique du jeu video
Pour une histoire plophonique du jeu videoGeeks Anonymes
 
Become Rick and famous, thanks to Open Source
Become Rick and famous, thanks to Open SourceBecome Rick and famous, thanks to Open Source
Become Rick and famous, thanks to Open SourceGeeks Anonymes
 
Reconnaissance vocale et création artistique
Reconnaissance vocale et création artistiqueReconnaissance vocale et création artistique
Reconnaissance vocale et création artistiqueGeeks Anonymes
 
Natural Language Processing
Natural Language ProcessingNatural Language Processing
Natural Language ProcessingGeeks Anonymes
 
Sécurité, GDPR : vos données ont de la valeur
Sécurité, GDPR : vos données ont de la valeur Sécurité, GDPR : vos données ont de la valeur
Sécurité, GDPR : vos données ont de la valeur Geeks Anonymes
 

Mehr von Geeks Anonymes (20)

Programmer sous Unreal Engine
Programmer sous Unreal EngineProgrammer sous Unreal Engine
Programmer sous Unreal Engine
 
Implémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexesImplémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexes
 
Managing Open Source Licenses (Geeks Anonymes)
Managing Open Source Licenses (Geeks Anonymes)Managing Open Source Licenses (Geeks Anonymes)
Managing Open Source Licenses (Geeks Anonymes)
 
Reprendre le contrôle de ses données
Reprendre le contrôle de ses donnéesReprendre le contrôle de ses données
Reprendre le contrôle de ses données
 
Geeks Anonymes - Le langage Go
Geeks Anonymes - Le langage GoGeeks Anonymes - Le langage Go
Geeks Anonymes - Le langage Go
 
Le rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testingLe rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testing
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Vulnérabilités au cœur des applications Web, menaces et contre-mesures
 Vulnérabilités au cœur des applications Web, menaces et contre-mesures Vulnérabilités au cœur des applications Web, menaces et contre-mesures
Vulnérabilités au cœur des applications Web, menaces et contre-mesures
 
191121 philippe teuwen cryptographie et attaques materielles
191121 philippe teuwen cryptographie et attaques materielles191121 philippe teuwen cryptographie et attaques materielles
191121 philippe teuwen cryptographie et attaques materielles
 
"Surfez couverts !" - Conseils de Cyber securité
"Surfez couverts !" - Conseils de Cyber securité "Surfez couverts !" - Conseils de Cyber securité
"Surfez couverts !" - Conseils de Cyber securité
 
Introduction au développement mobile - développer une application iOS et Andr...
Introduction au développement mobile - développer une application iOS et Andr...Introduction au développement mobile - développer une application iOS et Andr...
Introduction au développement mobile - développer une application iOS et Andr...
 
Le langage rust
Le langage rustLe langage rust
Le langage rust
 
Test your code
Test your codeTest your code
Test your code
 
Intelligence artificielle et propriété intellectuelle
Intelligence artificielle et propriété intellectuelleIntelligence artificielle et propriété intellectuelle
Intelligence artificielle et propriété intellectuelle
 
Pour une histoire plophonique du jeu video
Pour une histoire plophonique du jeu videoPour une histoire plophonique du jeu video
Pour une histoire plophonique du jeu video
 
Become Rick and famous, thanks to Open Source
Become Rick and famous, thanks to Open SourceBecome Rick and famous, thanks to Open Source
Become Rick and famous, thanks to Open Source
 
Reconnaissance vocale et création artistique
Reconnaissance vocale et création artistiqueReconnaissance vocale et création artistique
Reconnaissance vocale et création artistique
 
Natural Language Processing
Natural Language ProcessingNatural Language Processing
Natural Language Processing
 
Sécurité, GDPR : vos données ont de la valeur
Sécurité, GDPR : vos données ont de la valeur Sécurité, GDPR : vos données ont de la valeur
Sécurité, GDPR : vos données ont de la valeur
 
Modern sql
Modern sqlModern sql
Modern sql
 

Kürzlich hochgeladen

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 

Kürzlich hochgeladen (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 

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, especially 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)! Learn debugging tools: 7 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", printf("%dn", printf("%dn", printf("%dn", printf("%dn", printf("%dn", } factorial(0)); factorial(1)); factorial(2)); factorial(3)); factorial(4)); factorial(5)); /* /* /* /* /* /* 1 1 2 6 24 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", printf("%dn", printf("%dn", printf("%dn", printf("%dn", printf("%dn", } factorial(0)); factorial(1)); factorial(2)); factorial(3)); factorial(4)); factorial(5)); /* /* /* /* /* /* 1 1 2 6 24 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", printf("%dn", printf("%dn", printf("%dn", printf("%dn", printf("%dn", } factorial(0)); factorial(1)); factorial(2)); factorial(3)); factorial(4)); factorial(5)); /* /* /* /* /* /* 1 1 2 6 24 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 System testing Integration testing Unit testing Hardware/OS Executable Classes Functions 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 2 3 Inject stimuli, compare outputs with expected results. GUI automation testing. 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