0% found this document useful (0 votes)
4 views

Lecture One - Software Engineering intro

The document provides a comprehensive overview of software engineering principles, covering topics such as software development life cycles, methodologies, key attributes, and career opportunities in the field. It emphasizes the importance of systematic approaches to software design, development, testing, and maintenance, while also discussing the advantages and disadvantages of software engineering practices. Additionally, it highlights the significance of ethical conduct in software development to ensure quality and public trust.

Uploaded by

Anguzu George
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views

Lecture One - Software Engineering intro

The document provides a comprehensive overview of software engineering principles, covering topics such as software development life cycles, methodologies, key attributes, and career opportunities in the field. It emphasizes the importance of systematic approaches to software design, development, testing, and maintenance, while also discussing the advantages and disadvantages of software engineering practices. Additionally, it highlights the significance of ethical conduct in software development to ensure quality and public trust.

Uploaded by

Anguzu George
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 11

Introduction to Software Engineering Principles.

Software Engineering is a subdomain of Engineering in which you learn to develop, design,


test, and maintain software using a systematic and structured approach.
Software is a collection of programs. And that programs are developed by software engineers.
The code of a program is written in any of various programming languages like C++, Java,
Python, Django, etc.
In this Software Engineering Tutorial, you will learn all the basic to advanced concepts, like:
 Software Engineering Models and Architecture,
 Software development life cycle,
 software project management,
 software metrics, software requirements, etc.

This software engineering course unit is best suited for students and aspiring software
engineers, providing a deep understanding of many different aspects of software engineering.
To truly excel in this field, it's essential to not only understand the theoretical aspects but also
to gain practical experience in applying these concepts.
What is Software Engineering?
Software Engineering is the process of designing, developing, testing, and maintaining
software. It is a systematic and disciplined approach to software development that aims to
create high-quality, reliable, and maintainable software. Software engineering includes a
variety of techniques, tools, and methodologies, including requirements analysis, design,
testing, and maintenance.

Software Engineering Introduction


Software Engineering is a systematic, disciplined, quantifiable study and approach to the
design, development, operation, and maintenance of a software system. This course unit will
help you understand the basics of software engineering.
What is Software Engineering?
Software Engineering is the process of designing, developing, testing, and maintaining
software. It is a systematic and disciplined approach to software development that aims to
create high-quality, reliable, and maintainable software.
1. Software engineering includes a variety of techniques, tools, and methodologies,
including requirements analysis, design, testing, and maintenance.
2. It is a rapidly evolving field, and new tools and technologies are constantly being
developed to improve the software development process.
3. By following the principles of software engineering and using the appropriate tools
and methodologies, software developers can create high-quality, reliable, and
maintainable software that meets the needs of its users.
4. Software Engineering is mainly used for large projects based on software systems
rather than single programs or applications.
5. The main goal of Software Engineering is to develop software applications for
improving quality, budget, and time efficiency.
6. Software Engineering ensures that the software that has to be built should be
consistent, correct, also on budget, on time, and within the required requirements.
Key Principles of Software Engineering
1. Modularity: Breaking the software into smaller, reusable components that can be
developed and tested independently.
2. Abstraction: Hiding the implementation details of a component and exposing only
the necessary functionality to other parts of the software.
3. Encapsulation: Wrapping up the data and functions of an object into a single unit,
and protecting the internal state of an object from external modifications.
4. Reusability: Creating components that can be used in multiple projects, which can
save time and resources.
5. Maintenance: Regularly updating and improving the software to fix bugs, add new
features, and address security vulnerabilities.
6. Testing: Verifying that the software meets its requirements and is free of bugs.
7. Design Patterns: Solving recurring problems in software design by providing
templates for solving them.
8. Agile methodologies: Using iterative and incremental development processes that
focus on customer satisfaction, rapid delivery, and flexibility.
9. Continuous Integration & Deployment: Continuously integrating the code changes
and deploying them into the production environment.
Main Attributes of Software Engineering
Software Engineering is a systematic, disciplined, quantifiable study and approach to the
design, development, operation, and maintenance of a software system. There are four main
Attributes of Software Engineering.
1. Efficiency: It provides a measure of the resource requirement of a software product
efficiently.
2. Reliability: It assures that the product will deliver the same results when used in
similar working environment.
3. Reusability: This attribute makes sure that the module can be used in multiple
applications.
4. Maintainability: It is the ability of the software to be modified, repaired, or enhanced
easily with changing requirements.
Dual Role of Software
There is a dual role of software in the industry. The first one is as a product and the other one
is as a vehicle for delivering the product. We will discuss both of them.
1. As a Product
 It delivers computing potential across networks of Hardware.
 It enables the Hardware to deliver the expected functionality.
 It acts as an information transformer because it produces, manages, acquires,
