Midterm

Lakukan tugas rumah & ujian kamu dengan baik sekarang menggunakan Quizwiz!

What is a component?

A collection of things that go together. an element that implements a coherent set of functionality or features. (4 - 5) Ex:Inventory module component, database component, file component

What is a software feature? Give an example or 2

A fragment of functionality such as a 'print' feature, a 'change background feature', a 'new document' feature and so on. The feature list should be your starting point for product design and development

Scenarios and the types of info that are in them

A narrative that describes how a user, or a group of users, might use your system simply a description of a situation where a user is using your product's features to do something that they want to do: Scenario Name Overall objective What's involved in reaching the objective Personas of actors involved in the scenarios Problem that can't be addressed by existing system Possible ways that the problem can be tackled

What is Scrum? What are its specific terms?

An agile method that focuses on agile planning and management. Unlike XP, it does not define the engineering practices to be used. The development team may use any technical practices that they believe are appropriate for the product being developed. Specific terms: Product The software product that is being developed by the Scrum team. Product Owner A team member who is responsible for identifying product features and attributes. The Product Owner reviews work done and helps to test the product. Product backlog A to-do list of items such as bugs, features, and product improvements that the Scrum team has not yet completed. Development team A small self-organizing team of five to eight people who are responsible for developing the product. Sprint A short period, typically two to four weeks, when a product increment is developed. Scrum A daily team meeting where progress is reviewed and work to be done that day is discussed and agreed. ScrumMaster A team coach who guides the team in the effective use of Scrum. Potentially shippable product increment The output of a sprint that is of high enough quality to be deployed for customer use. Velocity An estimate of how much work a team can do in a single sprint.

What is Extreme Programming? What are its widely adopted practices?

An influential agile method that introduced agile development practices such as Incremental planning/user stories, small releases, test-first development, continuous integration, and refactoring. These are now mainstream software development activities. widely adopted practices: Incremental planning, Continuous integration,Test-first development, Refactoring, Small releases

What are the elements of a User Story

As a <role>, I <want|need> to <do something>. As a teacher, I want to tell all members of my group when new information is available. As a <role>, I <want | need> to <do something> so that <reason>.

Software Product Management

Business activity that focuses on the software products developed and sold by the business. Product manager:planing, developing, and marketing. They are the interface between customer experience, business goal, technical constrains Technical Interactions: Product Vision Management: Involves assessing and evaluation proposed changes against the product vision. Product Roadmap Development: A plan for development, release, and marketing of the software. User Story and Scenario Development: Used to refine a product vision and identify product features. Product Backlog creation and management: A prioritized 'to-do' list of what has to be developed. Acceptance testing: The process of verifying that a software release meets the goals set out in the product roadmap and that the product is efficient and reliable. Customer testing: Involves taking a release of a product to customers and getting feedback on the product's features, usability and business. User Interface design: PM's should evaluate user interface features as they are developed to check that these features are not unnecessarily complex or force users to work in an unnatural way.

What are cross-cutting concerns?

Concerns that are systemic, meaning they affect the whole system " all layers " Different from the functional concerns represented by layers in a software architecture The existence of cross-cutting concerns is the reason why modifying a system after it has been designed to improve its security is often difficult. Something that supposes to go together but it didn't.

What is Docker and its specific terms?

Containers were developed by Google around 2007 but containers became a mainstream technology around 2015. An open-source project called Docker provided a standard means of container management that is fast and easy to use. Docker is a container management system that allows users to define the software to be included in a container as a Docker image. It also includes a run-time system that can create and manage containers using these Docker image

What is the cloud and its benefits?

Cost: You avoid the initial capital costs of hardware procurement. Startup time: You don't have to wait for hardware to be delivered before you can start work. Using the cloud, you can have servers up and running in a few minutes. Server choice: If you find that the servers you are renting are not powerful enough, you can upgrade to more powerful systems. You can add servers for short-term requirements, such as load testing. Distributed development: If you have a distributed development team, working from different locations, all team members have the same development environment and can seamlessly share all information.

What are the architectural technology choices?

