Software Development
Software Development
Unit 1. Introduction
Characteristics of good software:.//1. **Reliability**: Performs consistently and accurately under varying
conditions..//2. **Efficiency**: Uses resources effectively and completes tasks quickly.//3.
**Maintainability**: Easy to modify and update without causing errors..//4. **Scalability**: Can handle
increasing workload or users without significant changes..//5. **Usability**: Intuitive and user-friendly
interface..//6. **Security**: Protects against unauthorized access and data breaches..//7. **Portability**:
Works across different platforms and environments..//8. **Robustness**: Handles errors gracefully and
continues functioning..//9. **Flexibility**: Adapts to changing requirements or user needs..//10.
**Compatibility**: Integrates well with other software and systems.
1.1.3. Software process :Software process refers to the structured approach followed in software
development. A software process, often referred to as a software development process, is a set of activities,
methods, and practices used to create and maintain software systems. It provides a structured approach for
teams to plan, develop, test, deploy, and maintain software effectively. Here's a breakdown of the typical
stages involved in a software process:.//
1. **Requirements Gathering**: Understanding and documenting the needs and expectations of users and
stakeholders for the software system..//2. **Analysis**: Analyzing the requirements to identify the essential
features and functions of the software..//3. **Design**: Creating a detailed plan for how the software will be
structured and how its components will interact..//4. **Implementation**: Writing the code according to the
design specifications, often involving programming languages and development frameworks..//5. **Testing**:
Evaluating the software to ensure it meets the specified requirements and functions correctly. This involves
various testing techniques such as unit testing, integration testing, and system testing..//6. **Deployment**:
Releasing the software for use by end-users, which may involve installation, configuration, and setup
procedures..//7. **Maintenance**: Making updates and modifications to the software to fix bugs, add new
features, or improve performance over time..//
1.1.5. Software applications :Software applications, also known as software programs or simply "apps," are
computer programs designed to perform specific tasks or functions for end-users. Here's a brief overview of
some common types of software applications:.//1. **Word Processing**: Applications like Microsoft Word or
Google Docs are used for creating, editing, and formatting text-based documents..//2. **Spreadsheet**:
Software such as Microsoft Excel or Google Sheets allows users to organize data into rows and columns,
perform calculations, and create charts and graphs..//3. **Presentation**: Presentation software like
Microsoft PowerPoint or Apple Keynote enables users to create slideshows for presenting information in a
visually engaging format..//4. **Web Browser**: Applications such as Google Chrome, Mozilla Firefox, or
Microsoft Edge allow users to access and navigate the World Wide Web, view websites, and interact with
web-based content..//5. **Email Client**: Programs like Microsoft Outlook, Gmail, or Apple Mail provide tools
for managing email communication, sending and receiving messages, and organizing contacts..//6. **Media
Player**: Software applications such as VLC Media Player or Windows Media Player allow users to play audio
and video files in various formats..//7. **Graphics Editing**: Tools like Adobe Photoshop or GIMP enable
users to create and manipulate digital images, including editing photos, creating illustrations, and designing
graphics..//8. **Antivirus**: Antivirus software such as Norton, McAfee, or Avast helps protect computers
from viruses, malware, and other security threats by scanning and removing malicious software..//9. **Project
3
Management**: Applications like Trello, Asana, or Microsoft Project assist teams in planning, organizing, and
tracking tasks and projects, facilitating collaboration and communication..//10. **Accounting**: Accounting
software such as QuickBooks or Xero helps businesses manage financial transactions, track expenses and
income, and generate financial reports..//
1.1.6.2. Product and process :In software engineering, the product and process refer to two distinct but
interconnected aspects of software development:
**Product:**The product aspect focuses on the software itself—the end result of the development
process.The goal of the product aspect is to deliver a high-quality software solution that meets the needs and
expectations of its users. It encompasses the following:.//- **Requirements**: Understanding and
documenting what the software should do..// **Design**: Planning how the software will be structured and
function..//**Implementation**: Writing the actual code to build the software..//**Testing**: Verifying that
the software meets the specified requirements and functions correctly..//**Deployment**: Releasing the
software for use by end-users..//**Maintenance**: Making updates and improvements to the software over
time.The goal of the product aspect is to deliver a high-quality software solution that meets the needs and
expectations of its users..//
**Process:**:The process aspect focuses on how the software is developed—the methods, practices, and
procedures followed throughout the development lifecycle. This includes:.// **Methodologies**: Approaches
such as Waterfall, Agile, Scrum, and DevOps that guide the overall development process..// **Tools and
Technologies**: Software tools and technologies used to support development activities, such as version
control systems, integrated development environments (IDEs), and automated testing
frameworks..//**Quality Assurance**: Processes and techniques for ensuring the quality and reliability of the
software, including code reviews, testing strategies, and continuous integration/continuous deployment
(CI/CD) pipelines..//**Project Management**: Techniques for planning, organizing, and controlling software
development projects, including scheduling, budgeting, and risk management..//
4
1. **Process Metrics:**Process metrics focus on assessing the efficiency, effectiveness, and quality of the
software development process itself. These metrics provide insights into how well the team is performing and
whether the process is meeting its objectives. Examples of process metrics include:.// **Cycle Time**: The
time taken to complete a specific task or activity within the development process, such as coding, testing, or
deployment..// **Lead Time**: The time elapsed from when a work item is requested until it is completed
and delivered to the customer..//**Throughput**: The rate at which work items are completed or delivered
within a given time frame, indicating the team's productivity..//**Defect Density**: The number of defects
found per unit of code or work output, highlighting the quality of the development process..//**Change
Request Rate**: The frequency of change requests or modifications made to the software requirements or
design, indicating the project's volatility..// **Effort Variance**: The difference between the estimated effort
and the actual effort expended on a task or project, providing insights into project estimation accuracy..//
2. **Product Metrics:** Product metrics focus on evaluating the quality, functionality, and performance of
the software product itself. These metrics help assess whether the software meets user requirements,
performs as expected, and adheres to quality standards. Examples of product metrics include:.//**Code
Coverage**: The percentage of code that is executed during testing, indicating the thoroughness of the test
5
suite..// **Cyclomatic Complexity**: A measure of the complexity of the software's control flow, highlighting
areas of potential risk and difficulty in understanding..//**Number of Defects**: The total count of defects
identified in the software, categorized by severity and priority..//**Mean Time Between Failures (MTBF)**:
The average time elapsed between consecutive failures of the software, indicating its reliability..// **Response
Time**: The time taken for the software to respond to a user's request or input, measuring its performance
and responsiveness..// **Usability Metrics**: Measures such as user satisfaction surveys, task completion
rates, and error rates, assessing the software's ease of use and user experience..//
1. **Generic Software Product**: **Description**: Pre-packaged software solutions designed for general use
across various industries or users..//**Examples**: Operating systems like Windows, macOS, or
Linux/Productivity suites such as Microsoft Office or Google Workspace./Web browsers like Google Chrome,
Mozilla Firefox, or Microsoft Edge.
1.1.7. Roles of management in software development :People, product, process and project
In software development, management plays crucial roles in overseeing the project, ensuring its success, and
6
1.4. System development Life cycle :The System Development Life Cycle (SDLC) is a structured approach
used to plan, design, develop, implement, and maintain information systems.The SDLC provides a systematic
approach to managing the entire lifecycle of a system, from conception to retirement, ensuring that projects
are delivered on time, within budget, and with the expected quality. Here's an overview:.//1. **Planning**:
Identify the need for a new system, define objectives, assess feasibility, and create a project plan..//2.
**Analysis**: Gather requirements from stakeholders, analyze existing systems and processes, and define
system specifications..//3. **Design**: Create a detailed design for the system, including architecture, data
models, user interfaces, and system components..//4. **Development**: Build the system based on the
design specifications, including coding, testing, and integration of system components..//5. **Testing**: Verify
that the system meets requirements and functions correctly through various testing methods such as unit
testing, integration testing, and system testing..//6. **Implementation**: Deploy the system into the
production environment, including installation, configuration, data migration, and user training..//7.
**Maintenance**: Monitor and support the system in production, address issues, implement updates, and
make enhancements as needed to ensure continued functionality and effectiveness.
1.5. System development models :System development models in software development refer to structured
approaches or methodologies used to guide the process of designing, building, and implementing software
systems.
1. **Waterfall Model**:**Introduction**: The waterfall model is a sequential approach to software
development, where each phase of the project is completed before moving on to the next. It follows a linear
and rigid structure, with distinct phases such as requirements, design, implementation, testing, deployment,
and maintenance.
- **Advantages**- Clear and structured approach..//- Easy to understand and manage..//
- Well-suited for projects with stable requirements..//
- **Disadvantages**- Limited flexibility for changes..//- High risk of late-stage failures..// ---Customer
feedback is limited until the end of the project
2. **Spiral Model**:**Introduction**: The spiral model is a risk-driven approach that combines elements of
both waterfall and iterative development models. It involves cyclic iterations of planning, risk analysis,
development, and evaluation, with each iteration resulting in a prototype that evolves into the final product.
- **Advantages**: - Incorporates risk management throughout the development process..//- Allows for
7
incremental development and early prototypes..// - Well-suited for large, complex projects with evolving
requirements..//
- **Disadvantages**: - Requires more time and resources due to iterative nature..//
- Complex to manage and implement..//- May lead to scope creep if not managed properly.
3. **Prototyping Model**:**Introduction**: The prototyping model involves the creation of early,
scaled-down versions of the software to gather feedback and refine requirements. It allows for rapid
development and iteration, with prototypes used to clarify requirements, validate designs, and identify
potential issues before final implementation.
- **Advantages**:- Allows for early user involvement and feedback..// - Facilitates rapid development
and iteration..//- Helps clarify requirements and identify design issues early..//
- **Disadvantages**:- Risk of prototype becoming the final product without proper planning..//- May lead
to incomplete or unstable solutions if not managed properly..//- Requires careful management of scope and
expectations..//
4. **Agile Development**:**Introduction**: Agile development is an iterative and collaborative approach
that prioritizes customer collaboration, adaptive planning, and incremental delivery of working software. It
emphasizes flexibility, responsiveness to change, and continuous improvement, with regular iterations or
sprints focusing on delivering small, incremental improvements to the product.
- **Advantages**:- Emphasizes customer collaboration and responsiveness to change..//- Allows for frequent
delivery of working software..//- Promotes adaptive planning and continuous improvement..//
- **Disadvantages**:- Requires strong communication and collaboration among team members..//- May
be challenging for large, distributed teams..// - Dependency on customer availability and involvement. .//
1.6. Role and attributes of system analyst :The role of a system analyst involves analyzing, designing, and
implementing information systems to meet the needs of an organization. Here's a concise overview of their
role and attributes:
**Role**:
1. **Analysis**: Gather and analyze user requirements, business processes, and system functionalities..//2.
**Design**: Design system solutions, including data models, user interfaces, and system architectures..//3.
**Implementation**: Work with developers to implement and test system components, ensuring alignment
with requirements..//4. **Evaluation**: Evaluate system performance, usability, and effectiveness through
testing and user feedback..//5. **Documentation**: Create and maintain system documentation, including
requirements specifications, design documents, and user manuals..//
**Attributes**:1. **Analytical Skills**: Ability to analyze complex problems and identify solutions..//2.
**Communication Skills**: Effective communication with stakeholders, developers, and users..//3.
**Technical Proficiency**: Knowledge of software development, databases, and system architecture..//4.
**Problem-Solving Skills**: Ability to troubleshoot issues and propose effective solutions..//5. **Attention to
Detail**: Thoroughness in documenting requirements and designing system solutions..//
1.7. Tools Used by System Analyst :
Here are some tools used by system analysts:.//1. **Requirement Gathering**: Interviews, surveys,
questionnaires..//2. **Modeling**: UML, DFDs, ERDs..//3. **Prototyping**: Wireframing tools, prototyping
software..//4. **Project Management**: Task management software, Gantt charts..//5. **Documentation**:
Word processors, collaboration tools..//6. **Analysis and Design**: CASE tools.
Unit 2. Development Tools
process surrounded by external entities (such as users, other systems, or databases) with which it exchanges
data...// - Arrows depict the flow of data between the system and its external entities, without detailing
internal processes or data flows...//
2. **Data Flow Diagram (DFD):**A DFD elaborates on the context diagram by breaking down the system into
more detailed processes and data flows...//- It includes processes (represented by circles or rectangles) that
transform input data into output data...//- Data stores (represented by rectangles) hold and retrieve data
within the system...//- Data flows (represented by arrows) show how data moves between processes, data
stores, and external entities...//- DFDs can be hierarchical, with multiple levels of detail, starting from a context
diagram at the highest level and progressively breaking down the system into more detailed diagrams.
2.3. Levels in DFD (upto level 2) :Data Flow Diagrams (DFDs) can be structured into multiple levels to provide
increasing levels of detail about the system being modeled. Typically, DFDs are divided into several levels, with
each level providing more detailed information than the previous one. Here's a breakdown of the levels, up to
level 2:
1. **Level 0 (Context Diagram):** - This is the highest level of abstraction in a DFD...// - It represents the
entire system as a single process surrounded by external entities...//- It shows the interactions between the
system and its external entities without detailing internal processes...//
2. **Level 1:** - At this level, the system from the context diagram is broken down into major high-level
processes...// - Each major process is represented as a separate process on the diagram...// - Data flows
between the major processes and external entities are shown, along with any necessary data stores...//
3. **Level 2:** - Level 2 provides further decomposition of the processes identified at level 1...//- Each process
from level 1 is broken down into its subprocesses or subfunctions...//- Data flows between these subprocesses,
data stores, and external entities are depicted...//- Level 2 DFDs provide more detailed insight into how data
moves within the system and how processes interact with each other...//
2.4. Physical and Logical DFD with example
A Data Flow Diagram (DFD) is a graphical representation of the flow of data through a system. It consists of
processes, data stores, data flows, and external entities.
1. **Physical DFD**: It focuses on how data is physically processed within the system. It includes detailed
information about the hardware, software, databases, and other physical components involved in the system.
Example: In a banking system, a physical DFD might show how customer data is stored in a database, how
transactions are processed using specific software applications, and how data flows between different servers
and terminals.
2. **Logical DFD**: It abstracts away from the physical implementation and concentrates on the logical flow
of data in the system, regardless of how it is actually implemented.
Example: Continuing with the banking system example, a logical DFD might show how customer requests for
transactions are received, processed, and fulfilled without detailing the specific software or hardware
involved. It focuses on the essential data flows and processes.
concise manner.
The main components of an ER diagram are:
1. **Entities**: These are the objects or things that we want to model in the database. Each entity is
represented as a rectangle in the diagram, and it typically corresponds to a table in the database.
2. **Attributes**: Attributes are the properties or characteristics of entities. They are depicted as ovals
connected to their respective entities. For example, in a "Student" entity, attributes might include "StudentID,"
"Name," and "DateOfBirth."
3. **Relationships**: Relationships describe how entities are related to each other. They are represented as
diamond shapes connecting two or more entities. Relationships can be one-to-one, one-to-many, or
many-to-many.
4. **Cardinality**: Cardinality defines the number of instances of one entity that can be associated with the
number of instances of another entity.
2.6. Describing a system with ER Diagram
Feasibility analysis is the process of assessing whether a proposed project is technically, financially, and
practically viable before committing resources to it. It involves evaluating factors like technical requirements,
cost, time constraints, market demand, and potential risks to determine if the project is feasible and worth
pursuing.
3.3. Payback Period :The Payback Period is a financial metric used in software development to evaluate how
long it takes for the initial investment in a project to be recouped through its generated cash flows. Here's a
brief description:
1. **Definition**: The Payback Period is the length of time required for the cumulative net cash flows from a
software project to equal the initial investment.
10
2. **Calculation**: It is calculated by adding up the cash flows generated by the project each period until the
sum equals the initial investment. The period when this occurs is the Payback Period.
3. **Decision Making**: A shorter payback period is generally preferred, as it indicates a quicker return on the
investment. However, different projects may have different acceptable payback periods based on factors such
as risk tolerance and strategic objectives.
4. **Risk Assessment**: Payback Period is often used as a simple measure of risk, with shorter periods
indicating lower risk due to the quicker return of investment.
5. **Limitations**: Payback Period does not account for the time value of money or consider cash flows
beyond the payback period. It also does not measure the profitability of the investment after the payback
period is reached.
6. **Use in Software Development**: Payback Period can be used alongside other financial metrics to assess
the viability of software projects, especially in cases where rapid recouping of investment is a priority.
7. **Example**: If a software project costs $100,000 to develop and generates annual cash flows of $30,000,
the payback period would be approximately 3.33 years ($100,000 initial investment / $30,000 annual cash
flows).
3.4. Feasibility Report :A feasibility report in software development is a comprehensive document that
assesses the viability of a proposed software project from various perspectives including technical, economic,
operational, and scheduling. :A feasibility report in software development evaluates the viability of a
proposed project:Here's a concise overview:
1. **Technical Feasibility**: Assessing if the project can be developed with available resources and
technology...//2. **Economic Feasibility**: Analyzing costs, returns, and cost-benefit analysis...//3.
**Operational Feasibility**: Evaluating alignment with organizational processes and user acceptance...//4.
**Scheduling Feasibility**: Ensuring the project can be completed within the desired timeframe...//5. **Risk
Assessment**: Identifying and mitigating potential risks...//6. **Recommendations**: Providing insights on
whether to proceed, modify, or abandon the project...//7. **Stakeholder Input**: Involving key stakeholders
in the analysis...//8. **Documentation**: Summarizing findings, assumptions, and conclusions for
decision-makers.
3.5. System Proposal and its components:A system proposal in software development outlines a
comprehensive plan for a proposed software project. It typically includes the following components:1.
**Introduction**: Provides an overview of the proposed system, its objectives, and the rationale behind its
development...//2. **Problem Statement**: Describes the existing challenges or issues that the proposed
system aims to address...//3. **Scope**: Defines the boundaries and extent of the proposed system, including
its features, functionalities, and intended users...//4. **Objectives**: States the specific goals and outcomes
that the proposed system aims to achieve...//5. **Methodology**: Outlines the approach and methodology
that will be used to develop, implement, and evaluate the proposed system...//6. **System Requirements**:
Specifies the hardware, software, and infrastructure requirements needed to support the proposed
system...//7. **System Architecture**: Provides an overview of the system's architecture, including its
components, modules, and interactions...//8. **Data Model**: Describes the structure and organization of
the data that will be used and managed by the proposed system...//9. **User Interface Design**: Presents the
design and layout of the system's user interface, including wireframes or mockups to illustrate the user
experience...//10. **Implementation Plan**: Details the timeline, tasks, resources, and milestones for the
development and implementation of the proposed system...//
Software project planning is the process of defining project goals, scope, resources, schedules, and tasks to
ensure successful project execution.Software project planning involves defining project goals, scope,
resources, schedules, and tasks. Key components include setting objectives, defining scope, gathering
requirements, identifying resources, creating a work breakdown structure, estimating time and effort, and
scheduling tasks for successful project execution.
4.1. Size estimation Size estimation refers to the process of determining the scale or magnitude of the
software product to be developed. It involves quantifying the size of the software in terms of various metrics,
such as lines of code, function points, story points, or other relevant measures. Accurate size estimation is
11
crucial for determining project scope, allocating resources, and estimating effort, schedule, and cost.
Here are some commonly used techniques for size estimation in software project planning:
- **Lines of Code (LOC)**: Estimates size based on code volume, but can vary due to language and
practices...//- **Function Points (FP)**: Measures functionality from a user perspective, independent of
tech...//- **Story Points**: Relative effort measure in agile based on complexity, not time or size...//- **Use
Case Points (UCP)**: Variant of FP tailored for object-oriented systems...//- **Object Points**: Sizes based on
object or class complexity, ideal for OOP.- **Story Mapping**: Visual method breaking project into
manageable user stories...//- **Proxy-Based Estimation**: Uses past projects or industry benchmarks for
quick estimates...//
4.2. Cost estimation :Cost estimation is predicting the financial investment required to complete a software
project. It's a crucial step in project planning and management, as it helps stakeholders allocate resources
effectively, set budgets, and make informed decisions.
Here are some common methods used for cost estimation in software development:
- **Expert Judgment**: Experienced teams provide estimates based on expertise and past projects...//-
**Analogous Estimation**: Compares current project to similar past ones for cost estimation...//-
**Parametric Estimation**: Uses mathematical models based on project characteristics...//- **Bottom-Up
Estimation**: Breaks project into tasks, estimating each for overall cost...//- **Top-Down Estimation**:
Provides high-level estimate, refined with project details...//- **Three-Point Estimation**: Estimates based on
likely, pessimistic, and optimistic scenarios...//- **Vendor Quotes**: Obtains quotes for outsourced
components...//- **Resource-Based Estimation**: Estimates costs based on required resources.-
**Cost-Benefit Analysis**: Evaluates costs against expected benefits...//- **Iterative Estimation**: Ongoing
process updated as project progresses...//
4.3. Project Scheduling :Project scheduling is the process of creating a timeline or plan that outlines when
project tasks and activities will be performed. It involves determining the sequence of activities, estimating
the duration of each activity, and allocating resources to ensure the project is completed on time and within
budget.
Here's a brief overview of project scheduling.
- **WBS**: Breaks project into manageable tasks...//- **Task Sequencing**: Orders tasks efficiently,
considering dependencies...//- **Task Duration Estimation**: Predicts time needed for each task...//-
**Resource Allocation**: Assigns resources based on availability and skills...//- **Critical Path Method
(CPM)**: Identifies longest sequence of tasks...//- **Gantt Charts**: Visualizes project schedule and
progress...//- **Contingency Planning**: Prepares for potential delays and risks...//- **Monitoring and
Control**: Tracks progress and adjusts as needed...//
4.5. COCOMO II :COCOMO II, which stands for Constructive Cost Model II, is an advanced software
engineering method used for estimating the cost, effort, and duration of software development projects. It
is an extension and improvement of the original COCOMO (Constructive Cost Model) and was developed at the
University of Southern California. COCOMO II allows for the estimation of cost, effort, and schedule when
planning new software development activities. This model includes three sub-models: End User Programming,
Intermediate Sector, and Infrastructure Sector, each tailored to different aspects of software development.
COCOMO II also consists of stages that support estimation at different phases of a project, such as prototyping,
12
early design, and post-architecture stages. The model uses various inputs like object points, function points, or
source lines of code, along with scale factors and cost drivers to adjust effort and cost estimation results
COCOMO II is an improvement over its predecessor, offering more flexibility and accuracy in estimation. It
consists of three sub-models:
Application Composition Model (ACM): This model is suitable for estimating the effort and schedule for
developing software using existing components or reusable code.
Early Design Model (EDM): The EDM is used during the early stages of a project when detailed information is
limited. It provides rough estimates based on high-level characteristics of the software to be developed.
Post-Architecture Model (PAM): The PAM is used after the software architecture has been defined. It provides
more accurate estimates based on detailed information about the system architecture and design.
4.6. Software risk management:Software risk management involves identifying, assessing, and mitigating
potential risks associated with software development and deployment. It includes:
1. **Identification**: Identifying potential risks such as technical, schedule, cost, or resource-related
issues...//2. **Assessment**: Evaluating the likelihood and potential impact of each identified risk on the
project objectives...//3. **Mitigation**: Developing strategies to minimize or eliminate risks, which may
involve proactive measures like contingency planning, risk avoidance, risk transfer, or risk acceptance...//4.
**Monitoring and Control**: Continuously monitoring the project to detect new risks and assessing the
effectiveness of risk mitigation strategies...//5. **Documentation**: Maintaining comprehensive
documentation of identified risks, their assessment, and the actions taken to manage them throughout the
software development lifecycle...//Effective risk management helps ensure the successful delivery of software
projects by proactively addressing potential challenges and uncertainties...//
Unit 5. Input –Output Design
Input-Output (I/O) design is a crucial aspect of software development that focuses on how data is entered
into a system, processed, and then presented or outputted to users or other systems. It's essentially about
designing the interfaces through which users interact with the software and how the software interacts with
other systems.Key considerations in input-output design:
1. **User Interface Design**: Designing how users interact with the software, including layout, forms, and
navigation...//2. **Input Design**: Ensuring correct data entry through validation and formatting, considering
various input methods...//3. **Output Design**: Presenting processed data effectively, including format,
layout, and delivery methods...//4. **Error Handling**: Clear communication of errors to users with guidance
for resolution...//5. **Accessibility**: Designing for diverse user abilities, including assistive technologies...//6.
**Internationalization and Localization**: Adapting the software for global use, considering language,
culture, and formats...//7. **Security**: Addressing data security concerns, including access control and
protection against cyber threats...//8. **Integration**: Enabling interaction with other systems, considering
protocols and data exchange methods...//
In software development, these components refer to various aspects of user interface (UI) and user experience
(UX) design:
5.1. **Input Form Design:** Input form design is a crucial aspect of software development, focusing on
creating user-friendly interfaces that efficiently collect data from users. The design process involves several key
considerations to ensure effective data input and minimize errors. Here are some essential aspects of input
form design in software development:
1. **Purpose and Context:** Understand why the form is needed and how users will use it...//
2. **User-Centered Design:** Design with users in mind, making it intuitive and easy to use...//
3. **Clarity and Simplicity:** Keep it simple, clear, and easy to understand...//
4. **Field Types and Validation:** Choose appropriate fields and ensure data accuracy...//
5. **Responsive Design:** Make it adaptable to different devices for a consistent experience...//
6. **Progressive Disclosure:** Break long forms into smaller sections to reduce complexity...//
7. **Accessibility:** Ensure it's accessible to all users, including those with disabilities...//
8. **Visual Design:** Pay attention to colors, typography, and spacing for a pleasant look...//
9. **Feedback and Confirmation:** Provide clear feedback after submission to reassure users.
These principles can guide you in designing user-friendly input forms..
5.2. **Input Screen Design:** Input screens are broader than forms and encompass entire screens or pages
13
where users interact with the application to input data or perform actions. This design involves organizing
input elements, navigation controls, feedback mechanisms, and overall layout to ensure usability and
efficiency.
To design effective input screens:
1. **Clarity:** Ensure users understand the screen's purpose...//2. **Intuitive Layout:** Design for easy
navigation...//3. **Consistency:** Maintain uniformity in design elements...//4. **Space Efficiency:**
Organize elements to optimize screen usage...//5. **Responsive Design:** Ensure compatibility across
devices...//6. **Error Handling:** Provide clear guidance for input errors..//.7. **Progress Indicators:** Show
users their progress if the input process is multi-step...//8. **Accessibility:** Make the screen usable for all,
including those with disabilities...//9. **Feedback:** Offer immediate feedback on user actions...//10.
**Testing:** Gather user feedback for continuous improvement...//
5.3. **Menu Design:** Menu design refers to designing the navigation system of an application. This includes
the layout, structure, and visual presentation of menus, submenus, navigation bars, or any other navigational
elements that help users move through the application's features and functionalities seamlessly.To create
effective menu designs:
1. **Clarity of Navigation:** Ensure easy access to all application features...//
2. **Hierarchy:** Organize menu items logically, prioritizing important functions...//
3. **Consistency:** Maintain uniformity in layout and style across menus...//
4. **Visual Cues:** Use icons, colors, or typography to differentiate menu items...//
5. **Responsive Design:** Adapt menus for various screen sizes and devices...//
6. **Accessibility:** Make menus usable for all users, including those with disabilities...//
7. **Feedback:** Provide visual indicators or animations to confirm selections...//
8. **Customization:** Allow users to personalize menus based on their preferences...//
9. **User Testing:** Gather feedback to refine menu design for optimal usability...//
10. **Simplicity:** Keep menus concise and avoid overwhelming users with too many options...//
5.4. **Output Design:** Output design concerns how information and results are presented to users after
input or action. It includes formatting, visualization, typography, and any other visual elements used to convey
data, messages, or outcomes effectively. Output design aims to make information easy to understand,
relevant, and actionable for users.
To craft effective output designs:
1. **Clarity:** Ensure that the output is easy to comprehend and relevant to user needs...//2. **Hierarchy:**
Organize information hierarchically, prioritizing key details for quick understanding...//3. **Consistency:**
Maintain uniformity in formatting, layout, and visual style across outputs...//4. **Visual Representation:**
Use charts, graphs, or visual elements to enhance understanding and engagement...//5. **Accessibility:**
Ensure that output is accessible to all users, including those with disabilities, through clear presentation and
alternative formats...//6. **Responsive Design:** Adapt output formats for different devices and screen sizes
to optimize readability and usability...//7. **Interactivity:** Incorporate interactive elements to allow users to
explore data or customize outputs according to their preferences...//8. **Feedback:** Provide clear feedback
to users on the outcome of their actions or requests...//9. **Customization:** Allow users to customize
output formats or preferences to suit their needs...//10. **User Testing:** Gather feedback from users to
refine output designs and improve usability over time.
Unit 6. Software Reliability
Software reliability refers to the probability of a software system performing its intended functions without
failure under specified conditions for a specified period of time. In short, it's about how dependable and
consistent a software system is in delivering its intended functionality without errors or breakdowns. Achieving
high software reliability involves rigorous testing, debugging, and continuous monitoring to identify and
address potential issues that could compromise the system's performance and stability.
6.2. Software quality :Software quality is ensured through processes like quality assurance (QA) and quality
control (QC). QA focuses on preventing defects, while QC involves inspecting and testing products to meet
quality standards. Software testing is crucial for identifying errors early, improving software quality, increasing
customer satisfaction, and saving time and costs. Total Quality Management (TQM) is a comprehensive
approach to quality that aims to detect and reduce errors continuously, leading to better products and
services.
14
6.3. Software reliability model :Software reliability models are mathematical or statistical techniques used
to predict or estimate the reliability of software systems. It defines the likelihood of error-free operation of a
software application within a specified environment for a specific duration. Software reliability models aim to
quantify software reliability by predicting how software reliability should improve over time as errors are
identified and corrected. There are several types of software reliability models, each with its own approach
and assumptions. Here are a few common ones:
1. **Exponential Model**: Assumes software failures occur randomly over time, following an exponential
distribution. Simple but may not accurately represent real-world scenarios...//2. **NHPP Model**: Considers
non-uniform failure distribution over time. More flexible, better for varying failure rates...//3. **Reliability
Growth Models**: Assume software reliability improves over time with defect identification and fixing.
Examples: JM, Musa-Okumoto, Littlewood-Verrall models...//4. **Bayesian Models**: Incorporate prior
knowledge and update reliability estimates based on new data...//5. **Markov Models**: Represent software
system as a Markov chain, capturing state transitions over time. Useful for complex systems...//
6.4. Capability Maturity Model (CMM) :The Capability Maturity Model (CMM) is a framework used to assess
and improve the maturity of an organization's software development processes. Originally developed by the
Software Engineering Institute (SEI) at Carnegie Mellon University, the CMM provides a structured approach
for organizations to understand their current capabilities, identify areas for improvement, and establish a
roadmap for achieving higher levels of process maturity.
The CMM consists of five maturity levels, each representing a progressively more mature and capable
organizational process:
1. **Initial**: Processes are ad hoc and chaotic. Success depends on individual effort rather than standardized
processes.
2. **Repeatable**: Basic project management processes are established to track cost, schedule, and
functionality. Processes are somewhat consistent across projects.
3. **Defined**: Processes are well-defined and documented. Standard processes are established and followed
across the organization.
4. **Managed**: Processes are quantitatively managed using statistical and other quantitative techniques.
Process performance is measured and controlled.
5. **Optimizing**: Continuous process improvement is the focus. Processes are continuously monitored and
refined to improve efficiency and effectiveness.
Organizations can use the CMM to assess their current process maturity level, identify areas for improvement,
and define a roadmap for advancing to higher maturity levels. The CMM has been widely adopted in the
15
software industry and has influenced other process improvement frameworks, such as CMMI (Capability
Maturity Model Integration).
Software testing is the process of systematically evaluating software to ensure it meets quality standards
and functions correctly. It includes various types such as unit testing, integration testing, system testing,
acceptance testing, regression testing, performance testing, security testing, and usability testing. Effective
testing helps identify defects early, ensuring higher quality software products.There are several types of
software testing, including:
1. **Unit Testing**: Testing individual software components to ensure they work correctly...//
2. **Integration Testing**: Testing how components interact to ensure they work together as expected...//3.
**System Testing**: Testing the entire software system to ensure it meets requirements and functions
correctly.v4. **Acceptance Testing**: Testing by end-users to ensure the software meets their needs...//5.
**Regression Testing**: Testing to ensure recent changes don't break existing functionality...//6.
**Performance Testing**: Testing software under different conditions to ensure it meets performance
requirements...//7. **Security Testing**: Identifying vulnerabilities and protecting sensitive data...//8.
**Usability Testing**: Evaluating user interface and experience for ease of use...//
7.2. Testing process :The software testing process involves the following steps:
1. **Test Planning**: Define test objectives, scope, and strategies...//2. **Test Case Development**: Create
detailed test cases based on requirements...//3. **Test Environment Setup**: Prepare the necessary
hardware, software, and data for testing...//4. **Test Execution**: Run test cases and record results...//5.
**Defect Tracking**: Identify and document any issues found during testing...//6. **Defect Resolution**:
Developers fix identified defects...//7. **Regression Testing**: Re-run tests to ensure fixes didn't introduce
new issues...//8. **Test Reporting**: Summarize test results and provide insights for decision-making...//9.
**Test Closure**: Evaluate testing process and prepare final documentation...//
16
7.3. Black box or functional testing :Evaluates the functionality of software without considering its internal
structure. Testers focus on inputs and outputs to verify if the software behaves as expected from the user's
perspective.
7.4. White Box Testing or Structural testing :Examines the internal workings of the software, including code,
algorithms, and data structures. Testers design tests based on understanding of the software's architecture
and implementation details, aiming to ensure all code paths are tested and defects are uncovered.
7.6. Testing tools :Testing tools are software applications or frameworks designed to support various aspects
of the software testing process. They automate testing tasks, enhance efficiency, and improve the accuracy of
test execution and analysis. . They include:
1. Test Management Tools: Organize test cases, plans, and track defects.Example: HP ALM (Application
Lifecycle Management), Jira, TestRail.
2. Automated Testing Tools: Automate test case execution for functional, regression, and performance
testing.Example: Selenium WebDriver, Appium (for mobile testing), Postman (for API testing).
3. Load Testing Tools: Simulate real-world usage to assess performance and scalability.Example: Apache
JMeter, LoadRunner, Gatling.
4. Security Testing Tools: Identify vulnerabilities and security flaws.Example: OWASP ZAP, Burp Suite,
Acunetix.
5. Code Analysis Tools: Analyze code for defects and adherence to coding standards.Example: SonarQube,
Checkmarx, ESLint (for JavaScript).
17
6. Continuous Integration Tools: Automate code integration and testing processes.Example: Jenkins, Travis CI,
GitLab CI/CD.
7. Performance Monitoring Tools: Monitor software performance in real-time.Example: New Relic, Dynatrace,
AppDynamics.
8. Test Data Management Tools: Manage test data creation and maintenance.Example: Tricentis Tosca,
Informatica TDM, GenRocket
Unit 8. Software Maintenance
Software maintenance in software engineering is the modification of a software product after delivery to
correct faults, to improve performance or other attributes.Software maintenance involves making
modifications to software products after their delivery to correct faults, improve performance, or adapt the
software to a changed environment. It encompasses various activities such as bug fixing, enhancements,
optimizations, and updates to ensure the software remains functional and relevant over time. Software
maintenance aims to preserve and extend the life of software systems while minimizing disruptions to users
and maximizing the value derived from the software.
8.2. Maintenance process :Software maintenance is the modification of a software product after delivery to
correct faults, to improve performance or other attributes
In maintaining any software, the process involves:
1. **Bug Fixes**: Address reported issues promptly...//2. **Feature Updates**: Incorporate new features as
needed...//3. **Performance Optimization**: Keep the software efficient...//4. **Compatibility Updates**:
Ensure it works on relevant platforms...//5. **Security**: Patch vulnerabilities promptly...//6.
**Documentation**: Keep it clear and up-to-date...//7. **Community Engagement**: Interact with users for
feedback...//8. **Version Control and Release**: Manage versions and updates...//9. **Testing**: Ensure
changes don't break existing functionality...//10. **Long-Term Planning**: Plan for future development and
needs...//
8.3. Maintenance model :Software maintenance models define the approaches and strategies for managing
and updating software after its initial development and deployment.
In maintaining any software, the process involves:
1. **Bug Fixes**: Address reported issues promptly...//2. **Feature Updates**: Incorporate new features as
needed...//3. **Performance Optimization**: Keep the software efficient...//4. **Compatibility Updates**:
Ensure it works on relevant platforms.5. **Security**: Patch vulnerabilities promptly...//6.
**Documentation**: Keep it clear and up-to-date...//7. **Community Engagement**: Interact with users for
feedback...//8. **Version Control and Release**: Manage versions and updates...//9. **Testing**: Ensure
changes don't break existing functionality...//10. **Long-Term Planning**: Plan for future development and
needs...//
8.4. Estimation of maintenance costs :Estimating maintenance costs can be challenging but typically involves
assessing various factors such as:
1. **Size and Complexity of the Software:** Larger and more complex software systems generally require
more maintenance effort...//2. **Maintenance Activities:** Different types of maintenance activities
(corrective, adaptive, perfective, preventive) have different costs associated with them...//3. **Skill Level of
Maintenance Team:** The expertise and experience of the maintenance team can affect the efficiency and
cost of maintenance tasks...//4. **Frequency of Changes:** The rate at which changes are needed in the
software affects maintenance costs. More frequent changes often mean higher costs...//5. **Tooling and
Infrastructure:** Costs associated with tools, software licenses, and infrastructure required for maintenance
activities...//6. **External Factors:** External factors such as changes in technology, regulations, or business
requirements can impact maintenance costs...//7. **Historical Data:** Past maintenance projects can provide
valuable insights into estimating future costs...//8. **Risk Management:** Accounting for potential risks and
uncertainties that may affect maintenance activities and costs...//
8.5. Documentation:Documentation for software maintenance is crucial for ensuring the smooth and
effective management of the software throughout its lifecycle. Here are some key types of documentation
commonly used in software maintenance:
18
1. **Code Documentation:** Comments in the code explaining its purpose and functionality.
2. **Technical Documentation:** Details software architecture, design, and interfaces.
3. **User Documentation:** Guides users on how to use the software effectively.
4. **Change Documentation:** Tracks and explains all modifications made to the software.
5. **Test Documentation:** Describes testing strategies, cases, and results.
6. **Configuration Management Documentation:** Manages and controls changes to the software's
configuration.
-2078, Kartik/Mangsir
1. What is software engineering? Differentiate between program and software. Explain about the
applications of software. [2+3+5]
Software engineering is a discipline that involves applying engineering principles to the design, development,
testing, and maintenance of software systems.
3. Explain about SRS. Also, explain about the characteristics of a good SRS. [4+6]
SRS stands for Software Requirements Specification. It's a comprehensive document that outlines the
functional and non-functional requirements of a software system. The SRS serves as a blueprint for the
development team, providing clear guidance on what needs to be built and how it should function.
Characteristics of a good SRS include:
1. Clear and Complete: Defines all requirements without ambiguity...//2. Consistent: Internally coherent with
no conflicts...//3. Feasible: Achievable within project constraints...//4. Testable: Verifiable through
testing...//5. Traceable: Each requirement links back to its source and forward to implementation...//6.
Unambiguous: Uses clear language, avoiding confusion...//
4. What is cost estimation? Explain about the COCOMO and COCOMO II. [2+8]
Design:** Organizing the system into functional layers for separation of concerns...//7. **Iterative Design:**
Refining the design through multiple iterations...//8. **User-Centered Design:** Incorporating user feedback
for usability and satisfaction.
What are software metrics and why are they used? Explain about token count. [5+5]
Software metrics are quantitative measures used to assess different aspects of software development. They
are used to:
1. **Assess Quality:** Measure factors like defects and reliability to ensure software quality...//2. **Evaluate
Performance:** Analyze productivity and resource utilization for process improvement...//3. **Manage
Risk:** Identify and mitigate risks by monitoring metrics related to schedules and costs...//4. **Support
Decision Making:** Provide data for informed decision-making on resource allocation and project
prioritization...//5. **Drive Process Improvement:** Enable iterative improvements by highlighting areas of
inefficiency and opportunities for optimization...//
9. Write about software management process. Also, explain about software re-engineering. [5+5]
Software management process involves planning, organizing, directing, and controlling software projects to
ensure their successful completion. It includes activities such as project planning, scheduling, budgeting,
resource allocation, risk management, and quality assurance. The process aims to deliver high-quality software
products on time and within budget by effectively managing project scope, requirements, and stakeholders.
Software re-engineering is the process of restructuring or updating existing software systems to improve
their quality, performance, or maintainability. It involves analyzing and understanding the existing system,
identifying areas for improvement or enhancement, and then implementing changes to address those issues.
Re-engineering may include activities such as reverse engineering, restructuring, and forward engineering to
update outdated technologies, improve system architecture, or enhance functionality while preserving existing
functionality and data.
10. Write short notes on: (Any TWO) [2×5]
a. **Interviews**:Interviews in software engineering involve discussions between developers, stakeholders,
and end-users to gather requirements, clarify expectations, or discuss project-related matters. They can be
structured or unstructured and can take various forms, including one-on-one interviews, group discussions, or
focus group sessions. Interviews help in understanding user needs, eliciting requirements, validating
assumptions, and building consensus among stakeholders.
b. **Cohesion and Coupling**:Cohesion refers to the degree to which elements within a module or
component are related to each other. High cohesion means that elements within a module are closely related
and focused on a single task or responsibility, leading to better maintainability and understandability.
Coupling, on the other hand, refers to the degree of interdependence between modules or components. Low
coupling indicates that modules are independent and have minimal interaction, promoting modularity,
reusability, and ease of maintenance.
c. **Black Box and White Box Testing**:Black Box Testing is a testing technique where the internal workings
of the system are not known to the tester. Test cases are designed based on the system's specifications and
requirements, focusing on inputs and outputs. The goal is to assess the system's functionality and behavior
without knowledge of its internal implementation. In contrast, White Box Testing involves testing the internal
logic, structure, and code of the system. Test cases are derived from an understanding of the system's internal
workings, focusing on paths through the code, decision points, and data flows. White Box Testing aims to
uncover errors in the code and ensure thorough test coverage.
d. 4P Model:The 4P Model, also known as the People-Process-Product-Project Model, is a framework used in
software engineering for holistic project management and product development. It encompasses four key
dimensions:
The 4P Model in software engineering encompasses four key dimensions:
1. **People**: Focuses on human resources involved, emphasizing collaboration and skills.
2. **Process**: Involves methodologies and practices followed during development.
3. **Product**: Revolves around software requirements, architecture, and quality.
20
4. **Project**: Addresses management aspects like scheduling, budgeting, and risk management.
3. What do you mean by project planning? Explain about size estimation and software risk management.
[3+3+4]
5. What is software metric and how can it be measured? Explain about defect density and inspection rate.
[5+5]
A software metric is a quantitative measure used to assess various aspects of the software development
process, product, or resources.
Common methods for measuring software metrics include:
1. **Direct Measurement**: Counting specific software attributes like lines of code, defects, or execution
time...//2. **Indirect Measurement**: Estimating software attributes using proxies like function points or
21
story points...//3. **Static Analysis**: Analyzing software artifacts (e.g., source code) for issues without
executing the program...//4. **Dynamic Analysis**: Monitoring software behavior during execution for
insights into performance and reliability...//5. **Surveys and Questionnaires**: Collecting stakeholder
feedback on subjective aspects like usability...//
6. Differentiate between white box testing and black box testing. Explain about testing tool. [6+4]
7. Define DFD. Design DFD for library management system upto level-1. [2+8]
level-0:
LEVEL-`1
8. What do you mean by Capability Maturity Model? Describe its levels. [2+8]
MODEL QUESTIONS
# What are the main advantages of using an object-oriented design approach over a function-oriented
approach? Explain.
Object-oriented design (OOD) offers several advantages over function-oriented approaches:
1. **Modularity**: OOD allows for modular design, making it easier to manage and update code by breaking it
into smaller, reusable components (objects).
2. **Encapsulation**: Objects encapsulate data and behavior, hiding internal details and exposing only
necessary interfaces. This enhances security and reduces complexity.
3. **Inheritance**: Inheritance enables code reuse and promotes the creation of hierarchies, allowing
subclasses to inherit attributes and methods from parent classes.
4. **Polymorphism**: OOD supports polymorphism, where objects of different types can be treated
interchangeably, simplifying code and making it more flexible and adaptable to changes.
5. **Abstraction**: Abstraction hides complex implementation details, focusing on essential features. This
simplifies understanding and maintenance of the code.
Overall, OOD promotes better code organization, reusability, and maintainability compared to
function-oriented approaches.
elicitation ensures that the final product meets the needs of its users and aligns with business objectives. It's a
collaborative process involving stakeholders, analysts, and developers, often requiring iterative refinement to
ensure all perspectives are considered and captured accurately.
The analysis activities in requirements engineering involve several key steps:
1. **Requirement Elicitation**: Gathering requirements from stakeholders through interviews, surveys,
workshops, etc....//2. **Requirement Analysis**: Examining and understanding the gathered requirements to
ensure they are clear, complete, and consistent....//
3. **Requirement Prioritization**: Ranking requirements based on their importance to the project's goals and
constraints....//4. **Requirement Validation**: Confirming that the identified requirements accurately reflect
the needs of the stakeholders and the system under development....//5. **Requirement Negotiation**:
Resolving conflicts or discrepancies among different stakeholder requirements and reaching a consensus....//6.
**Requirement Documentation**: Recording the analyzed requirements in a clear and unambiguous format,
often using tools like requirement documents or user stories....//7. **Requirement Traceability**:
Establishing links between requirements and other artifacts, such as design documents or test cases, to ensure
that each requirement is addressed appropriately throughout the development lifecycle....//
A version control system (VCS) :A version control system (VCS) is a software tool that helps manage changes
to code or any other files over time. It allows multiple people to collaborate on a project simultaneously by
tracking changes, providing the ability to revert to previous versions, and merging changes made by different
team members. This helps in maintaining a history of changes, improving collaboration, and ensuring code
integrity. Git is one of the most popular VCSs used widely in the software development industry.
- Tracks changes to software over time, assigning unique version numbers to each iteration.
- Helps maintain a clear history of modifications, improvements, and bug fixes.
- Facilitates collaboration among developers by providing a reference point for changes.
2. **Release Management**:
- Involves planning, scheduling, and controlling the release of software to users or customers.
- Ensures that releases meet quality standards, are properly tested, and align with organizational goals.
- Coordinates communication and deployment activities to ensure smooth rollout and adoption by users.
Both version and release management are essential for maintaining software quality, ensuring consistency,
and meeting user expectations while enabling efficient collaboration and deployment processes.
Quality factors :Quality factors refer to characteristics or attributes that determine the overall quality of a
software product. Here's a brief overview of some key quality factors::
1. **Functionality**: Does it work as intended?
2. **Reliability**: Does it work consistently without errors?
3. **Usability**: Is it easy to use and understand?
4. **Efficiency**: Does it perform well in terms of speed and resource usage?
5. **Maintainability**: Is it easy to update and modify?
6. **Portability**: Can it be used on different platforms?
7. **Security**: Is it protected against unauthorized access or breaches?