INTRODUCTION
TO SOFTWARE
TECHNOLOGIES.
COURSE OUTCOME
1. Understand Introduction to the software landscape.
2. Analyse challenges associated with emerging
technologies.
3. Apply the life cycle of software products.
4. Analyse contents rewritten and updated articles by
leaders in the software industry
5. Analyse requirement engineering goals and practise
them in projects in the Software industry.
INTRODUCTION: SOFTWARE LANDSCAPE
• WHAT IS SOFTWARE?
• Software is a program or set of programs containing instructions that provide desired
functionality.
• WHAT IS ENGINEERING, TECHNOLOGY?
• Engineering is the process of designing and building something that serves a
particular purpose and finds a cost-effective solution to problems.
• Technology is the application of scientific knowledge to the practical aims of human
life.
• WHAT IS SOFTWARE ENGINEERING, SOFTWARE TECHNOLOGY?
• 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 technology refers to the development methods, programming languages,
and tools used in the development of software applications
Principles of Software Engineering
➢ Modularity: Breaking the software into smaller, reusable components that can be developed and tested
independently.
➢ Abstraction: Hiding the implementation details of a component and exposing only the necessary functionality to
other parts of the software.
➢ 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.
➢ Reusability: Creating components that can be used in multiple projects, which can save time and resources.
➢ Maintenance: Regularly updating and improving the software to fix bugs, add new features, and address security
vulnerabilities.
➢ Testing: Verifying that the software meets its requirements and is free of bugs.
➢ Design Patterns: Solving recurring problems in software design by providing templates for solving them.
➢ Agile methodologies: Using iterative and incremental development processes that focus on customer
satisfaction, rapid delivery, and flexibility.
➢ Continuous Integration & Deployment: Continuously integrating the code changes and deploying them into the
production environment.
Parameters Defining Software Project
• The software should be produced at a reasonable cost, in a reasonable time, and should be
of good quality. These three parameters often drive and define a software project.
1. Cost: As the main cost of producing software is the manpower employed, the cost of
developing software is generally measured in terms of person-months of effort spent in
development.
2. Schedule: The schedule is another important factor in many projects. Business trends are
dictating that the time to market a product should be reduced; that is, the cycle time from
concept to delivery should be small. This means that software needs to be developed faster
and within the specified time.
3. Quality: Quality is one of the main mantras, and business strategies are designed around
it. Developing high-quality software is another fundamental goal of software engineering.
Classification of Software
• The software can be classified based on various criteria, including:
❖ Purpose: Software can be classified as system software (e.g., operating systems, device drivers) or application software (e.g.,
word processors, games).
❖ Platform: Software can be classified as native software (designed for a specific operating system) or cross-platform software
(designed to run on multiple operating systems).
❖ Deployment: Software can be classified as installed software (installed on the user’s device) or cloud-based software (hosted
on remote servers and accessed via the internet).
❖ License: Software can be classified as proprietary software (owned by a single entity) or open-source software (available for
free with the source code accessible to the public).
❖ Development Model: Software can be classified as traditional software (developed using a waterfall model) or agile software
(developed using an iterative and adaptive approach).
❖ Size: Software can be classified as small-scale software (designed for a single user or small group) or enterprise software
(designed for large organizations).
❖ User Interface: Software can be classified as Graphical User Interface (GUI) software or Command-Line Interface (CLI)
software.
SOFTWARE CRISIS
• Software crisis is a term used in computer science for the difficulty of
writing useful and efficient computer programs in the required time.
• The software crisis was due to using the same workforce, same
methods, and same tools even though rapidly increasing software
demand, the complexity of software, and software challenges.
• With the increase in software complexity, many software problems
arise because existing methods were insufficient.
• Some issues like software budget problems, software efficiency
problems, software quality problems, software management, and
delivery problems, etc. This condition is called a software crisis.
• The cost of owning and maintaining software
was as expensive as developing the software.
• At that time Projects were running overtime.
• At that time Software was very inefficient.
Causes • The quality of the software was low quality.
• Software often did not meet user
of requirements.
• The average software project overshoots its
Software schedule by half.
• At that time Software was never delivered.
Crisis: • Non-optimal resource utilization.
• Challenging to alter, debug, and enhance.
Few Example Companies
• GNU Hurd (1990–Present) Unix was first developed in the 1970s. In 1990, the
GNU Project decided it was time to replace Unix with a free offering called GNU
Hurd.
• Thirty-plus years after work on the project started, GNU Hurd has yet to be
released as a working operating system for public use.
• It wasn't a complete loss, as many of the components from GNU were moved over
to create the Linux operating system, but Hurd is a great example of how software
development is fluid and never-ending.
• Windows Vista (2007–2016) Microsoft and Apple put a ton of labor into each
iteration of Windows and macOS, and there's a lot riding on each. So, it's amazing
that Windows Vista was such a horrific blunder.
• Designed to replace the aging Windows XP in 2007, Vista failed at just about
every possible benchmark. It was bloated—50 million lines of code compared
with XP's 40—and buggy; tons of pre-existing apps didn't even work in it. Long-
time users complained that the OS removed features they'd come to love.
DEVELOPMENT AFTER SOFTWARE CRISIS 1.0
The period following the Software Crisis 1.0 saw a significant rise in the development of
new software engineering principles to address the issues that caused the crisis.
• Structured Development: This involved breaking down software development into
well-defined phases, with clear deliverables at each stage.
• Requirements Engineering: A stronger emphasis was placed on gathering and
documenting user requirements accurately and completely. This reduced the risk of
building software that didn't meet the actual needs of users.
• Agile Methodologies: While structured development offered benefits, it also brought
rigidity. Agile methodologies emerged as a more flexible approach, allowing for
iterative development and faster adaptation to changing requirements.
• Software Architecture: A focus on designing a well-defined software architecture
ensured the overall structure of the code was sound and scalable for future growth.
• Software Reuse: Efforts were made to promote code reuse and the development of
reusable components, improving development efficiency and consistency.
• The term "Software Crisis 2.0" is used to describe a
SOFTWARE CRISIS 2.0 set of challenges faced in modern software
development, like those encountered in the "Software
Crisis 1.0" of the 1960s and 1970s.
• Similarities to the original crisis:
• Difficulty managing large and complex software
projects.
• Increasing software development complexity.
• Pressure to deliver software faster.
• Lack of qualified software engineers to meet the
demand.
• Unique aspects of Software Crisis 2.0:
• The massive growth of data generated by various
devices and sensors creates new challenges for
FIGURE: Software Crisis 2.0. The demand for data from
digital natives, coupled with the huge volume of data now software to handle and analyze this data
generated through ubiquitous mobile devices, sensors,and effectively.
applications, has led to a new software crisis. • The expectations of users, particularly digital
natives, have grown significantly. They demand
sophisticated and feature-rich applications.
Solutions for Crisis 2.0
Developing new software
Creating better tools for Investing in education and
development
managing complex software training to create a larger
methodologies that are
systems. pool of skilled developers.
more efficient and scalable.
Finding a better balance
Focusing on building between innovation and
Improving communication
security into the software stability to ensure that
and collaboration methods
development process from software is constantly
for distributed teams.
the very beginning. evolving while remaining
reliable.
HARDWARE ADVANCES PARALLEL
PROCESSING
• Parallel processing refers to the execution of multiple tasks or processes
simultaneously, often with the aim of improving performance and efficiency.
• Hardware advances have played a crucial role in enabling and enhancing parallel
processing capabilities.
1. Multi-core processors
2. Graphics Processing Units (GPUs)
3. Vector processors
4. FPGA (Field-Programmable Gate Array)
5. Interconnection networks
6. Memory architectures
7. Parallel programming models and tools
❖Multi-core processors: Traditional single-core processors have been replaced by
multi-core processors, which contain multiple processing units (cores) on a single
chip.
❖Graphics Processing Units (GPUs): Originally designed for rendering graphics,
GPUs are highly parallel processors with hundreds or thousands of smaller
processing cores optimized for parallel computation.
❖Vector processors: These processors operate on multiple data elements
simultaneously, performing the same operation on each element.
❖FPGA (Field-Programmable Gate Array): FPGAs are customizable hardware
devices that can be reconfigured to implement specific logic circuits.
❖Interconnection networks: Advances in interconnection technologies, such as high-
speed buses, interconnect fabrics, and network-on-chip (NoC) architectures, enable
efficient communication between processing elements in parallel computing systems.
❖Memory architectures: Memory architectures that support high bandwidth and low-
latency access are essential for feeding data to parallel processing units efficiently.
❖Parallel programming models and tools: Alongside hardware advances, the
development of parallel programming models and tools has been essential for
harnessing the parallel processing capabilities of modern hardware effectively.
SIGNIFICANT RE INCREASE IN VOLUME OF SOFTWARE
REQUIRED
• Digital Transformation: Many industries are undergoing digital transformation initiatives to stay competitive and
meet evolving customer expectations.
• Emergence of New Technologies: Advances in technologies such as artificial intelligence, machine learning,
blockchain, Internet of Things (IoT), and augmented reality (AR) are opening up new possibilities for software
applications across industries.
• Expanding Internet Economy: The growth of e-commerce, online services, and digital platforms has led to a surge
in demand for software to support these activities.
• Mobile Computing: The proliferation of smartphones and tablets has created a massive market for mobile
applications. Businesses are investing in mobile app development to reach customers on their preferred devices and
provide seamless user experiences.
• Cloud Computing: Cloud computing has democratized access to computing resources, making it easier and more
cost-effective for businesses to develop and deploy software applications.
• Regulatory Compliance: Regulatory requirements in industries such as finance, healthcare, and cybersecurity often
necessitate the development of specialized software solutions to ensure compliance with laws and standards.
• Customization and Personalization: Consumers and businesses alike increasingly expect software products and
services to be tailored to their specific needs and preferences.
• Globalization and Market Expansion: Companies expanding into new markets or serving diverse customer
segments may require localized software solutions to cater to different languages, cultures, and regulatory
environments.
JOB: A job is something you do simply to earn money
CAREER: The progress and actions taken by a person throughout a
lifetime, especially those related to that person's occupations.
A career is a series of connected
employment opportunities.
Software developers need a unique blend of technical skills and soft skills to
be successful in today's demanding environment. Here's a breakdown of the
crucial skill sets:
Technical Skills:
SKILL SET • Programming Languages: Proficiency in at least one programming language is essential.
Popular choices include Python, Java, JavaScript, C++, and Go, with specific languages
FOR A being in demand depending on the development area (web, mobile, etc.).
• Data Structures and Algorithms: Understanding how to efficiently organize and manipulate
SOFTWARE data is fundamental for writing efficient and scalable software.
• Software Development Methodologies: Familiarity with Agile methodologies like Scrum or
DEVELOPER Kanban is crucial for adapting to changing requirements and delivering software quickly.
• Database Technologies: A grasp of relational databases (SQL) and potentially NoSQL
databases is important for storing and managing application data.
• Cloud Computing: As software development moves to the cloud, knowledge of cloud
platforms like AWS, Azure, or GCP is becoming increasingly valuable.
• Version Control Systems: Using Git for version control and collaborating on code with others
is an essential skill.
• Testing Fundamentals: The ability to write unit tests and understand broader testing strategies
is vital for ensuring software quality.
• Soft Skills:
• Problem-Solving: The ability to break down complex problems into manageable steps and develop creative
solutions is paramount.
• Communication: Clear and concise communication is essential for collaborating with other developers, designers,
and stakeholders.
• Teamwork: Software development is often a team effort, so the ability to work effectively within a team is crucial.
• Critical Thinking: Analyzing problems objectively, identifying potential issues, and making sound judgments are
important for writing robust software.
• Lifelong Learning: The tech industry is constantly evolving, so a willingness to learn new technologies and adapt
to changing trends is essential.
• Specialization: As the software development landscape broadens, developers may choose to specialize in specific
areas like front-end development, back-end development, mobile development, or security.
• Domain Expertise: In some cases, having domain knowledge (e.g., healthcare, finance) can be beneficial for
developing software tailored to specific industries.
Remind yourself how much you have to learn.
Stop trying to prove yourself right.
“The code works” isn't where you stop; it's where you start.
TO
BEC O M E A Write it three times.
BETTER
Read code.
CODER
Write code, and not just as assignments.
Work one-on-one with other developers any way you can.
Learn techniques, not tools.