Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test GCC 5 compliance #58

Open
xflouris opened this issue Dec 4, 2015 · 3 comments
Open

Test GCC 5 compliance #58

xflouris opened this issue Dec 4, 2015 · 3 comments

Comments

@xflouris
Copy link
Collaborator

xflouris commented Dec 4, 2015

Test mptp with the new GCC 5 compiler that is becoming the new standard.

@stamatak
Copy link
Collaborator

stamatak commented Dec 4, 2015

and don't forget clang, valgrind, a cyclomatic complexity check, as well
as a code duplication assessment ;-)

On 04.12.2015 15:53, Tomas Flouri wrote:

Test |mptp| with the new GCC 5 compiler that is becoming the new standard.


Reply to this email directly or view it on GitHub
#58.

Alexandros (Alexis) Stamatakis

Research Group Leader, Heidelberg Institute for Theoretical Studies
Full Professor, Dept. of Informatics, Karlsruhe Institute of Technology
Adjunct Professor, Dept. of Ecology and Evolutionary Biology, University
of Arizona at Tucson

www.exelixis-lab.org

@xflouris
Copy link
Collaborator Author

GCC 5 working, and no clang warnings with -Weverything :)

Now, just out of interest:

I ran pmccabe on mptp with the following command:
pmccabe *.c | sort -nr | head -10

and I get the following:

80      80      231     621     465     bayes.c(621): bayes
29      29      70      117     145     svg.c(117): svg_rtree_plot
22      22      112     89      166     multichain.c(89): multichain
21      57      154     128     288     mptp.c(128): args_init
19      22      91      113     183     fasta.c(113): pll_fasta_getnext
19      19      58      134     124     score.c(134): retrieve_mrca_nodes
18      18      55      174     125     dp.c(174): dp_ptp
16      16      45      119     59      bayes.c(119): hpd
14      14      39      593     94      score.c(593): retrieve_mrca_nodes_paschalia
14      14      30      68      65      score.c(68): identify_alternative_taxa

Although the bayesian code is really simple, the cyclomatic check indeed gives a good hint as to break up the function into subparts (which we already thought about doing with Sarah when there is more time). Interestingly, the average cyclomatic number for mptp (LoC: 6k) is 4.97.

A much larger code-base such as RAxML with 56k LoC gives a the following output for: pmccabe *.c | sort -nr | head -10

281     390     922     5259    1671    axml.c(5259): get_args
139     175     578     8764    1033    axml.c(8764): execFunction
105     109     241     2628    420     axml.c(2628): checkSequences
96      96      242     91      481     parsePartitions.c(91): analyzeIdentifier
92      92      566     3504    976     axml.c(3504): modelExists
74      76      362     6671    543     newviewGenericSpecial.c(6671): newviewGTRGAMMAPROT_GAPPED_SAVE
73      101     301     12885   536     axml.c(12885): main
65      72      236     967     409     parsePartitions.c(967): handleExcludeFile
62      67      201     868     311     optimizeModel.c(868): brakGeneric
59      87      229     2942    678     evaluateGenericSpecial.c(2942): evaluateIterative

with an average cyclomatic number of 10.65.

It would be interesting to have a study on the growth of cyclomatic complexity in scientific software over time. For example by running pmccabe on repository code at given time-points (e.g. monthly) and make conclusions on how changes in a team (phd students graduating, postdocs leaving) affect scientific software. Also interesting would be a comparison of such results with industry where teams do not change that often.

@stamatak
Copy link
Collaborator

Hi Tomas,

That's an interesting idea, we should discuss this further.

Alexis

On 16.12.2015 15:30, Tomas Flouri wrote:

GCC 5 working, and no clang warnings with -Weverything :)

Now, just out of interest:

I ran |pmccabe| on |mptp| with the following command:
|pmccabe *.c | sort -nr | head -10|

and I get the following:

|80 80 231 621 465 bayes.c(621): bayes 29 29 70 117 145 svg.c(117):
svg_rtree_plot 22 22 112 89 166 multichain.c(89): multichain 21 57 154
128 288 mptp.c(128): args_init 19 22 91 113 183 fasta.c(113):
pll_fasta_getnext 19 19 58 134 124 score.c(134): retrieve_mrca_nodes 18
18 55 174 125 dp.c(174): dp_ptp 16 16 45 119 59 bayes.c(119): hpd 14 14
39 593 94 score.c(593): retrieve_mrca_nodes_paschalia 14 14 30 68 65
score.c(68): identify_alternative_taxa |

Although the bayesian code is really simple, the cyclomatic check indeed
gives a good hint as to break up the function into subparts (which we
already thought about doing with Sarah when there is more time).
Interestingly, the average cyclomatic number for |mptp| (LoC: 6k) is 4.97.

A much larger code-base such as RAxML with 56k LoC gives a the following
output for: |pmccabe *.c | sort -nr | head -10|

|281 390 922 5259 1671 axml.c(5259): get_args 139 175 578 8764 1033
axml.c(8764): execFunction 105 109 241 2628 420 axml.c(2628):
checkSequences 96 96 242 91 481 parsePartitions.c(91): analyzeIdentifier
92 92 566 3504 976 axml.c(3504): modelExists 74 76 362 6671 543
newviewGenericSpecial.c(6671): newviewGTRGAMMAPROT_GAPPED_SAVE 73 101
301 12885 536 axml.c(12885): main 65 72 236 967 409
parsePartitions.c(967): handleExcludeFile 62 67 201 868 311
optimizeModel.c(868): brakGeneric 59 87 229 2942 678
evaluateGenericSpecial.c(2942): evaluateIterative |

with an average cyclomatic number of 10.65.

It would be interesting to have a study on the growth of cyclomatic
complexity in scientific software over time. For example by running
|pmccabe| on repository code at given time-points (e.g. monthly) and
make conclusions on how changes in a team (phd students graduating,
postdocs leaving) affect scientific software. Also interesting would be
a comparison of such results with industry where teams do not change
that often.


Reply to this email directly or view it on GitHub
#58 (comment).

Alexandros (Alexis) Stamatakis

Research Group Leader, Heidelberg Institute for Theoretical Studies
Full Professor, Dept. of Informatics, Karlsruhe Institute of Technology
Adjunct Professor, Dept. of Ecology and Evolutionary Biology, University
of Arizona at Tucson

www.exelixis-lab.org

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants