OOSR W99/00 - What is a legacy system? - Why do legacy systems pose problems? - What is the difference between reverse engineering and reengineering? - What tools and techniques are used for reverse engineering? - Why would you want to reengineer a system? - How does duplicated code arise? - Why is it problematic? - How can you eliminate duplicated code? - When might you not want to eliminate it? - What are some of the problems in using UML to model legacy software? - What are software metrics used for? - What is good/bad about the LOC metric? - What is GQM? - How does measurement-based cost estimation work? - What are coupling and cohesion? Why are they important? - How would you measure software quality? - How can visualizing metrics help in reverse or re-engineering? - What's the difference between a model and a meta-model? - What is refactoring? - What role do tests play in refactoring?