modifies, displays, or transmits information.
2. As a Vehicle for Delivering a Product
 It provides system functionality (e.g., payroll system).
 It controls other software (e.g., an operating system).
 It helps build other software (e.g., software tools).
Objectives of Software Engineering
1. Maintainability: It should be feasible for the software to evolve to meet changing
requirements.
2. Efficiency: The software should not make wasteful use of computing devices such as
memory, processor cycles, etc.
3. Correctness: A software product is correct if the different requirements specified in
the SRS Document have been correctly implemented.
4. Reusability: A software product has good reusability if the different modules of the
product can easily be reused to develop new products.
5. Testability: Here software facilitates both the establishment of test criteria and the
evaluation of the software concerning those criteria.
6. Reliability: It is an attribute of software quality. The extent to which a program can
be expected to perform its desired function, over an arbitrary time period.
7. Portability: In this case, the software can be transferred from one computer system or
environment to another.
8. Adaptability: In this case, the software allows differing system constraints and the
user needs to be satisfied by making changes to the software.
9. Interoperability: Capability of 2 or more functional units to process data
cooperatively.
What Careers Are There in Software Engineering?
A degree in software engineering and relevant experience can be utilized to explore several
computing job choices. Software engineers have the opportunity to seek well-paying careers
and professional progress, although their exact possibilities may vary depending on their
particular school, industry, and region.
Following are the job choices in software engineering:
 SWE (Software Engineer)
 SDE (Software Development Engineer)
 Web Developer
 Quality Assurance Engineer
 Web Designer
 Software Test Engineer
 Cloud Engineer ·
 Front-End Developer
 Back-End Developer
 DevOps Engineer. A DevOps engineer is a professional who combines IT
development and operations skills to improve the software development
process. They use tools and methodologies to help get software from concept to
release faster.
 Security Engineer.
What Tasks do Software Engineers do?
The main responsibility of a software engineer is to develop useful computer programs and
applications. Working in teams, you would complete various projects and develop solutions
to satisfy certain customer or corporate demands.
Some of the key responsibilities of software engineer are:
 Requirement Analysis: Collaborating with stakeholders to understand and gather the
requirements to design and develop software solutions.
 Design and Development: Creating well-structured, maintainable code that meets the
functional requirements and adheres to software design principles.
 Testing and Debugging: Writing and conducting unit tests, integration tests, and
debugging code to ensure software is reliable and bug-free.
 Code Review: Participating in code reviews to improve code quality, ensure
adherence to standards, and facilitate knowledge sharing among team members.
 Maintenance: Updating and maintaining existing software systems, fixing bugs, and
improving performance or adding new features.
 Documentation: Writing clear documentation, including code comments, API
documentation, and design documents to help other engineers and future developers
understand the system.
How Much do Software Engineers Make?
The majority of software developers globally make less than $50,000 annually on average.
This covers not only junior developers but also some senior ones based on where they work
and for what company. However, it is more likely that a mid-level or senior software engineer
makes between $50,000 and $120,000 per year.
What Skills do Software Engineers Need?
To achieve success, software engineers require a unique set of technical and soft skills. These
skills include computer programming knowledge for designing, developing, testing, and
debugging software, as well as soft skills for interacting with stakeholders, team members,
and company leadership.
Following are some must have technical skills to become Software Engineers:
 Coding and computer programming
 Software testing
 Object-oriented design (OOD)
 Software development

