1. What Is Good Software?
- Correctness
- Efficiency (Time & Space(memomory), HW utilization(GPU))
- Easy to maintain (related to cost)
- modifiability
- readability
- reuseablility
- easy to debug, repair
- testability
- easy to extend
- platform-independent
- robustness, reliable, dependable
- Secure (security)
- documentation (versionning/github)
- easy to use (usability, user interface)
2. Software Crisis
- 매우 빠른 하드웨어 발전 속도를 소프트웨어가 따라가지 못하고 있다.
- correct, understandable, and verifiable computer programs를 작성하는 것은 매우 어렵다.
3. Software Life Cycle
- maintain(change, enhancement, improvement) -> cost
4. Software Engineering
- The establishment and use of sound engineering principles in order to economically obtain software that is reliable and works efficiently
- engineering : applying science theory to real life practical problems
- produce a correct, efficient, and reliable software to minimize the cost of software development and maintenance
5. Software Properties
- Modularity : divide and conquer.
- Encapsulation : hide the implementation.
- Localization : collect similar things together.
- Abstraction : simplifying complex reality.
- Uniformity : make everything look similar.
- Completeness : do everything required.
- Confirmability : be able to prove that the software works properly.
6. Programming Methodology
Unstructured Programming
-only one main program, global data, use goto statement
Procedural Programming, Structured Programming
- sequence of procedure call
- procedure 별로 유지 보수 가능, c프로그래밍이 이에 속한다.
- top-down approach (하나의 복잡한 문제를 쪼개고 쪼개서 쉬운 문제들의 합으로 해결한다, divide and conquer와 유사)
- functional decomposition (함수들로 동작을 분해)
Modular Programming
- procedural programming에서 procedure들을 module화 하는 방법
- 하나의 프로그램을 비슷한 동작을 하는 부분들로 구성된 모듈로 분리
* Global Variable 사용 피하기 -> OOP 등장
- global variable은 access범위가 제한되지 않기 때문에 unsafe하다.
- 여러 모듈이 global variable의 공유가 가능하기 때문에 modular programming 원칙에 위배된다.
- 즉 global variable 때문에 모듈과의 depency가 생기게 된다.
- 따라서 data를 module안에서 localize해야한다. -> safe
Object Oriented Programming
- program consist of a set of interacting objects.
- class로 data와 functions를 함께 묶는다.
- object는 class의 instance이다.
- bottom - up approach (가장먼저 객체들을 정의하고 객체들을 모아서 전체를 완성한다.)
- 큰 규모의 sw를 개발하는데 적합한 방법
- maintainablility, reusablity가 높다
'ComputerScience > Software Engineering' 카테고리의 다른 글
소프트웨어공학 - 2. SW Development Process (0) | 2022.03.10 |
---|---|
소프트웨어공학 - 1. Introduction (0) | 2022.03.02 |
UML (Unified Modeling Language) (0) | 2021.12.02 |
OOP - 3. Technique (0) | 2021.09.29 |
OOP - 2. OOP concepts (0) | 2021.09.08 |