---
# System prepended metadata

title: 'CodeRefinery Trondheim, October 22 - 24'

---

# CodeRefinery Trondheim, October 22 - 24

link: https://bit.ly/coderefinery-ntnu


## Modular Code Development

link: https://bit.ly/coderefinery-ntnu

Split in groups after language. Discuss:
* What best practices can you recommend to arrive at well structured, modular code in your favourite programming language?
* What would you recommend your colleague who starts in the same programming language?
* How do you deal with code complexity in your projects

### Python
Discussion on object oriented or functions oriented:
- learn object oriented code in python for project, the structure can more easely be structured
- function oriented code is easier to learn, best place to start
- data is object, can make the code easier
- on larger projects, have the most experient people write the core and the other people write the outside

Other best practises:
- give functions sensible name, readable for humans
- write get variables functions, easier for more complex variables
- keep the processing part and visual part of the code separated
- Make a structure on where to save and document, also train new people
- Train people on how to use the code
- Make examples and a web page for larger projects
- For smaller single person project, make parts of the code (the central part) in a good and documented way
- How to go over your code again?
    - start a new file and take over only the functions you use to get an overview over what you use
    - make new functions instead of many similar functions
- map interdependence between functions?
    - make a module tree 
    - have staight lines of interdepencense
    - make a diagram of your code
- When to start with documentation
    - start when you start a project
    - at the leatest with a code revision
    - comment in the code
    - follow PEP8 and actuallt do wirte what the functions do
- Complexity
    - keep functions short


### C/++

- C++:
- Define Classs (well structured)
- Use sysmatic name rule for variable, class...
- Use Macros and Template, but with detailed documentation
- Sufficient comments in the code (deal with code complexity)
- Be consistent in writing style (deal with code complexity)
- Wiki page for the code (deal with code complexity)
- Use doxygen for generating documentation
- - C:
-Organize HW peripherals with moduls(.c and .h -files)
-Organize similar functionality toghether in modules
-Macros to abstact away HW-architecture.(Documentation important to ensure similar rules.)
-Clearly described and commented interfaces.
-Clearly described functionality of funcitons and modules. 


### Java

- Separate API from the implementation
- Interfaces
- Consitent naming
- Well documented
- Libraries
- Dependency injection
- High emphasis on Design Patterns
- OSGi is all about modularity
- Support for switching the implementation at runtime
- Encapsulation
- Design then implement
- Reduce side effects
---
* What would you recommend your colleague who starts in the same programming language?
  - Good understanding of Object Oriented Programing (OOP) concepts

## Test Discussion

link http://bit.ly/coderefinery-ntnu

### Group 1
- tests for NaN for functions that accepts number


- factorial(n)
    - 1.5 throws an Error
    - -2 throws an Error
- count_word_occurence_in_string(text, word)
    - "dog" in "dog,cat" should succeed
    - "dog" in "dogs" should fail
- count_word_occurence_in_file(file_name, word)
    - check non-existing file
    - check normal scenario
- check_reactor_temperature(temperature_celsius)
    - absurd high value should return negative status
- Pet
    - creat a new object 
    - assert object has hunger of 0
    - go for a walk
    - check that hunger of object is 1
    - go for a walk n times
    - check that hunger of object is n+1


### Group 2
- Define function boundary conditions


### Group 3

- Decide spesifications - make tests accordingly
- factorial: ok not to test for complex numbers. Otherwise test for for small number, big number and negative number (how should the function react to a fraction?)
- count_word_occurence_in_string: A case with zero, one and many target words, unicode, check for different seperators between words
- count_word_occurence_in_file: Check files with different encodings, if the file is a text file, specify in documentation what kind of files are accepted and the like before a case with zero, one and many target words

