Week 1 Flashcards
basic definition of software design
3 things
Software design involves problem solving and planning a software solution.
Include:
-> low level component
-> algorithm design
above two is like data structurers and actual coding
-> high level architectural design
overall overview of the system and how data flow and system communicate.
5 common aspects in software design
Requirements gathering
Object-oriented design
Design patterns
Architectural patterns
Testing
what is meant by requirement gathering
Understanding and documenting what the software should do by collecting functional and non functional requirement from stakeholders
what is object oriented design
OOD is designing software using principles like encapsulation, inheritance, polymorphism to create reusable and independent components
what are design patterns
reusable solutions to common design problems. helps improve code maintainability and scalability.
what are architectural patterns
High level design structures like MVC (model view controller) or microservices.
They define how different components of a system interact and organize the overall structure
Testing?
ensuring software meets its requirements.
unit testing, PENETRATION
tf do software engineers do vs programmer
their have to understand how the system-to-be needs to interact with user and environment and then design the software-to-be.
programmer implements the software designer’s design
best strategy to solve problems
divide and conquer
done by identifying logical parts of the system that each solves a part of the problem
Need help of domain expert who already how tf the shit work to help us model the problem domain
3 parts in a problem domain
actors
concepts / objects
user stories
what are actors
agents external to the system that interact with it
ATM: customer, actual ATM and datacentre
(easily identifiable)
what are concepts
Agents working inside the system for it function
ATM: bookkeeper, safe keeper, dispenser etc
(harder to identify)
What are user stories
possible user scenarios for the system
3 main software design methodologies
Waterfall
Iterative and incremental
Agile
basic definition for waterfall
Sequential process, one phase after the other and unidirectional
water fall pros
simple to design
easy to manage
waterfall cons
Working product at the very end
hard to revise, cant change after planning
high risk and high uncertainty
no feedback
not good for large systems
basic definition for Iterative and Incremental
Create a MVP ( min viable product) and then incrementally add to it. keep repeating till done
Iterative and Incremental pros
get a MVP out sooner
feedback after every iteration
can accommodate requirement changes
work in order of priority
Iterative and Incremental cons
harder to manage
defining increments is difficult and every increment must work with future increments so BIG planning.
basic definition for Agile
builds on iterative and incremental but increments are defined by time.
focuses more on immediate requirements and colllaborations so less planning
Agile pros
frequent releases
constant feedback
able to accommodate changing requirements
Agile cons
difficult to constantly meet customer
needs more discipline to meet time goals
time estimation needs to be good
3 roles involved in the scrum
Development team
product owner
scrum Master
5 Scrum ceremonies
Sprint Planning
Daily Scrum
Sprint Review
Sprint Retrospective
Backlog Refinement
- Sprint planning
Product backlogs - list of requirements (user stories)
dev team and product owner pull these backlog items into the sprint to break it down into tasks, give time frames and prisonisations between these items
- Daily scrum
quick meeting everyday to get everyone on board, creating plan for the day and keeping check everyone is doing what is meant to be done and any issues
- Backlog refinement
refine the backlog
break down items into small tasks
reassess priorities and adjust estimations
- Sprint review
meet owner
live demo of current version
they say which backlog items are done
code is completed and deployed and tested
- Sprint retrospective
reflect on last sprint
what went good and what went bad.