Software Engineering Tools
Table of Contents
- 1. Abstract
- 2. Assertions
- 3. Requirements
- 4. Specs
- 5. Design
- 6. Implementation
- 7. Architecture
- 8. Documentation
- 9. Comprehension
- 10. Maintenance
- 11. Testing
- 12. Debugging
- 13. Languages
- 14. Static Source Code Analysis
- 15. SecureProg
- 16. Checkstyle
- 17. Gerrit
- 18. Git
- 19. Build Tools: Gradle, Maven, Ant
- 20. Jenkins
- 21. Travis-CI
- 22. Tools
- 23. End
1 Abstract
Select tools are introduced under the "chapter headings" of this course. [Some are empty – I did not find any tool worth listing. If you wish that updated, let me know.] Most are FOSS, well documented, and in wide use. They are the results of 1000s to 1000 000s and up man-hours of development work. On most of these, there is a wikipedia page and good number of tutorial lectures and slides. Unless I quoted a line or two from their home page, it is not explicitly shown.
2 Assertions
2.1 Frama-C
- http://frama-c.com/ Frama-C is a free and open source tool, whose GUI resembles that of a typical IDE. Given a program and its assertions, it can mathematically verify if the program is correct. It is for the C language only, not C++ or other languages.
- http://cecs.wright.edu/~pmateti/Courses/FormalMethods/
2.2 SPIN Model Checking
2.3 SPLINT
- http://splint.org/ Splint can analyze C source code for security vulnerabilities and coding mistakes, even without you providing assertions. It is for the C language only, not C++ or other languages.
2.4 JML, Java Modeling Language
- ../Assertions/JML/jml.html An assertion language for Java. Plugins for Eclipse and IdeaJ.
- http://www.openjml.org/
2.5 Coverity
- http://www.coverity.com/ Research from Stanford U. Discovered 1000+ bugs in Linux kernel. Bought by https://www.synopsys.com/. Expensive to buy their service commercially. "Coverity Scan is our free, cloud-based solution specifically for the Open Source Community." Read https://www.synopsys.com/software-integrity.html
3 Requirements
3.1 Requirements Tracking
4 Specs
5 Design
6 Implementation
7 Architecture
8 Documentation
8.1 NoWeb
- http://www.cs.tufts.edu/~nr/noweb/ Literate Programming tool. You
prepare a literate programming file and then run it through this
tool to produce a nicely typeset pdf, and also ready-to-compile
source code files. Debian Linux:
apt-get install noweb
- Many other "literate programming" tools at URL TBD
8.2 Doxygen
- http://www.doxygen.org Doxygen is the de facto standard tool for generating documentation from annotated C++, Java, … sources.
- Linux src code TBD
9 Comprehension
- ../Comprehension/ Lecture Notes. Recommended Reading.
- Stand alone (tiny) tools: {ctags, etags, javadoc, …}
- http://doxygen.org Open source documentation system for software written in C++, C#, Java, Python, IDL, C and more. Can generate Class relationship diagrams and file relationships.
- https://www.google.com/search?q=static-analysis-plugins-for-intellij
- https://www.google.com/search?q=static-analysis-plugins-for-eclipse
- Source Navigator can display relationships between classes, functions, members, and display call trees mapping unknown source code for enhancement or maintenance tasks. For C/C++. Development stopped? http://sourcenav.sourceforge.net/
- http://lxr.linux.no/linux/ Linux source code browser
- Commercial Tools: JArchitect, NDepend, … [Free Trials?]
- https://www.sourcetrail.com/ A cross-platform source explorer for C/C++ and Java (Free for non-commercial use)
- P. Anderson; M. Zarins, The CodeSurfer Software Understanding Platform Program Comprehension, 2005. IWPC 2005. Proceedings. 13th International Workshop on (January 2005), 2005, pg. 147-148. Reference. http://www.grammatech.com/research/technologies/codesurfer [Commercial; free trial]
9.1 Reverse Engineering
- "Design Extraction"
- Source code is reverse-engineered back to … design … specs.
- Starting from source code; not binary-only. Reversing binary files is termed Reverse Code Engineering, or RCE. Often used in malware analysis.
- Obfuscation is used to deter both reverse engineering and re-engineering.
- Canfora, et al., see Refs. Required Reading
- https://www.apriorit.com/dev-blog/366-software-reverse-engineering-tools 9 Best Reverse Engineering Tools for 2018
9.2 Operations on Source Code
- Program Slicing: What could have affected this variable’s value? A program slice with respect to a given variable, v, is a set of variables the values of which can influence that of v.
- Ripple analysis: If a given statement is modified, where does it affect?
10 Maintenance
10.1 Removal of Bad Smells
10.2 OO Design Patterns
10.3 Tracking Issues
10.4 Metrics
10.5 SonarQube
- https://www.sonarqube.org/ "SonarQube software (previously called Sonar) is an open source quality management platform, dedicated to continuously analyze and measure technical quality, from project portfolio to method."
- Code Smells
- Bugs
- Vulnerabilities
11 Testing
11.1 JUnit5 Unit Testing
- https://github.com/ligurio/awesome-software-quality List of free software testing and verification resources.
- https://www.vdalabs.com/tools/The_Evolving_Art_of_Fuzzing.pdf
11.2 TestNG Unit Testing
11.3 Mutation
11.4 Fuzzing
11.5 Misc
- https://github.com/spockframework "The Enterprise-ready testing and specification framework." 2018
13 Languages
13.1 MPS
- MPS: Domain-Specific Language Creator https://www.jetbrains.com/mps/
- https://en.wikipedia.org/wiki/JetBrains_MPS
14 Static Source Code Analysis
15 SecureProg
16 Checkstyle
- "Checkstyle is a static code analysis tool used in software development for checking if Java source code complies with coding rules."
- https://en.wikipedia.org/wiki/Checkstyle
17 Gerrit
- "Gerrit is a free, web-based team code collaboration tool. Software developers in a team can review each other's modifications on their source code using a Web browser and approve or reject those changes. It integrates closely with Git, a distributed version control system."
- https://en.wikipedia.org/wiki/Gerrit_(software)
- https://review.openstack.org/Documentation/intro-quick.html
18 Git
- "Git is a version control system for tracking changes in computer files and coordinating work on those files among multiple people."
- https://en.wikipedia.org/wiki/Git
- Hosts: GitHub and GitLab; clients: many
19 Build Tools: Gradle, Maven, Ant
- Gradle is a software build system. It is more recent than ant, and maven.
- It is now (2017) the preferred build tool in Android Studio.
- https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
- Gradle does not use XML. Instead, it has its own DSL based on Groovy (one of JVM languages). As a result, Gradle build scripts tend to be much shorter and clearer than those written for Ant or Maven.
20 Jenkins
- "Jenkins is an open source automation server written in Java. Jenkins helps to automate the non-human part of the software development process, with continuous integration and facilitating technical aspects of continuous delivery. "
- https://en.wikipedia.org/wiki/Jenkins_(software)
21 Travis-CI
- https://en.wikipedia.org/wiki/Travis_CI "Travis CI is a hosted, distributed continuous integration service used to build and test software projects hosted at GitHub."
- https://docs.travis-ci.com/user/for-beginners/ Core Concepts for Beginners
22 Tools
We will use many of the following tools. Almost all of these are included as open-source packages ready to install on Ubuntu Linux distro; I do not know about RedHat. Almost all of them also have versions available for Windows.
- http://git-scm.com/ Git is a
free and open source distributed version control system designed
to handle everything from small (in KB) to very large projects (in
TB) by individuals or teams. (The URL is to a site that hosts a
free book.) Debian Linux:
apt-get install git-gui
- http://www.eclipse.org/
Eclipse is an IDE for programming in Java, C++, and other
languages. Has many plugins. Debian Linux:
apt-get install eclipse
- http://www.jetbrains.com/idea/ Idea is an IDE for programming in Java, C++, and other languages. Has many plugins. Not in Debian. Community edition is free; Ultimate is not.
- Pants - Build system by Twitter, Foursquare, and Square. Bazel - Correct, reproducible, fast builds for everyone. Bazel is a tool in the Java Build Tools category. Buck - A build system developed and used by …
- https://please.build/faq.html
- Miscellaneous programs:
- indent, cccc, sloccount, pmccabe,
- bogosec, check, Electric Fence, valgrind, alleyoop, Valkyrie,
- KCachegrind, Massif Visualizer
- cobertura: java tool that calculates the percentage of code accessed by tests,
- cbmc: bounded model checker for C and C++ programs,
- Umbrello, dia2code, AutoDia
- xxgdb, kdbg, gdb server, ddd
- ant, maven
- Miscellaneous programs: