PROGRAMME: HBMSDA
MODULE: BMSDA 201
Group Members
LAVET B MBEWE R232996P
CALVIN D MAPONDE R233004D
TINEVIMBO S MUTIZWA R232995T
TAFADZWA MABIZA R233006L
Discuss the following recent Software Engineering topics and reap the full detail of it, including all
mathematics and sound practical examples where possible: a) Artificial intelligence for software
engineering [9] b) Experimental software engineering [9] c) Release engineering [9] d) Empirical
software engineering [9] e) Software product line engineering [9] f) Software engineering for
artificial intelligence [9] 2. Establish any parameters as you compare those aforementioned recent
Software Engineering fields (a)-(f) in question (1) [14] Hint: You can tabulate it for easier
comparison
Discuss the following recent Software Engineering topics and reap the full detail of it, including all
mathematics and sound practical examples where possible:
a) Artificial intelligence for software engineering [9]
AI is becoming a part of software development, making life easier for programmers in various ways
by taking over tedious tasks and streamlining work. Today software development processes depend
on a variety of development tools (e.g., issue tracking systems, version control systems, code review,
continuous integration, continuous deployment, and Q&A website). Such tools generate large
quantities of unstructured software artefacts at a high frequency (so-called Big Data) in many forms
like issue reports, source code, test cases, code reviews, execution logs, app reviews, developer
mailing lists, and discussion threads [1].As a result, products are being created faster. AI has
significantly impacted the software development landscape in recent years, bringing about several
notable changes and advancements. Programmers are using AI to generate code, automate
repetitive and boring tasks, detect bugs easier, and make the DevOps process more efficient.
Automation of some tasks
With the help of AI, developers can automate some types of software development tasks, which
boosts their productivity and efficiency. For example, AI-powered tools such as Code Bert and Alpha
Code can automatically generate code snippets, perform code refactoring, and assist in bug
detection and fixing. That helps to save time and focus on more complex and critical aspects of
software development.
Code generation
AI tools can generate code based on existing patterns and examples. This includes auto-complete
suggestions in integrated development environments (IDEs) such as Bootstrap Studio and AI-
generated code snippets for specific tasks such as Adobe Dreamweaver. AI can also optimize code
by identifying redundant or inefficient parts and suggesting improvements.
Assistance in bug detection
AI also influenced the testing and quality assurance processes. AI-based testing tools such as GitHub
Code Review and Visual Studio Debugger can analyze code, identify potential vulnerabilities, and
automatically generate test cases. Machine learning techniques are employed to learn from past test
results and predict areas of code that are more likely to contain bugs. This helps developers identify
and fix issues early in the development cycle, leading to higher-quality software.
Despite its many advantages there is another side to AI assisted software development that we
should also acknowledge. Here are the disadvantages of using AI-assisted software development
Complexity and Learning Curve
Incorporating AI tools can introduce a significant learning curve for software development teams.
After all, beyond coding, mastering machine learning concepts and frameworks demands time and
effort. Adapting to deep learning techniques for natural language processing or computer vision
requires developers to comprehend the fundamentals of neural networks. This learning curve can
slow down the adoption of AI, necessitating extensive training programs and support to enable
engineers to leverage these tools effectively.
Integration with Existing Systems
Sometimes, legacy systems lack inherent compatibility with AI technologies, leading to potential
obstacles during integration. For example, legacy Student Information System (SIS) like EMHARE, to
manage student records, schedules, administrative tasks, etc. Integrating AI applications for
personalized learning experiences is a great opportunity for the institution. However, it can also
pose challenges due to the limitations of the existing system. In this case, the developers will have to
navigate compatibility issues between the traditional SIS and AI technologies, ensuring a smooth
fusion of the two systems.
Conclusion
AI-assisted software development isn’t going anywhere anytime soon. While it’s an exciting
development organization should still carefully consider its advantages and disadvantages to make
informed decision based on the specific needs and goals.AI-assisted software development should
be seen as a tool to help and support the software development process, rather than as a
replacement for human developers. By combining the strengths of AI algorithms with creativity and
ingenuity of full stack software developers, organizations can optimize their software development
process, improve software quality and drive innovation and growth in the software development
industry.
(b) Experimental software engineering
Experimental software engineering involves running experiments on the processes and procedures
involved in the creation of software systems, with the intent that the data be used as the basis of
theories about the processes involved in software engineering (theory backed by data is a
fundamental tenet of the scientific method). A number of research groups primarily use empirical
and experimental techniques .The term empirical software engineering emphasizes the use of
empirical studies of all kinds to accumulate knowledge. Methods used include experiments, case
studies, surveys, and using whatever data is available.
It involves conducting controlled experiments to gather empirical evidence and validate hypotheses
about various aspects of software engineering, such as development methodologies, tools,
techniques, and team dynamics. Experimental software engineering involves the use of various
statistical tools and techniques, including R a programming language and environment for statistical
computing and graphics. Python a programming language with various libraries for statistical
analysis, such as NumPy and SciPy.
Experimental software engineering involves various mathematical calculations, including:
Hypothesis Testing: This involves testing a hypothesis about the effect of a particular
variable on the software development process.
Regression Analysis: This is used to model the relationship between variables and predict
the outcome of a particular experiment.
Statistical Process Control: This involves using statistical methods to monitor and control
the software development process.
Suppose we want to investigate whether a new software development methodology (e.g. Agile) is
more efficient than the traditional waterfall approach. We measure the time it takes to complete a
project using both methodologies and collect the following data
Agile Methodology:
Project Time (weeks)
1 10
2 12
3 9
4 11
5 10
Waterfall Methodology:
Project Time (weeks)
1 15
2 18
3 12
4 16
5 14
Calculations:
1. Calculating the mean time to complete a project using Agile methodology:
Mean of Agile = (10 + 12 + 9 + 11 + 10) / 5 = 10.4 weeks
2. Calculating the mean time to complete a project using Waterfall methodology:
Mean of Waterfall = (15 + 18 + 12 + 16 + 14) / 5 = 15.0 weeks
Conclusion: Since the mean time to complete a project using Agile methodology (10.4 weeks) is
less than the mean time to complete a project using Waterfall methodology (15.0 weeks), we
conclude that the Agile methodology is more efficient than the Waterfall methodology.
Weaknesses of Experimental Software Engineering
While experimental software engineering is a valuable approach to understanding software
development, it is not without its limitations. Some of the weaknesses of experimental software
engineering include:
High Cost - Conducting experiments in software engineering can be resource-intensive and
expensive, which can limit the scope and scale of studies.
Artificial Setting - Laboratory experiments may not accurately reflect real-world software
development environments, which can lead to results that are not applicable in practice.
Methodological Limitations: Experimental software engineering studies may be limited by
methodological limitations, such as the use of simplistic or unrealistic experimental designs.
Conclusion
Experimental software engineering is a valuable approach to understanding software development,
involving the use of empirical studies, such as experiments, case studies, surveys, and systematic
literature reviews, to accumulate knowledge about software development. It provides a systematic
and structured way to investigate the software development process, identify areas for
improvement, and develop evidence-based practices.
c) Release engineering [9]
Release engineering manage, document, and enhance an organization’s software products and
implementation. It oversees and ensure timely software releases for organizations and manage the
implementation process from development through execution. They program nightly builds and
perform static code analysis. It involves a systematic approach from the development phase to the
deployment phase, ensuring that software releases are reliable, efficient, and scalable. [2]
Release engineering is a relatively new and fast-growing discipline of software engineering that can
be concisely described as building and delivering software [McN14a]. Release engineers have a solid
(if not expert) understanding of source code management, compilers, build configuration languages,
automated build tools, package managers, and installers. For example, Google has a large number of
SREs who are charged with safely deploying products and keeping Google services up and running. In
order to make sure our release processes meet business requirements, release engineers and SREs
work together to develop strategies for carrying changes, pushing out new releases without
interrupting services, and rolling back features that demonstrate problems [3]. Their skill set includes
deep knowledge of multiple domains: development, configuration management, test integration,
system administration, and customer support. Also release engineering involves mathematical
applications such as probability theory is used to calculate the probability of a release being
successful. Statistics is used to analyse the data collected during the release process. Linear algebra
is used to model the release process and identify dependencies between components.
Release engineering involves planning, coordinating, and controlling the software build, test, and
deployment process. It includes activities such as:
Release planning: Identifying the requirements for a release, determining the resources
needed, and creating a schedule for the release.
Release creation: Creating the release, including building, testing, and packaging the
software.
Release deployment: Deploying the release to the production environment.
Release monitoring: Monitoring the release to ensure it is working as expected.
While release engineering has many benefits, it also has some disadvantages. Some of the
disadvantages include:
Implementing release engineering requires a significant upfront investment in tools,
training, and process changes.
Release engineering involves complex processes and tools, which can be difficult to learn
and master.
Conclusion
Release engineering is a critical component of software engineering that involves the building and
delivery of software or components. It defines best practices for using tools to ensure projects are
released using consistent and repeatable methodologies. Release engineering is guided by four
major principles: self-sufficiency, automation, consistency, and repeatability. It involves
mathematical applications such as probability theory, statistics, and linear algebra. Release
engineering has many benefits, including faster time-to-market, improved quality, and reduced risk.
d) Empirical software engineering
Empirical software engineering (ESE) [4] is a subfield of software engineering (SE) research that uses
empirical research methods to study and evaluate an SE phenomenon of interest. The phenomenon
may refer to software development tools/technology, practices, processes, policies, or other human
and organizational aspects.
ESE has roots in experimental software engineering, but as the field has matured the need and
acceptance for both quantitative and qualitative research has grown [2] Today, common research
methods used in ESE for primary and secondary research are the following: [5]
Primary research (experimentation, case study research, survey research, simulations in
particular software Process simulation)
Secondary research methods (Systematic reviews, Systematic mapping studies, rapid
reviews, tertiary review)
Experiments are used to evaluate the effectiveness of different software development techniques,
such as pair programming or test-driven development. Case studies are used to investigate software
development practices in real-world settings, such as in industry or open-source projects. Surveys
are used to collect data from software developers, such as their opinions, attitudes, and behaviours.
ESE involves mathematical applications such as statistical analysis is used to analyse the data
collected from empirical studies, such as experiments and surveys. Data mining which is used to
discover patterns and relationships in large datasets, such as those obtained from software
repositories. Machine learning which is used to develop predictive models, such as those used to
predict software defects or to estimate development effort.
Some of the challenges in ESE include ensuring the quality of data collected from empirical studies is
a significant challenge. Also ensuring that the results of empirical studies are generalizable to
different contexts and settings is a challenge. Additionally, ensuring that empirical methods can be
applied to large and complex software systems is a challenge.
Conclusion
Empirical software engineering is a critical component of software engineering that involves the
empirical study of software development, maintenance, and evolution. It provides an objective and
evidence-based understanding of software development, which can be used to improve software
development practices and to develop more effective software development tools and methods
e) Software Product Line Engineering
Software product line engineering is a software engineering method for creating a collection of
similar software systems from a shared set of software assets using a common means of production
[6]. A software product line is a portfolio of similar software-based systems and products produced
from a shared set of software assets using a common means of production. The Carnegie Mellon
Software Engineering Institute defines a software product line as "a set of software-intensive
systems that share a common, managed set of features satisfying the specific needs of a particular
market segment or mission"[8]
For example, mobile applications companies often create a core application that serves as a base,
with variations for different platforms (iOS, Android) or user groups (business, personal). In
consumer electronics, devices like smart TVs or home automation systems can have a common
software base with specific features tailored for different models or market segments.
Advantages
SPLE can reduce development time by up to 50% by reusing common software components and
automating routine tasks. Also SPLE can improve the quality of software products by reusing tested
and validated components, reducing the number of defects and errors. SPLE can increase
productivity by automating routine tasks, allowing developers and engineers to focus on more
complex and creative tasks. Moreover, SPLE can improve customer satisfaction by providing
customers with tailored software products that meet their specific needs and requirements. SPLE
can reduce costs by reusing common software components, reducing the need for redundant
development and testing.
Weaknesses
While Software Product Line Engineering (SPLE) has many benefits, it also has some disadvantages.
The following are disadvantages of SPLE. High Upfront Investment: Implementing SPLE requires a
significant upfront investment in tools, training, and process changes. This can be a barrier for small
and medium-sized enterprises (SMEs) or organizations with limited resources. SPLE involves complex
processes and tools, which can be difficult to learn and master. This can lead to a steep learning
curve for developers and engineers. Over-reliance on automation can lead to a lack of understanding
of the underlying processes and tools. This can make it difficult to troubleshoot and debug issues.
Automated processes can introduce errors if not properly tested and validated. This can lead to
defects and bugs in the software products.
Conclusion
Software Product Line Engineering is a systematic approach to developing software products that
share a common set of features and functionalities. It involves creating a family of software products
from a shared set of assets, such as code, designs, and documentation. SPLE provides a number of
benefits, including reduced development time, improved quality, increased productivity, and better
customer satisfaction. However, it also presents a number of challenges, including managing
variability, ensuring scalability, and maintaining quality. Future directions in SPLE include the use of
AI and ML, cloud-native SPLE, and the integration of DevOps and continuous integration practices.
f) Software engineering for artificial intelligence
Software engineering for artificial intelligence (AI) is an emerging discipline that focuses on
developing tools, systems, and processes to enable the application of AI in real-world scenarios. It
involves designing and crafting AI models tailored to tackle diverse business challenges using
machine learning techniques. These models empower organizations to make decisions based on
data, elevate customer experiences, streamline operations, and boost overall efficiency. [9]
This intersection brings new challenges and opportunities, as AI systems often differ from
conventional software in their development, deployment, and maintenance. Below are key aspects
of software engineering for AI.
At the heart of software engineering for Artificial Intelligence (AI) lies a systematic process that
governs the development of AI systems. This process, known as the AI Development Life Cycle
(AIDLC), comprises multiple stages that ensure the creation of efficient and effective AI solutions.
The AIDLC typically involves several key phases, including problem identification, data acquisition,
model creation, training and validation, deployment, and ongoing evaluation and refinement.
For instance, Image recognition AI applications, such as Google Photos and Facebook's facial
recognition, use machine learning algorithms to identify and categorize images. These applications
are developed using software engineering principles and are integrated into various devices, such as
smartphones and smart home devices. [8]
The application of software engineering principles to Artificial Intelligence (AI) development offers
numerous benefits, leading to the creation of more efficient, effective, and reliable AI systems. By
following a structured development process, AI systems can be designed and built with higher
quality and reliability, reducing the likelihood of errors and failures. Also AI systems developed using
software engineering principles are easier to maintain and scale, making it simpler to update and
expand their capabilities as needed.
While software engineering for AI offers numerous benefits, it also presents some challenges and
limitations. These includes the application of software engineering principles to AI development can
add complexity to the development process, requiring specialized skills and expertise. Also the
quality of AI systems developed using software engineering principles is heavily dependent on the
quality of the data used to train and test them.
In conclusion, software engineering for AI is a critical discipline that enables the development of
efficient, effective, and reliable AI systems. By applying software engineering principles to AI
development, organizations can create AI systems that deliver tangible benefits and drive business
success. While there are some disadvantages to software engineering for AI, the benefits far
outweigh the limitations. As AI continues to transform industries and revolutionize the way we live
and work, the importance of software engineering for AI will only continue to grow.
2. Establish any parameters as you compare those aforementioned recent Software Engineering
fields (a)-(f) in question (1) [14] Hint: You can tabulate it for easier comparison
Topic Focus Mathematical Key Techniques
Foundations
Artificial Intelligence for Automating tasks, Machine learning, deep Automated testing,
Software Engineering improving decision- learning, natural language predictive analytics, code
making processing generation
Experimental Software Evaluating software Statistical analysis Controlled experiments,
Engineering engineering practices case studies, surveys
Release Engineering Planning, building, and Scheduling, resource
deploying software allocation Release planning, build
releases automation, testing,
deployment
Empirical Software Studying software Statistical analysis Case studies, surveys,
Engineering development practices metrics analysis
Software Product Line Developing families of Systems engineering, Product line architecture,
Engineering related software products configuration feature modelling, domain
management engineering
Software Engineering for Developing AI systems Linear algebra, probability Algorithm design, data
Artificial Intelligence theory, optimization management, model
deployment
References
1. A. E. Hassan, " in 2008 Frontiers of Software Maintenance," in The road ahead for mining
software, 2008, pp. 48-57.
2. Wikipedia, "Release engineering," Wikipedia, the free encyclopedia, 12/03/23 Agust 2023.
[Online]. Available: https://en.wikipedia.org/wiki/Release_engineering. [Accessed
26/09/24 September 2024].
3. Google, "Google," Google, 04/07/17 March 2017. [Online]. Available:
https://sre.google/sre-book/release-engineering/. [Accessed 23/09/24 September 2024].
4. Guide to advanced empirical software engineering. New York: Springer. 2008. ISBN 978-1-
84800-043-8.
5. Wohlin, Claes; Aurum, Aybüke (December 2015). "Towards a decision-making structure
for selecting a research design in empirical software engineering". Empirical Software
Engineering. 20 (6): 1427–1455. doi:10.1007/s10664-014-9319-7. S2CID 254463421.
6. Charles W. koushik,Introduction to Software Product Lines Archived 2012-02-04 at the
Wayback Machine
7. Software Product Lines Carnegie Mellon Software Engineering Institute Web Site
8. Marr, Bernard. “15 Amazing Real-World Applications of AI Everyone Should Know About.”
Forbes, 10 May 2023, www.forbes.com/sites/bernardmarr/2023/05/10/15-amazing-real-
world-applications-of-ai-everyone-should-know-about/. Accessed 26 Sept. 2024.
9. “AI in Software Engineering.” GeeksforGeeks, 12 May 2023, www.geeksforgeeks.org/ai-in-
software-engineering/. Accessed 26 Sept. 2024.