Software Engineering
Software
Refers to all the related things that are required to make a software system work.
Includes:
- programs
- configuration files
- system and user documentation
- user support system
- bug fixes and updates
Software engineering
An engineering discipline that is concerned with all aspects of software production. From the initial stage of writing the requirements to maintaining it while being used.
Software process
Set of activities that are associated with the development of a software product.
Fundamental activities that are common to all types of software development processes:
- Specification - defining the software to be produced and the runtime constraints
- Development - design and development of the software
- Validation - testing phase to check if the software meets the specifications
- Evolution - software is modified to adapt to new specifications
Waterfall
All before-mentioned activities are done sequentially, as clear separate phases. One phase is completed before the next phase is started.
Iterative & incremental
System is developed in iteration. Smaller parts of the system is completed in each iteration, that includes:
- Small amount of requirements specification
- Design and development for the specification
- Validation for the developed parts
Component based
Existing components are combined to implement the system. Main concentration is on the integration of the components.
Quality of software
Can be measured using these aspects:
- Maintainability - how easy it is to making changes
- Dependability - how secure, reliable it is to failures or other unusual activities
- Efficiency - how efficiently hardware resources (such as memory, processor time, disk space) are used
- Usability - how easy it is to use the software from user’s perspective
- Robustness - how resilient it is to invalid inputs
Challenges in software engineering
- Complexity
- Essential - inherent, difficult to overcome
- Accidental - not inherent, can be overcome
- Conformity
- Changeability - expected to be changeable to greater extent
- Invisibility - not visualizable
- Can’t guarantee defect free software - no amount of testing can prove absence of defects