123-software-development Flashcards
algorithm thinking
way of solving problems by producing algorithms.
Algorithm
- Sequence of steps to solve a given problem
- May be constructed to describe the operation of a complete system or a particular part of it.
Methodologies
Collection of defined techniques and sequence of tasks that provides a systematic approach to managing the software development process
Methodology: Waterfall Model
- Linear, sequential, rigid, structured step-by-step approach
- SDLC phases
- Each stage needs to be finished before moving onto the next one.
- Strong emphasis on upfront requirement, gathering and planning.
Pros of Waterfall Methodology:
- Well-defined start and end point with clear identifiable deliverables
Each stage is large and thorough and produces a lot of documentation – serves as a reference and aids in maintaining a clear understanding of the program’s progress - Easy to see if running schedule for time management.
- Simple and clear structure – straight-forward to plan, understand and follow.
- fewer production issues during development due to amount of time invested in user reqs, analysis and design
Cons of Waterfall Methodology:
- High risk
- Very rigid structure: with little scope to go back and make improvements to the program based on client feedback
- Limited user input feedback, only at start and when product nearing competition, so might not meet needs of customer.
- No results until testing phase
- Misunderstanding requirements leads to waste of time + resources.
Inflexibility, changes are difficult to incorporate once a phase is completed – requires additional work and revisiting – delays, costs
Scenarios for Waterfall methodology
- For: Large/complex SDL projects - clear plan from beginning to follow through, upfront planning and a structured approach is crucial
- Large development team – each programmer clear of their defined responsibilities at each stage
- Well-defined stable requirements that is not subject to frequent changes, predictable development process.
- Static, low risk projects – little need for user input and if client has a clear picture of what they want
- Not for: long-term projects as would take too long to get through each stage,
Waterfall process/Software Development Lifecycle (SDLC)
- Requirements - project team works with clients to set
- Analysis: feasibility with what, TELOS constraints
- Design: solution + test plan design
- Development/ Implementation: code written, solution built
- Testing: checking it works as intended w/ test plan and meets reqs
- Deployment: installing system in target environment
- Maintenance: ensuring it continues to function (improvements, patches, updates)
Spiral Model
- iterative incremental approach that focuses building in small cycles, identifying + mitigating risks and getting feedback from client at each step
- elements of both waterfall and prototyping methodologies
-involves series of iterations that follow a spiral path - Produces prototypes (not necessarily a program version) at the end of each cycle of spiral
Advantages of the Spiral model:
- Thorough risk-analysis and mitigation - dealing with risks before any issues occur
- while improving program overtime
- client able to see the product being developed early on
- client feedback: adapts to changes in requirements, client gets involved, ensures it aligns with their expectations
- document-focused
- More flexible than waterfall: sequential but can evaluate and change more easily at end of each section
Disadvantages of the Spiral model:
- Risk management is a highly specialized skill
- Lack of focus on code efficiency.
- High time and costs due to constant prototyping, hiring risk analyst and complex nature of risk analysis
-consequences if risk analyst doesn’t manage risk correctly - Project termination if risks are too high.
- iterative nature is complex to manage – esp for inexperienced teams or projects with many dependencies
scenarios of spiral
- user doesn’t fully understand their requirements upfront/ are unclear and subject to frequent changes e.g startup company new software system – spiral flexibility and continuous refinement
- complex and large-scale projects - risks and uncertainties are high.
- complex: can try out different parts of the system and make improvements along the way
Spiral methodology process
- planning: determine main objectives and requirements, chosen according to the biggest potential risk.
- risk analysis (identifying and solving risks + alternative options are considered, might involve building prototype of system/if risk is too high, project stopped
- development/testing and implementation –designed and Prototype built to get feedback from client then functionality will be added in each spiral.
- planning for next iteration: evaluation and risk assessment, review what has been achieved before and what needs to be added. if identified risk in spiral not identified, is listed in the next spiral.
agile methodology
- developing a product over several iterations (sprints), some of the stages are repeated.
- Each iteration increments off the other, increasing the requirements it meets.
- requirements are not fully defined upfront
- Documentation is lighter and more focused on essentials.
pros of agile
- Adaptable: designed to cope with changing requirements
-can take a product to market quicker - clients receive incremental updates on product
-final product has absolute certainty that it is what the client wants as theyre constantly involved - Flexibility: changes easily accommodated throughout the project.
- regular customer collaboration and feedback – customer satisfaction: faster feedback loops, regular user input, high-quality code, user can change requirements to better fit their needs
- Increased collaboration and teamwork
cons agile methodologies
- requires constant interaction between the user and programmer.
- challenging to predict project timelines and outcome (uncertainties)
- lack of extensive planning and documentation (understanding and communication)
- better with experienced team
- requires higher time input from client as theyre constantly required for feedback and consultation at all stages of development process
- easily go off track and a project can last well beyond the initial idea, meaning high costs and high time input
scenarios of agiles
- for emphasis on finished code quality, working software, customer collaboration, responding to change
- not for processes and tools, comprehensive documentation, contract negotiation, following a plan
- not suited for large organizations (needs coordination, communication and alignment is hard across multiple large teams)
- suited for projects with evolving requirements, uncertain or complex environments, and a need for frequent customer involvement.
- where client has a good idea of what they want and time to invest into controlling project and feeding back
Agile methodology process
- User requirements and a focus of splitting the project into user stories (descriptions of the different ways the system will be used, what it will look like and what they expect it to do)
- Sprint (short time-frame during which a specific user story is completed)
- Sprint planning meeting held to prioritise and categorise the user stories and set up the work for the sprint
- product is full working deliverable that client can use instantly, deliverable is given to client
- Product is evaluated and info fed back into the next sprint meeting
- -planning meeting and sprint repeated multiple times until the full scope of the project is agreed as finished
Extreme Programming (XP)?
- Produce product quickly for client to use which is then quickly incremented for improvements and additional features (regularly reviewed, iterative process)
- emphasizes coding practices, teamwork, and customer involvement.
- focus is on good quality code and is an agile paradigm
- designed to allow development to respond to changing user requirements
pros of XP?
- Project is constantly refactoring in response to continuous client feedback. This can save time and money for developing. Project is at a lower risk of failure as client has guided the project with their continuous feedback.
- Improved code quality
- Faster feedback loops and increased customer satisfaction
- Increased collaboration and teamwork, productivity
- encourages regular, small, iterative software releases and promotes developer’s quality of life.
cons of XP?
- The project can be too code focused and not design focused so may not be the best possible product and extreme programing produces little to no documentation.
- If the developers are split geographically it can cause issues when it is time for code review.
- Requires a high level of skill and experience from team members
scenarios of XP
- Can be difficult to implement in larger organizations
XP requires a large amount of programmers who can collaborate well together, and the client needs to commit to having a representative with the team - where the client has a constantly changing set of requirements, but needs a product quickly to get to market and for the lowest possible price.
- suitable for projects where the emphasis is on the quality of the finished code.
Process of extreme programming
Planning: client is in constant communication with the project team to establish the requirements . planning to plan out releases and what will be in each iteration
Designing: project team moves into building simple designs that implement the needed functionality and they develop the project metaphor (describing project and building it up)
Programming: develop the agreed items from the planning. Programmers work in pairs with one coding and other critiquing.
Testing: code is tested in units and integration testing to ensure it works together and code is reviewed for effieicny and quality. Acceptance testing where client feeds back on product in its current stage which is taken into next iteration for next release and repeats until project is completed
sprints
Sprints are short time-boxed periods when a team has focused goals to complete a set amount of work