Software Engineering - Unit 1
Software is intangible
Hard to analyze the development efforts
SOFTWARE DEVELOPMENT LIFECYCLE • Implementation
• Quality assurance -Reviews and inspections -Testing • Deployment - Should be compatible with hardware - User Training - Upgrade • Maintenance and Enhancement
Software industry is labor-intensive
Automation is difficult
Greenfield Project
'From scratch' project, new development • Lacks any constraints imposed by prior work • Analogy is to construction on greenfield land where there is no need to remodel or demolish an existing structure • Minority of projects
THE ROLE OF SOFTWARE ENGINEERING
1. Customer (Hospital) - business/functional goals 2. User (Nurses, Doctors) - user/functional goals 3. Software engineer - Understands how the system will interact with the environment and design a software for the customer's requirement 4. Programmer: Implements the software
•Projects that involve building on a framework or a set of existing components.
A framework is an application that is missing some important details. • E.g. Specific rules of this organization. - Such projects: • Involve plugging together components that are: - Already developed. - Provide significant functionality. • Benefit from reusing reliable software. • Provide much of the same freedom to innovate found in "from scratch" development
WHAT IS SOFTWARE ENGINEERING? •Systematic development and evolution
An engineering process involves applying well-understood techniques in an organized and disciplined way • Use of standardized development methodology • Iterative development
Quality
Availability: Concerned with system failure and its associated consequences Modifiability: The cost of change Performance: How long it takes the system to respond when an event occurs Scalability: Can the software handle larger volumes of data? Security: Ability to resist unauthorized usage while still providing its services to legitimate users Testability: Ease with which software can be made to demonstrate its faults through testing Usability: How easy it is for the user to accomplish a desired task and the kind of user support system provides Efficiency: It doesn't waste resources such as CPU time and memory Reliability: It does what it is required to do without failing Maintainability: It can be easily maintained Reusability: Its parts can be used in other projects
TYPES OF SOFTWARE embedded
Built into hardware so hard to modify
TYPES OF SOFTWARE real time software
Control and monitoring systems • Must react immediately • Performance and Safety are major concerns
•Most projects are evolutionary or maintenance projects, involving work on legacy systems
Corrective projects: fixing defects - Adaptive projects: changing the system in response to changes in • Operating system • Database • Organizational operations - Enhancement projects: adding new features for users - Reengineering or perfective projects: changing the system internally so that it is more maintainable
TYPES OF SOFTWARE
Custom, generic, embedded, real time software, data processing software
SOFTWARE DEVELOPMENT LIFECYCLE •Design
Deciding how the requirements should be implemented using the available technology - Includes: • Systems engineering: Deciding what should be in hardware and what in software • Software architecture: Includes dividing the system into subsystems and deciding how the subsystems will interact • Detailed design of the internals of a subsystem • User interface design • Design of databases
SOFTWARE DEVELOPMENT LIFECYCLE Requirements
Defining the problem • Domain analysis • Requirements gathering - Obtaining input from as many sources as possible • Survey • Interviews • Questionnaires • Requirements analysis - Organizing the information • Requirements specification - Writing detailed instructions about how the software should behave
SOFTWARE DEVELOPMENT METHODS Iterative + Incremental
Develop increment of functionality, repeat in a feedback loop
•Brownfield Project
Development and deployment of a software system that must work with existing software systems • New system must take into account and coexist with already-existing software
Software is easy to reproduce and modify
Development cost, cost and effects of modifying
TYPES OF SOFTWARE custom
For a specific customer
Long term:
Maintainability • Customer's future needs • Scalability
TRADITIONAL SOFTWARE DEVELOPMENT LIFECYCLE: WATERFALL METHOD
Requirements, design, implementation, testing, deployment & maintenance
First law of software engineering
Software engineer is willing to learn the problem domain (problem cannot be solved without understanding it first)
WHAT IS SOFTWARE ENGINEERING? •Large, high-quality software systems
Software engineering techniques are needed because large systems cannot be completely understood and developed by one person (within time constraints) • Teamwork and coordination are required • Division of work among team members and integration of the implemented parts
SECOND LAW OF SOFTWARE ENGINEERING
Software should be written for people first Computers run software, but hardware quickly becomes outdated • Usefulness • To nurture software, people must be able to understand it • Quality
TYPES OF SOFTWARE generic
Sold on open market, Often called COTS (Commercial Off The Shelf) or Shrink-wrapped
SOFTWARE MEASUREMENT
Step 1: Divide the problem into small & similar parts Step 2: Estimate relative sizes of all parts\ • Step 3: Estimate the size of the total work (LOC - lines of code) • Step 4: Estimate speed of work (Ex. LOC/day) • Step 5: Estimate the work duration
SOFTWARE DEVELOPMENT METHODS Method = work strategy
The Feynman Problem-Solving Algorithm: (i) Write down the problem (ii) think very hard, and (iii) write down the answer.
WHAT IS SOFTWARE ENGINEERING?
The process of solving customers' problems by the systematic development and evolution of large, high-quality software systems within cost, time, and other constraints • Sometimes the solution is to assemble from existing components, not build from scratch • Sometimes the solution is to buy, not assemble or build • Adding unnecessary features does not help solve problems • Software engineers must communicate effectively to identify and understand problems
SOFTWARE DEVELOPMENT METHODS Waterfall
Unidirectional, finish this step before moving to the next
Software quality is difficult to determine
Untrained personnel
TYPES OF SOFTWARE Data processing software
Used to run businesses • Correctness and Security of data are major concerns
SOFTWARE DEVELOPMENT METHODS Agile
User feedback essential; feedback loops on several levels of granularity
SOFTWARE QUALITY AND THE STAKEHOLDERS
User: easy to learn; efficient to use; helps get work done Customer: solves problems at an acceptable cost in terms of money paid and resources used Developer: easy to design; easy to maintain; easy to reuse its parts Development manager: sells more and pleases customers while costing less to develop and maintain
Setting objectives for quality is a key engineering activity
You then design to meet the objectives
software is
complex not complicated
Complex
composed of many simple parts related to one another
Software deteriorates by having its design changed
erroneously, or unintentionally
•Optimizing is always necessary
for example, obtain the highest possible reliability using a fixed budget
Complicated
not well understood, or explained
DIFFICULTIES AND RISKS IN SOFTWARE ENGINEERING
• Complexity and large numbers of details • Uncertainty about technology • Uncertainty about requirements • Uncertainty about software engineering skills • Constant change • Deterioration of software design • Political risks
Short term:
• Does the software meet the customer's immediate needs? • Is it sufficiently efficient for the volume of data we have today? • Usability
Cost, time, and other constraints
• Finite resources • Usually a deadline • The benefits must outweigh the cost • Inaccurate estimates of cost and time have caused many project failures
•Some software qualities can conflict
• Increasing efficiency can affect maintainability and/or reusability • Increasing usability can affect efficiency • Increasing security can affect performance