Following are some must have soft skills to become Software Engineers:
 Communication skills
 Team player
 Problem solving
 Attention to detail

Program vs Software Product

Advantages of Software Engineering


There are several advantages to using a systematic and disciplined approach to software
development, such as:
1. Improved Quality: By following established software engineering principles and
techniques, the software can be developed with fewer bugs and higher reliability.
2. Increased Productivity: Using modern tools and methodologies can streamline the
development process, allowing developers to be more productive and complete
projects faster.
3. Better Maintainability: Software that is designed and developed using sound
software engineering practices is easier to maintain and update over time.
4. Reduced Costs: By identifying and addressing potential problems early in the
development process, software engineering can help to reduce the cost of fixing bugs
and adding new features later on.
5. Increased Customer Satisfaction: By involving customers in the development
process and developing software that meets their needs, software engineering can help
to increase customer satisfaction.
6. Better Team Collaboration: By using Agile methodologies and continuous
integration, software engineering allows for better collaboration among development
teams.
7. Better Scalability: By designing software with scalability in mind, software
engineering can help to ensure that software can handle an increasing number of users
and transactions.
8. Better Security: By following the Software Development Life Cycle (SDLC) and
performing security testing, software engineering can help to prevent security
breaches and protect sensitive data.
In summary, software engineering offers a structured and efficient approach to software
development, which can lead to higher-quality software that is easier to maintain and adapt to
changing requirements. This can help to improve customer satisfaction and reduce costs,
while also promoting better collaboration among development teams.
Disadvantages of Software Engineering
While Software Engineering offers many advantages, there are also some potential
disadvantages to consider:
1. High upfront costs: Implementing a systematic and disciplined approach to software
development can be resource-intensive and require a significant investment in tools
and training.
2. Limited flexibility: Following established software engineering principles and
methodologies can be rigid and may limit the ability to quickly adapt to changing
requirements.
3. Bureaucratic: Software Engineering can create an environment that is bureaucratic,
with a lot of processes and paperwork, which may slow down the development
process.
4. Complexity: With the increase in the number of tools and methodologies, software
engineering can be complex and difficult to navigate.
5. Limited creativity: The focus on structure and process can stifle creativity and
innovation among developers.
6. High learning curve: The development process can be complex, and it requires a lot
of learning and training, which can be challenging for new developers.
7. High dependence on tools: Software engineering heavily depends on the tools, and if
the tools are not properly configured or are not compatible with the software, it can
cause issues.
8. High maintenance: The software engineering process requires regular maintenance
to ensure that the software is running efficiently, which can be costly and time-
consuming.
Conclusion:
In summary, software engineering can be expensive and time-consuming, and it may limit
flexibility and creativity. However, the benefits of improved quality, increased productivity,
and better maintainability can outweigh the costs and complexity. It’s important to weigh the
pros and cons of using software engineering and determine if it is the right approach for a
particular software project.
Questions For Practice
1. A software configuration management tool helps in:
(A) keeping track of the schedule based on the milestone reached
(B) maintaining different versions of the configurable items
(C) managing manpower distribution by changing the project structure
(D) all of the above
Solution: Correct Answer is (B).
2. Which of the following statements is/are true?
P: Software Reengineering is preferable for software products having high failure rates, poor
design, and/or poor code structure.
Q: Software Reverse Engineering is the process of analyzing software with the objective of
recovering its design and requirement specification.
(A) P only
(B) Neither P nor Q
(C) Q only
(D) Both P and Q
Solution: Correct Answer is (D).
3. The diagram that helps in understanding and representing user requirements for a
software project using UML (Unified Modeling Language) is:
(A) Entity Relationship Diagram
(B) Deployment Diagram
(C) Data Flow Diagram
(D) Use Case Diagram
Solution: Correct Answer is (D).
Conclusion
Software engineering is a key field that involves creating and maintaining software. It
combines technical skills, creativity, and problem-solving. As technology advances, the need
for software engineers increases, making it a great career choice. Whether you’re new to the
field or want to learn more, understanding software engineering is crucial. Keep exploring,
learning, and enjoying the challenges and opportunities this field offers.
Code of Ethics in Software Engineers
Software Engineers build software to be used by all sections of society, so socially accepted
morals and a code of ethics need to be followed during the development cycle. This
minimizes legal hurdles after the software's launch and subsequent version releases. This
article will talk about the Code of Ethics for software engineers.
Purpose of the Code of Ethics
The purpose of the Code of Ethics is to ensure an equitable and inclusive experience, free of
harassment and discrimination for all users of the software, irrespective of their financial,
social, or economic status. The software should be smoothly accessible and usable by both
disabled and non-disabled users.
Importance of Ethical Conduct in Software Engineering
In most software development teams, the focus is on the tech stack, optimizing the code, and
faster deployment, with little to no thought on following the code of ethics. This is why big
tech giants like Google, Amazon, and Meta are continuously penalized with heavy fines
worldwide. In 2023, the Competition Commission of India (CCI) imposed a hefty fine of
₹1337.76 crores on Google for unethical practices. Hence, not following the code of ethics
while developing software can cause heavy financial repercussions in the long term,
impacting the company's shares and balance sheet.
Fundamental Principles
 Commitment to the Profession: Software development requires an ethical