Database Should you use a relational SQL database or an unstructured NoSQL database? There are two kinds of database that are now commonly used: Relational databases, where the data is organised into structured tables NoSQL databases, in which the data has a more flexible, user-defined organization. Relational databases, such as MySQL, are particularly suitable for situations where you need transaction management and the data structures are predictable and fairly simple. NoSQL databases, such as MongoDB, are more flexible and potentially more efficient than relational databases for data analysis. NoSQL databases allow data to be organized hierarchically rather than as flat tables and this allows for more efficient concurrent processing of 'big data'. Platform Should you deliver your product on a mobile app and/or a web platform? Mobile issues: - Power management Mobile battery life is limited so you should try to minimize the power used by your application. - On-screen keyboard On-screen keyboards are slow and error-prone. You should minimize input using the screen keyboard to reduce user frustration. To deal with these differences, you usually need separate browser-based and mobile versions of your product front-end. - You may need a completely different decomposition architecture in these different versions to ensure that performance and other characteristics are maintained. Server: Should you use dedicated in-house servers or design your system to run on a public cloud? If a public cloud, should you use Amazon, Google, Microsoft, or some other option? A key decision that you have to make is whether to design your system to run on customer servers or to run on the cloud. If you have chosen to run your software on the cloud you have to choose which cloud provider to choose. For business products, it is a more difficult decision. Some businesses are concerned about cloud security and prefer to run their systems on in-house servers. They may have a predictable pattern of system usage so there is less need to design your system to cope with large changes in demand. Open source: Are there suitable open-source components that you could incorporate into your products? Open source software is software that is available freely, which you can change and modify as you wish. - The advantage is that you can reuse rather than implement new software, which reduces development costs and time to market. - The disadvantages of using open-source software is that you are constrained by that software and have no control over its evolution. The decision on the use of open-source software also depends on the availability, maturity and continuing support of open source components. Open source license issues may impose constraints on how you use the software. Your choice of open source software should depend on the type of product that you are developing, your target market and the expertise of your development team. Development tools: Do your development tools embed architectural assumptions about the software being developed that limit your architectural choices? Development technologies, such as a mobile development toolkit or a web application framework, influence the architecture of your software. - These technologies have built-in assumptions about system architectures and you have to conform to these assumptions to use the development system. The development technology that you use may also have an indirect influence on the system architecture. - Developers usually favour architectural choices that use familiar technologies that they understand.For example, if your team have a lot of experience of relational databases, they may argue for this instead of a NoSQL database.

What is a layered architecture?

Each layer is an area of concern and is considered separately from other layers. The top layer is concerned with user interaction, the next layer down with user interface management, the third layer with information retrieval and so on Within each layer, the components are independent and do not overlap in functionality The lower layers include components that provide general functionality so there is no need to replicate this in the components at a higher level. The architectural model is a high-level model that does not include implementation information Ideally, components at level X (say) should only interact with the APIs of the components in level X-1. That is, interactions should be between layers and not across layers.

What are the parts of Moore's Vision Template?

FOR (target customer) WHO (statement of the need or opportunity) The (PRODUCT NAME) is a (product category) THAT (key benefit, compelling reason to buy) UNLIKE (primary competitive alternative) OUR PRODUCT (statement of primary differentiation)

What does Agile mean with respect to Software Engineering?

Focuses on delivering functionality quickly, responding to changing product specifications and minimizing development overheads. Agile based on incremental development (implement more important feature first), delivery

Define microservice and its characteristics (Multiple Choice)

Microservices are small-scale, stateless, services that have a single responsibility. They are combined to create applications They are completely independent with their own database and UI management code Software products that use micro services have a microservices architecture. If you need to create cloud-based software products that are adaptable, scalable and resilient then I recommend that design them around a microservices architecture.

What is the difference between multi-tenant vs. multi-instance?

Multi-tenant: Multiple users share the same resource [LESS EXPENSIVE FOR PEOPLE WHO PROVIDE RESOURCE] - RISK IN SECURITY THO Multi-instance: Multiple users have their own copy ---------------------------------- Multi-tenant and multi-instance systems - In a multi-tenant system, all customers are served by a single instance of the system and a multitenant database. A multi-tenant database is partitioned so that customer companies have their own space and can store and access their own data. - There is a single database schema, defined by the SaaS provider, that is shared by all of the system's users. - Items in the database are tagged with a tenant identifier, representing a company that has stored data in the system. The database access software uses this tenant identifier to provide 'logical isolation', which means that users seem to be working with their own database. In a multi-instance system, a separate copy of the system and database is made available for each user.

Know differences between distribution architectures: multi-tier, service-oriented, and peer-to-peer architectures. NOTE: you will need to investigate peer-to-peer yourself.

Peer-to-peer - denoting or relating to computer networks in which each computer can act as a server for the others, allowing shared access to files and peripherals without the need for a central server. Service-oriented - Services in a service-oriented architecture are stateless components, which means that they can be replicated and can migrate from one computer to another Multi-tier architecture is a client-server architecture in which the functions such as presentation, application processing, and data management are physically separated. ... It provides a model by which developers can create flexible and reusable applications.

Personas and the types of info that are in them

Personas are 'imagined users' where you create a character portrait of a type of user that you think might use your product. Personalization: something about their personal circumstances. It is sometimes helpful to use an appropriate stock photograph to represent the person in the persona Job Related: If your product is targeted at business, you should say something about their job and (if necessary) what that job involves Education: You should describe their educational background and their level of technical skills and experience. This is important, especially for interface design. Relevance: If you can, you should say why they might be interested in using the product and what they might want to do with it.

What are some of the differences between Software Products and Software Projects?

