introductiontosoftwareengineering-100410000635-phpapp01
-
Upload
dineshpancharia -
Category
Documents
-
view
214 -
download
0
Transcript of introductiontosoftwareengineering-100410000635-phpapp01
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
1/22
Software is (1) instructions (computer programs) that when executed provide
desired features, function, and performance; (2) data structures that enable the
programs to adequately manipulate information; and (3) documents that describe
the operation and use of the programs.
Software Characteristics:
1. Software is developed or engineered; it is not manufactured in the classical
sense.
2. Software does not wear out
Wear out
Infant mortality
Failure curve for hardware
Increased failure rate due to side effects
Change Actual Curve
Idealized curve
Failure curve for software
3. Most software continue to be custom built
Types of Software
1. System Software is a collection of programs written to service other
programs. E.g. compilers, editors and file management utilities.
2. Application Software consists of standalone programs that solve a specific
business need
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
2/22
3. Engineering/ Scientific software
4. Embedded software resides within a product or system and is used to
implement and control features and functions for the end user and for the
system itself
5. Product-line software are designed to provide a specific capability for use
by many different customers, product line software can focus o a limited
and esoteric marketplace.
6. Web-applications can be a little more than a set of linked hypertext files
that present information using text and limited graphics.
7. Artificial intelligence software makes use of non-numerical algorithms to
solve complex problems that are not amenable to computation or
straightforward analysis.
8. Legacy software
Nature of Software
1. Software is flexible, or open for changes
2. Software is developed for long term usage
3. Software is complex
4. Software involves communication with the machine
Software Engineering is the establishment and use of sound engineering
principles in order to obtain economically software that is reliable and works
efficiently on real machines. It is a layered technology.
The engineering approach must rest on an organizational commitment to
quality. The foundation of software engineering is the process layer, which
defines a framework for effective delivery of software engineering
technology. Methods provide the technical how-tos for building software.
Software engineering tools provide automated or semi-automated support for
the process and methods.
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
3/22
Software engineering is about solving problems. It can be broken into
analyzing (problem) and synthesis (solution).
Evolution of Software Engineering
Emergence of Software Engineering
Computer Science Customer
Software
Engineering
Tools and
techniques to solve
problems
ProblemComputer
functions
Theories
Art
Craft
Engineering
Esoteric use of past
experience
Unorganized use of
past experience Systematic use of past
experience . Formulation
of scientific basis
Time
T
ec
h
n
o
l
o
g
y
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
4/22
Software Engineering Challenges
1. Scale: Rules for small scale do not apply on large scale
2. Quality and productivity: These are the terms that are vaguely defined.Productivity directly depends upon the people in development. Quality
includes N number of parameters.
3. Consistently and repeatability: The methods for software development should
be repeatable across projects leading to consistency in the quality of
software produced.
4. Change: Software should accommodate and embrace change. Since as
businesses change, they require that the software supporting it should
change.
5. Heterogeneity: Developing techniques for building software that can cope
with heterogeneous platforms and execution environments;6. Delivery: Developing techniques that lead to faster delivery of software;
7. Trust: Developing techniques that demonstrate that software can be trusted
by its users.
What is good software?
Good software includes a few qualities that can be grouped into the followingcategories.
1. Quality of product
2. Quality of the process3. Quality in the context of business environment (ROI or Return On Investment)Essential qualities of a good software include correctness, reliability, robustness,performance, usability, verifiability, maintainability, repair ability, evolve ability,portability, understandability, interoperability, productivity, timeliness, visibility andreusability, to name a few.
Measurable Characteristics for Software
Object Oriented Design
Data Flow Oriented
Design
Exploratory Style
Control Flow Oriented Design
Data Structure Oriented Design
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
5/22
1. Functionality: The capability to provide functions which meet stated andimplied needs (suitability) when the software is used, accuracy and security.
2. Reliability: The capability to maintain a specified level of performance3. Usability: The capability to be understood (understandability), learned (learn
ability) and used (operability)4. Efficiency: The capability to provide appropriate performance relative to the
amount of resources used.5. Maintainability: The capability to be modified for purposes of making
corrections (changeability, testability), improvements, or adaptation(stability)
6. Portability: The capability to be adopted (adaptability) for different specifiedenvironments (install ability) without applying actions or means other thanthose provided for this purpose in the product.
Software crisis
There is a rise in software prices as compared to hardware prices. Also the software
is difficult to alter, debug and enhance. This is because of lack of adequate training
in software engineering. Large software has failed and has caused huge losses and
was called software runways.
Reasons for software Crisis
1. Lack of communication between developers and users2. Increase in size of software3. Increase in cost of developing software4. Increased complexity of problems5. Lack of understanding of problem and environment6. High optimistic estimates
7. Difficult estimation of time8. Quality parameters not standardized9. Maintenance problems with code
Software process
Software projects utilize a process to organize the execution of tasks to
achieve the goals on the cost, schedule and quality fronts.
A process model specifies a general process, usually as a set of stages in
which a project should be divided; the order in which the stages should be executed
and any other constraints and conditions on the execution of stages. A projectsprocess may utilize some process model.
The process that deals with the technical and management issues of software
development is called a software process.
The desired Characteristics of a Software Process are:
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
6/22
1. Predictability: It determines how accurately the outcome of following the
process can be predicted. The fundamental basis for quality prediction is
that quality of the product is determined largely by the process followed
for developing it. Effective management of quality control activities
depends upon the predictability of the process.
2. Support Testability and Maintainability: One of the most importantobjectives of software development should be to reduce the maintenance
effort. The process used, should ensure that maintainability. Both testing
and maintenance depend heavily on the quality of design and code, and
these costs can be considerably reduced if the software is designed and
coded to make testing and maintenance easier.
3. Support change: Software changes are driven by business need, peoples
mindset etc. Thus change is prevalent, and a process that can handle
change easily is desirable.
4. Early Defect removal: We should attempt to detect errors that occur in a
phase, during that phase itself, to reduce effort and cost or removing
them. Error detection and correction should be a continuous process.
5. Process improvement and feedback: To satisfy the objectives of quality
improvement are cost reduction, the software process must be improved.
Software Components
In engineering disciplines, products are always constructed from parts or
components. Similarly, software engineering is component based. Until the early
1990s, components were routines and libraries. With advances in programming
languages, other mechanisms like generic constructs in languages as ADA and C++
and objects and frameworks in object oriented language also came.
A framework is a collection of related classes that are designed to be used
together in developing applications in a certain domain. Standard template library
in C++ is fine grained, code level component. While swing and Java Beans that
provide classes and objects for visual approach to software development are
medium grained components. Large grained components such as database
management systems act as components in the architecture.
A component is a software element that confirms to a component model and
can be independently deployed and composed without modification, according to a
composition standard. Components are standardized, Independent, comparable,
deployable and documented.
Software Costs
Software costs often dominate computer system costs. The costs of
software on a PC are often greater than the hardware costs.
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
7/22
Software costs more to maintain than it does to develop. For systems
with a long life, maintenance costs may be several times development
costs.
Software engineering is concerned with cost-effective software
development.
Cost of the software includes the cost of developers, the hardware
resources used for development and the cost of infrastructure required
for such development.
Thus following points become important considerations for software engineering
Attempt to estimate cost/effort
Define plan
Prepare schedules
Involve user
Identify stages
Define milestones
Reviews
Define deliverables
Quality assurance steps (testing)
Job of a Software developer
Every developer has to become accurate in three forms of communication
1. Communication with the user. The user is not always well informed. There is
also a gap between the user and the developer in terms of field of work. Thus
getting the right information from the user is very critical task for the
developer
2. Communication with the technical specialists. It is difficult to understand the
jargon of a technical specialist and thus the developer has to convey the
information correctly to him, in the way he can understand.
3. Communication with the management. The management personnel have
business knowledge and understanding of the application of the software. But
they are not well versed with the technicalities involved. Judging correctly the
importance of the requirement stated by the management is an important
task for the developer.
Software Engineering Code of Ethics
The preamble of the code states that
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
8/22
Computers have a central and growing role in commerce, industry, government,
medicine, education, entertainment, and society at large. Software engineers are
those who contribute by direct participation or by teaching, to the analysis,
specification, design, development, certification, maintenance, and testing of
software systems. Because of their roles in developing software systems, software
engineers have significant opportunities to do good or cause harm. To ensure, asmuch as possible, that their efforts will be used for good, software engineers must
commit themselves to making software engineering a beneficial and respected
profession.
Software engineers shall commit themselves to making the analysis, specification,
design, development, testing and maintenance of software a beneficial and
respected profession. In accordance with their commitment to the health, safety
and welfare of the public, software engineers shall adhere to the following Eight
Principles:
The eight principles are as follows:
1. Public: Software engineers shall act consistently with the public interest.
2. Client and Employer: Software engineers shall act in a manner that is in the best
interests of their client and employer, consistent with the public interest.
3. Product: Software engineers shall ensure that their products and related
modifications meet the highest professional standards possible.
4. Judgment: Software engineers shall maintain integrity and independence in their
professional judgment.
5. Management: Software engineering managers and leaders shall subscribe to and
promote an ethical approach to the management of software development and
maintenance.6. Profession: Software engineers shall advance the integrity and reputation of the
profession, consistent with the public interest.
7. Colleagues: Software engineers shall be fair to, and supportive of, their
colleagues.
8. Self: Software engineers shall participate in lifelong learning regarding the
practice of their profession and shall promote an ethical approach to the practice of
the profession.
Software Metrics are quantifiable measures that could be used in Software
engineering to calculate1. The complexity of the software which in turn helps in other ways
2. Cost estimation based on the calculations
3. Allocation of appropriate resources as per the complexity of project
4. Correct scheduling of tasks as per the complexity
5. Evaluation of Quality and reliability of system
6. Improving quality of the system
7. Help in management of risks
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
9/22
They help in the overall development of the system in a more organized and
methodical way. Metrics are important to manage the project successfully. There
are three types of software metrics:
1. Product metrics measure the software
2. Process metrics quantify characteristics of the process used
3. Project metrics quantifies the whole project such as amount of projectcompletion
There are different scales for measuring metrics such as:
1. Nominal which categorizes in groups and is thus a qualitative and not a
quantitative measure
2. Ordered scale and tell the sequence
3. Interval can be incremental or regression analysis
4. Ratio can tell exact quantitative differences which can be ordered and
grouped
Examples: Measures are of different types
1. Size metrics
a. LOC
b. ELOC/NLOC
c. CLOC
d. Functionality
e. Effort
2. Function points
3. Complexity
a. O notation
b. Algorithm/ logic4. Structure
a. Cyclomatic complexity
5. Process measurement
a. Time taken for process activities to be
completed E.g. Calendar time or effort to complete an activity or
process.
b. Resources required for processes or activities E.g. Total effort in
person-days.
c. Number of occurrences of a particular event E.g. Number of defects
discovered.
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
10/22
Issue Software Engineering Engineering
Foundations
Based on computer science,
information science, and discrete
mathematics.
Based on science, mathematics, and empirical
knowledge.
Cost
Compilers and computers arecheap, so software engineering
and consulting are often more
than half of the cost of a project.Minor software engineering
cost-overruns can adverselyaffect the total project cost.
In some projects, construction and
manufacturing costs can be high, so engineering
may only be 15% of the cost of a project. Majorengineering cost overruns may not affect the
total project cost.
Replication
Replication (copying CDs ordownloading files) is trivial.
Most development effort goes
into building new (unproven) or
changing old designs and addingfeatures.
Radically new or one-of-a-kind systems canrequire significant development effort to create a
new design or change an existing design. Other
kinds of systems may require less development
effort, but more attention to issues such asmanufacturability.
Innovation
Software engineers often apply
new and untested elements insoftware projects.
Engineers generally try to apply known and
tested principles, and limit the use of untestedinnovations to only those necessary to create a
product that meets its requirements.
Duration
Software engineers emphasize
projects that will live for years
or decades.
Some engineers solve long-ranged problems
(bridges and dams) that endure for centuries.
Management
Status
Few software engineers manage
anyone.
Engineers in some disciplines, such as civil
engineering, manage construction,
manufacturing, or maintenance crews.
Blame Software engineers must blame Engineers in some fields can often blame
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
11/22
themselves for project problems.construction, manufacturing, or maintenance
crews for project problems.
Practitionersin U.S.
611,900 software engineers 1,157,020 total non-software engineers
AgeSoftware engineering is about 50years old.
Engineering as a whole is thousands of yearsold.
Title
Regulations
Software engineers are typically
self-appointed. A computer
science degree is common but
not at all a formal requirement.[
In many jurisdictions it is illegal to call yourself
an engineer without specific formal education
and/or accreditation by governmental or
engineering association bodies.
Analysis
Methodology
Methods for formally verifying
correctness are developed incomputer science, but they are
rarely used by software
engineers. The issue remainscontroversial.
Some engineering disciplines are based on a
closed system theory and can in theory prove
formal correctness of a design. In practice, a lackof computing power or input data can make such
proofs of correctness intractable, leading many
engineers to use a pragmatic mix of analyticalapproximations and empirical test data to ensure
that a product will meet its requirements.
Synthesis
Methodology
SE struggles to synthesize (build
to order) a result according to
requirements.
Engineers have nominally refined synthesis
techniques over the ages to provide exactly this.
However, this has not prevented some notableengineering failures, such as the collapse of
Galloping Gertie (the original Tacoma Narrows
Bridge), the sinking of the Titanic, and thePentium FDIV bug. In addition, new
technologies inevitably result in new challenges
that cannot be met using existing techniques.
Researchduring
Projects
Software engineering is oftenbusy with researching the
unknown (e.g. to derive an
algorithm) right in the middle ofa project.
Traditional engineering nominally separatesthese activities. A project is supposed to apply
research results in known or new clever ways to
build the desired result. However, ground-breaking engineering projects such as Project
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
12/22
Apollo often include a lot of research into the
unknown.
Codified Best
Practice
Software engineering has justrecently started to codify and
teach best practice in the form of
design patterns.
Some engineering disciplines have thousands ofyears of best practice experience handed overfrom generation to generation via a field's
literature, standards, rules and regulations.
Newer disciplines such as electronic engineeringand computer engineering have codified their
own best practices as they have developed.
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
13/22
Software Development Life Cycle
The software Life Cycle encompasses all activities required to define, develop, test
deliver, operate and maintain a software product. Planning the software
development process involves several important considerations. The first is to
define a product life cycle model. The SDLC activities are:
1. Feasibility: Determine if the software has significant contribution tobusiness. It includes market analysis if similar software is in demand inmarket. Software is evaluated on the basis of cost, schedule and quality.
2. Requirements are determined such as functional properties desired byusers, system requirements such as availability, performance and safety,establishing set of objectives the system should meet, characteristics thatthe system should not exhibit. Such requirements are obtained by variousmethods such as interviews, communication with stake holders, scenariodiscussions, use cases and ethnography. These requirements are thenverified and tested.
3. Project Planning, cost analysis, scheduling, quality assurance plans aremade
4. Designing i.e. Architectural design, Interface design and detailed design5. Implementation includes writing the code for the project as per the designs
and plan6. Testing ensures accuracy and reliability7. Delivery, Installation, Training, Help Desk8. Maintenance, software configuration management.
Another view of SDLC emphasizes the milestone, documents and reviews
throughout product development. It is difficult for project managers to assess
progress or anticipate problems. Establishing milestones, improves product
visibility. The following are the milestones for the project.
1. Feasibility report2. System definition, project plan3. Software requirement specification, Preliminary user manual
4. Architectural design document5. Detailed design document6. Software verification plan7. Product Schedule8. Software test plan, Acceptance test9. Software quality assurance plan10.User manual11.Source code12.Test results
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
14/22
13.Defect report
Every software engineering organization should describe a unique set of
framework activities for the software process it adopts. Various models have beendeveloped over the years to accommodate these activities.
Models for Software Development
Evolutionary models
1. Waterfall Model suggests a systematic sequential approach to softwaredevelopment that begins with customer specification of requirements. Theprinciple stages of the model map onto fundamental development activities.
a. Requirement Analysis and definitionb. System and software designc. Implementation and unit testingd. Integration and system testinge. Operation and maintenance
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
15/22
The verification at each stage ensures that the output is consistent with its input
and overall requirement of the system. These outputs are often called work
products and can be listed as:
a. Requirements documents
b. Project plan
c. Design documents
d. Test plan and test reports
e. Final code
f. Software manuals (e.g. user, installation, etc)
Advantages
1. Simple method with clear steps
2. Easy to administer as it is systematic
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
16/22
3. Verification at each stage ensures early detection of errors /
misunderstanding
4. Documentation helps in future maintenance and revisions
Disadvantage
1. Unchanging requirements are not realistic
2. Document driven process
3. Change adaptability is very slow
2. Incremental Model: Customer identifies the services to be provided. Thedelivery increments are then defined, with each increment providing a sub-set of the system functionality. Once the system increments for the serviceshave been identified, the requirements to be delivered in the first incrementare defined in detail and the increment is developed.
3. Prototyping: First a working prototype of the software is developed instead ofdeveloping the actual software. The developers use this prototype to refinethe requirements and prepare final specification document. After thefinalization of SRS document, the prototype is discarded and actual system isthen developed using the waterfall approach.
Define
outline
requirement
Assign
requirement
s to
increments
Design
System
Architecture
Develop
System
incremen
t
Validate
Incremen
t
Integrate
Increment
Validate
SystemFinal
System
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
17/22
There are 2 types of prototypes; throw-away, where the initial prototype is
discarded after the requirements are defined and the evolutionary prototype,
where the system is built further on the prototype itself. A prototype is built
for those requirements which are critical for the project and are notunderstood well. If the number of requirements which need clarification is
more, then a working prototype is built for them. The importance or criticality
of such requirements is also a significant factor in determining the need of a
prototype.
Advantages of Prototyping
1. Users are actively involved in the development2. It provides a better system to users, as users have natural tendency to
change their mind in specifying requirements and this method of developingsystems supports this user tendency.
3. Since in this methodology a working model of the system is provided, theusers get a better understanding of the system being developed.
4. Errors can be detected much earlier as the system is mode side by side.
5. Quicker user feedback is available leading to better solutions.
Requirements
Quick Design / Prototype
Implement
Customer Evaluation
Design
Implementation and Unit Testing
Integration and System Testing
Operation and Maintenance
Refinement of
Requirements as
per suggestions
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
18/22
Disadvantages
1. Leads to implementing and then repairing way of building systems.2. Practically, this methodology may increase the complexity of the system as
scope of the system may expand beyond original plans.
4. Spiral Model: Boehm tried to incorporate the project risk factor into a lifecycle model. Each phase is split roughly into four sections namely planning,
risk analysis, development and assessment. There are 4 phases namelyfeasibility, requirements analysis, design and coding and testing.
The development spiral consists of four quadrants as shown in the figure aboveThe first step in each phase is to identify the objective, alternatives and constraints
of that phase. The next stage involves identifying the best alternative, by
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
19/22
comparing all and performing risk analysis. One the alternative is chose, prototypes
are built using simulation and benchmarks. Each phase is completed with a review
by the people concerned with the project.
Specialized process models
1. Extreme programming includes creating a set of stories and assigning theirpriority. The commitment defines the order for development. The objects areorganized for development. Designing occurs both after and beforeprogramming, in the form of design and refactoring. Programming happens inthe form of pain programming where two people work together at one
workstation. Writing test cases before starting the coding is a key feature ofextreme programming. Acceptance testing is followed by system testing.
2. Component-Based Development uses commercial-off-the-shelf (COTS)software components.
3. Unified Process is a use-case driven, architecture centric, iterative andincremental software process.
4. Dynamic Systems Development Method (DSDM) suggests an iterativesoftware process. After the feasibility study follows the business study thatestablishes the functional and information requirements for the application.
The iteration steps include Functional model iteration which creates aprototype. New requirements might be generated through the prototype, bythe user. Subsequently or simultaneously designs are built or rebuilt.Implementation iteration places the latest software increments.
5. Feature driven development emphasizes project management guidelines andtechniques. The processes defined for such development are to develop anoverall model, build a feature list, plan by feature, design by feature, build byfeature..
Process improvement
Process improvement is about understanding existing processes and introducing
process changes to improve product quality reduce costs or accelerateschedules. Most process improvement work so far has focused on defect
reduction. This reflects the increasing attention paid by industry to quality.
However, other process attributes can also be the focus of improvement.
Feedback is important for process improvement to initiate.
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
20/22
Why is it difficult to improve a software process?
1. Not enough time: Developers, because of unrealistic schedules are left withno time to explore problems of development and find solutions.
2. Lack of knowledge: many developers are not aware of best practices3. Wrong motivation: The basic motivation should be to eradicate current
difficulties and not just to achieve a higher CMM level.4. Insufficient commitment
Process
Improvement
Begins Improved future state
Do not quit here
Learning curve
Time
Process improvement stages
Process measurement
Attributes of the current process are measured. These are a baseline for
assessing improvements.
Process analysis
The current process is assessed and bottlenecks and weaknesses are
identified.
Process change
Pro
du
cti
vit
y
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
21/22
Changes to the process that have been identified during the analysis are
introduced.
Process choice
Process used should depend on type of
product which is being developed
For large systems, management is usually the principal problem so youneed a strictly managed process;
For smaller systems, more informality is possible.There is no uniformly applicable process which
should be standardised within an organisation
High costs may be incurred if you force an inappropriate process on adevelopment team;
Inappropriate methods can also increase costs and lead to reducedquality.
Process analysis and modelling
1. Study an existing process to understand its activities.2. Produce an abstract model of the process. You should normally represent this
graphically. Several different views (e.g. activities, deliverables, etc.) may berequired.
3. Analyse the model to discover process problems. This involves discussingprocess activities with stakeholders and discovering problems and possibleprocess changes.
Process analysis techniques
Published process models and process standards: It is always best to start
process analysis with an existing model. People then may extend and changethis.
Questionnaires and interviews: Must be carefully designed. Participants may
tell you what they think you want to hear.
-
7/28/2019 introductiontosoftwareengineering-100410000635-phpapp01
22/22
Ethnographic analysis: Involves assimilating process knowledge by
observation. Best for in-depth analysis of process fragments rather than forwhole-process understanding.
Process change stages
Improvement identification.
Improvement prioritization.
Process change introduction.
Process change training.
Change tuning.