NinjaFlight
|
This document is primarily for developers only.
deletePage
or save
. Variables should not, they generally should be nouns. Tell the system to 'do' something 'with' something. e.g. deleteAllPages(pageList).extern
usage since it will lead to comment rot.Before making any code contributions, take a note of the https://github.com/multiwii/baseflight/wiki/CodingStyle
It is also advised to read about clean code, here are some useful links:
Ideally, there should be tests for any new code. However, since this is a legacy codebase which was not designed to be tested this might be a bit difficult.
If you want to make changes and want to make sure it's tested then focus on the minimal set of changes required to add a test.
Tests currently live in the test
folder and they use the google test framework. The tests are compiled and run natively on your development machine and not on the target platform. This allows you to develop tests and code and actually execute it to make sure it works without needing a development board or simulator.
This project could really do with some functional tests which test the behaviour of the application.
All pull requests to add/improve the testability of the code or testing methods are highly sought!
Note: Tests are written in C++ and linked with with firmware's C code. All code is also instrumented using gcov to make test coverage analysis possible.
The tests and test build system is very simple and based off the googletest example files, it will be improved in due course. From the root folder of the project simply do:
``` make test ```
You can also do:
``` make junittest ```
This will build a set of executable files in the obj/test
folder, one for each *_unittest.cc
file.
After they have been executed by the make invocation, you can still run them on the command line to execute the tests and to see the test report. Test reports will also be produced in form of junit XML files, if tests are built and run with the "junittest" goal. Junit report files are saved in obj/test directory and has the following naming pattern test_name_results.xml, for example: obj/test/battery_unittest_results.xml
You can also step-debug the tests in eclipse and you can use the GoogleTest test runner to make building and re-running the tests simple.
The tests are currently always compiled with debugging information enabled, there may be additional warnings, if you see any warnings please attempt to fix them and submit pull requests with the fixes.
Tests are verified and working with GCC 4.9.2.
There are a number of possibilities to analyse test coverage and produce various reports. There are guides available from many sources, a good overview and link collection to more info can be found on Wikipedia:
https://en.wikipedia.org/wiki/Gcov
A simple report for a single test can for example be made using this command:
``` gcov -s src/main/sensors -o obj/test/ battery_unittest.cc ```
To produce an coverage report in xml format usable by the Cobertura plugin in Jenkins requires installation of a Python script called "gcovr" from github:
https://github.com/gcovr/gcovr/tree/dev
Example usage in Jenkins:
``` /gcovr-install-path/gcovr/scripts/gcovr obj/test –root=src/main -x > coverage.xml ```
There are many other ways to prodice test coverage reports in other formats, like html etc etc.
Ensure you understand the github workflow: https://guides.github.com/introduction/flow/index.html
Please keep pull requests focused on one thing only, since this makes it easier to merge and test in a timely manner.
If you need help with pull requests there are guides on github here:
https://help.github.com/articles/creating-a-pull-request/
The main flow for a contributing is as follows:
fork
.git clone <url to YOUR fork>
cd cleanflight
git checkout master
git checkout -b my-new-code
git add <files that have changed>
git commit
git push origin my-new-code
cleanflight/master
The primary thing to remember is that separate pull requests should be created for separate branches. Never create a pull request from your master
branch.
Later, you can get the changes from the cleanflight repo into your master
branch by adding cleanflight as a git remote and merging from it as follows:
git remote add cleanflight https://github.com/cleanflight/cleanflight.git
git checkout master
git fetch cleanflight
git merge cleanflight/master
git push origin master
is an optional step that will update your fork on githubYou can also perform the git commands using the git client inside Eclipse. Refer to the Eclipse git manual.