Hi Caleb,
On Jun 27, 2013, at 8:13 PM, Caleb James DeLisle <calebdelisle(a)lavabit.com> wrote:
I like this kind of thinking!
For example one of the reasons I'm pushing for a new model is so that I can implement
an in-memory version of the model interfaces so that we can run fast functional tests.
To summarize my thinking and throw some ideas:
* Throwing the baby with the bath water isn't usually a good solution ;)
* I'd very much like to reduce our build times. I also believe it's very
important
* Should we speed up our build at the expense of throwing out a lot of quality checks we
do? Definitely not. However we can move quality checks in a profile ("quality"
profile) and execute those not all the time but a few timers per day only and on the CI.
* Should we drop selenium tests? We do need functional tests and tests that can run in
real browsers since we've seen from experience that YMMV depending on the browser. Now
I do believe that a lot of our functional tests could be moved to integration tests that
do not git a DB. This ties to the oldcore which is not written with testability in mind
and it's hard to unit test it. Having an in-memory DB would help a lot though. However
do need to keep some func tests. Is selenium the right tool? It's the best I know.
* Another idea: personal builds with unbreakable build implementation.
* Should we drop maven? I don't know any other build tool that comes close to it (a
build is not just about compiling ;)) and I'm not willing to drop all the niceties we
do in our build. BTW to speed up maven you have the maven shell:
http://ericmiles.wordpress.com/2010/03/23/intro-to-maven-shell/
Now, all of this takes time to investigate.
Interesting stats:
cjdns - 40k LoC* - clean build in 40 seconds - 1k LoC/sec
xwiki - 800k LoC* - clean build in 60 minutes(?) - 222 LoC/sec
This doesn't mean much without more details.
Actually building xwiki with maven is probably a lot faster than building cjdns in a lot
of cases simply because you don't need to rebuild everything with maven: Just build
one module where you made a change, and provided you have retrieved its dependencies once
before, it'll build in few second :)
Raising awareness that we need to tackle the build speed is very good. I hate our current
build speed. All ideas are welcome, volunteers to work on it are even more welcome ;)
Thanks
-Vincent
Cjdns build is still embarrassingly slow because cmake
invokes the
linker far more often than necessary.
* LoC is the total line count for every source file in the project.