Software Development Process
Process Framework¶
- Process -> A process defines who is doing what, when and how to reach a certain goal!
- Each Framework Activity is populated by set of SE actions (a collection of related tasks)
- Establishes the foundation for a complete software engineering process by identifying a small number of framework activities that are applicable to all software projects, regardless of their size or complexity.
- Encompasses a set of umbrella activities that are applicable across the entire software process
-
Generic Process Framework Activities¶
- Communication
- with stakeholders
- intent is to understand stakeholders' objectives and requirements
- Why -> To get an idea of what we have in our hands ( to better understand the problem)
- Planning
- A way to create a roadmap for the project
- This map is called Software Project Plan - defines software engineering work by describing the following and more details
- technical tasks
- likely risks
- required resources
- resultant products
- work schedule
- Modeling
- "A sketch to understand the big picture"
- The components, connections, characteristics
- Various Models are created to simply the development process ahead and have a clear vision of what we are trying to implement.
- Construction
- Code Generation
- Manual or Automated
- Testing
- To uncover bugs and errors in code.
- Code Generation
- Deployment
- The software (complete or partial) is delivered to customer
- Feedback taken from customer and worked upon
- Communication
- Adaptability - The Framework activities are always applicable on every project, but tasks for each activity will vary based on
- project Type
- Project specific characteristics
- human factors (common sense, judgement, etc.)
Umbrella Activities¶
- Software Project tracking and control -> Progress assessment and actions to maintain schedule
- Formal Technical Reviews -> code review to avoid bugs
- Software quality assurance
- Risk management
- Measurement -> defines and collects process, project, and product measures to be used by team to deliver according to needs
- Software configuration management
- Re-usability management -> mechanisms and criteria to build & use reusable components
- Work product preparation and production -> creation of models, documents, logs etc.
CMMI (Capability Maturity Model Integration)¶
- developed by Software Engineering Institute
- defines each process in terms of
- Specific Goals -> characteristics that must exist if activities implied by a process are to be effective
- Specific Practices -> refine goal to process related activities
- CMMI Levels
- Level 1 (Initial)
- Poorly managed/controlled processes
- unpredictable outcomes of processes involved
- ad hoc and chaotic approach used
- lowest quality and Highest Risk
- Level 2 (Managed)
- requirements managed, processes planned and controlled
- risk involved is lower and quality is better than previous level
- projects managed and implemented according to documented plans
- Level 3 (Defined)
- Processes are well characterised and described using Standards, procedures, methods and tools, etc.!
- Focus-> Process standardisation
- Quality and risk involved is Medium
- Level 4( Quantitatively Manged)
- Quantitative Objectives based on stakeholders requirements and needs
- Performance measures of the process are analysed quantitatively
- High quality process achieved with lower risk
- Level 5(Optimized)
- Continuous improvement in process and its performance
- Improvement -> both incremental and innovative
- Highest Quality process
- Level 1 (Initial)
Software Process Model¶
- Prescribe a distinct set of activities, actions, tasks, milestones, and work products required to engineer high quality software.
- Not perfect but provide roadmap for projects
- Provide stability, control and organisation to process
- Adapted to meet needs of software engineers and managers for specific project Models
- Need -> to avoid exceeding scheduled time, cost and poor quality, to meet user expectations
- Process as Black box -> Interactions with customer occur at start and end
- Process as White box -> Interactions occur in middle stages | reduces risks| allows project changes as project progresses
- Build and Fix Model
- May work for small projects but bad for bigger ones
- Impossible to predict and manage
- High cost of maintenance
- build a base product and rework till client is satisfied Prescriptive Models
- May work for small projects but bad for bigger ones
- Recommends set of process elements, activities, action task, work product & quality.
- Water Model
- aka Classic Life Cycle model
- Limitations
- Requirements cannot be changed in between
- No initial or trial version for customers
- once product is finished everything else is maintenance here
- stakeholders sit idle for others to complete their jobs first
- aka Classic Life Cycle model
- Incremental Model
- versions of systems delivered as increments
- useful when lacking staffing as workforce can work parallel at some stages
- User requirements prioritized highly and made available in the earlier increments
- Lower risk of project failure
- Each increment acts as a prototype for next increments as feedback is gained after every increment
- versions of systems delivered as increments
- Rapid Application Development (RAD) Model:
- Makes extensive use of reusable software components in an extremely short development cycle
- Parallelisation of Modelling and Construction to make the process faster
- Modeling
- Business modeling -> Information flow among business is gathered
- Data modeling -> Information refined into set of data objects that are needed to support business
- Process Modeling -> Data objects transform to information flow to implement business
- Construction highlights on reuse of pre-existing components
- 90 day period for major functionalities Drawback:
- for large but scalable project , requires sufficient human resources
- Problematic if system cannot be modularised
- Not appropriate when technical risks are high
- Makes extensive use of reusable software components in an extremely short development cycle
Evolutionary Models
1. Prototyping
- When specifications are not clear i.e. requirements are fuzzy
- Keep building a prototype idea of the problem statement
- Repeat until there is a clear cut idea of what to build
2. Spiral
- Iterative nature of prototyping + controlled systematic aspects of Linear sequential Model
- Software developed in series of evolutionary releases
- Divided into the general process frameworks
- The process begins at the centre and grows outwards
3. Concurrent Development Model
- All activities exist concurrently but reside in different states.
- appropriate for engineering projects where different engineering teams are involved.
4. Fourth Generation Techniques (4GT)
- Set of tools to be directly applied to problems.
- User doesn't have to generated codes are related stuff
- customer describes requirements in a way the 4GT tool can understand and develop the application accordingly.
- To transform a 4GT implementation into a product, the developer must conduct thorough testing, develop meaningful documentation.
- Merits
- Drastic reduction in software development time (for small-intermediate applications)
- Demerits
- Not much easier to use compared to programming languages
- Common Usecases
- Report generation
- Database query language
- Data manipulation
- Code generation
- Web engineering tools
5. Component Based Development
- includes characteristics from spiral mode
- evolutionary by nature and iterative approach to create software
- creates application from prepackaged software components (Classes)
- Classes created in past software engineering projects are stored and reused.
- Candidate classes are identified, if previously available then reused
If not available -> engineered using OOP methods
- Advantages
- leads to software reusablity
- approx 70% reduction in development cycle and 84% reduction in project cost
- High productivity
AGILE Model¶
- software development approach based on iterative development
- breaks tasks into smaller subtasks/iterations
- Each iteration considered as short time "frame" in this Model
- A frame lasts from 1 to 4 weeks
- this task breakdown lowers risk, and reduces overall delivery time
- Stages : Planning -> Requirements analysis -> design -> coding -> testing -> deployment
- Agile Testing Methods
- SCRUM -> Focus on ways to manage tasks in team-based development conditions. 3 roles as follows
- Scrum Master -> set up master team, arrange meetings and remove obstacles for process
- Product Owner -> makes product product backlog (current update) | priorities delay and is responsible for distribution of functionality on each repetition.
- Scrum team -> organises the work to complete the sprint/cycle
- CRYSTAL -> 3 concepts
- Chartering -> multiple activities involved here making a development team, perform feasibility analysis, development of plans, etc.
- Cyclic Delivery -> team updates and release plan | integrated product delivered to users
- Wrap up -> post deployment activity
- eXtreme Programming(XP) ->When constant change of requirements from customers or unsure about system's performance
- Feature Driven Development
- Design and build features.
- FDD describes small steps to obtain separately per function
- Lean Software Development
- follows Just In Time production
- indicates increasing speed of software development and reducing costs
- SCRUM -> Focus on ways to manage tasks in team-based development conditions. 3 roles as follows
- When to use?
- frequent changes required | customer available at all times for meetings | smaller project size
- highly qualified and experienced team is available
- Pros
- frequent delivery
- changes acceptable at any point of time
- reduced total development time
- Cons
- shortage of formal documentation may lead to confusion and misinterpretations by different team members
- Maintenance can be a burden without formal documentation