SoftwareE Sheet 1
SoftwareE Sheet 1
2. Documentation
In addition to the code, professional software contains full-fledged
documentation. This documentation may cover:
Tutorial on installing, configuring and other ways of using the software
The information that is contained as technical documentation for use in the
maintenance and troubleshooting processes.
API documentation in case of if it interfaces with other systems
3. Testing and Quality Assurance
Extensive testing is performed before delivering the software, including:
Unit tests
Integration tests
Performance and stress tests This ensure that the software passes quality
checks that is expected to deliver whenever Quality Assurance I
Programming Tests ensure that the developed software possesses a particular
level of quality that is fit for certain usage or situations.
8. This is where the functionality of the site comes in, as well as the ‘look
and feel’ of the site.
The software is not only completely utilitarian but also represents software
which includes UX quality. This means that site design is straightforward
and that the program fits well with the customer’s business environment,
which entails modification most of the time.
Learning Curve:
Main types of software may take more time to learn for the users because the
clients need to identify as to what extend they should incorporate the options
available for use. Also, adopting users often require to figure how to
construct the software to meet their tasks, a factor that can complicate the
work.
1.3. Briefly discuss why it is usually cheaper in the long run to use
software engineering methods and techniques for software
systems.
1.4. Software engineering is not only concerned with issues like system
heterogeneity, business and social change, trust, and security, but
also with ethical issues affecting the domain. Give some examples
of ethical issues that have an impact on the software engineering
domain
Issue: One of the largest ethical issues relates to the management of user
information with priority given to privacy. Software systems involve the use
of a number of individual’s data including; names, addresses, financial
information and health records among others in the form of data sets or even
as items within databases.
Example: Allowing the user’s data to go unguarded exposes them to risk,
where their information is published to the wrong people and used to steal
their identity, money or anything else.
Ethical Responsibility: One of a software engineers’ roles is to make sure
that data is properly stored, transmitted, and processed, so that it meets the
legal requirements of the country (example; GDPR in Europe or HIPAA in
USA).
This means that use of improper algorithms can results into involving biased
treatment of individuals or even groups. This is especially the case in
industries such as hiring software, facial recognition systems, or even
predictive policing where the data is either racists or the design is
prejudiced.
Example: An algorithm for employing talents that discriminates against
potential hires in various groups because of bias training information or
criteria.
Ethical Responsibility: Scientists working in the field of engineering must
guarantee that their algorithms are harmless and bias-free. This includes
issues such selection and evaluation of datasets in a way that does not
replicate social injustices within the society.
3. Security and Cybersecurity
Issue: Piracy and unauthorized copying of software are against the law, and
affects businesses and independent content creators. Second, the engineers
may incorporate unauthorised and unlicensed software components in the
development of their BE.
Example: Using the code from libraries without obtaining permission or
license and then incorporating them in commercial software.
Ethical Responsibility: Engineers have to be careful when choosing software
components at it is crucial not to violate intellectual property rights and their
usage has to conform to licenses.
6. Safety-Critical Systems
Issue: There are applications in which software manages complex control
systems at risk of failure, which might lead to injury, death or serious
consequence (i.e. medical devices, self-driving automobiles, and aviation
system).
Example: Automonitor self-driving car malfunction can lead to an accident
that causes injuries to the occupants or other people on the road.
Ethical Responsibility: If the lives of people will depend on software
systems then safety comes first, systems have to be tested like absolutely
nothing like them exists in the universe as software has to be fail-safe.
Issue: The software industry also has this factor where energy centers,
blockchain technological systems contribute to energy consumption and
carbon footprint.
Example: A data intensive application that uses a large number of servers
and consumes energy and emits green house gases.
Ethical Responsibility: The engineers need to factor the consequences of
their software on the environment and look for ways to produce the best
software performance and energy efficiency.
Ethical Responsibility: Broader utility requires that engineers help users to
understand how software works, and offer them choices for how their data is
collected and utilized.
1.5. Based on your own knowledge of some of the application types
discussed in Section 1.1.2, explain, with examples, why different
application types require specialized software engineering
techniques to support their design and development.
1. Stand-alone Applications
Description: It is applications that are installed on a local computer (desktop,
laptop) cannot operate on the internet for their usefulness (Word,
Photoshop).
Specialized Techniques:
User Interface (UI) Design: While applications that are individual and stand
alone are normally very capable, they normally demand more delicate and
very sensitive UIs. It means that engineers need to pay attention to the
usability and accessibility.
Performance Optimization: Since the application runs locally as an
application in the database, performance, especially for CPU, memory, and
storage options are vital. Scheduling for the maximum utilization of
resources is useful mainly for the grid computing systems which have scarce
hardware resources.
Cross-platform Compatibility: If the application is to be compiled and run on
different operating systems such as Windows, macOS …the application
development tools like electron, Qt, becomes compulsory and platform-
dependent testing is a necessity.
2. Web-based Applications
Description: These applications function within web browsers and depend
on internet connection (Google Docs, Gmail, marketing sites such as
Amazon).
Specialized Techniques:
Client-server Architecture: Web based application contain a customer, which
is the Web browser and a server that processes request. Often, engineers
have to come up with the ways to deal with multiple users and requests, that
is why they have to implement the principles of RESTful API design,
asynchronous communication, and load balancing.
Security and Data Privacy: Technological risks that affect web applications
include, SQL injection, cross-site scripting (XSS), cross-site request forgery
(CSRF). Various procedures including Secure Coding, SSL Security and
other tests falls under security engineering.
Scalability and High Availability: Thus, web applications commonly deal
with a substantial, geographically dispersed customer base, therefore to cope
with request rates, horizontal scaling, caching, and cloud deployment are
employed.
4. Mobile Applications
Description: Mobile applications are intended for smart phones and tablets
and may use local storage as well as cloud storage (such as Instagram,
Whats App).
Specialized Techniques:
Responsive Design: When it comes to factor, anywhere, mobile applications
need to deal with different sizes, resolutions and even change of orientation.
UX designers combine Progressive Web App (PWA) concepts and engaging
UI design methods and approaches including React natively or flutter
natively.
Energy Efficiency: However, using of mobile devices has limitations in
terms of battery power of the gadgets. DevelopersResponseBody Learn what
engineers must do to manage CPU, control background apps, and minimize
network activity to conserve power.
Offline Functionality: It is astonishing, but many mobile applications need to
work in the offline mode. Forwarding techniques like local data caching and
synchronization, and technologies like progressive web apps (PWAs) are
applied to achieve operational capability offline.
5. Distributed Systems
Description: These are systems in which the software comprises is
distributed across several network-connected computers and perform
cohesively (for instance, Google Cloud and Netflix CDN).
Specialized Techniques:
Distributed Data Management: Engineers have to deal with data
synchronization across distributed systems, methodologies such as eventual
consistency, replication, or distributed data stores, (e.g. Cassandra,
MongoDB).
Concurrency and Fault Tolerance: Concurrency – many processes occur in
parallel – is an essential attribute of distributed systems, as is the failure of
some of the components in the system. Some examples include consensus
algorithms such as Paxos, Raft, redundancy and checkpointing, to ensure the
system; is resilient a failure.
Microservices Architecture: Software in distributed environments is
replicated using the microservices architecture in most cases. All of them are
decoupled and implement some practices to manage interactions and
orchestration, such as containers (like Docker), service discovery, and API
gateway.
7. AI-based Applications
Description: Such applications include applications using machine learning,
natural language processing, or other artificial intelligence technologies
(such as facial recognition, auto-driving).
Specialized Techniques:
Model Training and Optimization: AI applications involve data
preprocessing in building effective machine learning models and model
training as well as hyperparameters tuning.
Ethical AI and Bias Mitigation: The ethical use of the AI application has to
be a concern such as bias behavior or fairness. Application of bias detection
and fairness constraints is applied on models developed by engineers.
Continuous Learning and Adaptation: AI systems: require learning at one or
more times. Such practices include online learning, reinforcement learning
and model retraining, that make the AI system continue to learn.
4. Increased Productivity:
• Reduced overhead: Electronic connectivity can reduce the overhead that
comes with the traditional methods of communication in places like travel and
paperwork.
• Improved coordination: Tools electronically used by teams allow for better
coordination of their work thereby reducing the risk of delays and errors.
• Enhanced collaboration: Electronic connectivity breaks down silos and
encourages collaboration that can enable more innovative and creative solutions.
5. Enhanced Project Management:
• Real-time project tracking: Real time visibility into project progress through
electronic tools enables managers to see potential problems before they become
problems.
• Automated workflows: Automation can take away error points in project
workflows and make them less prone to mistakes.
• Improved reporting: It’s possible to create detailed reports on how project
progresses, how resources are used, and other important metrics using electronic
tools.
1.8. Noncertified individuals are still allowed to practice software
engineering. Discuss some of the possible drawbacks of this.
1.9. For each of the clauses in the ACM/IEEE Code of Ethics shown in
Figure 1.4, propose an appropriate example that illustrates that
clause.
What is SDLC:
The Software Development Lifecycle (SDLC) is a structured process that
software engineers follow to develop high-quality software. It typically involves
the following phases:
1. Planning: This phase involves defining the project's goals, requirements,
and scope.
2. Design: The software's architecture and design are created, outlining the
components and how they will interact.
3. Development: The actual coding and implementation of the software takes
place.
4. Testing: The software is thoroughly tested to identify and fix bugs.
5. Deployment: The software is released to users or clients.
6. Maintenance: Ongoing updates, bug fixes, and enhancements are made to
the software.