Columbia University Essentials of Software Engineering Questions
Chapters 4 & 5 QuestionsIntroductionPrepare written answers to, and be prepared to discuss each of the following questions, each of which is taken from, is an extension of, or is inspired by the correspondingly numbered question from the Essentials of Software Engineering text. Chapter 4:Review Question 1. Discuss one advantage and one disadvantage of the waterfall process.Exercise Question 1. Look again at the simple process model in Figure 4.1. What development activity would you choose to add first to the process and why?___________________________________________________________________________________________________________________Chapter 5:Review Question 6. Compare and contrast Agile and traditional methods.Review Question 7. Although agile methods prefer working programs over comprehensive documentation, analyze and discuss the potential implications of this preference.Chapter 7 QuestionsIntroductionPrepare written answers to, and be prepared to discuss each of the following questions, each of which is taken from, is an extension of, or is inspired by the correspondingly numbered exercise question from the Computational Thinking for the Modern Problem Solver text. Chapter 7: Consider the depiction of a “chunk of memory" given to the left.Exercise Question 2. Consider the following data that describes the “adjacency” of the states in the Northeast. Two states are considered adjacent if they share a common border.CT: NY, MA, RIDE: MD, PA, NJMA: RI, CT, NY, NH, VTMD: VA, WV, PA, DEME: NHNH: VT, ME, MANJ: DE, PA, NYNY: NJ, PA, VT, MA, CTPA: NY, NJ, DE, MDRI: CT, MAVT: NY, NH, MA For example, note that Pennsylvania is adjacent to New York, New Jersey, Delaware and Maryland. Pennsylvania is also adjacent to Ohio and West Virginia, but these facts are not represented in this data.First, depict this data as a graph drawing consisting of nodes (one for each state, and labeled with the state abbreviation) and arcs that represent the adjacencies reflected in the data. Second, complete the depiction of the “chunk of memory” showing how this graph could be represented and stored using the “linking scheme” presented in Chapter 7. Although there are multiple correct answers to this part of the question, for the sake of having some continuity you are to anchor the graph at address 125 using the node for PA.Exercise Question 2a. Note that a complete set of data, showing the adjacencies of all of the states in the union plus the District of Columbia, may be found online at https://writeonly.wordpress.com/2009/03/20/adjacency-list-of-states-of-the-united-states-us/. For this question, you are to analyze the storage needs for this complete set of data (using the linking scheme) and determine the precise total number of memory cells needed to represent it. Additional Questions: Since a tree is a graph that has certain properties (i.e. a tree is a connected acyclic graph), it is the case that trees can then be readily represented the same way as graphs. An interesting and important special type of tree, known as a binary tree, is one in which no node has more than two children.Although a binary tree may be represented the same way as a tree (and thus also the same way as a graph), the specializations present in binary trees may be exploited to gain some efficiency. Consider the following depiction of a chunk of memory and the corresponding binary tree it represents. Here a different representation scheme that uses “indexing” is employed.In the indexing scheme used here the tree’s representation is anchored at memory address 1. In this scheme, the left child of every node is represented in memory at the address of the parent node multiplied by 2, and the right child is represented in the address immediately following the left child. Thus, node B is stored in memory at 1 and its left child, G, is at 2 and its right child E is at 3. Similarly, node F is stored in memory at 5 and its children are represented at 10 and 11 respectively. Note that nodes that do not exist, such as the left child of E and its descendants still consume space in the representation.This indexing scheme that maps the nodes in a rooted binary tree to the positive integers as described above provides a straightforward and reasonably efficient representation for most binary trees. The best case is when the tree is “complete” meaning that every node at every level, except the lowest level, has two children and all nodes at the lowest level are as far left as possible.Of course, binary trees with certain structures may result in inefficient uses of memory. Consider this binary tree.For each of the three binary trees presented here determine the precise number of memory cells needed to store the representations of the tree in both of the representation schemes given (i.e. the one given for graphs in Chapter 7 and the specialized one for binary trees.)Real World InceptionIntroductionIdentify an opportunity you perceive from your work life for new or improved software to be developed. Recall from your reading on the Rational Unified Process Framework (RUP) that the Inception Phase is when the scope and goals of a software product are identified and articulated. So, essentially this assignment calls upon you to perceive a problem or need and to begin to articulate a solution to that problem.For this assignment, it will be necessary for you to provide appropriate background and explanation of both your work environment and of the problem and the solution you have identified. For this assignment specifically, it is especially important for you to consider both the instructor and your classmates as the audience for your answer. Keep in mind that we may have widely diverse work experiences.After providing appropriate background, context and explanation, you are to focus on the following points for the RUP Inception Phase, as presented in Chapter 4 of the Essentials of Software Engineering text. Inception Phase: Inception is a planning phase that includes the following primary objectives:Establish the scope and clarify the goals of the software project.Establish the critical use cases and the major scenarios that will drive the architecture and design.Establish some architecture and early design alternatives.Estimate the schedule and required resources.Plan the implementation, testing, integration, and configuration methodologies.Estimate the potential risks.Although you may find some aspects of this difficult to do, you are to do your best to apply your understanding of these objectives to the opportunity you have identified for this assignment.Week 6 Assignment: String Sorter Part 1IntroductionIn this assignment, your goal will be to make modifications to a set of programs that all perform the same basic task. You will be provided a list of medications for patients on a hospital unit. The list is not sorted. In order to make the list as easy as possible for nurses to scan, you are to help write a program to sort these medications.In part 1 of this assignment, you will be presented with 2 complete programs: StringSorterV1.py and StringSorterV2.py. They both perform the same task, sorting a list of medications; however each approach is slightly different. Each of these performs the task specified in Section 1.1 and developed in Chapter 1 of the Essentials of Software Engineering text, and are further illustrated in the Python for Chapter 1 document. StringSorterTesting the ProgramsYou are to first test the operation of each of these modules with the provided lists of medications to familiarize yourself with them, and to convince yourself that they work. If you discover that one or more of these implementations does not work correctly then you are to prepare a document in which you illustrate (through screen shots) and explain representative cases that fail.Modifying the ProgramsNext, you are to modify each of these implementations (V1 and V2) so that blank lines in the input are ignored in the result. Please do not change the name of the methods, but do rename your modified files by appending an ‘R’ to each filename; thus StringSorterV1.py becomes StringSorterV1R.py, etc. Along with submitting these two Python source code files, you are to prepare and submit a single document in which you illustrate (through screenshots) the execution of your revised implementations, with accompanying narrative explanations as appropriate.Additional and Optional: Improving the operation of the StringSorter implementations may be accomplished by developing a Python function to compare two strings rather than relying directly upon Python’s intrinsic operators to compare strings. Such a function could then implement its own algorithm to compare two strings interpreting lower and uppercase in a more natural way. Consider the following table that presents the strings from medications1.txt in their original order and also in the order obtained by having Microsoft Word sort them. This result is considered to be such a more natural ordering and you are to develop your algorithm to accomplish this ordering.Such a function would return true if and only if a given second string is considered to be “greater than” (i.e. appears alphabetically after) a given first string according to this algorithm. For this additional and optional part of this assignment you are to develop this function and then refactor each of the four StringSorter implementations in the corresponding Python source code files to use this function. Again, please do not change the name of the other methods, but do rename your modified files by appending a ‘AO’ to each filename; thus StringSorterV1R.py becomes StringSorterV1RAO.py, etc. Along with submitting these two Python source code files, you are to prepare and submit a document in which you illustrate (through screenshots) the execution of these refactored implementations, with accompanying narrative explanations as appropriate.SubmissionYou are to submit 3 files:If applicable, a Word Document with screenshots of cases where the program failed in your initial tests.The Source Code, StringSorterV1R.py and StringSorterV2R.pyA Word Document with screenshots of the working revisions and explanation of those revisions.If you run into any issues, please describe them, what you tried to do to fix them, and why they didn’t work.