2. Papers: Parallelism and Software Testing
Learning to program should include learning about proper software testing. Some automatic assessment systems, e.g. Web-CAT, allow assessing student-generated test suites using coverage metrics. While this encourages testing, we have observed that sometimes students can get awarded from high coverage although their tests are of poor quality. Exploring alternative methods of assessment, we have tested mutation analysis to evaluate students' solutions. Initial results from applying mutation analysis to real course submissions indicate that mutation analysis could be used to fix some problems of code coverage in the assessment. Combining both metrics is likely to give more accurate feedback.
We describe the renovation of our compilers curriculum to meld together an established object-oriented textbook compiler with an inexpensive embedded target platform. The result is a modern compiler implementation course with aspects of concurrency and embedded systems, and a palpable increase in student enthusiasm. We discuss the trade-offs in retargeting our compiler, gauge the difficulty of supporting thread-level concurrency in our target language, and outline the resulting structure of the course and integration with the rest of our computer science curriculum.
Developer testing is a type of testing where developers test their code as they write it, as opposed to testing done by a separate quality assurance organization. Developer testing has been widely recognized as an important and valuable means of improving software reliability, as it exposes faults early in the software development life cycle. Effectively conducting developer testing requires both effective tool support by tools and developer-testing skills by developers. Various research efforts have been invested on improving tool automation such as automatic test generation to aim for effective tool support. However, it is still a long way towards satisfactorily accomplishing this aim when testing common real code bases. Then when using testing tools, developers need to have the skills to understand the challenges that these tools face and provide guidance to the tools in attempting to address these challenges. In addition, developers need to have the skills to write effective test oracles either in the form of assertions in test code or contracts in code under test.
In this paper, we describe our experiences and lessons learned in teaching and training developer-testing techniques and tool support in both university and industrial settings. We highlight differences in teaching and training in these two settings, and observations from interacting with practitioners in our process of teaching and training.
Whereas the fastest supercomputer of 1998 could compute 1.34 trillion floating point operations per second (TFLOPS) [1], today's consumer-level (sub-$500) graphics cards such as the Nvidia GeForce GTX 480 can compute 1.35 TFLOPS [2]. The rise of multi- and many-core processing has certainly introduced new urgency to teaching parallel programming. In this paper, we focus on lab exercises at the undergraduate level. Three undergraduate students and one faculty member spent several weeks on Cuda lab exercises, starting with the recent book by Kirk and Hwu [3]. We describe our experiences and lessons learned working with the book and its accompanying labs. We discuss extended labs including the game of life, curvature flow, and ray tracing, all of which may appeal to an even wider audience of today's learners.
Improving the quality of software developed in the 21st century is one of the major challenges in the software industry. Addressing this problem will require that academic institutions play a key role in training developers on how to develop high quality software. Unfortunately, students and instructors continue to be frustrated by the lack of support provided when faced with the task of selecting the appropriate testing tools and program analyzers to verify programs under development.
In the paper we present an approach that integrates the use of software testing tools into programming and software engineering courses. The approach consists of three phases, developing an online repository with learning resources, training instructors in the area of testing techniques and tools, and integrating the use of testing tools in various programming courses. We also present results for the first instructor workshop on integrating testing into CS1-CS3 and the use of testing tools in a software engineering course.





