Lecture 1.1

Download as pdf or txt
Download as pdf or txt
You are on page 1of 40

INTRODUCTION TO SOFTWARE

ENGINEERING
Lecture 1
Miss Rubab wafa
INTRODUCTION TO SOFTWARE ENGINEERING

➢The term is made of two words, software and engineering


➢Software is more than just a program code.
➢A program is an executable code, which serves some computational
purpose.
➢Software is considered to be collection of executable programming code,
associated libraries and documentations. Software, when made for a
specific requirement is called software product.
➢Engineering on the other hand, is all about developing products, using
well-defined, scientific principles and methods.
Software Engineering

▪ Software engineering is an engineering branch associated with


development of software product using well-defined scientific
principles, methods and procedures.
▪ The outcome of software engineering is an efficient and reliable
software product.
Changing Nature of Software :

The nature of software has changed a lot over the years.


1. System software:
▪ Infrastructure software come under this category like compilers, operating systems,
editors, drivers, etc.
▪ Basically system software is a collection of programs to provide service to other
programs.

2. Real time software:


▪ These software are used to monitor, control and analyze real world events as they occur.
▪ An example may be software required for weather forecasting. Such software will gather
and process the status of temperature, humidity and other environmental parameters to
forcast the weather.
Changing Nature of Software :

3. Embedded software:
▪ This type of software is placed in “Read-Only- Memory
(ROM)”of the product and control the various functions of the
product.
▪ The product could be an aircraft, automobile, security system,
signalling system, control unit of power plants, etc.
▪ The embedded software handles hardware components and is
also termed as intelligent software .
Changing Nature of Software :

4. Business software :

▪ This is the largest application area.


▪ The software designed to process business applications is called
business software. Business software could be payroll, file
monitoring system, employee management, account management.
▪ It may also be a data warehousing tool which helps us to take
decisions based on available data. Management information
system, enterprise resource planning (ERP) and such other
software are popular examples of business software.
Changing Nature of Software :

5. Personal computer software :

▪ The software used in personal computers are covered in this


category
▪ Examples are word processors, computer graphics, multimedia and
animating tools, database management, computer games etc.
▪ This is a very upcoming area and many big organization's are
concentrating their effort here due to large customer base.
Changing Nature of Software :

5. Personal computer software :

▪ The software used in personal computers are covered in this


category
▪ Examples are word processors, computer graphics, multimedia and
animating tools, database management, computer games etc.
▪ This is a very upcoming area and many big organization's are
concentrating their effort here due to large customer base.
Changing Nature of Software

6. Artificial intelligence software:

▪ Artificial Intelligence software makes use of non numerical


algorithms to solve complex problems that are not amenable to
computation or straight forward analysis.
▪ Examples are expert systems, artificial neural network, signal
processing software etc.
Importance of Software Engineering

1. Reduces complexity:
▪ Large software systems are always complicated and challenging to progress.
▪ Software engineering divides big problems into various small issues. And then
start solving each small issue one by one.
▪ All these small problems are solved independently to each other and then
integrated together to produce the software product
2. To minimize software cost:
▪ A lot of resources are required to develop large-scale software systems, such
as manpower, software licenses, hardware…etc.
▪ As companies seek to build cutting-edge software to drive growth, determining
the overall budget becomes very tricky.
▪ Software engineering provides systematic means for having regular interaction
and obtaining a budget estimates.
Importance of Software Engineering

3. To decrease time:
▪ One of the main criteria to measuring project success and yet the most
challenging is delivering software projects on time.
▪ Schedule issues are the main reason for conflicts on projects especially during
the second half of projects where the actual implementation takes place to
produce the final working product.
▪ Software engineering involves the processes required to ensure timely
completion of a project.

4. Handling Big projects:


▪ Big projects are not done in a couple of days, and they need lots of work,
planning, and management. And to invest six and seven months of any
company, it requires heaps of planning, direction, testing, and maintenance.
Importance of Software Engineering

▪ Companies provide many resources to the plan to be completed.


▪ So to handle a big project without any problem, the company has to go for software
engineering methods.

5. Reliable software:
▪ Software reliability is the “probability that the software will execute for a particular
period of time without failure”.
▪ Software engineering provides models for software quality measurements and
evaluations.
▪ Examples include models for estimating defects inserted and removed throughout
the software lifecycle.
Software Engineer Job Duties

▪ Analyzing user requirements


▪ Testing code, refining and rewriting it as necessary
▪ Researching and designing new software programs
▪ Developing existing programs by analyzing and identifying areas for modification
▪ Integrating existing software products and getting incompatible platforms to work
together
▪ Creating technical specifications
▪ Writing operational documentation with technical authors
▪ Maintaining systems by monitoring and correcting software defect
The software problem:

➢ Cost
➢ schedule
➢ Quality
➢ Scale
➢ change
Cost

➢ software is very expensive primarily due to the fact that software development is
extremely labor-intensive
➢ To get an idea of the costs involved, let us consider the current state of practice in the
industry. Lines of code (LOC) or thousands of lines of code (KLOC) delivered is by far the
most commonly used measure of software size in the industry.
➢ As the main cost of producing software is the manpower employed, the cost of developing
software is generally measured in terms of person-months of effort spent in development.
➢ The productivity in the software industry for writing fresh code generally ranges from few
hundred to about 1000+ LOC per person-month. This productivity is over the entire
development cycle, not just the coding task.
➢ Software companies often charge the client for whom they are developing the software
between $3000 - $15,000 per person-month. With a productivity of 1000 LOC per person-
month, it means that each line of delivered code costs between $3 and $15! And even
small projects can easily end up with software of 50,000 LOC.
➢ With this productivity, such a software project will cost between $150,000 and $750,000!
Schedule

▪ Schedule is another important factor in many projects.


▪ Business trends are dictating that the time to market of a product should be
reduced; that is, the cycle time from concept to delivery should be small.
▪ For software this means that it needs to be developed faster, and within the
specified time.
▪ Unfortunately, the history of software is full of cases where projects have been
substantially late.
▪ Clearly, therefore, reducing the cost and the cycle time for software development are
central goals of software engineering
▪ If productivity is higher, it should be clear that the cost in terms of person-months
will be lower (the same work can now be done with fewer person-months).
Quality :

▪ Besides cost and schedule, the other major factor driving software engineering is
quality
▪ Unfortunately, a large number of cases have occurred regarding the unreliability of
software
▪ the software often does not do what it is supposed to do or does something it is not
supposed to do
▪ Clearly, developing high quality software is another fundamental goal of software
engineering.
Quality

▪ There are many quality attributes, reliability is generally accepted to be the main
quality criterion.
▪ As unreliability of software is due to the presence of defects in the software, one
measure of quality is the number of defects in the delivered software per unit size
(generally taken to be thousands of lines of code, or KLOC)
▪ The quality objective is to reduce the number of defects per KLOC as much as
possible.
▪ Current best practices in software engineering have been able to reduce the defect
density to less than 1 defect per KLOC.
Quality

▪ Besides reliability, another quality attribute of great interest is maintainability. Once


the software is delivered and deployed, it enters the maintenance phase.
▪ Why is maintenance needed for software, when software has no physical
components that can degrade with age?
▪ The maintenance-to-development-cost ratio has been variously suggested as 80:20,
70:30, or 60:40.
▪ Due to this high cost, maintainability attribute of delivered software is of high
interest—it is clearly desirable to have software systems that are easier to maintain
Principles of Software Engineering

1. Manage using a phased life-cycle plan.


2. Perform continuous validation.
3. Maintain disciplined product control.
4. Use modern programming practices.
5. Maintain clear accountability for results.
6. Use better and fewer people.
7. Maintain a commitment to improve the process.
SOFTWARE DEVELOPMENT LIFE
CYCLE
Software Development life Cycle

▪ Software development life cycle (SDLC) is a framework defining tasks performed at each step
in the software development process.

▪ Set of activities and their relationships to each other to support the development of
a software system
▪ It consists of a detailed plan describing how to develop, maintain, replace and alter or enhance
specific software.
▪ The life cycle defines a methodology for improving the quality of software and the overall
development process.
▪ Any software development process is divided in several logical stages that allow a software
company to organize its work efficiently in order to build a software product of the required
functionality within a specific time frame and budget
Identifying Software Development Activities

▪ Questions to ask:
▪ What is the problem?
▪ What is the solution?
▪ What are the best mechanisms to implement the solution?
▪ How is the solution constructed?
▪ Is the problem solved?
▪ Can the customer use the solution?
▪ How do we deal with changes that occur during the development?
Are enhancements needed?
Software Development Activities (Example 1)

Requirements Analysis What is the problem?


Application
Domain
System Design What is the solution?

What are the best mechanisms


Detailed Design to implement the solution?

Program Implementation How is the solution Solution


constructed? Domain

Testing Is the problem solved?

Delivery Can the customer use the solution?

Maintenance Are enhancements needed?


Requirements Gathering

▪ Every project has a specific set of requirements that describe what the finished
product should do and how it should operate
▪ A project's requirements can help set a framework for the tasks and goals the
project team aims to achieve
▪ Learning how to gather and document these requirements can help you create
an efficient and organized project process.
▪ Requirements gathering is a process that involves creating a list of requirements
for a project.
▪ These requirements represent features, functions or activities that a team must
complete to finish a project and achieve its goals

▪ Detailed requirements are elicited through interaction with the customer/end user in
the iteration the requirement is to be implemented and directly reflected in software.
6-Step Requirements Gathering Process

• Identify the relevant stakeholders


• Establish project goals and objectives
• Elicit requirements from stakeholders
• Document the requirements
• Confirm the requirements
• Prioritize the requirements
Identify the Relevant Stakeholders

▪ Customers
▪ Decision-makers
▪ Users
▪ Marketing
▪ Sales
▪ Key suppliers
▪ Distributers and other partners
Remember to search for “hidden stakeholders.” Ask probing questions in early meetings, before
you begin eliciting requirements. Identify all stakeholder groups who need to be involved.
Ideally, you want input from every group who has skin in the game; give them all the opportunity
to state their needs.
Establish Project Goals and Objectives

1. What are you trying to achieve with this new product or project?
2. What are the overall outcomes your customers want from the product?
3. What are your company’s business goals?
4. What are the actionable, measurable objectives you need to achieve to realize those
goals and outcomes?

▪ Write them down. State them clearly, and get all your stakeholders to sign-off on
them. Your goals and objectives will act as a framework for your decision-making.
▪ Each requirement you write should help satisfy a project objective and accomplish a
goal. If it doesn’t, you should either discard it or made it a candidate for a future
release.
Elicit Requirements From Your Stakeholders

▪ Elicitation can be performed in several ways. Time-tested techniques include


1. Surveys
2. Questionnaires
3. interviews.
Interviews and follow-up meetings will be prevalent during later iterations.

▪ Be sure to listen actively during interviews. Ask probing questions and take copious
notes. Afterward, organize your notes and follow up as necessary. Document
each exercise or encounter thoroughly
Document the Requirements

▪ As soon as requirements begin to emerge from your elicitation process, start


documenting them.
▪ Write them down and collect them in whatever format your organization has agreed
upon.That could be a product requirements document (PRD) of your company’s design
What’s most important is that the requirements documentation…
1. Can be easily navigated and understood by your team
2. Is available for review by all stakeholders
3. Provides a facility for traceability to other documentation
Confirm the Requirements

▪ Review the requirements with all stakeholders.


