Software Engineering methodologies (Week 3-6) Flashcards
Name the 4 most relevant software engineering methodologies
- Waterfall (plan-driven process), unidirectional, one step at a time
- Agile (software developed iteratively in sprints), (SCRUM)
- Rapid Application Development (RAD)
- Spiral
Describe Plan-driven process
- All of the process activities are planned in advance
- Progress is measured against this plan
(Waterfall)
Describe Agile process
- Planning is incremental
- Easier to change the process
- Reflect changing customer requirements
SCRUM, XP
List the steps of Waterfall process
- Requirements analysis (system’s services, constraints, goals, all must be defined in details and serve as a system specification)
- System and software design (Allocate requirements to either hardware or software systems. Describing software system abstraction and their relationships.)
- Implementation (Software design realized as programs or program units)
- Unit testing (Verifying each unit meets its specifications)
- Integration, system testing (Programs and units integrated, tested as a complete system. Requirements met. Deliver to customer)
- Operation, Maintenance (System in practical use. Correction errors, improving system units, meeting new requirements)
When is documentation produced for waterfall?
Produced at each phase
What are the advantages of waterfall?
- Process visibility
- Processes are well organised
- Quality and cost are identifiable
- Simple and easy to use
What are the disadvantages of waterfall?
- You have to commit early
- Responding to change is difficult
- Long time to deliver
- Little/No feedback from customers
What is evolutionary development?
In principle the same as waterfall, the difference is all processes are concurrent.
Software is not developed in one go, rather there are a series of small increment leading to the final product
Customers are involved
What are the advantages of evolutionary/iterative development?
- Customers get to try out early increments, gain experience to inform requirements for later increments
- Customers can gain value from increments ( dont have to wait until the software is fully finished)
- Easy to incorporate changes into the system
- Highest-priority services delivered first. Most important features receive most testing.
- Easier to get customer feedback
- Rapid delivery, not all functionality is needed
What are the disadvantages of evolutionary/iterative development?
- Systems require basic facilities used by different parts of system; hard to identify common facilities needed by all increments
- The process is not visible. Managers need regular deliverables to measure progress
- Regular change corrupts software structure
- Incorporating further changes increases difficulty and costs.
What is reuse-oriented software engineering?
It is a methodology that utilizes already written code in a program it wasn’t written for.
What are the characteristics of rapid software development?
- The process of specification, design and implementation are interleaved
- No detailed system specification
- Design documentation minimized
- Requirements document only defines most important characteristics
- System developed in a series of versions
- End-users, stakeholders involved in specifying, evaluating each version
- End-users may propose to change requirements in later versions
What are the principles of agile methods?
- Customer involvement: customer closely involved, they provide and prioritize new requirements, evaluate the system
- Incremental delivery: software developed in increments; customer specifying requirements to be included in each increment
- People not process: skills of team recognised and exploited. Team members left to develop their own ways of working without prescriptive processes
- Embrace change: expect system requirements to change, design system to accommodate changes
- Maintain simplicity: focus on simplicity. When possible, eliminate complexity from system
What are the disadvantages of agile?
- Lots of time with clients(less time for development)
- Clients may not be willing and able to spend time with development team
- No long term planning
- Prioritising change can be difficult: Different stakeholders may give different priorities
Contracts: customers pay for time required for development, rather than the development of a specific set of requirements
What is Extreme programming? XP
Agile process with the focus on code rather than design or documentation.
XP takes an extreme approach to iterative development, new versions can be built several times per day
- increments are delivered to customer every 2 weeks
- all test must be run for every build (build is only accepted if tests run successfully)
How are requirements expressed in XP?
They are expressed as stories, these stories are written on cards(development team breaks them into tasks, tasks are the basis of schedule and cost estimates)
- Customer chooses the stories for inclusion in the next release based on priorities and schedule estimates
What are user stories?
Convenient format for expressing the desired business values
- crafted to be understandable to both business people and technical people.
- Serve the same purpose as use cases
- Used instead of large requirement document
- Written by the Customer (things the system needs to do for them, the are written in about 3 sentences)
How much detail should user stories provide?
User stories should only provide enough detail to make a low risk estimate of how long it will take to implement
- when it is time to implement, the developers go back to customer for a detailed description of requirements
How does testing happen in XP?
XP follows a test-driven development (write tests before code, instead of writing some code and then writing tests for that code, you write the tests before you write the code.)
Tests are automated, you can run the test as the code is being written and discover problems during development.
Acceptance testing
Unit testing
What is acceptance testing? (XP)
Process where system is tested using customer data to check it meets customer’s real needs
Written with customer; acts as a ‘contract’, measure of progress
What is unit testing? (XP)
Automate testing of functionality for software development
What are the 4 principles of test-driven development?
Test first - before we write any code, write a test for that feature
Automated - Tests are ran automatically each time a release is built
Unit tests - Automate testing of functionality as developers write it
Acceptance tests - specified by the customer to test the overall system
What is pair programming?
Two programmers work side-by-side (usually) at the computer.
Helps develop common ownership of code
spreads knowledge accross the team
Continuously collaborate on same design, algorith, code, etc
Serves as an informal review process
Encourages refactoring as the whole team can benefit from this
What is refactioring?
A practice of software development that allows you to improve the code without changing or breaking its functionality
All developers are expected to refactor the code continuously as soon as code improvements are found
Helps to keep the code simple and maintainable