Assignment for Agile Engineering Practices (APE)
This assignment is designed to allow you to demonstrate usage and understanding of tools and techniques covered in the APE course. You are presented with changes to make, using the practices from the course. You should describe clearly in a report what you did, and the motivations for your decisions.
You have been brought in as a contractor to make some changes to legacy code for Ivan’s Windows Ltd , a 1 small company that make windows for residential and commercial properties. Many years ago, Ivan’s Windows Ltd used a software company to create a desktop application for ordering panes of glass from the best supplier (C. Attal Glass Ltd ) depending on the size and model of window 2 (different models of window have different width of window frame, so need a different size of glass pane relative to the window’s overall size). The software works but isn’t very good. At least you’ve got the source code: https://[email protected]/ivanrmoore/windows.git Particularly worth noting is that the developer who produced this code “tested” it by running MainTest and looking at the output printed in the console. The developer used to change the string specifying the account name from “Ivan`s Windows” to “test” so that when the order was sent to the C. Attal Glass Ltd web service, it didn’t actually place an order. If you don’t change the account name, then an order will be placed and C. Attal Glass Ltd will demand payment. This would be a bad thing. C. Attal Glass Ltd dominates the glass pane supply market - Ivan’s Windows Ltd has no choice but use them and use their web service for ordering glass. C. Attal Glass Ltd provide a web service for ordering glass with two endpoints: https://immense-fortress-19979.herokuapp.com/order (called “small order” endpoint from now on) https://immense-fortress-19979.herokuapp.com/large-order (called “large order” endpoint from now on) The integer values for width and height are in inches (but that isn’t going to matter). Ivan’s Windows Ltd has no in-house software development capability at the moment.
Annoyingly, you have to calculate which endpoint to use based on the total area of your order. It doesn’t make much sense, but C. Attal Glass Ltd dominate the market and to use their service you have to follow their rules. The rule used to be (and the code currently implements): if the total area of glass in the order is over 20000 square inches, call the large order endpoint otherwise call the small order endpoint. However, C. Attal Glass Ltd have changed it so that now: if the order is for plain glass and the total area of glass in the order is over 20000 square inches, or if the order is for toughened glass and the total area of glass in the order is over 18000 square inches, call the large order endpoint otherwise call the small order endpoint. Ivan’s Windows Ltd has no choice but change their software to conform to this new requirement - otherwise orders will be rejected by C. Attal Glass Ltd. Examining the codebase you are given, you find the code shown in the Appendix (you should clone the code from https://[email protected]/ivanrmoore/windows.git). Make this alteration. What did you do and how did you do it? Include snippets of code in your report.
The building regulations have changed. It used to be that windows over 120 inches high had to use toughened glass, but now the regulation is that any windows over 120 inches high or with an area of glass over 3000 square inches has to use toughened glass. Examining the codebase you are given, you find the code shown in the Appendix (you should clone the code from https://[email protected]/ivanrmoore/windows.git). Make this alteration. What did you do and how did you do it? Include snippets of code in your report.
Ivan’s Windows Ltd plans to introduce new ranges of windows and many other as yet unspecified changes to be developed by an in-house team they intend to assemble. What tools, practices or code changes would you recommend to make it easier for more than one person to work on this code at the same time?.
You should submit your report as a PDF document and a zip file of your code (ideally including your git repository) for reference.
For each technique that you choose to use, write about your reasoning for applying it, and how it helps. Describe the steps you have to go through to apply them. Show selected snippets of code that demonstrate the changes that you make, rather than pasting in large chunks, or just the finished product, which should be included as a zip file rather than in the report. You can make as many changes to the code as you want. I will expect you to make some changes which are not immediately addressing the questions but rather make it easier to understand the code. Briefly describe those changes and why you made them. A long answer to the assignment is not necessary. It would be surprising if your final submission were more than 10 pages long; it might well be somewhat shorter. Do not submit an answer that is longer than 12 pages.
The assignment is intended to measure the following, all of roughly equal importance: • Have you understood the key agile engineering practices: unit and acceptance testing, continuous integration, refactoring, iterative development • Can you demonstrate your ability to apply these practices in a “legacy code” situation to complete the project using a rigorous engineering approach. • Can you present clear arguments supporting your decisions and motivations, and discuss trade-offs, concisely and precisely?