abstract
-
Scientific computing software has had considerable success in producing efficient and correct numerical results. However other software qualities, such as usability, maintainability, testability, flexibility, and reusability, are often neglected. Presented in this work is our proposed solution to improve the quality of scientific computing software by using a document driven software engineering methodology. A parallel mesh generation toolbox (PMGT) is developed to illustrate our approach.
This thesis proposes to improve quality via a methodology that consists of a sequence of design steps and documents, including the following: a Software Requirements Specification (SRS), a Module Guide (MG), a Module Interface Specification (MIS), and a Summary of Validation Testing Report (SVTR). Where applicable, mathematical notation is used in these documents to make them as formal as possible. This formality improves the documents by making them less ambiguous and more validatable; therefore, the correctness and testability of the software are improved. The proposed methodology also requires that the traceability between the documents listed above, and the traceability between these documents and code be explicitly specified. This allows for verification of completeness and consistency and facilitates systematic change management.
Quality is also promoted during the implementation stage. For instance, a new modification is proposed to Rivara's longest side bisection algorithm. The modified algorithm improves the quality of usability, without sacrificing reliability. A new coarsening algorithm inspired by Oliver-Gooch is also proposed. Instead of decimating vertices by collapsing the edges, the new algorithm uses edge collapse to decimate the cells.
The proposed methodology promotes testing as an important way to improve software quality. However, due to the lack of an expected answer, testing the correctness of PMGT is difficult. To overcome this challenge, the method promoted in our work is automated testing to verify the known properties of a correct solution, such as checking for conformality and for boundary closure.