SOFTWARE ENGINEERING
ASSIGNMENT NO 1
Session (Fall 2022)
program
BS-COMPUTER SCIENCE
Submitted by: JAMIL SHAH Roll No: 301-221011
Supervised By: MAM ROMANA SALEEM
Designation: Assistant lecturer
Department: CS & IT
HAZARA UNIVERSITY, MANSEHRA
Q1 What is the most important difference between generic
software product development and custom software development?
What might this mean in practice for users of generic software
products?
The most important difference between generic software product
development and custom software development lies in their target
audience and purpose.
Generic Software Product Development
Target Audience: Designed for a broad market, aiming to meet the
needs of many users.
Features: Typically includes a set of standard features that appeal to a
wide range of users.
Cost: Generally lower cost per user due to economies of scale.
Updates and Support: Regular updates and support are provided, but
customization options are limited.
Custom Software Development
Target Audience: Tailored for a specific organization or user group,
addressing unique requirements.
Features: Highly specialized features that align closely with the user's
specific needs and workflows.
Cost: Usually higher cost due to the bespoke nature of development.
Updates and Support: More flexible in terms of updates and support,
as they can be designed to align with the client’s operational changes.
Implications for Users of Generic Software Products
1. Limited Customization: Users may need to adapt their processes to
fit the software rather than the other way around.
2. Standard Features: While they benefit from a robust set of features,
they may miss out on niche functionalities they require.
3. Community Support: Users often rely on community forums and
documentation for support, which may not be tailored to their specific
challenges.
4. Scalability: Generic software may struggle to scale to unique
business needs as organizations grow or change.
In practice, users of generic software products might find it convenient
and cost-effective for standard tasks, but they could face challenges
when trying to address specific operational needs or when their
requirements evolve.
Q2 Explain why the fundamental software engineering principles
of process, dependability, requirements management, and reuse are
relevant to all types of software system.
The fundamental software engineering principles of process,
dependability, requirements management, and reuse are crucial across
all types of software systems for several reasons:
1. Process
Definition: A structured approach to software development that
includes phases like planning, design, implementation, testing, and
maintenance.
Relevance: Processes provide a framework that helps teams organize
their work, manage complexities, and ensure that all necessary steps
are followed. Whether developing generic or custom software, a well-
defined process facilitates consistency, quality, and efficiency, reducing
the likelihood of errors and enhancing collaboration.
2. Dependability
Definition: The reliability, availability, safety, and security of software
systems.
Relevance: Regardless of the software type, users expect systems to
function properly and securely. Dependability is critical in maintaining
user trust and satisfaction. This principle is especially important in
domains such as healthcare, finance, and critical infrastructure, where
failures can have serious consequences. Ensuring dependability helps
prevent costly downtime and enhances user confidence.
3. Requirements Management
Definition: The systematic handling of requirements throughout the
software development lifecycle, including gathering, analyzing,
documenting, and managing changes.
Relevance: Clear and well-managed requirements are essential for
delivering software that meets user needs. In both generic and custom
software development, understanding and tracking requirements
ensures that the final product aligns with user expectations and
reduces the risk of scope creep. Effective requirements management
also facilitates communication among stakeholders, leading to better
outcomes.
4. Reuse
Definition: The practice of utilizing existing software components,
code, or systems to reduce redundancy and improve efficiency.
Relevance: Reuse promotes efficiency and reduces development time
and costs. It is beneficial for both generic and custom software, as
leveraging existing solutions can enhance productivity and reliability. By
reusing proven components, teams can focus on new functionality,
leading to faster delivery and reduced risk of errors.
Conclusion
These principles are foundational to producing high-quality software
systems, regardless of whether they are generic or custom. They help
ensure that software is developed efficiently, meets user needs, is
dependable, and leverages existing solutions, ultimately contributing to
successful software projects in any context.