From FetchWiki

Jump to: navigation, search
  • How do I build up a FAMIX CDIF model from source code, i.e. the prerequisite for all further scenarios? Use the (Bash) shell scripts cpp2rsf.sh and java2rsf.sh, that will generate CDIF and RSF models from source code (path to root is the first and only option to the scripts).
  • The [Moose] environment doesn't support CDIF anymore, but uses [MSE] now. When are you going to support this format? After a hacking session with Adrian], we now support MSE with the RSF2MSE script. Moreover, we remain active in the upcoming FAMIX 3.0 standard.
  • What is [snavtofamix] doing? Why don't you directly create CDIF/MSE? The database with source code facts that SN builds up is inaccurate. E.g. SN might indicate a reference to an attribute named "fName", without indicating its owner class. Using scoping rules given by namespaces, file includes as well as visibility, we match such references to the right attribute. And that is only one example. In order to support certain [reverse engineering use cases], such as calculation of coupling and cohesion metrics, the software models must be (rather) complete. The good thing about SN is its robustness: SN's parsers have - up till now - never failed on whatever source code you throw at it. This is particularly handy to cope with (i) source code containing artifacts from other languages, e.g. assembler, preprocessor code, embedded sql, etc.; (ii) language variants (Visual C++ vs. g++), (iii) environments where the system can't easily be built (and parsed) unless the build system is adapted (code generation, preprocessor directives, VCS integration, etc). At the downside, we can't build complete models with it due to the inaccurateness. With snavtofamix, we aim to improve the completeness. In the distribution of snavtofamix, you can find a directory [test/testdata/cpp/pieces] containing regression and tdd subdirectories. These contain code constructs that we parse correctly and completely against constructs that we do not parse well respectively. In the snavtofamix repository are scripts to execute these regression and test-driven batches.
  • What new features will be in the next release?
    • Obtaining more complete and accurate models is a recurring, desired feature in every subsequent release. To check which language constructs we do and do not support, take a look at the snavtofamix test batches. There is a script in /test to generate primitive HTML to compare the expected result with the results obtained with the test run.
    • incremental parsing (e.g. only parse up to methods or start/continue from a model with classes and methods).
  • How to upgrade Fetch from release X to release Y?
    • simple: put the new distribution in place of the old one. Modify the $FETCH and $PMC variables if you place it somewhere else (e.g. in a dir with version indication).
  • How well does Fetch scale? We collected the following execution times:
Case Study Prog. Lang SLOC Model build time HW
anastacia Java 12KSLOC ~1 minute
(old) teamspirit C++ 13KSLOC ~5 minutes
teamspirit C++ 13KSLOC ~50 seconds Linux/x86/1.9Ghz
teamspirit C++ 13KSLOC ~20 seconds Linux/x86_64/Xeon 2.66Ghz (HW does matter ;)
live C++ 33KSLOC ~82 seconds Linux/x86/1.9Ghz
industry PV C++ 93KSLOC ~16 minutes Linux/x86/1.9Ghz
argouml Java 150KSLOC ~13 minutes
freewrl C++ 161KSLOC ~82 minutes Linux/ppc/1.5Ghz
(old) mahagony C++ 236KSLOC ~50 minutes
Industry PA C++ 668KSLOC ~9 hours Linux/x86/3 Ghz
(old) Industry PA C++ 668KSLOC ~14 hours Linux/x86/3 Ghz
(old) Industry NM C++ 2MLOC ~36 hours
Industry AE C++ 7MLOC ~15 days Sun
  • old indicates that we have been working on performance since that parse.
Personal tools