Skip to content
Sahithyan's S1 -- Programming Fundamentals

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