Software Development Process Flashcards
3 Main Areas of Software Engineering
Software Development
Software Maintenance
Software Management
What does software development entail?
Following all phases of the software lifecycle
What does software maintenance involve?
Incorporating changes into an existing system
What does software management include?
Estimating development costs, scheduling, and planning development tasks
What are two goals of software engineering?
- Dealing with the large size & complexity of software systems
- Producing high-quality software that satisfies quality requirements
What are the 3 main categories of software systems?
Application Software
System Software
Software Tools
What is application software? (Definition)
Programs developed to solve a specific problem for a specific client
What is system software? (Definition)
Software that controls the communication between hardware and programs (operating software) or establishes communication between devices (networking software)
What are some examples of types of application software?
Scheduling, e-commerce, communication
What is an example of software tools?
Data management systems
What are the 4 categories of application software?
Critical
Distributed
Real-time
Dynamic
What are safety-critical systems?
Critical software that can have a catastrophic impact on human lives, the environment, or the economy.
What are distributed systems?
Software components deployed on several hardware devices.
What is a real-time system?
Systems that respond in time to events.
What is a dynamic software system?
Systems where the configuration or architecture changes during runtime.
What organizations provide a code of ethics for software development?
ACM (Association for Computing Machinery)
IEEE (Institute of Electrical and Electronics Engineers)
What are the 7 points of the code of ethics for software development?
Public Interest
Client & Employer
Product Quality
Integrity of Software Developers
Integrity of Managers
Integrity of the Profession
Supporting Colleagues
What are the 5 phases of the software development life cycle?
Feasibility Study > Analysis > Design > Implementation > Testing
What is the software feasibility study?
Determining whether to proceed with a software proposal.
What is software analysis?
Describing the problem requirements in terms of functional and quality requirements.
What is software design?
Developing a high-level solution to the problem requirements, aka software modelling.
What is software implementation?
Actualize the solution using programming languages and environments.
What is software testing?
Checking if the problem is solved and verifying quality requirements.
What does software maintenance include?
Improving, extending, or adapting existing software.
What are the 3 tasks of an economic feasibility study?
- Determine the benefit of a new product
- Estimate the total cost of development
- Weigh the cost against the benefit
What are the 3 tasks of the software analysis phase?
- Requirements Elicitation
- Requirements Specification
- Requirements Validation
What are the two types of requirements?
- Functional - functions or services an application offers
- Quality - security, scalability, and robustness
What does viewing the software as a “black box” mean in the analysis phase?
Focusing on the external behaviour and interactions with the environment.
What are some ways used to specify functional requirements?
Data Flow Diagrams
Use Case Scenarios
Finite State Machines (FSM)
Formal Methods
What is the focus of the software design phase?
The internal structure and behaviour of the software.
What are the two phases of software design?
- High-level design (top-level software architecture)
- Detailed design (refining architecture into models)
What is software architecture?
The organization of the software system into main components and their interfaces.
What is the goal of software architecture?
Constructing a solution that satisfies functional and quality requirements (e.g. maintainability)
What are architectural styles?
Patterns like MVC or n-layer that define rules of interaction between components.
What is detailed design?
Refining each component of the software architecture into sub-components until reaching modules.
What are design patterns?
Templates describing well-known design problems and general solutions.
What happens after the software design phase?
The solution is implemented using programming languages, software environments, and tools.
What are some examples of programming paradigms?
Multi-threaded programming and object-oriented programming
What is the software testing phase?
Evaluating each software quality by defining test cases.
What are the 3 types of software testing?
- Unit testing (single component)
- Integration testing (interaction between components)
- System testing (entire application)
Why is software testing an expensive phase?
Evaluating many quality requirements and modifying the program when errors are found
What are the 5 types of software maintenance?
- Corrective (fixing bugs)
- Perfective (improving quality)
- Adaptive (adopting new technologies)
- Preventative (updating documentation)
- Enhancing (including new functional requirements)
Why is software maintenance challenging?
Changes can break existing functionality and quality.
What UML diagrams are used in functional requirements specification?
Use Case & Activity Diagrams
What UML diagrams are used in the software design phase?
Class diagrams
What UML diagrams are used in the software implementation phase?
Component diagrams
What are the main concepts in a use case diagram?
Actor, use case, and association
What are the main concepts in an activity diagram?
Activity state, action flow, and decision node
What are the main concepts in a class diagram?
Classes & relationships (inheritance, association, aggregation, composition, dependency)
What are the main concepts in a component diagram?
Software components (files) and dependencies between them.
What are the main concepts in a deployment diagram?
Nodes (hardware) and associations (network protocols).
What are heavyweight process models?
Models with comprehensive planning, extensive documentation, and detailed design (e.g. waterfall, v-model)
What are lightweight process models?
Models with short planning cycles, minimal documentation, and code-oriented approaches (e.g. prototyping, spiral, agile)