A key goal of our research is to introduce an approach that involves at the outset using analytical reasoning as a method for developing high quality software. This paper summarizes our experiences in introducing mathematical reasoning and formal specification-based development using a web-integrated environment in an undergraduate software engineering course at two institutions at different levels, with the goal that they will serve as models for other educators. At Alabama, the reasoning topics are introduced over a two-week period and are followed by a project. At Clemson, the topics are covered in more depth over a five-week period and are followed by specification-based software development and reasoning assignments. The courses and project assignments have been offered for multiple semesters. Evaluation of student performance indicates that the learning goals were met.
Abstraction is the process of developing a conceptual veneer that hides the complexity of internals. It is central to computational thinking, in general, and high quality software development, in particular. Use of mathematical modeling makes the abstraction precise. The need for undergraduate CS students to create and understand such abstractions is clear, yet these skills are rarely taught in a systematic manner, if they are taught at all. This paper presents a systematic approach to teaching abstraction using rigorous mathematical models. The paper contains a series of representative examples with varying levels of sophistication to make it possible to teach the ideas in a variety of courses, such as introductory programming, data structures, and software engineering.This paper presents results from our experimentation with the ideas over a 3-year period at our instiution in a required course that introduces object-based software development, following CS2. The data analysis focuses on students who fall in the bottom half of the performance curve to avoid the bias introduced by top performers, who tend to do well regardless of the teaching approach.
RESOLVE is an integrated language that combines imperative programming and mathematical specifications for full functional verification of component-based programs. From a researcher's perspective, this paper summarizes the elements of RESOLVE's web IDE that includes a verifying compiler. We use a variety of in-language examples to demonstrate the following: Extensible mathematical units that contain definitions and results, higher-order specifications of generic components that use those mathematical units, alternative implementations of specifications, and automated generation of verification conditions and proofs for implementation correctness. While verification and research are the focus of this paper, it's worth mentioning that the compiler translates RESOLVE code to Java (or C) for execution, and has been utilized in a variety of computer science classes at multiple institutions over the last five years.
scite is a Brooklyn-based organization that helps researchers better discover and understand research articles through Smart Citations–citations that display the context of the citation and describe whether the article provides supporting or contrasting evidence. scite is used by students and researchers from around the world and is funded in part by the National Science Foundation and the National Institute on Drug Abuse of the National Institutes of Health.