UOPeople Software Engineering 1 Flashcards
What is software engineering?
Software engineering is a discipline for solving business problems by designing and developing software-based systems. As with any engineering activity, a software engineer starts with problem definition and applies tools of the trade to
obtain a problem solution.
The purpose of software engineering is to develop software-based systems that let customers
achieve business goals
Why is SE difficult?
Expertise
If you are a civil engineer building bridges then all you need to know is about bridges. Unlike
this, if you are developing software you need to know about software domain (because that is
what you are building) and you need to know about the problem domain (because that is what
you are building a solution for).
formality
A further problem is that software is a formal domain, where the inputs and goal states are well defined. Unlike software, the real world is informal with ill-defined inputs and goal states.
Change
software engineering is primarily about modeling the physical world by finding good abstractions, but the complexity of the physical world, being infinitely complex, cannot be captured in its entirety by our abstractions, therefore our abstractions are only approximations of the physical world.
The informal domain of reality tends to increase disorder. Whatever order was captured by our abstractions, tends to get dispersed into disorder. Our (approximate) abstractions necessarily become invalid with passing time and we need to start afresh.
What are the most basic steps of the SE process?
Plan
Design
Implement
Evaluate
Waterfall process
Requirements Design Implementation Testing Operation and Maintainance
SLDC: Waterfall
Requirements Design Implementation Testing Operation and Maintainance
Advantages and disadvantages of the waterfall approach?
Advantages
.
There is a psychological attraction to the waterfall model: it is a linear process that leads to a
conclusion by following a defined sequence of steps
Disadvantages
Given that Software design is unlike the design and development of other products, a process that follows a linear order of understanding the problem, designing a solution, implementing and deploying the solution, does not produce best results.
Difference between Software and other types of products?
Unlike most other products, software is intangible and hard to visualize. Most people experience software through what it does: what inputs it takes and what it generates as
outputs
Software is probably the most complex artifact—a large software product consists of so many bits and pieces as well as their relationships, every single one having an important role—one flipped bit can change the entire sense of a program
Software is probably the most flexible artifact—it can be easily and radically modified at any stage of the development process, so it can quickly respond to changes in customer requirements (or, at least it is so perceived)
Architecture: Client/Server
Segregates the system into two applications, where the client makes requests to the server. In many cases, the server is a database with application logic represented as stored procedures.
Architecture: Component-Based Architecture
Decomposes application design into reusable functional or logical components that expose well-defined communication interfaces.
Architecture: Domain-Driven Design
An object-oriented architectural style focused on modeling a business domain and defining business objects based on entities within the business domain.
Architecture: Layered Architecture
Partitions the concerns of the application into stacked groups (layers).
Architecture: Message Bus
An architecture style that prescribes the use of a software system that can receive and send messages using one or more communication channels, so that applications can interact without needing to know specific details about each other.
Architecture: N-Tier / 3 - Tier
Segregates functionality into separate segments in much the same way as the layered style, but with each segment being a tier located on a physically separate computer.
Architecture: Object-Orientated
A design paradigm based on division of responsibilities for an application or system into individual reusable and self-sufficient objects, each containing the data and the behavior relevant to the object.
Service-Oriented Architecture
Refers to applications that expose and consume functionality as a service using contracts and messages.
What is the simplest form of a Client/Server Architectural Style?
The simplest form of client/server system involves a server application that is accessed directly by multiple clients, referred to as a 2-Tier architectural style.
Common variations of a Client/Server architectural style
Client-Queue-Client systems. This approach allows clients to communicate with other clients through a server-based queue. Clients can read data from and send data to a server that acts simply as a queue to store the data. This allows clients to distribute and synchronize files and information. This is sometimes known as a passive queue architecture.
Peer-to-Peer (P2P) applications. Developed from the Client-Queue-Client style, the P2P style allows the client and server to swap their roles in order to distribute and synchronize files and information across multiple clients. It extends the client/server style through multiple responses to requests, shared data, resource discovery, and resilience to removal of peers.
Application servers. A specialized architectural style where the server hosts and executes applications and services that a thin client accesses through a browser or specialized client installed software. An example is a client executing an application that runs on the server
Main benefits of the client/server architectural style
Higher security. All data is stored on the server, which generally offers greater control of security than client machines.
Centralized data access. Because data is stored only on the server, access and updates to the data are far easier to administer than in other architectural styles.
Ease of maintenance. The roles and responsibilities of a computing system are distributed among several servers that are known to each other through a network. This ensures that a client remains unaware and unaffected by a server repair, upgrade, or relocation.