What is software engineering?
A computer is a programmable device, so the essence of computing is programming. Program development is the most essential use of a computer. Software engineering is the study of program development. How to do it efficiently, develop reliable programs, etc. Considers any software development activity software engineering.
the systematic application of methods to build software in a rigorous way. It involves technically building the system but also understanding requirements, working with stakeholders, finding a solution that balances stakeholder’s needs
Why do we need software engineering?
Software is everywhere around us, to the point that the way we build and maintain our software effects our quality of life.
It can make the difference between a fun product and something the user hates, a successful company and a failed company, and in some examples life and death.
Example of a system that wasn’t engineered correctly: healthcare.gov (somewhere between requirements, architecture, politics, project management went wrong).
How was the software engineering discipline born?
In the 60s, people realized they weren’t able to build the software they needed, resulting in the SOFTWARE CRISIS.
Software Crisis:
1 - Rising demand for software (moving from HW to SW in our products)
The demand for software at companies (NASA, Boeing) grew exponentially between 60s and 2000
2 - Effort required for larger systems doesn’t increase linearly:
Programming effort = individual could (heroically) do it right themselves, Software engineering = team
Developer tools will never catch up with increased complexity in demand
3 - Developer’s productivity growth: developer’s abilities can’t keep up with what’s needed in terms of size/complexity:
Gap between what’s needed and what’s available
Various software processes
Software process
Automated tools are ______ in software engineering.
FUNDAMENTAL
Not only for productivity. Not only efficiency, but also effectiveness
Software development mistakes
What is an IDE?
A software application that supports software developers and has many useful features
Tools are the cornerstone of the software engr. discipline
Requirements Engineering
What is object-oriented programming?
What is software architecture?
The set of principal design decisions about the system
Cohesion
measure of how strongly related the elements of a model are. We want modules to cooperate to provide a specific piece of functionality
Low coupling = high cohesion
REST
Representational State Transfer
Software Design: how to analyze requirements with a client (AKA stakeholder)
Software design patterns
5 main classes of design patterns
Failure vs Fault vs Error
4 mainstream approaches of software verification
Today, QA is mostly testing. Bill Gates: “50% of my company employees are testers, and the rest spends 50% of their time testing”
What can testing prove?
It canNOT prove the absense of errors. it can only verify their presence.
Testing granularity levels include unit, integration, system, acceptance, and regression.
Black-box testing
White-box testing
Random testing
Advantages:
Problems:
Instead, use Partition testing:
Boundary values
errors tend to occur at the boundary of a (sub) domain, because they are values that are less understood by developers (e.g. last iteration of a loop, the input 0, etc.)
So, we want to select inputs at these boundaries
Category-Partition Method
It is a method of black-box testing for going from the specification (description of the system) to a set of test cases (like any other black box testing approach) by following 6 steps:
Categories are characteristics of each input element. For example, variable str has categories length and content. It’s somewhat subjective in general. Then within each of those, you try to find boundary values.