Chapter 1 Mid
Chapter 1 Mid
Engineering
Lecture – 1
These characteristics often overlap and influence each other. For instance, improving usability can
sometimes impact performance, and enhancing security might make the software less convenient to use.
Therefore, achieving quality in software often involves balancing these characteristics according to the
priorities of the target user and the intended use of the software.
What is Software Engineering?
Software engineering emerged as a discipline in the 1960s in response to the growing complexity of
software systems, and the difficulties faced in developing them efficiently, reliably, and cost-effectively.
Software engineering is the branch of computer science that deals with the design, development,
testing, and maintenance of software applications. The discipline uses a systematic approach to
collect and analyze business requirements to design, build, and test software applications to satisfy
those business requirements.
As a note, software engineering is not limited to creating new products. Existing software products
need maintenance. Software maintenance is also a part of software engineering. Also, Software
engineering is not just programming. Good software engineering practices help ensure that software
projects are delivered on time, within budget, and with the desired level of quality and functionality.
Importance of Software Engineering
Software engineering is extremely important for the following reason:
▪ Reduction of Development Costs: Software engineering helps reduce the cost of development by
reusing the existing code, using better tools, and following sound software engineering practices.
▪ Reduction of Development Time: There are some software products and services available in the
market that provide the needed functionality immediately; thus, the project team can avoid writing
fresh source codes altogether to achieve the same functionality. The end result is that the productivity
of the project team continues to improve, which allows the faster development of software products.
▪ Increasing the Quality: Quality is the single most important ingredient in making any product
successful. Software engineering plays an important role in building quality software products using
better software engineering methodologies and software engineering tools, it is possible to build
better-quality software products.
Challenges of Software Engineering
Software engineering is a complex and dynamic field that comes with various challenges. Software engineering
employs a well-defined and systematic approach to developing software. This approach is considered to be the
most effective way of producing high-quality software. However, despite this systematic approach to software
development, there are still some serious challenges faced by software engineering. Some of these challenges
are listed below:
❑ Stakeholders may have changing needs or unclear requirements, and it's crucial to ensure that the software
meets these needs effectively.
❑ The challenge in software engineering is to deliver high-quality software on time and on budget to
customers. Balancing quality with speed, adapting to unexpected changes, and managing expectations
are crucial skills for navigating this challenge.
❑ The accurate estimation of project cost, effort and schedule is a challenge in software engineering.
Therefore, project managers need to determine how good their estimation process actually is and to make
appropriate improvements.
Challenges of Software Engineering
❑ Changes in software development are unavoidable. In today's world, changes occur rapidly and
accommodating these changes to develop complete software is one of the major challenges faced by the
software engineers.
❑ Risk management is an important part of software project management, and the objective is to identify
potential risks early and throughout the project and to manage them appropriately.
❑ The software landscape is dynamic, with new technologies and trends emerging constantly. Staying
relevant, continuously learning, and adapting to change requires a growth mindset and a willingness to
step outside one's comfort zone. So, evolving new technologies is a great challenge for software
engineers.
❑ Ensuring the security of software is crucial, and vulnerabilities can have severe consequences. Staying
ahead of security threats, incorporating robust security measures, and constantly adapting to evolving
vulnerabilities are essential considerations.
Challenges of Software Engineering
❑ Creating a user-friendly and intuitive user interface that meets users' needs can be challenging. Design
and usability considerations are crucial for software success.
❑ If software is intended for a global audience, dealing with multiple languages, cultures, and regional
requirements can be challenging.
1. Analyzing User Requirements: Software Engineers have to Understand, analyze, and translate user
requirements into technical specifications to ensure the final product meets user needs.
2. Designing Software Solutions: Software Engineers Design and develop software applications using
various programming languages, frameworks, and tools.
3. Writing and Testing Code: Software Engineers Write, edit, and test the code for software
applications. They develop and implement test automation strategies. Software engineers are
responsible for collaborating with Quality Assurance testers to improve software quality.
4. Maintaining and Improving Existing Software: Software engineers are responsible for continuously
improving existing software by assessing and enhancing performance, adding new features, and fixing
bugs.
Responsibilities of Software Engineers
5. Software Documentation: Software engineers are responsible for writing and maintaining
comprehensive technical documentation such as design documents, code comments, and user manuals.
6. Collaboration and Communication: Software engineers Collaborate with other engineers, designers,
and stakeholders to ensure cohesive and effective development and implementation of software. They
Communicate technical information clearly and concisely to both technical and non-technical audiences.
7. Ensuring Quality and Security: Software engineers Implement and maintain quality assurance
protocols and security measures to safeguard software against vulnerabilities and ensure reliability and
user trust.
These responsibilities may vary or expand depending on the position, such as front-end, back-end, full-
stack development, or a specialized field like machine learning or data engineering.
Computer Science vs
Software Engineering
Software Engineering
• Front-End Developer: Focuses on the visual aspects of websites/apps using HTML, CSS, and
JavaScript.
•Back-End Developer: Works behind the scenes on databases, servers, and APIs to ensure everything
runs smoothly.
•Full-Stack Developer: Combines both front-end and back-end development, handling the entire
software process.
•Mobile Developer: Specializes in creating and maintaining mobile apps for Android and iOS.
•DevOps Engineer: Bridges development and IT operations, automating and optimizing the software
lifecycle.
•Data Scientist: Analyzes data to extract insights using statistics and machine learning.
•Software Architect: Designs the overall structure of complex software systems, ensuring scalability.
•Security Engineer: Protects systems from cyber threats through encryption and other security
measures.
•Game Developer: Creates video games, focusing on programming and integrating graphics and
audio.
•Database Administrator: Manages and optimizes databases to ensure efficient data storage.
•Quality Assurance Engineer: Tests software to identify and fix defects, ensuring product quality.
Management Tracks:
•Technical Lead: Oversees the technical team, providing guidance and making crucial decisions.
•Solutions Architect: Designs technical solutions to meet business needs, choosing the right tools and systems.
•Product Manager: Defines product vision, prioritizes features, and works with engineers to bring ideas to life.
•Program Manager: Coordinates multiple projects, ensuring they align with company goals and timelines.
•Chief Technology Officer (CTO): Shapes and executes the company’s technology strategy, leading innovation.
•Technical Sales/Customer Support: Connects customers with the technical team, troubleshooting and ensuring
satisfaction.
Choosing Your Path:
•Technical Path: Ideal if you love coding and solving complex problems.
•Management Path: Best if you enjoy leading teams and driving projects forward.
•Blended Roles: Some roles, like Technical Lead or Solutions Architect, require both technical skills and
leadership abilities.