Projects have an end, defined budget, timeline, and scope. Projects are finite with constraints of time and money. Products have a lifespan and act more like a living thing compared to a project. They are measured by how well they can use their resources to increase lifespan, reach, value and effectiveness.

Describe non-functional system quality attributes AND the tension between them

Responsiveness Does the system return results to users in a reasonable time? Reliability Do the system features behave as expected by both developers and users? Availability Can the system deliver its services when requested by users? Security Does the system protect itself and users' data from unauthorized attacks and intrusions? Usability Can system users access the features that they need and use them quickly and without errors? Maintainability Can the system be readily updated and new features added without undue costs? Resilience Can the system continue to deliver user services in the event of partial failure or external attack? Availability vs time to market - Availability is particularly important in enterprise products, such as products for the finance industry, where 24/7 operation is expected. - The availability of a system is a measure of the amount of 'uptime' of that system. - Architecturally, you achieve availability by having redundant components in a system. - To make use of redundancy, you include sensor components that detect failure, and switching components that switch operation to a redundant component when a failure is detected. - Implementing extra components takes time and increases the cost of system development. It adds complexity to the system and therefore increases the chances of introducing bugs and vulnerabilities.

Define scalability, elasticity, and resilience

Scalability:[maintain performance as load increase] reflects the ability of your software to cope with increasing numbers of users Elasticity: [adapt the server configuration to changing demands] related to scalability but also allows for scaling-down as well as scaling up. You can monitor the demand on your application and add or remove servers dynamically as the number of users change Resilience: [maintain service in the event of server failure] means that you can design your software architecture to tolerate server failures. Ex: making several copies of your software concurrently available. If one fails, the others continue to provide a service.

Computer Science

Science that deals with the theory and methods of processing information in digital computers, the design of computer hardware and software, and the applications of computers. Software Engineering uses the products of computer science as tools to build software (to solve higher-level problems)

What is Saas?

Software as a service (SaaS) - Your software product runs on the cloud and is accessed by users through a web browser or mobile app. Increasingly, software products are being delivered as a service, rather than installed on the buyer's computers. If you deliver your software product as a service, you run the software on your servers, which you may rent from a cloud provider. Customers don't have to install software and they access the remote system through a web browser or dedicated mobile app. The payment model for software as a service is usually a subscription model. - Users pay a monthly fee to use the software rather than buy it outright.

What are Software Products?

Software products are generic software systems that provide functionality that is useful to a range of customers. Many different types of products are available from large scale business systems (e.g. MS Excel) through personal products (e.g. Evernote) to simple mobile phone apps and games (e.g. Suduko). Software product engineering methods and techniques have evolved from software engineering techniques that support the development of one-off, custom software systems. Custom software systems are still important for large businesses, government and public bodies. They are developed in dedicated software projects.

Product Vision

The starting point for software product development is a 'product vision'. Product visions are simple statements that define the essence of the product to be developed. The product vision should answer three fundamental questions: - What is the product to be developed? - Who are the target customers and users? - Why should customers buy this product?

Define software architecture and why is it important?

To create a reliable, secure and efficient product, you need to pay attention to architectural design which includes Its overall organization How the software is decomposed into components The server organization The technologies that you use to build the software. The architecture of a software product affects its performance, usability, security, reliability and maintainability. IEEE Definition: Architecture is the fundamental organization of a software system embodied in its components, their relationships to each other and to the environment, and the principles guiding its design and evolution.

How do Agile software engineering methods compare to non-agile methods, e.g., waterfall?

Waterfall - very rigid, step by step process. Complete Step 1 before moving on to Step 2. Does not adapt to changes in requirements very well. A → B → C → D → End Product

Security vs usability

You can achieve security by designing the system protection as a series of layers. A layered approach to security affects the usability of the software. - Users have to remember information, like passwords, that is needed to penetrate a security layer. Their interaction with the system is inevitably slowed down by its security features. - Many users find this irritating and often look for workarounds so that they do not have to re-authenticate to access system features or data.

Performance vs maintainability

You improve maintainability by building a system from small self-contained parts, each of which can be replaced or enhanced if changes are required. This means that the system should be decomposed into fine-grain components, each of which does one thing and one thing only. - However, it takes time for components to communicate with each other. Consequently, if many components are involved in implementing a product feature, the software will be slower.

What is software engineering?

the use of tools, techniques, procedures, and paradigms to enhance the quality of software products. IEEE definition: The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. Systematic: having and following a plan Disciplined: controlled, next step happens as a deliberate consequence of previous step Quantifiable: measurable (for estimating, progress checking, correctness, etc.)


Set pelajaran terkait

Money and Banking, Chapter 9, Part 3

View Set

Out of Many, One: Rhetoric in The Gettysburg Address and "O Captain! My Captain!"

View Set

Strawser PreCalc Ch 4.4-4.6 practice questions

View Set

F420 Chapter 14 Bond Prices and Yields

View Set