In chapter 6 of Client-Centered Software Development, Allen Tucker discusses how to develop domain classes (either from scratch or from an earlier, similar CO-FOSS project), make unit tests to ensure these classes function correctly, and use testing frameworks to easily and efficiently execute these unit tests (along with use case tests and perhaps even UI tests), and finally, how to debug the code to make these tests pass and have a fully-functioning piece of software. Tucker’s discussion of domain classes includes concepts such as inheritance, code reuse, and easily understandable abstractions for programmers to translate requirements into actual code. All of these concepts we have touched on in other classes, particularly our software engineering course that most seniors take the semester before our capstone. However, it is nice to see how these concepts are described in the context of CO-FOSS, because it allows us to better see how what we have all done so far for our own projects has included at least one, if not all, of these concepts and how they truly are vital to the software development process. Likewise, Tucker describes the importance of test-driven development, or TDD, and how it is a process carried on by many programmers at once who at times work alone but eventually have to combine their efforts to perform what is called integration testing. Naturally, given that everyone in our class is working with a code base that is already well-developed, much of the testing we have done for our changes has likely involved integration testing. Finally, Tucker briefly describes debugging and refactoring, two processes which are vital to the continued success of a CO-FOSS project. Good debugging tools and skills help developers more efficiently contribute to CO-FOSS projects, and likewise, refactoring code can help both new developers and project veterans better understand the code they work with (everyone has written code and forgotten how it works after not touching it for awhile), in turn aiding developers in their quest to add new features to their project without introducing bugs.
In fact, most of the work our group has done on Open Library has involved refactoring. While we are still looking for an opportunity to add a new feature to the website, there is much to be done in the way of refactoring as the creators of Open Library have had many issues with their inline JavaScript introducing hard-to-find, hard-to-fix bugs when they make changes to their web templates. Reading this chapter has helped validate our contributions to the project so far. The importance of good refactoring cannot be understated, and I hope that in so doing I have not introduced what Tucker calls “smelly code” by making my own changes to the structure of the code by moving JavaScript away from HTML files and to their own separate JavaScript files. Regardless, as I have learned refactoring can sometimes be hard, especially when you’re new to the language being used. Much of the unit testing in Open Library deals with the backend, so the changes we made to the JavaScript had to be tested by using the UI ourselves by testing the website on a locally-hosted server. As Tucker mentions, testing the UI can sometimes be tricky, and hence, he devotes an entire chapter to it! Thankfully, browsers have debugging tools that make this process easier and ultimately helped me personally solve an issue I got stuck on for many hours. Overall, I’m glad to see through reading Tucker and through integrating our changes into the code base that the work we’ve done so far is in fact routing for CO-FOSS projects and can indeed be very helpful for a project’s developers going forward.