1/78
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced |
---|
No study sessions yet.
Software design is
The construction of abstractions of data and computtion and the organisation of these abstractions into a working software application.
The most common causes for failure are? (list)
Unrealistic / unarticulated projects
Badly defined requirements
Poor reporting of project status
Poor communication
Sloppy development practices
Better software design includes… (list)
Making code more readable and comprehensible
Applying design principles, such as testing and input checks
Structuring software along comprehensible and reusable abstractions
Better software desing is used to.. (list)
Prevent bugs and misuse proactively
Improve maintainability and quality
Detect and resolve problems easier
The waterfall process is.. (list)
The traditional engineering perspective
Feasible for clear / static requirements
Clear phase distinction is not realistic (but good for documentation)
The v-model is.. (list)
An extension of the waterfall
Focus on testing and validation
Widely used
Pros of the waterfall and v-model
Simple
Specifications / deliverables are fully defined beforehand
Cons of the waterfall and v-model
Assume frozen requirements
Deliver the whole system at once
Fixed linear process
Extensive documentation
The prototyping process is.. (list)
Often integrated in other processes
Develop prototype for feedback
Refine prototype iteratively
Pros of the prototyping model
Identify the problems fast
Faster customer feedback
Gather information about the software
Cons of the prototyping model
Potentially excessive testing of prototypes by customers
Mismatch and changing requirements
Budgeting more challenging
The spiral process is.. (list)
An integration of the waterfall and prototyping process
Emphasis on managing costs and risks
Exact number of loops can vary
Pros of spiral process
Integrate risk management
Considers changes to requirements specifically
Emphasises communication, customer satisfaction and flexibility
Cons of the spiral process
Complex
Expensive / resource intensive
Challenging risk and time management
The 4 core values of established software engineers are
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
The 4 core values of established software engineers have emphasis on.. (list)
Having people with the right competencies work together
Delivering the intended software
Working with the customers to understand / explore their demands
Being flexible to react to changes in the project
Pros of agile development
Flexible
Customer involvement
Continuous delivery
Collaboration
Early / frequent testing
Cons of agile development
Predicatability?
Abandoned documentation?
Lack of planning?
Time and resource demands
Definition of ready
Defines when an item in the Product Backlog is ready to be worked on
Defintion of done
Defines the criteria for an item to be considered complete
The 3 high-level types of requirements
Functional; functionality / behaviour that a system offers.
Quality / non-functional; qualities of the system
Constraint; limits that cannot be changed
What does MoSCoW stand for?
Must have
Should have
Could have
Won’t have
Step by step of documenting requirements
Determine binding using MoSCoW prioritisation method
Determine process and system activity
Determine process and system activity
Determine on what a process is performed (if needed)
Determine when a process is executed (if needed)
What does SMART stend for?
Specific
Measurable
Achievable
Relevant (realistic)
Traceable
What is a use case?
A use case is a description of how a system shall be used or should behabe
What is a model?
A model is an abstract representation of reality. It’s used to describe different properties of a software system
Do’s and do nots for creating an use-case diagram
Do:
Identify actors
Identify use cases
Describe use cases
Don’t
Model processes
Mix abstraction levels
Have dependent use cases
Have redundant use cases
What is a class diagram used for?
A class diagram is used to represent internal design
Do’s for creating a class diagram
Identify classes
Identify attributes
Identify relationships
Define generalisations and abstract classes
Add associations
Do’s for creating an activity diagram
Identify action steps
Identify flow of activities
Place start and end point
Each decision needs a merge, each parallelisation needs a synchronisation
Decision nodes reflect on previous nodes
What are software bugs?
Software bugs are errors in desgin, development or operation causing unexpected behaviour / results
How do software bugs happen?
Programmer creates a defect —> defect causes an infection —> infection propogates —> infection causes failure
What is verification?
Proving that we are building the product right
What is validation?
Prving that we are building the right product
We can improve software quality by… (list)
Properly designing the system
Quality assuring the code
Testing the system
Debugging failures
What components of software quality do we discuss in this course? (list)
Robustness
Exception handling
Unit testing
Test-driven development
Pair programming / code reviews
What is robustness?
Robustness is the ability of a system to cope with errors and erroneous input. It makes developers aware of problematic execution cases and defines where in the code to find the error.
To make code more robust we should add… (list)
Parameters; defintion of the parameters a method receives
Precondition; imposes obligations on the client
Postcondition; must be true after execution
When is a method robust?
A method is robust if it always throws an exception if its precondtions are violated
What do we use exceptions for? (list)
To make a method robust
To avoid encoding onformation in special values
Signal special (erroneous) situations in non-local methods
Ensure that a failure cannot be ignored
For unit testing, each test cases test a unit and… (list)
Has a purpose intent
Controls activation and input
Observes response and output
Decides on pass vs. fail based one expected result
What is a white-box test?
A white-box test tests internal logic so it only considers the code
What is a black-box test?
A black-box test tests intended functionality so it only considers specification and requirements and ignores the code
When using test-driven development the core idea is… (list)
Develop tests for new behaviour first
Develop new code to fulfill tests
Improve code quality
What is pair-programming?
Pair programming is when one programmer and reviewer work at one work station.
What are centralised repositories? (list)
Central server stores all data
Changes are reflected upon sending them to the server
Faster to download if large, but every interaction requires connection
If the central server crashes, the repository history is lost
What are decentralised repositories? (list)
Everyone has their local copy of all data (including history)
Allows to work locally and on independent copies
Working in isolation can also lead to forgetting to update
What is a version control software system?
Verison control systems is software that tracks the changes to a file. It allows to store the different versions in order and to revert a file to an older version. It allows collaboration with others and can (semi-) automatically merge file versions.
What is a change?
A change is a modification to a file
What is a commit?
A commit is a collection of changes submitted to the repository
What is a version?
A version (or revision) is each state of the system after a commit
What is the head?
The head is the most recent commit to a repository (or a branch of it)
What makes a commit message a “good” commit message?
A “good” commit message explains the “why” as well as the “what
What does a repository contain? (list)
Source code
Build files
Documentation
Images and resources
What should a repository not contain? (list)
Object files
Executables
What is a cloning?
Clone is creating a local cop by copying (pulling) the remote.
What is checkout?
Checkout is pulling a specific version of the remote
What is pushing?
Push is sending changes to the remote
When working in teams, what is the ‘main’?
The main is the “one truth”, the actual system and its history. The main should be stable and should compile
What is done with progress (that may not compile)
Progress is put into branches. This allows to work on unrelated features and merge later.
What is a branch?
A branch is a duplicate of the files in a repository.
What can be done with a branch? (list)
Can be developed independently
Used to develop features, fix bugs, or prepare a release
A branch remains within the repository
What is a fork?
A fork (Github) is the same as a branch except it is independent of the repository
When does a conflict happen when merging?
A conflict happens when commits touch the same lines of text or binary files.
What does seperation of concerns / divide and conquer mean?
Seperation of concerns / divide and conquer means dividing the system into smaller units to reduce complexity and improve independence.
What is abstraction?
Abstraction is the hiding and generalising of details to reduce complexity
What do encapsulation, modularity and information hiding do?
They place information into a unit and hide it to prevent unwanted access.
What to do to move to a more modular / encapsulated design. (list)
Try to reduce dependencies between units
Abstract methods by passing variables
Only expose what the method takes as input and should do
What is coupling?
Coupling is a degree of interaction between units
What is cohesion?
Cohesion is a degree to which a unit fulfills one purpose
Reasons for information hiding (list)
Reveal as little information to the outside as needed
Prevent data manipulation
Ensure integrity of the unit
Allow access via a single, controlled interface
Why should we use divide and conquer? (list)
Each unit is easier to understand and analyse
Independent units are easier to maintain, change and reuse
Clearly defined sub-units responsible for external expose
Teams can work in parallel on individual units
Easier to quality assure and test individual units
Enables iterative development and integration
What do we define as a “good” seperation?
A “good” seperation is when a unit solves 1 well-defined problem
What is procedural abstraction?
Procedural abstraction is splitting a problem into smaller ones
What is data abstraction?
Data abstraction is encapsulation and information hiding.
What are abstract data types?
Abstract data types define new abstract type to specify abstract data and operations.
What is enumeration?
Enumeration is a set of fixed values /constants which can be used in swichtes, loops…
What is a record?
A record is desgned to store fixed values and is intended for simple data structures
What are the 5 design principles for object-oriented software?
SOLID
Single responsibility
Open/closed
Liskov substitution
Interface segregation
Dependency inversion