Week 11 - Performance engineering and performance testing (J. Činčura).
Lecturer: Jiří Činčura, Microsoft
Activity sheet: enter the lecture activity here
About the lecturer: Jiří Činčura is .NET, C# and Firebird expert. He focuses on data and business layers, language constructs, parallelism, databases and performance. For almost two decades he contributes to open-source, i.e. FirebirdClient. He works as a software engineer in .NET Performance for Microsoft. Frequent speaker and blogger at www.tabsoverspaces.com.
Abstract of the lecture: Performance is not something you can "add" later into product. It's coordinated effort thorough the lifecycle of product. Join me in this talk where I discuss what performance means from view of libraries and runtime, how are regressions and improvements evaluated and what tools and approach to take when you're interested in performance.
Content
Some of the questions we will aim to cover:
Basics, theory, tools- Profiling vs. performance testing what is the difference?
- Microbenchmarking, JVM tuning...
- What tools are used for performance testing and profiling?
- Whitebox vs blackbox testing
- Is performance testing performed manually or automatically?
- When it is good to start testing performance? Early, with complete project, when something goes wrong?
- Is it better to have a dedicated team or make it part of developers duties?
- Testing in virtual environment
- Influence of the runtime environment, test parameters, reproducible results
- Influence of the measurement tool on the performance
- Influence of authentication and authorization
- Hardware utilization for maximal performance
- What are typical performance issues, how are they discovered, how are they solved?
- How a performance issue makes it to a well established product? How they are solved?
- Examples from real products - what caused issues, how difficult it was to discover them?
- Coordinated omission
- How to prevent performance issues? Software design, methodologies, architecture, scalability, people...
- Is there an architecture that lead to automatically to a better performance? Parallelism, distributed applications...?