Software Engineering - Module 5
Software Engineering - Module 5
1. **Perfective Maintenance:**
2. **Preventive Maintenance:**
1. **Technical Feasibility:**
- Technical feasibility assesses whether the proposed
software solution can be developed using available
technology, resources, and expertise within the given
constraints.
- Factors evaluated include the availability of required
hardware, software tools, programming languages,
development frameworks, and technical skills.
- Technical feasibility also considers compatibility with
existing systems, scalability, performance requirements, and
technological risks.
2. **Economic Feasibility:**
- Economic feasibility evaluates the financial viability and
cost-effectiveness of the proposed software project.
- Factors assessed include the estimated development
costs, operating expenses, return on investment (ROI), and
potential revenue or cost savings generated by the software.
- Economic feasibility analysis involves calculating the
project's total cost of ownership (TCO), net present value
(NPV), payback period, and other financial metrics to
determine whether the benefits outweigh the costs.
3. **Operational Feasibility:**
- Operational feasibility examines whether the proposed
software solution aligns with the organization's business
processes, goals, and operational requirements.
- Factors considered include user acceptance, ease of use,
compatibility with existing workflows, and the impact on
organizational culture and practices.
- Operational feasibility also assesses the readiness of
stakeholders, users, and support teams to adopt and utilize
the software effectively.
4. **Schedule Feasibility:**
- Schedule feasibility evaluates whether the proposed
software project can be completed within the desired
timeframe and meets any deadlines or time constraints.
- Factors examined include project timelines, milestones,
dependencies, resource availability, and potential risks that
may impact project scheduling.
- Schedule feasibility analysis involves creating a project
schedule, estimating task durations, identifying critical paths,
and assessing the likelihood of meeting project deadlines.
6. **Resource Feasibility:**
- Resource feasibility evaluates whether the necessary
human, financial, and infrastructure resources are available or
can be acquired to support the software project.
- Factors assessed include the availability of skilled
personnel, budget allocations, physical infrastructure,
equipment, and external dependencies.
- Resource feasibility analysis helps identify resource
constraints, gaps, or dependencies that may impact project
execution and delivery.
1. **Version Control:**
- Version control, also known as source code management
or revision control, is the process of tracking and managing
changes to source code and other software artifacts.
- Version control systems (VCS) enable developers to store,
retrieve, and track different versions of files, manage
concurrent edits, and merge changes from multiple
contributors.
- Common version control systems include Git, Subversion
(SVN), Mercurial, and Perforce.
2. **Configuration Identification:**
- Configuration identification involves uniquely identifying
and labeling software artifacts, configurations, and releases to
facilitate traceability and change management.
- Each version of a software component or configuration
item is assigned a unique identifier or version number,
enabling developers to track changes and dependencies
accurately.
3. **Change Control:**
- Change control, also known as change management or
version management, is the process of reviewing, approving,
and implementing changes to software artifacts in a controlled
manner.
- Change control workflows define the steps and roles
involved in proposing, assessing, prioritizing, approving, and
implementing changes, ensuring that changes are properly
evaluated, documented, and communicated.
4. **Configuration Control:**
- Configuration control involves managing and controlling
changes to software configurations, baselines, and releases
to ensure consistency and stability.
- Configuration control processes define how changes are
identified, evaluated, authorized, and implemented, while
maintaining traceability and auditability of changes over time.
5. **Release Management:**
- Release management is the process of planning,
coordinating, and deploying software releases to production
environments or end-users.
- Release management involves creating release packages,
managing dependencies, coordinating deployment activities,
and communicating release status and updates to
stakeholders.
6. **Baseline Management:**
- Baseline management involves establishing and
maintaining baselines, which are predefined snapshots of
software configurations at specific points in time.
- Baselines serve as reference points for comparison,
allowing developers to track changes, identify deviations, and
revert to previous versions if necessary.
7. **Build Management:**
- Build management is the process of compiling, packaging,
and deploying software artifacts to create executable binaries,
libraries, or installers.
- Build management involves defining build scripts,
configuring build environments, managing dependencies, and
automating build processes to ensure consistency and
repeatability.
8. **Artifact Management:**
- Artifact management involves managing and storing
software artifacts, such as documents, diagrams,
requirements, test cases, and project plans, in a central
repository.
- Artifact management ensures that project artifacts are
organized, accessible, and versioned, enabling collaboration,
reuse, and traceability across the software development
lifecycle.
### Re-engineering:
**Applications of Re-engineering:**
- Modernizing legacy systems to leverage new technologies,
frameworks, and platforms.
- Improving software quality, reliability, and maintainability
through code refactoring and redesign.
- Enhancing user experience, performance, and scalability to
meet evolving business needs and user expectations.
- Migrating software systems from outdated or obsolete
platforms to modern, sustainable architectures.
1. **Risk Identification:**
- Identify potential risks that may affect the project, including
technical risks (e.g., software complexity, technology
dependencies), organizational risks (e.g., resource
constraints, stakeholder conflicts), and external risks (e.g.,
market changes, regulatory requirements).
2. **Risk Analysis:**
- Analyze each identified risk to assess its likelihood of
occurrence, potential impact on project objectives, and
detectability (i.e., how easily the risk can be identified and
monitored).
- Prioritize risks based on their severity, significance, and
potential consequences, focusing on high-priority risks that
pose the greatest threats to project success.
3. **Risk Evaluation:**
- Evaluate the overall risk exposure of the project by
combining the likelihood and impact assessments of individual
risks.
- Determine the acceptable level of risk tolerance or risk
threshold for the project, considering organizational policies,
stakeholder expectations, and project constraints.
1. **Risk Avoidance:**
- Avoiding high-risk activities, technologies, or approaches
that pose significant threats to project success.
- Adopting alternative strategies or solutions that minimize
exposure to identified risks while achieving project objectives.
2. **Risk Transfer:**
- Transferring or sharing the responsibility for managing
certain risks to external parties, such as vendors, partners, or
insurance providers.
- Using contracts, service agreements, or insurance policies
to allocate risks and liabilities to third parties with greater
expertise or resources.
3. **Risk Reduction:**
- Implementing proactive measures to reduce the likelihood
or impact of identified risks through preventive actions,
process improvements, or technology enhancements.
- Examples include conducting thorough testing,
implementing quality assurance measures, improving
documentation, and enhancing security controls.
4. **Risk Acceptance:**
- Accepting certain risks that cannot be avoided, transferred,
or effectively mitigated within the project's constraints.
- Establishing contingency plans, reserves, or fallback
options to manage the consequences of accepted risks if they
materialize.
3. **Prioritizing Quality:**
- Product managers advocate for quality as a primary
consideration throughout the software development lifecycle.
- They prioritize quality-related initiatives, such as code
reviews, testing efforts, and defect resolution, to ensure that
resources are allocated effectively and quality goals are met.
1. **Corrective Maintenance:**
- Corrective maintenance involves addressing and fixing
defects, bugs, errors, or issues discovered in the software
during its operational use.
- Maintenance teams prioritize and resolve reported
problems to restore the software's functionality and prevent
further disruptions or negative impacts on users.
2. **Adaptive Maintenance:**
- Adaptive maintenance involves modifying the software to
accommodate changes in the environment, operating system,
hardware platform, or external interfaces.
- Maintenance teams update the software to ensure
compatibility with new technologies, standards, regulations, or
user requirements, enabling continued operation and support.
3. **Perfective Maintenance:**
- Perfective maintenance focuses on enhancing and
optimizing the software to improve its performance, usability,
efficiency, and user experience.
- Maintenance teams implement new features,
functionalities, or enhancements requested by users or
stakeholders, making the software more valuable and
competitive.
4. **Preventive Maintenance:**
- Preventive maintenance involves proactively identifying
and addressing potential problems, risks, or vulnerabilities in
the software to prevent future issues or failures.
- Maintenance teams implement measures to improve
software reliability, maintainability, and security, such as code
refactoring, performance tuning, and security updates.
5. **Documentation Maintenance:**
- Documentation maintenance involves updating and
maintaining documentation, manuals, user guides, and other
supporting materials related to the software.
- Maintenance teams ensure that documentation remains
accurate, up-to-date, and accessible to users, developers,
and other stakeholders, facilitating effective use, support, and
maintenance of the software.
6. **Configuration Management:**
- Configuration management involves managing and
controlling changes to software configurations, versions,
releases, and dependencies.
- Maintenance teams use version control systems,
configuration management tools, and change control
processes to track and manage changes, ensuring
consistency, integrity, and traceability of software artifacts.
7. **Regression Testing:**
- Regression testing involves retesting modified or updated
software to ensure that changes do not introduce new defects
or regressions into the system.
- Maintenance teams execute test cases, automated scripts,
or regression test suites to verify the stability, functionality,
and performance of the software after modifications or
updates.
1. **Reliability:**
- Reliability refers to the ability of the software to perform its
intended functions consistently and predictably under
specified conditions.
- A reliable software system minimizes the occurrence of
failures, errors, crashes, or unexpected behaviors, ensuring
that users can trust and depend on its performance.
2. **Usability:**
- Usability refers to the ease of use, intuitiveness, and
effectiveness of the software's user interface and interactions
from the perspective of end-users.
- A usable software system provides a user-friendly
interface, clear navigation, informative feedback, and efficient
workflows, enhancing user satisfaction and productivity.
3. **Performance:**
- Performance relates to the speed, responsiveness,
scalability, and efficiency of the software in executing tasks,
processing data, and handling user interactions.
- A high-performance software system delivers optimal
response times, throughput, and resource utilization, meeting
performance requirements and accommodating increasing
workloads or user demands.
4. **Maintainability:**
- Maintainability refers to the ease with which the software
can be modified, extended, debugged, and repaired over time
by developers and maintenance personnel.
- A maintainable software system exhibits clear, modular,
and well-documented code, adheres to coding standards, and
minimizes dependencies, facilitating ongoing development,
updates, and enhancements.
5. **Portability:**
- Portability refers to the ability of the software to run and
operate effectively across different platforms, environments,
and hardware configurations.
- A portable software system is designed and implemented
using platform-independent technologies, standards, or
abstraction layers, enabling seamless deployment and
operation across diverse environments.
6. **Security:**
- Security concerns the protection of the software system
from unauthorized access, data breaches, malware,
vulnerabilities, and other security threats.
- A secure software system implements robust
authentication, authorization, encryption, and access control
mechanisms to safeguard sensitive data, transactions, and
resources.
7. **Scalability:**
- Scalability refers to the ability of the software system to
accommodate increasing workloads, users, or data volumes
without significant degradation in performance or functionality.
- A scalable software system can efficiently scale up or
scale out to handle growing demands, leveraging techniques
such as load balancing, clustering, and distributed computing.
8. **Testability:**
- Testability relates to the ease with which the software
system can be tested, validated, and verified to ensure that it
meets quality and functional requirements.
- A testable software system is designed with clear
interfaces, modular components, and automated testing
capabilities, facilitating comprehensive testing and validation
throughout the development lifecycle.
9. **Interoperability:**
- Interoperability refers to the ability of the software system
to interact, exchange data, and integrate seamlessly with
other software systems, platforms, or external interfaces.
- An interoperable software system supports standard
protocols, data formats, and APIs, enabling interoperability
with third-party applications, services, and ecosystems.
1. **Configuration Identification:**
- Identifying and defining the configuration items (CIs) that
make up the software system, including source code,
documentation, libraries, binaries, configurations, and
dependencies.
2. **Version Control:**
- Managing changes to software artifacts over time by
tracking different versions, revisions, and releases of files and
documents.
- Version control systems (VCS) help developers
collaborate, track changes, merge modifications, and maintain
a history of revisions for software components.
3. **Configuration Control:**
- Controlling and regulating changes to software
configurations, ensuring that modifications are authorized,
documented, and implemented in a controlled manner.
- Configuration control processes include change
management, review boards, and change control procedures
to assess, approve, and track changes throughout the
software lifecycle.
5. **Configuration Auditing:**
- Conducting periodic reviews, inspections, or audits of
software configurations to ensure compliance with standards,
requirements, and best practices.
- Configuration audits help identify discrepancies,
inconsistencies, or deviations from established baselines,
facilitating corrective actions and process improvements.
6. **Baseline Management:**
- Establishing and managing baselines, which are
predefined snapshots or versions of software configurations at
specific points in time.
- Baseline management ensures stability, consistency, and
traceability of software artifacts, enabling comparisons,
rollbacks, and validation of changes.
8. **Environment Management:**
- Managing and maintaining development, testing, staging,
and production environments to support software
development, testing, and deployment activities.
- Environment management includes provisioning,
configuring, and monitoring infrastructure, servers, and tools
to ensure consistent and reliable environments for
development and operations.
1. **Size Estimation:**
- The Intermediate COCOMO model uses Source Lines of
Code (SLOC) as the primary measure of software size. SLOC
represents the number of lines of code in the software
product, including both executable code and comments.
- Size estimation is typically based on historical data,
analogous estimation, or function points analysis to determine
the expected size of the software product.
2. **Scale Factors:**
- Intermediate COCOMO introduces a set of five scale
factors that reflect various project and product attributes
affecting development effort and productivity. These scale
factors are:
- Precedentedness: Reflects the familiarity of the project
team with the application domain, technology, and
development practices.
- Development Flexibility: Represents the degree of
flexibility or adaptability required in the development process.
- Architecture/Risk Resolution: Reflects the clarity and
stability of system architecture and technical risks.
- Team Cohesion: Represents the degree of coordination,
communication, and teamwork among project team members.
- Process Maturity: Reflects the level of maturity and
effectiveness of the software development process and
practices.
3. **Cost Drivers:**
- Intermediate COCOMO defines 15 cost drivers that further
refine the estimation based on specific project and
organizational characteristics. These cost drivers include
factors such as:
- Product factors: Complexity, reliability requirements,
database size, product complexity, etc.
- Hardware factors: Execution time constraints, main
memory constraints, virtual machine volatility, etc.
- Personnel factors: Analyst capability, software
engineering capability, applications experience, etc.
- Project factors: Use of modern tools and techniques,
development schedule, etc.
4. **Effort Estimation:**
- The effort estimation equation in Intermediate COCOMO is
based on a set of multiplicative factors derived from the scale
factors and cost drivers. It is expressed as:
```
Effort = A * (Size)^B * EAF
```
Where:
- A and B are constants derived from historical data.
- Size is the estimated size of the software product in
SLOC.
- EAF (Effort Adjustment Factor) is the product of scale
factors and cost drivers.
1. **Quality Planning:**
- Quality planning involves defining the quality objectives,
criteria, and standards for the software project.
- SQA teams collaborate with project stakeholders to
establish quality goals, identify relevant metrics, and develop
a quality management plan that outlines the approach,
methods, and resources for achieving and assessing software
quality.
3. **Process Improvement:**
- Process improvement activities focus on identifying,
analyzing, and enhancing software development processes to
improve efficiency, effectiveness, and quality.
- SQA teams use techniques such as process maturity
assessments, root cause analysis, and benchmarking to
identify process weaknesses, inefficiencies, and areas for
optimization, leading to continuous improvement and
organizational learning.
4. **Quality Control:**
- Quality control activities involve monitoring, measuring,
and evaluating the quality of software products and processes
throughout the development lifecycle.
- SQA teams use various techniques, such as testing,
inspections, metrics analysis, and defect tracking, to detect
and address quality issues, deviations, and
non-conformances, ensuring that software meets specified
quality requirements.
6. **Configuration Management:**
- Configuration management activities involve managing
and controlling changes to software configurations, versions,
and releases throughout the development lifecycle.
- SQA teams use version control systems, configuration
management tools, and change control processes to track,
document, and manage software configurations, ensuring
consistency, integrity, and traceability of software artifacts.
1. **Technology Dependencies:**
- Risks associated with dependencies on third-party
libraries, frameworks, or components that may introduce
compatibility issues, version conflicts, or performance
limitations.
- Example: Reliance on a specific database management
system (DBMS) for which support may be discontinued or
deprecated, leading to compatibility issues in the future.
3. **Integration Challenges:**
- Risks associated with integrating various software
components, subsystems, or external systems within the
software ecosystem.
- Example: Incompatibility between different modules or
interfaces may result in data inconsistencies, communication
failures, or integration errors during system integration testing.
5. **Security Vulnerabilities:**
- Risks associated with security vulnerabilities, weaknesses,
or loopholes that may expose the software system to cyber
threats, data breaches, or unauthorized access.
- Example: Failure to implement proper encryption,
authentication, or access controls may lead to data leaks,
privacy violations, or security breaches compromising
sensitive information.
7. **Performance Dependencies:**
- Risks related to dependencies on external systems,
services, or APIs that may impact the performance, reliability,
or availability of the software system.
- Example: Reliance on third-party APIs or cloud services
with poor uptime or reliability may introduce performance
bottlenecks or service disruptions, affecting overall system
performance.
THE END