Useful Information for Testing and Releasing the GPSTk
1 About the GPSTk
The following information in this section can be found at the GPSTk homepage at www.gpstk.org.
1.1 What is the GPSTk
The goal of the GPSTk project is to provide an open source library and suite of applications to the satellite navigation community--to free researchers to focus on research, not lower level coding.
The GPSTk suite consists of a core library and a set of applications. The library provides a wide array of functions that solve processing problems associated with GPS, such as processing or using standard formats such as RINEX. The library is the basis for the more advanced applications distributed as part of the GPSTk suite.
GPS users employ practically every computational architecture and operating system. Therefore the design of the GPSTk suite is as platform-independent as possible. Platform independence is achieved through use of the ANSI-standard C++ programming language. The principles of object-oriented programming are used throughout the GPSTk code base in order to ensure that the code is modular, extensible, and maintainable.
The GPSTk is sponsored by Space and Geophysics Laboratory, within the Applied Research Laboratories at the University of Texas at Austin (ARL:UT). GPSTk is the by-product of GPS research conducted at ARL:UT since before the first satellite launched in 1978; it is the combined effort of many software engineers and scientists. In 2003, the research staff at ARL:UT decided to open source much of their basic GPS processing software as the GPSTk.
1.2 Open Source
In general, open source refers to any program whose source code is made available for use or modification as users or other developers see fit. (Historically, the makers of proprietary software have generally not made source code available.) Open source software is usually developed as a public collaboration and made freely available.
The GPSTk is under the GNU Lesser General Public License, which is well defined at http://en.wikipedia.org/wiki/LGPL
1.3 People and Positions
The GPSTk core team are folks that oversee the GPSTk project. They help coordinate the efforts that take place on the project and are good contacts for questions about different aspects of the project. The core team is composed of:
| Core Team Role
|| Task Summary
|| Performed by
| GPSTk Project Coordinator Role
|| Ensure all areas of the project are functioning and coordinate decision effecting the project
| GPSTk Librarian
|| Oversee and refine the architecture and implementation of the library to see it meets the GPSTkMission
| GPSTk Evangelist Role
|| Increase the visibility and use of the GPSTk
| TWiki Stable Release Manger Role
|| Manage the mechanics of generating stable GPSTk releases
| GPSTk Webmaster Role
|| Maintain web pages and TWiki engine; maintain server
|| RickMach, MarkParker
| Code Contributor Role
|| Contribute code which is up to the quality standard of GPSTk
|| All core team members and developers
2 Testing Philosophy
As an open source project, the source of the GPSTk is subject to intermittent updates, contributions, and corrections. The GPSTk library testing process has been redesigned to build confidence in the functionality of the library. Testing within the GPSTk library is designed with three distinct goals in mind:
- Testing is repeatable with a low amount of effort.
- Testing is distributed along with the library to support both internal regression testing and to assure outside users and contributors of the quality of the library.
- Testing is designed to accommodate easy additions to the existing test suite.
Information on how to run and build tests in the GPSTk test suite can be found at TestingGPSTkBuilds
. More information and documentation can be found in Section 5 of this document.
2.1 Unit tests
A unit test is a procedure used to validate small parts (in our case, classes) of the source code are working as they are intended to work. Each test will, hopefully, test the class to 95% code (by line) coverage and work out any sort of problems the class might have in the extremities of its parameters.
More information on Unit testing can be found http://en.wikipedia.org/wiki/Unit_test
I decided to use CppUnit
as a unit testing framework for the GPSTk test suite because of the many nice features that it offers the tester. While making a unit test with CppUnit
is not strictly necessary (any sort of boolean pass/fail could work) the features that CppUnit
provides, such as easy macros and IDE-like output, ease the burden on those creating the test.
More information on CppUnit
can be found at http://cppunit.sourceforge.net/cppunit-wiki
2.3 Types of GPSTk Library Classes
The easiest way to break up the large task of testing the GPSTk is to subsection all of the parts into smaller categories of the GPSTk library. These categories are as follows:
- GPS time. Conversion among time representations such as MJD, GPS week and seconds of week, and many others.
- Ephemeris calculations. Position and clock interpolation for both broadcast and precise ephemerides.
- Atmospheric delay models. Includes ionosphere and troposphere models.
- Position solution. Includes an implementation of a Receiver Autonomous Integrity Monitoring algorithm.
- Mathematics. Includes Matrix and Vector implementations, as well as interpolation and numerical integration.
- Application framework. Includes processing command lines options, providing interactive help and working with file systems.
A more detailed description of the functionality provided by the GPSTk library can be found in the Doxygen documentation at http://www.gpstk.org/doxygen
3 Things to Know
The best way to become familiar with what you need to know in order to efficiently and successfully build and test for the GPSTk is to read. Listed below are some of the major items that one should become familiar with. I have also included suggested reading and a little summary about each item. Next to each reading item, I have also put a link to a member of ARL who might know where to obtain that item.
The Linux operating system is not "hard" to learn, it simply takes time to remember the sufficient commands and how do deal with privileges. The knowledge will come with time and experience.
The following books might be helpful in learning basic commands and are very good reference guides to have around:
by Carla Schroder (BrentRenfro
Linux in a Nutshell
- A Desktop Quick Reference by Ellen Siever, Stephen Figgins and Aaron Weber (BrentRenfro
Learning GNU Emacs
by Debra Cameron, Bill Rosenblatt and Eric Raymond (BrentRenfro
The following websites might be helpful:
The GPSTk is programmed in C++ so a good knowledge of C++ is necessary. C++ was founded by Bjarne Stroustrup and has its roots in the C programming language.
The following books will help the developer learn C, C++, and OOP:
The C Programming
Language by Brian W. Kernighan and Dennis M. Ritchie (BenHarris
The C++ Programming Language Third Edition
by Bjarne Stroustrup (Library)
The following websites might be helpful:
Git is an open-source distributed revision control application which is used to control changes and additions to the GPSTk repository.
This book should cover everything that there is to know about Git:
by Scott Chacon (Apress)
The above book is available online at:
More information is available at:
Perl is interpreted scripting language which is very helpful for quick applications or in cases where parsing of strings is needed. Perl is a complete programming language by Larry Wall and is available for all major platforms.
The following books might be useful for learning Perl:
by Randal L. Schwartz and Tom Phoenix (BrentRenfro
by Larry Wall, Tom Christiansen and Jon Orwant (BrentRenfro
The following websites might be useful too:
CMake is a cross-platform, open-source build system that is designed to build, test, and package software. Similar to GNU Autotools, CMake is a build system generator that creates native build files. Unlike GNU Autotools, CMake can generate native build files for multiple platforms, including Makefiles, nmake files, Visual Studio Project files, and Xcode Project files.
The following are helpful websites on CMake:
bash is a Unix shell and is an acronym for Bourne-again shell. A Unix shell is the "command line" and gives the user an interface for the Unix (or Linux) operating system. The bash shell has lots of commands and, more importantly, can run scripts.
More information about bash and bash scripts can be found at:
Solaris is a computer operating system developed by Sun Microsystems and is a version of Unix. In practice, Solaris acts very similar to Linux with a few differences such as the type of complier that it uses. I mention Solaris because it is a supported OS for the GPSTk and the GPSTk needs to be tested in it before release.
More information about Solaris can be found at:
The following is from the gcov man page:
gcov is a test coverage program. Use it in concert with GCC to analyze your programs to help create more efficient, faster running code and to discover untested parts of your program. You can use gcov as a profiling tool to help discover where your optimization efforts will best affect your code. You can also use gcov along with the other profiling tool, gprof, to assess which parts of your code use the greatest amount of computing time.
Profiling tools help you analyze your code’s performance. Using a profiler such as gcov or gprof, you can find out some basic performance statistics, such as:
- how often each line of code executes
- what lines of code are actually executed
- how much computing time each section of code uses
More information about gcov can be found at:
Latex is a document markup language and a document preparation system for the TeX
typesetting program. This program is very useful for those in science fields who need to publish many example equations or to, in general, just make a thesis, dissertation, or other document look professional. In practice, LaTeX
is somewhat similar to HTML. LaTeX
is currently in use for the GPSTk User Reference.
A helpful book on LaTeX
Latex User's Guide and Reference Manual
by Leslie Lamport (BenHarris
More information about LaTeX
can be found at:
3.10 GPS and Satellites in General
Understanding how satellites work is not, strictly speaking, required in order to test the GPSTk, but a basic understanding of how GPS functions is very helpful in visualizing what role the GPSTk fills and why the GPSTk exists to fill that role. While some parts of GPS can be quite advanced (such as signals) other parts are relatively simple and should greatly improve your understanding of some of the GPS jargon. I HIGHLY
recommend going through the ARL GPS tutorials in order to better grasp the subject of GPS.
The following book is very helpful in explaining GPS:
Global Positioning System - Signals, Measurements, and Performance
by Pratap Misra and Per Enge (BrentRenfro
4 Releasing the GPSTk
The last part of the testing process is insuring that a stable and tested code base is available for the public to use. The GPSTk release process is defined and outlined here StableReleaseProcess
5 Extra Documents
The following are documents which one might find useful.
5.1 GPSTk User Reference
The following is a link to the GPSTk user reference UsersGuide
5.2 CppUnit Presentation
: A presentation on CppUnit
5.3 Git Presentation
A presentation on Git and its basic commands
5.4 Gcov Presentation
: A presentation on gcov and line coverage.
6 Uncompleted Tests
The following tests, attached at the bottom of this page, have not been completed at the time of the creation of this webpage.
-- Contributors: EricHagen
- 01 Feb 2007