Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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.
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.
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
Issues
If found any consistencies, we need to start with first phase No concurrent engineering: one phase starts only after completion of another phase
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.
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.
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.
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
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
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
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