"the application of a systematic, disciplined, quantifiable approach to the development, operation and maintenance of software." - IEEE Standard Glossary of Software Engineering Terminology
"An engineering discipline that is concerned with all aspects of software production" - Ian Sommerville
"Multi-person construction of multi-version software" -David Parnas
important view of SE is more on how it is produced rather than what is produced
Why SE is needed?
it's because software development is hard.
it's important to distinguish easy systems from hard systems. ????
SE becomes more important
as the demands of software is increased
and the demands are for larger and more complex SW systems.
a project whose purpose is to develop a software system is composed of a number of activities; Requirement analysus, Design, Implementation, Testing, etc.
Software Development Process prescribes the interrelationship among the activities by expressing their order and frequency, as well as defining the workproducts.
Software Modeling
Model: abstraction of the system.
modeling is a way to deal with complexity by ignoring irrelevant details.
it's used for more efficient sharing idea and the results of system analysis and design among clients, system analysts and programmers
standard for modeling is UML(Unified Modeling Language)
Software Architecture and Design
Software Architecture
Architectural design is on early stage of the system design process
it focuses on issues that will be difficult/ impossible to change once the system is built; performance, reliability, scalability, etc.
it's big picture of a software.
Software Design
Core concepts in Software Design
abstraction, Information Hiding/Encapsulation, SoC(Separation of Concerns), interfaces, modularity
Measure
Cohesion, Coupling
Principles
-SOLID(SRP, OCP, LSP, ISP, DIP), favoring composition over inheritance
Software Verification and Validation
"Program Testing can be used to show the presence of bugs but never to show their absence" - Edsger W. Dijkstra
Formal Verification
proving and disproving the correctness of a program with respect to a certain specification or property, using formal methods of mathematics
it's hard to understand, analyze and evaluate software
Software changes as the time goes by.
the failure rate decreases as sw is developed, but while useful life time, it gradually increases and rapidly increases as it ages.
Brook's law
adding more workers not necessarily shortens the schedule, even it can lengthens the schedule due to the problem or difficulty appears from the communication