commitment not just to the deadlines during work hours, but also post-release of the
software in the public domain.
 Adherence to Public Interest: The welfare of all sections of the public must be kept
in mind during development. Personally Identifiable Information (PII) or any
sensitive data should always be strictly encrypted. Special protections should be
implemented in inboxes, feeds, and comment sections for minor users of social media
apps to prevent age-inappropriate comments.
 Responsibility to Clients and Employers: The software development team is
equally responsible for adhering to the interests and requirements of both their
employer (who is paying to make the software) and the clients (users of the software).
 Ensuring Product Quality: The software product's quality needs to be of the highest
standards not only to stand out from its competitors but also to adhere to ethical
principles, norms, and considerations.
 Integrity and Independence in Judgments: Algorithms running the code should be
independent of any bias in judgment, maintaining integrity for all users.
 Ethical Management Practices: The management team overseeing the software
development team should act responsibly and transparently to ethically supervise
the process.
 Advancing the Profession: Following an ethical code of conduct from the beginning
of one’s career reaps huge dividends in the form of minimal or zero legal issues and
better peace of mind.
Professional Conduct
 Integrity in Decision-Making: Decisions need to be taken with integrity, after
consultation with teammates, management, and other stakeholders involved, in the
best interest of the software's end-users.
 Ethical Leadership: The team lead should lead by example and emulate the code of
ethics before instructing the team to do so for faster implementation.
 Professionalism and Reputation: Goodwill, trust, and a credible professional
reputation built over decades can crumble in just 1 or 2 days when a legal challenge
arises. In the age of social media, news takes just a few minutes to become viral
worldwide.
Interpersonal Relations
 Fair Treatment of Colleagues: Every colleague's inputs and opinions need to be
heard with an open mind before taking a decision, ensuring respectful and fair
treatment of everyone in the team.
 Supportive Collaboration: Working in a team necessitates collaboration throughout
the software development life cycle. Teammates need to be supportive of each other's
endeavors and maintain positivity to foster supportive and fruitful collaborations.
Personal Development
 Lifelong Learning: Tech stacks keep upgrading as the technical world evolves at an
immensely fast pace. For example, even a decade ago J2EE (Jakarta Enterprise
Edition) developers were in demand, but now Spring Boot developers are in demand.
Lifelong learning should not be restricted just to knowing the latest tech stacks, but
also to the latest changes in the code of ethics, as ethics evolve with advancements in
technology.
 Promotion of Ethical Practice: Ethical practice can be promoted among everyone
from fresh hires to the senior leadership by pasting the code of ethics on the office's
walls and sending them in emails to the team with attractive multimedia to capture
attention.
Conclusion
In today's hyper-connected world, being a skilled software engineer does not mean merely
upgrading knowledge to the latest tech stacks. It includes knowing the code of ethics like the
back of one's hand, as this knowledge guides efficiently without needing to refer to the ethics
manuals repeatedly, as debugging and refactoring code itself is immensely pressurizing.

You might also like