Assignment title: Information
In your own words, explain who is likely to read requirements and specification documents, and what the different readers need from these documents. 3. We briefly discussed the use of less rigidly-structured design methodologies, such as Agile, as an alternative to traditional software life cycle approaches. Discuss the potential advantages and disadvantages of these "non-traditional" approaches. 4. A serious bug with a non-trivial fix is detected somewhere in the source code for your team project. The bug involves interaction between the code produced by two different team members. Clearly describe a version-control process, using git, that should be followed by the team to safely develop a fix. 5. Explain, in your own words, why commercial software engineering organizations place such a strong emphasis on the gathering of requirements and development of product specifications. 6. Suppose you are the lead programmer on a team that will be responsible for the implementation of a safety-critical software system (e.g part of a medical lifesupport system). Discuss the philosophy/advice you would give to your team regarding the team's approach to debugging and testing the software you develop. 7. (i) Describe the most important features a debugging tool should provide for the programmer and justify your choice of those features. (ii) Which of those features are supported in gdb, and how do you use/invoke those features in gdb? 8. Can a team's choice of version control systems/processes significantly impact the reliability of the software produced by that team? Justify your answer. 9. In lectures we discussed the use of three separate environments for a product: development, staging, and production. (i) In your own words, explain the purpose of this division and the primary purpose of each of the three environments. (ii) In your own words, discuss the potential disadvantages of such a system. 10.(Follow on to the previous question). In the context of projects organized along the lines of development/staging/production, pick one of the following three tools: git, gdb, makefilesand answer the following question: How would the configuration and use of the tool in question differ across the three different environments? 11.For each of the following techniques, describe specific circumstances under which it could significantly aid the debugging process: o Assertion statements o Logging of error messages and/or warnings o Using return values exclusively for recording/returning whether or not the function/method completed successfully. 12.Can a team's choice of coding standards significantly impact the reliability of the software produced by that team? Justify your answer. 13.Discuss, in your own words, the potential disadvantages of having all your developers adhere to a detailed set of code standards. 14.Many (if not most) integrated development environments automate at least part of the process of compiling and linking code for the developer. Discuss the pros and cons of having the development team construct their own Makefiles to handle this task rather than doing through an IDE. 15.Suppose you are the lead of an IT group of 8 developers. Your boss knows very little about software development, but has heard from a friend that many software projects do a poor job of re-using code - "constantly re-inventing the wheel". Your boss wants you to formulate a plan to ensure your group avoids falling into this category. Explain how you would proceed, and why. 16.Many test plans include, among other things, an explicit list of "Things not to be tested". Discuss why you would deliberately choose not to test certain required features of a project, and provide examples of such features to illustrate your points. 17.Suppose a "make all" had been run on the makefile below, and that it had run successfully (all executables and object files get updated, there are no compile errors or warnings, and all the files are in the correct place). If the user now entered the commands "touch d1.h" and "make all", what would be the exact sequence of commands and corresponding output generated by the makefile? (I.e. show the precise g++ commands run and the output from all the echo statements that would be run.) .In one of our lectures the comment was made that one "should never trust user input". Explain what is meant by this statement, and provide some examples clarifying the claim. 19.Suppose our company's software relies on the use of the following coordinate system for specifying the physical location of objects: The total area covered by our coordinate system is a rectangle, divided into four regions specified by a single digit 0-3 as follows: Each of those regions can be subdivided by adding a second digit (0-3), Each of those regions could be further subdivided into quarters by adding a third digit, those could in turn be subdivided by adding a fourth digit, etc. (The advantages of such a system are that an arbitrary level of precision can be reached by using the appropriate number of digits, and the relative x/y distances between the centres of two regions can be easily computed based on the coordinates given and the height/width of the original rectangular region.) The routine find_xdistance(addr1, addr2) is supposed to calculate the distance between the two addresses along the x axis. These distances should be positive if addr1 is "right" of addr2 and negative if the opposite is true. However, when called with "13" as addr1 and "31" as addr2 the routine is returning a negative result. Outline a further set of test values (coordinate pairs) you would use to try and identify the scope of the problem, providing a brief justification for each pair of test values. 20.Suppose you are the head developer for a group of about twenty developers, and your company also employs a group of three full time testers. As part of cost-cutting measures, the company executives propose axing the testers and having developers perform their own testing. Discuss how you would respond to this suggestion and why. 21.Suppose you have just been hired as the third member of an IT team within a small company. Describe what you want to learn your first week on the job and why. 22.(Follow up to previous question) By the end of the first week on the job you are settling in, when the other two members of the team announce they are both leaving to join a small start-up venture. It turns out that, while you were hired primarily for web work, the company has a substantial body of Fortran and Cobol code that was being maintained by the departing team lead. The company management knows very little about software development and maintenance, and turns to you for advice. What recommendations do you give them, and why? 23.(i)Discuss the meaning and validity of the following statement: "Most users do not need defect free software." (ii) Discuss the validity of the following statement: "Software design is of limited value compared to design in other engineering disciplines because software architectures cannot be evaluated prior to implementation." 24.Discuss how testing of code written in an object oriented language (like C++ or Java) differs from code written in a purely imperative language (like C). 25.Discuss, with examples, how profiling information might help your team improve the reliability of the software it produces. 26.If a program makes heavy use of inheritance, does (or should) that make automated testing of the program easier or more difficult? Justify your answer. 27.Discuss the meaning and validity of the following claim: "Automated software test frameworks should vary the order in which test cases are applied to the product." 28.One of the criticisms of the C programming language is that, compared to object-oriented languages like C++ or Java, it provides very little support for/enforcement of the principles of abstraction and information hiding. Explain what is meant by this criticism, and the implications for teams caryying out large scale software development projects in C. 29.With respect to your own skills, abilities, and work habits, discuss what is the most important thing you have learned from this semester's team project, and why it is the most important thing you have learned. 30.Describe, in your own words, what information hiding, abstraction, and encapsulation are, and why the concepts are considered so important in the area of software engineering. 31.Test driven development: You are given the function below for classifying types of triangles, and the tests so far for validating that the function works correctly when the three parameters are passed in increasing order, i.e. s1 ≤ s2 ≤ s3. Now the function also needs to work when passed the three parameters in any order Write a set of additional test cases to handle the new requirement, and modify the function so that it passes the test cases Test coverage: path testing is used to ensure every possible line of code is run at least once across a set of tests. For the program below, provide the test data for three runs of the program such that every line of the program gets executed by at least one of the calls. Clearly state any assumptions you need to make. .Git: suppose you have a function that determines the result of a round of rockpaper-scissors. The function implementation is found in a C++ file rockEval.cpp and uses the data types and prototypes found in file rockEval.h, and both of these files are in the main directory of a git repository named rockGame. Assuming the code is all in the main branch so far, and the git repository is currently up to date, your task is to create a new branch named rpsls (stands for rock-paper-scissors-lizard-spock) that accomodates the following additional game rules: rock crushes lizard, lizard poisons spock, spock smashes scissors, scissors decapitate lizard, lizard eats paper, paper disproves spock, spock vaporizes rock. Provide the updated .cpp and .h files plus all the git commands needed to create the new branch, incorporate the new code and commit it. Be sure to provide your commit message as well. .Scripting: the program below uniformly randomly selects a value from a sequence of positive integers without knowing in advance how long the sequence is and without storing the sequence. A value of -1 is entered by the user when they wish to stop the sequence and get the random selection. Your task is to write a script (using either Perl or Bash) that tests the program as follows: o The tester running the script provides the number of calls, N, and the length of the sequence, L, as command line arguments to the script. o The script calls the program N times giving it values 1 through L each time, and counts how many times each of the numbers is selected by the program. After all N calls, the script displays how many times each of the L values was called. (Presumably the tester can apply the statistical test of their choice to that information.) .gdb: study the source code and corresponding gdb output below and describe the code flaw and a potential fix as precisely as possible 6.Clean code: discuss the differences in the two sendMessage routines below from the perspective of "clean code" and maintainability. 38.Further questions 39.Briefly outline the key use cases and participants associated with the following system: A provincial health department develops and maintains a collection of interactive kiosks. Each kiosk shows a map of the province and a list of neighbourhoods. When a user selects a neighbourhood from the list, the map zooms in to the neighbourhood and shows the location of all flu clinics scheduled within the next three weeks. The clinic/neighbourhood data is maintained at a central health department site, and is automatically downloaded by each of the kiosks via a wireless connection each morning between 3 and 4 a.m. 40.Briefly outline probable key use cases and participants associated with the following system: A restaurant uses a touch-screen software system for servers to place orders, and for chefs to indicate when those orders are completed/ready for pickup. In addition to selecting items off the menu, each item ordered can be tagged with any special preparation instructions/requests from the customer.