Add a _get_feature_lines function which calculates feature sets for all source code lines.

- The _get_feature_lines function calculates the feature sets in a similar way how _getFunctionsLines
  calculates the current functions for all source code lines.
- Added some fields to codeface/fileCommit.py to save those results.
- parse_feature_line function to parse a single line of cppstats output.
- Added FileDict class to encapsulate information about the features of a source code file.
- parse_feature_lines function to generate a FileDict instance from all lines of cppstats output.
- We expect cppstats to be in path and check that the executable works before starting the analysis.
- Update documentation.

Signed-off-by: Matthias Dittrich <matthi.d@gmail.com>
Reviewed-by: Wolfgang Mauerer <wolfgang.mauerer@siemens.com>
Add unit tests for the get_feature_lines functions.

Added unit tests for the get_feature_lines function to ensure that it can properly
work with the parsed data of the parse_feature_line function.

Signed-off-by: Matthias Dittrich <matthi.d@gmail.com>
Reviewed-by: Wolfgang Mauerer <wolfgang.mauerer@siemens.com>
Added some functions to calculate the collaboration between developers with feature instead of function blocks.

Added some functions similar to the proximity analysis functions, but for features.
- computeProximityLinks -> compute_feature_proximity_links_per_file (the per-file feature collaboration analysis).
- computeSnapshotCollaboration -> compute_snapshot_collaboration_features (compute the collaboration for a file snapshot).
- linesOfInterest -> lines_of_interest_features (fiter out not interesting lines (ie lines not relevant for the current snapshot).
- groupFuncLines -> group_feature_lines (we group feature instead of function blocks).
- computeCommitCollaboration was reused as produce the same abstract codeblocks for features.
- computeProximityLinks -> compute_feature_proximity_links (the project wide feature collaboration analysis).

Signed-off-by: Matthias Dittrich <matthi.d@gmail.com>
Reviewed-by: Wolfgang Mauerer <wolfgang.mauerer@siemens.com>
Integrate feature analysis by providing a CLI parameter.

This commit integrates the feature analysis added by the last commits.
Now the tagging configurations "feature" which is a project wide feature analysis and
"feature_file" for a per-file feature analysis are supported.
Additionally we introduce a --tagging parameter.
This parameter defaults to "default" which uses the tagging value from the configuration.
Sometimes you want to use the same configuration file but with different analysis methods, this could also be useful with CI later on.
Extracted LinkType class to an extra file so it can be used throughout the codebase (instead of magic strings).

Signed-off-by: Matthias Dittrich <matthi.d@gmail.com>
Reviewed-by: Wolfgang Mauerer <wolfgang.mauerer@siemens.com>
Fixed some undefined variable errors.

When link_type is not proximity or file the variables are not defined, but used later.

Signed-off-by: Matthias Dittrich <matthi.d@gmail.com>
Fix for LinkType.file.

When link_type is file we have no funcId entries and we default back to File_Level.

Signed-off-by: Matthias Dittrich <matthi.d@gmail.com>
Trace features and functions in the collaboration analysis.

We now support tracing commits, features and functions through the strengh of an relation.
This allows to include several new informations in the output.
Currently we output a new file 'adjacencyMatrix_max_weight.txt' which outputs the feature or
function with the most influence instead of the collaboration strength ('adjacencyMatrix.txt').
This would work for files as well but we have to change the 'File_Level' to something like '$filename' for the output to be usefull.

Signed-off-by: Matthias Dittrich <matthi.d@gmail.com>
Fill the commit_dependency table on a feature analysis pass.

When running a feature or feature_file analysis pass we generate entries in the commit_dependency table for each changed feature for each commit.

Signed-off-by: Matthias Dittrich <matthi.d@gmail.com>