▪ Make sure the requirements clearly capture what was intended and that all parties
have a common understanding of each of them.
▪ If you find any ambiguity in a requirement, revise it.
▪ Get stakeholder sign-off on individual requirements as you get them nailed down.
▪ Do the same for the specification as a whole during a final review.
Prioritize the Requirements

▪ Many product managers prioritize features by tagging them with labels, such as “must
have,” “high want,” and “nice to have.” But it’s also important to rank order each
requirement within those categories.
▪ There are two reasons for this.
▪ The first is time to market. Schedules often slip. When they do, you may need to trim
features and requirements to meet your release date.
▪ The second reason is that requirements evolve. During implementation, you’re likely to
discover new needs. Some may be critically important and supersede existing
requirements in terms of priority. You need to know where those new requirements fit
in your pecking order.
▪ Solving high priority requirement may easily solve less propority
problems/requirements
Software Requirement Specifications

▪ The production of the requirements stage of the software development process is Software
Requirements Specifications (SRS) (also called a requirements document).
▪ SRS is a formal report, which acts as a representation of software that enables the customers
to review whether it (SRS) is according to their requirements. Also, it comprises user
requirements for a system as well as detailed specifications of the system requirements.
Following are the features of a good SRS document:
1. Correctness: User review is used to provide the accuracy of requirements stated in the SRS.
SRS is said to be perfect if it covers all the needs that are truly expected from the system.
2. Completeness: The SRS is complete if, All essential requirements, whether relating to
functionality, performance, design, constraints, attributes, or external interfaces.
Functional requirements

▪ Functional requirements are the desired operations of a program, or system as


defined in software development and systems engineering.
▪ The systems in systems engineering can be either software electronic hardware or
combination software-driven electronics.
▪ Define what a product must do, what its features and functions are.
▪ Functional system requirements should describe the system services in detail.

For example
▪ The system sends a confirmation email when a new user account is created.
Nonfunctional requirements

▪ Nonfunctional requirements, not related to the system functionality, rather


define how the system should perform. Some examples are:
▪ The website pages should load in 3 seconds with the total number of simultaneous
users <5 thousand.
▪ The system should be able to handle 20 million users without performance
deterioration.
▪ Here’s a brief comparison and then we’ll proceed to a more in-depth explanation of
each group.
▪ Let’s get back to the email notification example. The fact that the system will
automatically send an email notification is a functional requirement. Non-functional
requirements will dictate when (5 seconds after sign-up) the email ought to be sent.
NFR

▪ Correctness: The software which we are making should meet all the
specifications stated by the customer.
▪ Usability/Learnability: The amount of efforts or time required to learn how
to use the software should be less. This makes the software user-friendly
even for IT illiterate people.
▪ Integrity : Just like medicines have side-effects, in the same way a software
may have a side-effect i.e. it may affect the working of another application.
But a quality software should not have side effects.
▪ Reliability : The software product should not have any defects. Not only
this, it shouldn't fail while execution.
▪ Efficiency : This characteristic relates to the way software uses the
available resources. The software should make effective use of the storage
space and execute command as per desired timing requirements.
NFRs

▪ Security : With the increase in security threats nowadays, this factor is gaining
importance. The software shouldn't have ill effects on data / hardware. Proper
measures should be taken to keep data secure from external threats
▪ Interoperability : Interoperability is the ability of software to exchange information with
other applications and make use of information transparently.
▪ Reusability : If we are able to use the software code with some modifications for
different purpose then we call software to be reusable.
▪ Adaptability : An software system can tolerate changes in its environment without
external intervention.
▪ Maintainability : Maintenance of the software should be easy for any kind of user.
▪ Flexibility : Changes in the software should be easy to make.
▪ Extensibility : It should be easy to increase the functions performed by it.
▪ Scalability : It should be very easy to upgrade it for more work(or for more number of
users).
Assignment no 1

▪ Characteristic of good SRS

You might also like