Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Professional Software Development

Professional Software Development

What it takes to be a professional developer? Guest lecture at Masaryk University.

Avatar for Ondrej Krajicek

Ondrej Krajicek

December 10, 2012
Tweet

More Decks by Ondrej Krajicek

Other Decks in Programming

Transcript

  1. Product Value Chain ! Product Value Chain represents the flow

    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…
  2. Return of Investment ! Development Costs vs. Revenues ! Is

    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).
  3. The Art ! An artist in Software Engineering? ! Software

    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.
  4. The Art ! An artist in Software Engineering? ! Software

    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?
  5. The Art ! GUI Design ! An artistic discipline on

    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?
  6. The Art ! Test Design ! How to test the

    software? What qualities do we seek? ! Unit, Component, System and Integration Testing ! Design a good test is not an easy task. ! Usability Testing?
  7. The Science ! Knowledge and Critical Thinking ! Programming Languages

    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
  8. The Science • Principles of Programming Languages • Runtime •

    Memory Management • Type Systems: Inheritance, Polymorphism? • In C++: RTTI, Downcasting • Structured Exceptions • Optimizations • SOLID GRASP • Is Garbage Collection better than explicit memory management?
  9. The Science • Algorithms • What is the worst time

    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.
  10. I have a dream... ! ...to only code new features,

    ! never to have to fix any defects ! and only to delve into code of my own.
  11. Bad News (for some) ! Professional coding is a teamwork...

    ! ...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
  12. How to write good code? ! You are not coding

    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
  13. Homework ! Homework: have a look at www.thedailywtf.com and ask

    yourself: is what I am doing really better than this? ! What is the correct answer?
  14. Software Projects ! Managing software development as a project may

    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.
  15. Goals and Objectives ! Goals and Objectives specify what is

    the desired output. ! Goals represent customer vision. ! Objectives represent measurable outcome. ! Objectives are inferred from Goals and must be validated. ! Measuring objectives: KPIs
  16. KPIs ! Key Performance Indicators ! A Number ! Easy

    to interpret ! Can be measured automatically ! Does not indicate causes or bottlenecks ! When KPI values are good, we feel good.
  17. Example KPIs for SWE ! Velocity ! Defect Score (Developers

    and Testers) ! Test Coverage ! Cycle Time ! Service Costs ! Cost of Development ! C-SAT ! http://www.kpilibrary.com
  18. Validation and Verification ! Validation vs. Verification ! Little Validation

    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.
  19. Validation and Methodologies ! Validation and Validity is at the

    core of many Process-Management and SDLC methodologies.
  20. Examples ! Waterfall ! Boehm ! Iterative ! UP !

    Agile (Embrace Change) ! XP (LDCT) ! Scrum ! „Agile 2.0“ ! Lean and Kanban
  21. Evaluation ! Code Analysis and Metrics ! Certain metrics can

    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
  22. Code Evaluation Examples ! LoC ! Public Methods ! LCOM4

    (Linear Complexity) ! Cohesion of Interface ! Inheritance Complexity ! Best Practive Violation
  23. Some Tools ! PMD, PMD CP ! CheckStyle ! FindBugs

    ! FxCop ! Lint ! Sonar ! http://en.wikipedia.org/wiki/ List_of_tools_for_static_code_analysis
  24. Who caused this defect? ! Traceability ! How is it

    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.
  25. Traceability ! Traceability in general is a significant technique in

    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.
  26. Defect Prevention ! Same tools as verification / evaluation !

    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