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

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

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 BryanParsons
GPSTk Librarian Oversee and refine the architecture and implementation of the library to see it meets the GPSTkMission BryanParsons
GPSTk Evangelist Role Increase the visibility and use of the GPSTk BryanParsons
TWiki Stable Release Manger Role Manage the mechanics of generating stable GPSTk releases BryanParsons
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

2.2 CppUnit

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

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

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.

3.1 Linux

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:
Linux Cookbook 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:

3.2 C++

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:

3.3 Git

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:
Pro Git by Scott Chacon (Apress)

The above book is available online at:

More information is available at:

3.4 Perl

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:
Learning Perl by Randal L. Schwartz and Tom Phoenix (BrentRenfro)
Programming Perl by Larry Wall, Tom Christiansen and Jon Orwant (BrentRenfro)

The following websites might be useful too:

3.5 CMake

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 fi les. Unlike GNU Autotools, CMake can generate native build fi les for multiple platforms, including Make files, nmake fi les, Visual Studio Project fi les, and Xcode Project fi les.

The following are helpful websites on CMake:

3.6 bash

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:

3.7 Solaris

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:

3.8 gcov

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:

3.9 LaTeX

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 is:

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

CPPUNITPRES.pdf: A presentation on CppUnit.

5.3 Git Presentation

Coming Soon A presentation on Git and its basic commands

5.4 Gcov Presentation

GCOVPRES.pdf: 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


Topic attachments
I Attachment Action Size Date Who Comment
CPPUNITPRES.pdfpdf CPPUNITPRES.pdf manage 407.9 K 02 Feb 2007 - 13:29 EricHagen Presentation on CppUnit
GCOVPRES.pdfpdf GCOVPRES.pdf manage 567.1 K 02 Feb 2007 - 13:30 EricHagen Presentation on gcov
SubversionPres.pdfpdf SubversionPres.pdf manage 310.5 K 02 Feb 2007 - 13:28 EricHagen Subversion Presentation
xFIC.cppcpp xFIC.cpp manage 7.7 K 02 Feb 2007 - 13:51 EricHagen Code file for uncompleted FIC test
xFIC.hpphpp xFIC.hpp manage 0.9 K 02 Feb 2007 - 13:50 EricHagen Header File for uncompleted FIC test
xIonoModel.cppcpp xIonoModel.cpp manage 3.3 K 02 Feb 2007 - 13:52 EricHagen Code file for uncompleted Ionomodel test
xIonoModel.hpphpp xIonoModel.hpp manage 0.7 K 02 Feb 2007 - 13:51 EricHagen Header file for uncompleted Ionomodel test
xVector.cppcpp xVector.cpp manage 10.0 K 02 Feb 2007 - 13:53 EricHagen Code file for uncompleted Vector test
xVector.hpphpp xVector.hpp manage 0.8 K 02 Feb 2007 - 13:52 EricHagen Header file for uncompleted Vector test
Topic revision: r9 - 19 Jul 2016, BryanParsons

This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback