422 FINAL

Ace your homework & exams now with Quizwiz!

A software system will be built to allow drones to autonomously herd cattle in farms. These drones can be remotely controlled by human operators. Explain how multiple architectural patterns can fit together to help build this kind of system.

A model view controller pattern and repository pattern for example can be combined to build this kind of system. A MVC pattern maps user actions, then changes the model state and that changes the view in a loop until finishing. A repository pattern has a main central repository that can be accessed by other systems. The drone system can be modeled after a repository, where human operators can access the system from their devices and also maintain a MVC pattern where any input from humans changes the MVC states.

Explain the difference between a static model and a dynamic model. Give an example of a static and dynamic model for a X-based approach to software design, in which X is either classic-procedure-based or object-oriented.

A static model is a model that focuses on the structure of the system. Shows relationships between fixed objects in the system. A dynamic model shows the behavior and flow of control in a system. Shows all the possible states an object can get into as a result of events. An example in classic procedure based approach would be a static model would be a design for a calculator program. The static model would show the interactions between things such as button presses going to the calculation function, and turning the calculator off going to the quit object, and the dynamic model would show that pressing the button would result in the button being pressed down, and the user getting output on that, and the calculation starting and solving the problem and showing that output.

What is a topic sentence?

A topic sentence is a sentence that is at the beginning of each paragraph in technical writing that describes what the paragraph entails and the key subjects that will be discussed in the paragraph.

Define each of the following terms and explain how each concept is relevant to the design process: abstraction, modularity (coupling and cohesion), information hiding, complexity (size based, structure based), system structure. By process, we mean the human activity of considering and selecting from alternative ways to satisfy the requirements, not the thing that comes out at the end of the process.

Abstraction: a way to summarize specific concepts or ideas into a larger, easier to understand concept. It helps the design process by concentrating on the important aspects/features and ignore those that aren't at the current level of thinking. Modularity: Modules are separable pieces of code. It is relevant to the design process in that developing time can be shortened, it provides product flexibility and comprehensibility. Information hiding: The process or outcome of keeping implementation details hidden within a component, such as within a module, function or data structure. Does not relate to data security. It is the data or components that are available to other functions or operations. It relates to design because it helps organize code, increase cohesion and decrease coupling. Complexity: Measure of how complex the system is. Showing for example: intra module connections, size based (e.g. # of lines of code), structure-based (the control structure). This relates to design because it helps control code and problems and increase consistency. System structure: Is an outcome of design, showing the modules and dependencies. Relations can include: Module X CONTAINS Module Y, ** USES **, ** FOLLOWS **, ** DELIVERS DATA TO **. It relates to design because it shows how the modules interact with each other.

Explain how these four themes pervade all aspects of software engineering: Abstractions, divide and conquer, propose and consider alternatives, and collaborate. Explain what is meant by each of these, and relate each of them to any of the other terms or concepts below.

Abstractions: a way to summarize specific concepts or ideas into a larger, easier to understand concept. Divide and conquer: Break a large problem into smaller problems that don't need to be solved all at once. Propose and consider alternatives: Every activity in software engineering considers design, which is the process of proposing ideas and evaluating alternative solutions to a PROBLEM. Collaborate: Most processes and techniques developed in software engineering are aimed to help groups of developers work together.

explain the four or five "essential" diagrams used in UML

Activity diagrams - show the activities involved in a process or in data processing Use case diagrams - show the interactions between a system and its environment Sequence diagrams - show the interactions between actors and the system and between system components Class diagrams - show the object classes in the system and the associations between these classes State diagrams - show how the system reacts to internal and external events

What is an SDS? What, in your opinion, are the most important sections of the SDS? Why?

An SDS (Software Design Specification) is a description of the system that is intended to be created, elaborating the major parts of the system and how they fit together. Organizing principles that will break the system into parts. The most important sections in my opinion are system overview, software architecture, and software modules. System overview because its necessary to have a larger understanding of what is wished to be accomplished in the system, software architecture because it allows a larger view on how the system will be organized, and software modules because we can see how those organized parts with interact with each other.

How can system modeling make it easier to accomplish each of the following activities: implementation, project planning, testing, and maintenance?

Because Model-based engineering allows engineers to think about systems at a high level of abstraction, without concern for the details of their implementation. This reduces the likelihood of errors, speeds up the design and implementation process, and allows for the creation of reusable, platform-independent application models.

Explain why professional software that is developed for a customer is not simply the programs that have been developed and delivered.

Because a software requires the compilation of documentation, support websites, design, evolution, requirements, etc to help make the software system functional and complete. Its not just the program. Software is a continuous process of developing and updating, so you will never simply code and be done.

Briefly discuss why it is usually cheaper in the long run to use software engineering methods and techniques for software systems.

Because failure to use SE methods require a higher cost of testing, quality assurance, and long term maintenance in the long run.

Consider the integration and configuration process model shown in Figure 2.3. Explain why it is essential to repeat the requirements engineering activity in the process.

Because once new software has been discovered that correlates to the system being developed, the new software must be adjusted to meet the requirements of the given program to be able to integrate correctly.

Explain why the fundamental software engineering principles of process, dependability, requirements management, and reuse are relevant to all types of software system.

Because these concepts are all integral in SE and software development in general. All systems need to be dependable, manage user/stakeholder requirements, and allow reuse because it reduces cost and creates a greater customer satisfaction.

Suggest why it is important to make a distinction between developing the user requirements and developing system requirements in the requirements engineering process.

Because user requirements are more customer focused, wanting to see the requirements for the customers well being, and system requirements are more the functionality needed to be provided to satisfy. System requirements can only be implemented after the user requirements are finalized.

What are five things you can do to make project-related email communications more effective? (from Syllabus)

Check your @uoregon.edu email account daily. Send all course-related emails from your UO email account, it also helps with differing it from spam email. If necessary, you can forward your email. Configure your email client so that your first and last name appear in the "From:" header. Send an email to yourself and make sure your full name (such as "Anthony Hornof") appears in the "From:" header. In the subject line of your emails, include "422" or "522" and describe the topic in a few words.

Explain how developing a software architecture can assist with stakeholder communication, system analysis, and large-scale reuse.

Communication - Architecture is a high level presentation of the system which can be used as a point of discussion for stakeholders. System analysis - Making system architecture explicit at an early stage can have an effect and help with if the system can meet critical requirements. Large scale reuse - Because architecture is a compact and manageable description of organization, the system architecture is often the same for other systems with similar requirements and can be reused.

What are the major building blocks of a software architecture? In other words, what do you get to work with when designing the architecture? For example: In general, this is not the time to describe specific sorting algorithms that will be used.

Components and subcomponents, these can be things such as project repository, python editor, UML editor. Larger building materials/ideas.

What is software?

Computer programs and associated documentation, libraries, support websites, and configuration data that are needed to make these programs useful

What is the ConOps? Explain its purpose. Who should it be written for?

ConOps is the concept of operation. It describes system characteristics for a proposed system the user's input. The services the system is expected to provide to users, and the constraints under which the system must operate. It is written for the Stakeholders of the system.

What do we call standards of acceptable behavior that are not required by laws but by the more tenuous notion of professional responsibility? Provide some examples of standards. (Section 1.2)

Confidentiality. Competence. Intellectual property rights.

Define coupling and cohesion, and explain what kinds of coupling and cohesion are desirable in a software design

Coupling: A measure of the strength or number of inter-module connections. In software design, the type of coupling that is desirable is loose coupling, or not a strong dependence between modules. You don't want one change in a module to affect other modules greatly because of tight coupling. Cohesion: A measure of similarity, or mutual affinity, of the components within a module. In software design, the type of cohesion that is desirable is strong cohesion, or similar components are paired together within a module.

What is a specific real world example of data abstraction? procedural abstraction?

Data abstraction: In a library, organizing sections of books into sections like "history", "culture", "fiction", etc.. Procedural abstraction: In a library, organizing services into larger ideas like "processing", "book retrieval", "shelving".

What are some attributes of good software?

Deliver the required functionality and performance to the user Be maintainable, dependable and useable

What are four different kinds of comments that you can add to your code? (How to Comment Your Code)

Header information at the top of the file that describes what the file is. A comment for every variable and constant that gets declared and assigned. A narrative of how the code works (explaining blocks, conditional statements). Formatting comments that organize the code and make it easier to read

Given a problem statement, where would you start to figure out what classes to include in your system, and where would you start to figure out what methods to include in your system?

In the designing process, when making UML diagrams and architecture of the program, its a good place to figure out what classes to include. The included methods can be after deciding the designs/UML designs and before beginning development.

Which software process mode—waterfall or incremental—is most appropriate for agile software development?

Incremental

Which of the three models discussed in Question 1 would particularly appropriate (or inappropriate) for developing each of the following systems. Why would the model you identify be particularly appropriate (or inappropriate)? • The software for the central computer of a of a typical car (not a self-driving car). • A system that would permit people who live in retirement communities to more closely track their finances. • A system to integrate satellite data to monitor activities that contribute to global climate change. • A smartphone app that uses a new technique to reward users for leaving their phones turned off.

Integration and configuration(appropriate), incremental development(appropriate), waterfall model(appropriate), integration and configuration (innapropriate)

Explain why software testing should always be an incremental, staged activity. Are programmers the best people to test the programs that they have developed?

It should be incremental because the user and stakeholders needs come first, as those are who the system is for and its important to see if it satisfies requirements or if new requirements need to be adjusted. Programmers are no the best people to test the programs because they are usually not the stakeholders and will not use the system.

Describe a software design pattern that is not model-view-controller.

Layered architecture pattern: software design pattern that organizes the system into layers, with related functionality in each layer, each layer communicating with adjacent layers. Lowest level layers are core services required by all of the system.

For system X (where X is some system specified in the question), identify a software quality (from a list of software qualities provided) and a software architecture design decision that would contribute to that quality being achieved, and why it would contribute.

Maintainability - By creating large components from a system for easier understandability, the program also becomes easier to maintain because of the increased comprehension.

What can you do in a technical document, or a source code file, to answer the question "What is this thing?" for someone who encounters this thing for the first time?

Make sure you define acronyms in parentheses the first time you use them, and for new words or terms, define them the first time they appear WITHOUT using the word that you are defining.

What is the difference between a milestone and a deliverable?

Milestones are distinctly identifiable points in the project timeline. Deliverables are well-defined physical or digital objects that are handed over from one stakeholder to another. Every deliverable can be a milestone, but every milestone does not necessarily have a deliverable associated with it.

What is modular design? What are some of the benefits of modular design?

Modular design is a design principle that subdivides a system into smaller parts called modules, which can be independently created, modified, replaced, or exchanged with other modules or between different systems. Some benefits are that development times should be shortened, possible to make drastic changes/product changes, it is more comprehensible.

When reading a chapter in a textbook, should you generally start at the beginning of the chapter and read every word in the order they appear in the book? Explain.

No you shouldn't, you should use a reading process like SQ3R to read the material, which entails reading the topic sentences, writing questions that you gather and answering those questions by searching for answers in the writing.

What are some examples of descriptive and non-descriptive names for components? Which is better? Why?

Non descriptive names are names such as: "User Interface", "Model", "View", "Controller", "Database". Descriptive names are such as "Instructor Interface", "Student Interface", "Roster" You want to have descriptive names for each component, because they need to convey the module's role in this project, not the role in a generic software design.

Explain the benefits of object-oriented design and programming in the context of the benefits of modular programming.

Object oriented design/programming directly relates to modular programming, because object oriented means that code and ideas are being modularized into sections that interact with each other. If one wishes to use modular programming, object oriented programming/design is a great choice for this reason.

What is a PERT chart and what is a Gantt chart? What is the purpose of each? For what sort of information is each one better suited?

PERT(process evaluation and review technique) chart - is a project planning methodology to show the necessary steps of development of a project. Each activity gets a box, lines indicate necessary completion order. PERT charts emphasize the critical path (the sequence of activities in a project such that if any of these activities were delayed the entire project would be delayed). Gantt chart - is a project planning methodology to show the timeline of events that need to happen for project completion, and emphasize task duration, start/end dates, and task overlap. Large, prominent tasks that need to be completed on a critical path are better suited for PERT charts, and projects with important dates/important dates and scheduling are better suited for Gantt charts.

Similar to the previous question: Explain a specific software architecture design decision that could contribute to each of following non-functional system requirements: performance, security, safety, availability, and maintainability. Provide a different design decision for each requirement.

Performance If performance is a critical requirement, the architecture should be designed localized, within a small number of components, with these components deployed on the same computer rather than distributed across the network. This may mean using a few relatively large components. Reduce runtime by reducing component communications. Security If security is a critical requirement, a layered structure for the architecture should be used, with the most critical assets protected in the innermost layers and a high level of security validation applied to these layers. Safety If safety is a critical requirement, the architecture should be designed so that safety related operations are all located in a single component or in a small number of components. This reduces the costs and problems of safety validation and may make it possible to provide related protection systems that can safely shut down the system in the event of failure. Availability If availability is a critical requirement, the architecture should be designed to include redundant components so that it is possible to replace and update components without stopping the system. MaintainabilityIf maintainability is a critical requirement, the system architecture should be designed using small components that have a specific functionality that are self-contained that may readily be changed. Producers of data should be separated from consumers, and shared data structures should be avoided.

Performance and security may pose to be conflicting non-functional requirements when architecting software systems. Make an argument in support of this statement.

Performance is all about having less components, and less connections between those components and a high level of abstraction, and with security it aims for a layered structure, with components only interacting with those adjacent to it, and security only in a small component on the bottom layer. This would mean that there would need to be a good level of connection between components and also the security section would have to be a low level abstraction and be separated from everything else. The checks for security would also need lots of communication between components. Needs to go through multiple layers to process request. This would not be ideal for performance.

Imagine that a government wants a software program that helps to keep track of the utilization of the country's vast mineral resources. Although the requirements put forward by the government were not very clear, a software company was tasked with the development of a prototype. The government found the prototype impressive, and asked it be extended to be the actual system that would be used. Discuss the pros and cons of taking this approach.

Pros: The system was created as a prototype, and checked again with the stakeholders to see if their needs were met. This displays incremental development. Now the developers can analyze their work and make changes according to what is wanted. Cons: Because further deliberation and questions and specifications for requirements were not made before creating the system/prototype, a lot more time will be needed to make the changes rather than knowing beforehand what was wanted. It will be more costly in time and money.

What is SQ3R?

SQ3R (Survey, Question, Read, Recite, Review) is a method of reading that makes writing such as technical writing faster and more comprehensible to read. This method also allows a reader to gather a lot of information on a subject without needing to read the entire piece of writing.

How can a good software architecture make it easier to accomplish each of the following activities: requirements engineering, design, implementation, testing, and maintenance, and project management?

Similar to last question from section above, requirements engineering because you realize the high level aspects of what can be developed and what is needed to solve a problem, design because you can see the best design with the least coupling, implementation testing because you have already modelled how the process will be implemented, etc. Planning beforehand is highly beneficial in creating a more cohesive design process.

What is software architecture? (Don't use the words "software"or "architecture" in your definition.)

Software architecture is the top-level decomposition of programs or systems into its main components, also showing how those components interact with each other. (higher level of abstraction than UML)

What is software engineering? How does it relate to computer science? What are problems that software engineering tries to prevent, and how does it try to prevent them?

Software engineering is a discipline that is concerned with all aspects of software production from initial conception to operation and maintenance. It relates to computer science because computer science covers the programming and theoretical aspects of why a system works. Computer science is necessary for software engineering in order to implement softwares. Software engineering tries to prevent costly, undependable and inefficient systems. It tries to prevent them by developing a plan for a program...

What are some of the eight different types of applications described in Section 1.1.2? Explain the differences among these systems.

Stand Alone Applications - Run on personal computers or devices and include all necessary functionality on the device and run without connection to a network. Interactive Transaction-based Applications - Applications that execute on a remote computer and are accessed by users from their own devices: websites, e-commerce. Embedded Control Systems - Software control systems that control and manage hardware devices. Batch Processing Systems - Business systems that are designated to process data in large batches. Entertainment Systems - Personal use systems to entertain the user. Systems for Modeling and Simulation - Systems to model physical processes or situations for scientists or engineers. Data Collection and Analysis Systems - Systems that collect data from their environment and send information to other systems. Systems of Systems - Systems composed of other software systems.

What is procedural abstraction?

The process or outcome of concentrating on the essential properties of, and ignoring the details of, services or functions. Examples: a read, sort, or compute module.

Explain why software engineering can be thought of as the practice of gaining control over a software development project. Include examples of the entities that need to be controlled, and techniques for controlling each entity.

There are two types of control that software engineering can allow over a project. Intellectual control: making rational choices based on knowing the effects of those choices, such as what language to use. And managerial control: maintaining control of software development resources (time, money, people), such as delivery date times and adding developers.

How were the SRS and SDS templates provided to you in this class created?

These wonderful fantastic amazing templates were created by taking from other templates online, distilling them to the necessary components.

A software designer proposes two possible designs for a system. How can another engineer quantitatively measure, based entirely on an analysis of the design documents, if one design would lead to a more maintainable system than the other design? Assume that there is an established set of modifications that are likely to be made to the system after it is built.

They can view the abstraction, modularity (coupling and cohesion), information hiding, complexity and system structure. They can also review the SDS to see this information and more to see how the design would be profitable or not.

Why should you quiz yourself on material that you are trying to learn?

They may further supplement learning and assessment.

What are the four software engineering fundamentals that apply to all types of systems? (Section 1.1.2)

They should be developed using a managed and understood development process. Dependability and performance. Understanding and managing the software specification and requirements. Manage expectations, deliverables. Make effective use of existing resources.

What is the purpose of each essential type of UML diagram in the context of design and analysis

To show different perspectives of a system. An external perspective, showing the context or environment of the system. An interaction perspective, showing the exchanges between a system and its environment, or between the components of a system. A structural perspective, showing the organization of a system or of the data processed by the system. A behavioral perspective, showing the dynamic occurrences of the system and how it responds to events.

What is UML?

UML (Unified Modeling Language) is a set of 13 different diagram types that may be used to display software systems. THe UML is universally accepted as the standard approach for developing displays of software systems. Documenting the artifacts of software systems.

What is the difference between user documentation and programmer's documentation? How should each be organized?

User documentation: How to accomplish real-world tasks using the software. This includes how to install and set up the system. This should be organized in a pdf showing a step by step process and should be clear, accurate, well-written, well-organized, and complete. Programmer documentation: The human-readable text that a programmer or human-installer would use to understand how to install the software software dependencies required versions of components how source code files relate to each other the purpose and inner workings of each source code file, function, if-then statement, and loop each line of source code the purpose, scope, and lifetime of each variable. This should be organized by documents that are separate from the code as well as comments within the code.

What are two views of the system that are often included when describing a software architecture?

Views of the system for software architecture (any two): A logical view, process view, development view, physical view.

In general, in technical writing, how should each paragraph start?

With a topic sentence.

How can you contribute to the maintainability of a software system that you are building?

Write software in a way that it can evolve to meet the changing needs of customers.

Incremental software development could be very effectively used for customers who do not have a clear idea about the systems needed for their operations. Discuss.

Wrong, it would not be effective. Incremental development creates a system with strong consecutive order. Once the requirements analysis is done, it will go to the other steps of development without visiting it again until the project is done and needs maintenance. This would be costly.

What is the purpose of software architecture?

You can see components and how they interact with each other. It can improve communication among stakeholders, captures design decisions, and make information transferable. It encourages discussions about system design and serves as a way for documenting an architecture that has been designed.

When describing a system, explain why you may have to start the design of the system architecture before the requirements specification is complete.

You may have to design the system architecture before the requirements specification is complete because the architecture has a significant impact on the non-functional requirements and can also influence the functional requirements as well. Stakeholders can view architecture and determine requirements.

Explain how an architectural model can be used either (a) as a way of encouraging discussions about the system design or (b) as a way of documenting an architecture that has been designed. Explain how these two uses are somewhat at odds with each other.

a) A high-level architectural view of a system is useful for communication with system stakeholders and project planning because it is not cluttered with detail. b) The argument for such a model is that such a detailed architectural description makes it easier to understand and evolve the system. These two are somewhat at odds with each other because one requires a more simple system (encouraging discussions) because it will be easier for stakeholders to understand, and the other requires a more detailed system because it is easier to understand and evolve for a programmer.

How can each of the following two factors contribute to major software failures?a. Increased system complexity.b. Failure to use software engineering methods.

a. Increased system complexity. New software engineering techniques means a need for systems to be larger and more complex and be delivered and developed at a quicker rate. New techniques for software engineering need to be developed. b. Failure to use software engineering methods. Because programs can be written without considering or using software engineering methods, software can become more expensive and less reliable than it should be.

What are the steps in software development (software engineering life cycle)

project start -> requirements analysis -> design -> implementation -> testing -> maintenance -> project completion, at the same time: project start -> project management -> completion

explain these terms: software architecture, Module, software interface, design rationale

software architecture - how the system is decomposed into parts, and the relationships among those parts. Components in a list, functionality of each component, how modules interact with each other, rationale for architectural design. Module - A separable piece of software that is a part of the entire computer system, such as a "student records" module. software interface - Inputs into and outputs from the software system. Physical output. A software interface specification describes precisely how one part of a program interacts with another, description of services such as public methods in a class, or getters and setters. design rationale - The reason that each module (and the architecture) is designed as it is. May include: design issues raised and addressed in response to design concerns; design options considered; trade-offs evaluated; decisions made; criteria used to guide design decisions; and arguments and justifications made to reach decisions.

What are software design patterns? Give an example of one.

solutions to recurring problems in computer programming, usually object-oriented computer programming. Example: MVC (model viewer controller) architecture

What is the critical path?

the sequence of activities in a project such that if any of these activities were delayed the entire project would be delayed

what is slippage

the time a project/task is late compared to its original deadline

slack time

the time a task can be delayed without delaying the project

Explain the function of these SRS/SDS concepts:user classes, use cases, modes of operation, Requirement, functional requirement, non-functional requirement

user classes: This section provides a brief description of each user class (user class: group of people that will interact with the system in a roughly similar manner- students, instructors, admins etc.). "Factors that distinguish a user class include common responsibilities, skill levels, work activities, and modes of interaction with the system." use cases: Step-by-step description of how the proposed system should operate and interact with its users and its external interfaces under a given set of circumstances. Scenarios should be described in a manner that will allow readers to walk through them and gain an understanding of how all the various parts of the proposed system function and interact. modes of operation - Describes the various modes of operation for the proposed system. For example, there could be a different mode for each of the following: user, administrator, normal usage, backup, degraded, maintenance, training, student, instructor. All modes that apply to all user classes are included in SRS. Requirement: - A requirement is a description of a behavior or property that a computer program must have, independent of how that behavior or property is achieved. Requirements must be complete, unambiguous, consistent, and objectively verifiable. Requirements describe what the system will do, but no specific design details of how it'll be done. Organized in a document by hierarchy. functional requirement: describing services provided by the system non-functional requirement - describing constraints on the system and its development

Using an example, explain why the design activities of architectural design, database design, interface design, and component design are interdependent.

*answer*

Chapter 2 discusses three different software development lifecycle models. They are: (a) the waterfall model, (b) incremental development, and (c) integration and configuration. *draw them*

*draw them* Waterfall model: Takes process activities of specification, development, validation and evolution and represents them as separate process phases. Incremental development: Developing initial implementation, getting feedback from users and others, and evolving software through versions. Integration and configuration: Take already made software, reuse it and modify it and integrate it to fit the system.

Draw an example of each of the five essential UML diagram, explaining what each component represents.

*draw*

Sketch out a class diagram, state diagram, and interaction diagram for an automated teller machine. Provide a key, or annotate each diagram, to explain all information that is conveyed.

*draw*

What is an SRS? What, in your opinion, are some of the most important sections to include in an SRS? Why?

A SRS (Software Requirements Specification) is a document entailing the necessity of the given system and the reasoning behind development and what is necessary for the system to be built according to stakeholders needs. The most important sections are Use cases(explain) and useability requirements.


Related study sets

Complications of pregnancy (infections)/The childbearing family with special needs

View Set

Chapter 10 Homework (Chi Square and measures of Association)

View Set

CSP / ASP - Complete Prep Sets Part 1

View Set

Chapter 13 Stress and Context -> 137C

View Set

Confirming Placement of a Nasogastric Tube

View Set