and transformation of value through company. ! What are the inputs? ! What are the outputs? ! What is the investment? ! What is the waste? ! Product Value Chain is not a process…
it worth it? ! RoI is the key factor for making decisions (not only) in Software Development ! But almost nobody is doing it, why? ! It is rather difficult to calculate or estimate RoI ! Bad estimate is better than nothing ! RoI of software is based on a business value (C-SAT and revenues).
Analysis ! Capturing what the user really needs in a way so that I and my colleagues understand. ! Use Cases, Functional and Non-Functional Requirements and User Stories ! Diagrams? ! How to trace analytical elements to elements in other disciplines.
Architecture and Software Design ! One of the more influential books in Software Design is based on a work of famous Architect, Christopher Alexander (which?). ! Designing solution which meets the constraints defined in Software Analysis. ! How?
its own. ! What influences the quality of application GUI? ! Ergonomics and Usability ! Good GUI designer (no matter if we are talking about RIA, Desktop, Mobile, Web, etc.) is creative, but takes Ergonimics and Usability into account. ! How?
and Paradigms ! „The more languages you know...“ ! „The more paradigms you know...“ ! Which programming paradigms you know? ! Imperative, Functional, Logic ! The evolution of Imperative programming? ! Beware the pitfalls of False Declarativity. ! Bad example for all: LINQ
complexity of QuickSort? • Can you prove than an algorithm is correct? • Q: What is the impact on software development costs? • Which algorithm is suitable for matching substrings across set of strings? • ...and Data Structures • Queues, Linked Lists, Bounded Buffers • Abstract Data Types • Monitors, Semaphores, etc.
! ...eventually, you will have to work with code written by somebody else. ! How to report and fix defects? ! How to implement changes? ! How to implement interfaces? ! Conventions, rules, processes, procedures, guidelines... ! At all times, do not forget your common
for yourself, but for others. ! As if you wanted to delegate the code to somebody else and moved on. ! What are the elements of good code? ! http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml ! https://www.securecoding.cert.org/confluence/pages/ viewpage.action?pageId=637 ! http://www.oracle.com/technetwork/java/codeconv-138413.html ! http://msdn.microsoft.com/en-us/library/vstudio/ff926074.aspx
have positive impact on quality… ! Most Project Management techniques are „waterfall“ in nature. ! Software development should not be done using waterfall (Risks?). ! Software development methodology can and should be encapsulated in a project.
the desired output. ! Goals represent customer vision. ! Objectives represent measurable outcome. ! Objectives are inferred from Goals and must be validated. ! Measuring objectives: KPIs
Truth ! Validation is best applied, if it is applied from the beginning. ! Customer expectations are formalized and voiced not only as test, but also as a specification.
be used as KPIs ! Automated tools and metrics ! Peer Review ! Developers are checking code written by somebody else. ! Different models for Peer Review ! Random reviewer, Rotating reviewer, Explicit reviewers, Review groups, Senior/Junior
difficult to trace the „author“ of a defect? ! Defects can be masked, caused by design not implementation, etc. ! Alternate techniques to delegate responsibility ! Component / Module / System Ownership ! Collective Code Ownership ! Owners are responsible for partial quality and may indicate responsible developers.
SWE ! Traces defects reported in tracking system to documentation and code changes. ! Traces requirements to use cases to design to code to tests. ! Differences between using traditional SCM and DSCM ! See git-flow ! Impossible to be done manually. ! Sophisticated (and expensive) tools are requied as well as developer cooperation.
Different time ! QA Verification is too late! ! Continuous Integration with Automated Testing ! Test Automation ! Developers shall prepare automated tests as naturally as they write code. ! xUnit, TestNG, JMock, etc. ! How to test the tests? ! Cross-testing tests against real life components (emulator vs. real device). ! Peer review