Professional Documents
Culture Documents
SE LECTURES Till 9 Feb by Ruchika Pharswan
SE LECTURES Till 9 Feb by Ruchika Pharswan
Email: ruchikapharswanlectures@gmail.com
Lecture 1 || 02 Jan 2024
2
02 Jan 2024 Lecture Presentation | @Ruchika Pharswan
3
Instructions
@Ruchika Pharswan
If there is mass bunk, its all absent and counted individually.
Also feel free to ask any doubts in class or even after class you can drop your query in SE WhatsApp group.
@Ruchika Pharswan
5
Course Outline
Unit 1: Introduction
Software development life-cycle, Water fall model, prototyping model, Incremental model, Iterative
enhancement Model, Spiral model.
Design Principles: Problem partitioning, abstraction. Top down and bottom up – design, structured
approach. Functional versus object oriented approach of design, design specification, Cohesiveness
and Coupling.
Overview of SA/SD Methodology, structured analysis, data flow diagrams, extending DFD to structure
chart.
Software Reliability and Quality Assurance: Reliability issues, Reliability metrics, reliability models,
Software quality, ISO 9000 certification for software industry, SEI capability maturity model.
Unit 5: Testing
Verification and validation, code inspection, test plan, test case specification. Level of testing: Unit,
Integration Testing, Top down and bottom up integration testing, Alpha and Beta testing, System
testing and debugging. functional testing, structural testing, Software testing strategies.
Software Crisis
It became clear that individual approaches to program development did not scale up to large and
complex software systems.
Throughout the 1970s and 1980s, a variety of new software engineering techniques and methods
were developed, such as structured programming, information hiding and object-oriented
development. Tools and standard notations were developed and are now extensively used.
IEEE defines software engineering as: The application of a systematic, disciplined, quantifiable
approach to the development, operation and maintenance of software.
Software
+ Engineering
Developing products, using well-defined,
scientific principles and methods.
Software is developed or engineered. It is not manufactured in the classical sense. The cost of
developing software lies almost completely in the engineering of the software, and not in the
“manufacturing” of a “product” that customers can behold in their hands.
@Ruchika Pharswan
Unlike Hardware, Software does not ―wear out. However, this does not mean that software does not
degrade over time. A software program is continuously changed over its lifetime. If these changes
occur too frequently, the bugs introduced by each change may slowly degrade the performance
and utility of the software as a whole. Obsolete
Unlike hardware, most software remains custom built, rather than built using “off the shelf”
components.
Hardware Failure
Rate over time
Vs.
Software Failure
Rate over time
Easy to Replicate
Highly dependend on User’s
Requirements
Complex/ submodules/
various features
@Ruchika Pharswan
16 Jan 2024 Lecture Presentation | @Ruchika Pharswan
According to the ISO/IEC 9126 standards Software characteristics are classified into
six major components:
16
Functionality Reliability
Efficiency
Usability
S/W
Characteristics
Portability Robustness
Maintainability Integrity
A set of attribute that Bear on the capability of software to maintain its level of
performances understated conditions for a stated period of time.
a) Fault tolerance: The dynamic errors should be handled by the software itself.
Reliability
b) Recoverability: In case of sudden stopping or interrupts the software should
come back to previous state in no time
c) Maturity: Should work for a long time with same efficiency and generate a
reliable client base and market.
Efficiency 18
a) In-time: said to be efficient when it generates the output on
time, or in lesser time.
b) In-Resources: The required resources as hardware requirements (RAM,
Cache speed ) should be less so that cost for operating should be less.
It refers to the extent to which the software can be used with ease. Or the
amount of effort or time required to learn how to use the software should be
less.
c) Operability: The working should be easy and processing data also should be
user friendly.
Refers to the ease with which the modifications can be made in a software
system to extend its functionality, improvement, performance or correct errors
Maintainability a) Testability: should be tested in advance or with real time data so that while
Or working with real environment there should be no error.
Flexibility b) Stability: should be giving the output and results while handling the abrupt
exceptions and errors on execution.
c) Changeability: It should be able to change according to the new and
upgraded system requirements and other environments.
d) Analyzability: The software should have the property of getting analyzed
by the new team of developers so that the upgradation can become
easy.
Good Software ?
PROGRAMS Documentation
Documentation : it is consists of different types of manuals.
Examples of documentation manuals are: Data Flow Diagram,
Flow Charts, ER diagrams, etc.
Customized products
These are systems that are customized for a particular customer. A software contractor develops the
software especially for that customer. Examples of this type of software include control systems for
electronic devices, systems written to support a particular business process, and air traffic control
systems.
Software vs product ?
S/W should be developed using a managed and understood development process. The organization developing
the software should plan the development process and have clear ideas of what will be produced and when it will
be completed. Of course, different processes are used for different types of software.
Dependability and performance are important for all types of systems. Software should behave as expected,
without failures and should be available for use when it is required. It should be safe in its operation and, as far as
possible, should be secure against external attack. The system should perform efficiently and should not waste
resources.
Understanding and managing the software specification and requirements (what the software should do) are
important. You have to know what different customers and users of the system expect from it and you have to
manage their expectations so that a useful system can be delivered within budget and to schedule.
You should make as effective use as possible of existing resources. This means that, where appropriate, you
should reuse software that has already been developed rather than write new software.
Application software:
Application software consists of standalone programs that solve a specific business need. It facilitates
business operations or management/technical decision making. It is used to control business functions in
real-time E.g. point-of-sale transaction processing, real-time manufacturing process control.
Engineering/Scientific software:
Engineering and scientific applications range -from astronomy to volcanology - from automotive stress
analysis to space shuttle orbital dynamics - from molecular biology to automated manufacturing E.g.
computer aided design, system simulation and other interactive applications.
Product-line software:
Designed to provide a specific capability for use by many different customers, product-line software
can focus on a limited and esoteric market place or address mass consumer markets E.g. Word
processing, spreadsheets, computer graphics, multimedia, entertainment, database management,
personal and business financial applications.
Web-applications: Web Apps are evolving into sophisticated computing environments that not only
provide standalone features, computing functions, and content to the end user, but also are integrated
with corporate databases and business applications.
AI software makes use of non numerical algorithms to solve complex problems that are not
amenable to computation or straightforward analysis. Application within this area includes robotics,
expert systems, pattern recognition, artificial neural networks, theorem proving, and game playing.
30
AI based software
SYSTEM software
Recognizing these problems, work was carried out to understand the process of software
development and to transform it into a reliable and robust system.
improved process should produce software that is correct, reliable, usable and maintainable. By
understanding the process, it should be possible to plan projects with more accurate predictions of
cost and time, and provide ways of monitoring intermediate stages of project progress, to be able
to react and re-plan if a project begins to go off budget or timescale.
The software process is the process of engineering and developing software; a process model, or life
cycle model is a descriptive model giving the best practices for carrying out software development
And above all of this, and in support of the whole discipline, are the tools. The tools support the
software process. Such tools are called computer-aided software engineering tools.
Any required re-work (as a result, for example, of changing software requirements) is very limited.
1. Requirements analysis and definition : The system’s services, constraints, and goals are established by
consultation with system users. They are then defined in detail and serve as a system specification.
Software Requirement Specification (SRS) : contained a detailed description of what the system
will do in the common language.
2. System and software design : The systems design process allocates the requirements to either
hardware or software systems. It establishes an overall system architecture. Software design involves
identifying and describing the fundamental software system abstractions and their relationships.
Software Design Document (SDD) : It defines the overall software architecture together with
high level and detailed design
3. Implementation and unit testing During this stage: the software design is realized as a set of programs
or program units. Unit testing involves verifying that each unit meets its specification.
4. Integration and system testing: The individual program units or programs are integrated and tested
as a complete system to ensure that the software requirements have been met. in this phase, the
modules are tested for their interactions with each other and with the system.
5. Operation and maintenance The system is installed and put into practical use. Maintenance involves
correcting errors that were not discovered in earlier stages of the life cycle, improving the
implementation of system units, and enhancing the system’s services as new requirements are
discovered.
1. Throwaway Prototyping
Also called rapid or close ended prototyping.
Once the actual requirements are understood, the prototype is discarded.
2. Evolutionary Prototyping
Also called as breadboard prototyping .
Actual functional prototypes with minimal functionality in the beginning.
The prototype developed from the heart of the future prototypes on top of which the
entire system is built.
3. Incremental Prototyping
Build multiple functional prototypes of the various sub-systems and then integrating all the
available prototypes to form a complete system.
11
1. Requirement analysis: In the first phase of the incremental model, the product analysis expertise identifies
the requirements. And the system functional requirements are understood by the requirement analysis team.
2. Design & Development: In this phase of the Incremental model of SDLC, the design of the system
functionality and the development method are finished with success. When software develops new
practicality, the incremental model uses style and development phase.
3. Testing: In the incremental model, the testing phase checks the performance of each existing
function as well as additional functionality. In the testing phase, the various methods are used to test
the behavior of each task.
4. Implementation: Implementation phase enables the coding phase of the development system.
After completion of this phase, the number of the product working is enhanced and upgraded up to
the final system product
Each phase of the Spiral Model is divided into four quadrants as shown in the above figure. The functions of these
four quadrants are discussed below-
1.Objectives determination and identify alternative solutions: Requirements are gathered from the customers
and the objectives are identified, elaborated, and analyzed at the start of every phase. Then alternative solutions
possible for the phase are proposed in this quadrant.
2.Identify and resolve Risks: During the second quadrant, all the possible solutions are evaluated to select the
best possible solution. Then the risks associated with that solution are identified and the risks are resolved using
the best possible strategy. At the end of this quadrant, the Prototype is built for the best possible solution.
3.Develop next version of the Product: During the third quadrant, the identified features are developed and
verified through testing. At the end of the third quadrant, the next version of the software is available.
4.Review and plan for the next Phase: In the fourth quadrant, the Customer’s evaluate the so far developed
version of the software. In the end, planning for the next phase is started.
Complex: The Spiral Model is much more complex than other SDLC models.
Expensive: Spiral Model is not suitable for small projects as it is expensive.
Too much dependability on Risk Analysis: The successful completion of the project is very much
dependent on Risk Analysis. Without very highly experienced experts, it is going to be a failure to
develop a project using this model.
Difficulty in time management: As the number of phases is unknown at the start of the project, so
time estimation is very difficult.
Requirements Phase:
•Description: COBOL was designed in the late 1950s by a committee led by Grace Hopper to create a
language for business data processing.
•Example: Define the requirements for a programming language that would be easily understood by
business professionals, support data processing, and be portable across different computer systems.
Design Phase:
• Description: Develop the language specifications, defining syntax, data structures, and processing
capabilities.
• Example: Create a detailed design document specifying how COBOL programs would be written, how data
would be handled, and how the language would support business-oriented tasks.
•Description: Write the compiler and runtime libraries based on the design specifications.
•Example: Implement the COBOL compiler and associated runtime libraries to translate COBOL programs into
machine-readable code and execute them.
Testing Phase:
•Description: Test the language and its compiler for correctness and adherence to specifications.
•Example: Perform rigorous testing to ensure that COBOL programs execute as expected, handle data
correctly, and meet the requirements of business applications.
Deployment Phase:
•Description: Release the COBOL language for use by businesses and computer systems.
•Example: COBOL was introduced for commercial use in the early 1960s and quickly became one of the
most widely used languages for business applications, particularly in the finance and government sectors.
•Description: Provide ongoing maintenance and support for the COBOL language.
•Example: Over the years, updates and new versions of COBOL have been released to address changing
business needs and to ensure compatibility with evolving computing environments.
IT:304 UNIT 2
@Ruchika Pharswan
The product 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.
It serves several goals depending on who is writing it. First, the SRS could be written by the client of a
system. Second, the SRS could be written by a developer of the system. The two methods create
entirely various situations and establish different purposes for the document altogether.
The first case, SRS, is used to define the needs and expectation of the users. The second case, SRS, is
written for various purposes and serves as a contract document between customer and developer.
223
FebJan2023
2024 Lecture
LecturePresentation
Presentation| @Ruchika
| @RuchikaPharswan
Pharswan
Characteristics of SRS 56
"elicit" has its origin in the Latin term "elicio," which means "to draw out," "to call forth," or "to evoke"
Elicitation is the process of discovering the requirements. In particular, elicitation often refers
to engaging with stakeholders/users to understand their needs and expectations when it
comes to the scope and detailed requirements of the project.
The goal of requirements elicitation is to ensure that the software development process is
based on a clear and comprehensive understanding of the customer needs and
requirements.
Requirements elicitation involves the identification, collection, analysis, and refinement of
the requirements for a software system.
The output of the requirements elicitation process is a set of clear, concise, and well-defined
requirements that serve as the basis for the design and development of the software system.
• The purpose here is to understand the elicitation activity scope, select the right
techniques, and plan for appropriate resources.
• If there’s any existing system, Collect the documentation and analyzing the current
system which makes developer to Understand the client’s business and industry, the
practices and solutions used, and the current and desired state of the organization.
• Analyze the stakeholder role : stakeholders affected by the project and decides which of
them should be involved in elicitation.
• RACI matrix (Responsible, Accountable, Consult, Inform) : To Determine which particular
stakeholder is responsible or accountable for an activity, whom consult on it, who should
be informed about changes.
• Prepares use case and process flow diagrams to discuss them with stakeholders.
• Prepare stakeholders for elicitation to make sure all participants understand the goal and
process of elicitation.
623
FebJan2023
2024 Lecture
LecturePresentation
Presentation| @Ruchika
| @RuchikaPharswan
Pharswan
59
Requirements Elicitation Stages
Conduct Elicitation:
• The purpose here is to explore and identify information related to user requirements by
conducting series of meetings with stakeholders.
• Define requirements for the development team and stakeholders.
• Manage the elicitation: (multiple stakeholders, multiple needs, make sure everyone agrees
on same).
• Discussions Document: (Document will be made, with every meeting, to record the
changes n the user requirement for future reference)
• Follow up with participants to
• In this step, the information gathered in the elicitation session is checked for accuracy.
• Once elicitation is done, go through requirements to make sure that each of these
questions is answered for each requirement:
This process usually consists of various graphical representations of the functions, data entities, external
entities, and the relationships between them. The graphical view may help to find incorrect, inconsistent,
missing, and superfluous requirements. Such models include the Data Flow diagram, Entity-Relationship
diagram, Data Dictionaries, State-transition diagrams, etc.
After modeling the requirements, we will have a better understanding of the system behavior. The
inconsistencies and ambiguities have been identified and corrected. The flow of data amongst various
modules has been analyzed. Elicitation and analyze activities have provided better insight into the system.
Now we finalize the analyzed requirements, and the next step is to document these requirements in a
prescribed format.
Requirements, which are related to functional aspect of software fall into this category. They define functions and
functionality within and from the software system.
These are the requirements that the end user specifically demands as basic facilities that the system should offer.
All these functionalities need to be necessarily incorporated into the system as a part of the contract. These are
represented or stated in the form of input to be given to the system, the operation performed and the output
expected. They are basically the requirements stated by the user which one can see directly in the final product.
(unlike the non-functional requirements)
Examples –
•Search option given to user to search
66Feb
Feb 2023
2024 Lecture
LecturePresentation
Presentation| |@Ruchika
@RuchikaPharswan
Pharswan
69
Non - Functional requirements
Requirements, which are not related to functional aspect of software, fall into this category. They are implicit or
expected characteristics of software, which users make assumption of.
These are basically the quality constraints that the system must satisfy according to the project contract. The
priority or extent to which these factors are implemented varies from one project to other. They are also called
non-behavioral requirements.
•Real-time Messaging:
• Users must be able to send and receive text messages in real-
time.
•Media Sharing:
• Users must be able to share images, videos, and audio
messages.
•Group Chats:
• The app must support group chats for multiple users.
•End-to-End Encryption:
• Messages must be encrypted for privacy and security.
•Cross-Platform Compatibility:
• The app must be available on multiple platforms (iOS, Android,
web) for seamless communication.
Features are categorized based on their priority and importance. Must-Have requirements are critical
for the core functionality of a messaging app, Should-Have features enhance the user experience,
Could-Have items add additional functionalities, and Wish List items represent innovative ideas for
future development.
This prioritization helps guide the development team in delivering the most critical features first while
providing flexibility for future enhancements.
After requirement specifications are developed, the requirements mentioned in this document are validated.
User might ask for illegal, impractical solution or experts may interpret the requirements incorrectly.
This results in huge increase in cost if not nipped in the bud. Requirements can be checked against following
conditions -
•If they can be practically implemented
•If they are valid and as per functionality and domain of software
•If there are any ambiguities
•If they are complete
86Feb
Feb 2023
2024 Lecture
LecturePresentation
Presentation| |@Ruchika
@RuchikaPharswan
Pharswan
Requirements Validation vs. Verification 75
Verification and Validation is the process of investigating whether a software system
satisfies specifications and standards and fulfills the required purpose.
Verification: Are we building the product right? Validation: Are we building the right product?
Verification activities confirm that the product
Validation confirms that the product actually
is built to the stated (documented)
meets the customer’s needs.
specifications
verification ensures the product is built right validation ensures the right product is built.
@Ruchika Pharswan
Quality control
When the client approaches the organization for getting the desired product developed, it comes up with
rough idea about what all functions the software must perform and which all features are expected from the
software. Referencing to this information, the analysts does a detailed study about whether the desired system
and its functionality are feasible to develop.
This study analyzes whether the software product can be practically materialized in terms of implementation,
contribution of project to organization, cost constraints and as per values and objectives of the organization. It
explores technical aspects of the project and product such as usability, maintainability, productivity and
integration ability.
The Output of this phase should be a feasibility study report that should contain adequate comments and
recommendations for management about whether or not the project should be undertaken.
89Feb
Feb2023
2024 Lecture
LecturePresentation
Presentation| @Ruchika
| @RuchikaPharswan
Pharswan
Types of feasibility study 79
Technical Feasibility - Is It technically feasible to develop the software with given constraints?
In Technical Feasibility current resources both hardware software along with required technology are
analyzed/assessed to develop project. This technical feasibility study gives report whether there exists
correct required resources and technologies which will be used for project development. Along with
this, feasibility study also analyzes technical skills and capabilities of technical team, existing
technology can be used or not, maintenance and up-gradation is easy or not for chosen technology
etc.
Schedule Feasibility - Is It feasible to develop the software with given schedule constraints?
In Schedule Feasibility Study mainly timelines/deadlines is analyzed for proposed project which
includes how much time teams will take to complete final project which has a great impact on the
organization as purpose of project may fail if it can’t be completed on time.
In Operational Feasibility degree of providing service to requirements is analyzed along with how much
easy product will be to operate and maintenance after deployment. Along with this other operational
scopes are determining usability of product, Determining suggested solution by software development
team is acceptable or not etc.
UNIT 3
IT:304 Part 1
Sources: Textbook, internet, Research papers, SELF
SYSTEM DESIGN
@Ruchika Pharswan
9 Feb 2024 Lecture Presentation | @Ruchika Pharswan
82
System Design
System design is a critical component of software engineering and involves making decisions about the
architecture, components, modules, interfaces, and data for a software system. Software design is a
mechanism to transform user requirements into some suitable form, which helps the programmer in
software coding and implementation.
A good system design is to organize the program modules in such a way that are easy to develop and
change. Structured design techniques help developers to deal with the size and complexity of programs.
Need / Importance
The choice of system design strategy will depend on the particular requirements of the software system,
the size and complexity of the system, and the development methodology being used. A well-designed
system can simplify the development process, improve the quality of the software, and make the
software easier to maintain.
Type:
Functional independence is achieved by developing functions that perform only one kind of task and do not
excessively interact with other modules. Independence is important because it makes implementation more
accessible and faster. Coupling (interdependence among modules) and cohesion (strength of a module).
Information hiding : modules should be specified that data include within a module is inaccessible to
other modules that do not need for such information.
Top-down Approach: This approach starts with the identification of the main
components and then decomposing them into their more detailed sub-
components.
Bottom-up Approach: A bottom-up approach begins with the lower details and
moves towards up the hierarchy. This approach is suitable in case of an existing
system.
Structured design fundamentally refers to breaking down problems into multiple well-organized
elements. The advantage of using this kind of design strategy is that it allows the problems to become
simpler. This enables problem-solving of the smaller elements so that they can fit into the bigger
picture. The solution modules are structured in a hierarchical order and a manner that there is less
cohesion between the modules.
The function-oriented design strategy is similar to structured design but instead divides the entire system
into subsystems referred to as functions. The system is considered to be a map or top-view of all the
combined functions. However, there is more information passing between the functions as compared
to structured design while the smaller functions promote abstraction. The function-oriented design also
allows the program to operate on input rather than on state.
Object-oriented Design : This design approach is completely different from the other two and focuses on
objects and classes. This kind of strategy revolves around the objects inside the system and their characteristics.
Further, the characteristics of the attributes of all these objects are encapsulated together and then the data
involved is restricted so that polymorphism can be enabled. The object-oriented design is based on identifying
objects and grouping them into classes based on their attributes. Then, the class hierarchy is determined and the
relationship between these classes is defined.
identifying objects grouping them in classes determining class hierarchy defining relationship