Sunteți pe pagina 1din 57

Software Engineering

preview

Introduction
Deals with building large and complex software systems (version, life span, evolution)

Evolution: fix defects, enhance existing features, add new features, remove old ones, adopted to run in new environment

IEEE - definition

Application of systematic, disciplined, quantifiable approach to the development, operation and maintenance of software

Comparison to Programming
Multiperson construction of multiversion software Programmer(single person) writes a complete program but a Software Engineer write a component of a module which is integrated with other components to build a system.

Coined in 1960
Problems in building larger systems Engineering approach
Define clearly the problem you are trying to solve o Use and develop standard tools and techniques to solve it
o

But still.
All parameters and tolerance levels are not known Problem not known even to the customers

So,
o

Typical software engineer relies more on experience and judgment

History of Software Engineering


Evolving and maturing view of the programming activity. In 1950, computers were easily available and more common but the program by single user for well defined task. Separation between a user and the computer- read specification from user and translate it into a precise set of machine instructions.

In 1960
CTSS-OS at MIT (research) OS 360 for IBM 360 computer (commercial and well documented)

Term Software Engineering coined as many large projects were over budget and lagging behind schedule

Ideas proposed
Better management techniques Different team organizations Better programming languages and tools Uniform coding conventions Finally engineering approach was born(Encompassing management, organization tools, theories methodologies and techniques.

1987-Brooks
2 types of challenges
o

Essential and accidental Accidental: Difficulties with current tools and technologies. Syntactic problems which can be solved with better tools and techniques Essential: New tools does not help. Require intelligence, creativity and time.

Software crisis
Projects were continually late and over budget. New and complex application domain are inherently difficult to approach and dont have short term solution.

cost
Previously hardware cost used to determine the price of the total system Today software cost is the dominant factor.

Within software field


From programming(coding) to software having full life cycle composed of: conception, design, development, deployment, maintenance and evolution.

Role of Software Engineering in System Design


Software system is component of a larger system. Requirement of software are balanced against the requirements of other parts of the system being designed. Telephone system, power plant, traffic monitoring system, banking system, hospital administration system.

Embedded in diverse system such as: airplane, television Broader look at general problem of system engineering. It requires software engineers to participate in developing requirements of the whole system. Software engineers need to understand the application before abstract interface is designed.

Eg if simple word processor will work then there is not necessary to use word processor like msword. Makes us understand the importance of compromise.

Compromise includes: what should be done in hardware and what should be done in software. Another compromise involves what should be automated and what should be manual.

The software Life Cycle


Divided into many phases Phases in simple waterfall life cycle
o o o o o

Requirement analysis and specification System design and specification Coding and module testing Integration and system testing Delivery and maintenance

Requirement Analysis
First phase need to find exact cost and benefit of software system. Purpose is to identify and document the exact requirement of the system. Performed by customer, developer or marketing organization or combination of these three. If requirement not clear-much interaction needed

System design and specification


2 subphases:
o

Architectural (high level design) and Detailed design


Define overall organization of the system in terms of high level components and interactions among them. As we move further, components are decomposed into lower level modules with defining interface

Coding and Module Testing


Actual code that will be delivered to the customer as the running system is developed. Prototypes, tests and test drivers also produce tests but these are for use by the developers Each coded modules are tested before they are delivered to next phase

Integration and System Testing


All the modules developed and tested are put together (integrated) Finally the system is tested as a whole

Delivery and Maintenance


The system thus tested produces required result and is thus ready to be delivered to customer.

During maintenance, modification and enhancement of the system is done

Issues
If found any consistencies, we need to start with first phase No concurrent engineering: one phase starts only after completion of another phase

The relationship of software engineering to other areas of computer science

Programming Languages
Central tools used in software development Inclusion of modularity features
Development of package : components that can be developed independent of software systems. o Exception handling: constructs allow for detecting and responding to any malfunction that may occur when the software is running.
o

Operating systems
Impact of operating systems on software engineering is quite strong os being first large and complex software systems. Eg: separation of policy- which os wants to impose for fairness is scheduling. Eg: structure of operating system can be seen in portable operating systems (eg in UNIX os there are personalized interpreters)

Databases
Data independence: writing applications without worrying about internal representation of data. Databases have resolved issues of concurrent data access, so no need to worry while building software systems. Older version of databases were inconsistent with some issues (eg: different version of same object)

Artificial Intelligence
Use of logic making system intelligent Expert systems- facts known by the system and rules used by the system to process the facts

Theoretical Models
Finite State Machines: served both as the basis of techniques for software specifications and as models for software design Push down automata: motivated by practical attempts to build parsers and compilers for programming languages.

Relationship with other Disciplines


Management Science: project estimation, project scheduling, human resource planning task decomposition and assignment, and project tracking are all tasks of management. Hiring personnel, motivating people, and assigning the right people to the right tasks New dimension: traditional management approaches to assembly line production clearly do not apply to human centered activities such as software engineering

Systems Engineering
Concerned with studying complex systems. System engineering useful when dealing with multiple components rather than individual ones as systems engineering tries to discover common themes that apply to diverse systems. Eg flight software on airplane are components of more complicated systems. Systems engineering techniques can be applied to the study of such systems.

Software Process Models


Linear Sequential Model
Requirement Analysis: required function, behavior, performance and interface is to be identified, documented and reviewed with customer o Design: focuses on 4 distinct attributes of a program: data structure, software architecture, interface representations and procedural (algorithmic detail)
o

Linear Sequential Model

Code generation
Design must be translated into machine readable form. If design is performed in detailed manner, code generation can be accomplished easily.

Testing
Testing process focuses on logical internals of the software, ensuring that all statements have been tested.
o o

Tests to find errors Tests to ensure correct output is received for specified input

Support
Support making changes in software systems Changes occur for
o o o

Fixing errors encountered Accommodate changes in environment Customer requires functional or performance enchancement

Drawbacks
Real project rarely follow this model as change can cause confusion Difficult for customers to mention all requirements at once Software not available until late. So customers need to have patience.

Prototyping model
Customer defines a set of general objectives but does not identify detailed input, output and processing.

The prototyping Model

Developer and customer meet and define overall objectives for the software. Overall objective is defined Identify what requirements are known and based on these make a quick design of prototype This prototype is evaluated by the customer and is refined. Iteration occurs as prototype is tuned to satisfy need of the customer.

2 drawbacks
Developer makes implementation compromise inorder to get prototype quickly Inappropriate programming language or os may be used Customer complains when he finds whatever has been delivered to him is not worth his money

RAD model
Rapid application development model Incremental software development model that emphasizes an extremely short development cycle

The RAD Model

Phases
Business Modeling: information flow in business functions is modeled in a way that answers questions like what information drives business process? What information generated? Data Modeling: information flow defined as a part of business modeling phase is refined into a set of data objects that are needed to support the business.

disadvantages
For large project RAD requires sufficient human resources RAD requires developers and customers who are committed to rapid fire activities If high performance is an issue, performance is to be achieved by tuning interface to system Not applicable when technical risks are high

Evolutionary Models
Incremental models Spiral model Winwin spiral model Concurrent development model

Incremental models

Incremental Model
Combines elements of linear sequential model with iterative philosophy Each linear sequence produces a deliverable increment of the software. For example word processing software developed using this model deliver file management in first increment, editing options in second increment.

Spiral Model

Spiral model: proposed by Boehm


Divides development in six task stages: couples iterative nature of prototyping with controlled and systematic aspects of linear sequential model. Stages
o

Customer communication: tasks required to establish effective communication between developer and customer

Planning: tasks required to define resources, timelines and other project related activities Risk analysis: tasks required to assess both technical and management risks Tasks required to build one or more representation of the application Construction and release: tasks required to construct, test, install and provide user support (documentation and traning) Customer evaluation: tasks required to obtain customer feedback based on evaluation of software

Winwin spiral model

Rather than single customer communication activity, following activities are defined
Identification of system or subsystems key stakeholders o Determination of stakeholders win conditions o Negotiation of stakeholders win conditions to reconcile them into set of win win conditions for all concerned (including software project team)
o

Defines a set of negotiation activities at the beginning of each pass around spiral

Concurrent process model

Concurrent process model


Often used for designing client/server model Client server system is composed of a set of functional components. System dimension and component dimensions are two dimensions System and component activities occur simultaneously and can be modeled using state oriented approach.

S-ar putea să vă placă și