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

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