์ํํธ์จ์ด ์๋ช
์ฃผ๊ธฐ(Sofrware Development Life Cycle, SDLC)
โ ํ๋ก์ ํธ ๊ณํ โถ๏ธ โก์๊ตฌ ๋ถ์ โถ๏ธ โข์ค๊ณ โถ๏ธ โฃ๊ตฌํ โถ๏ธ โคํ
์คํธ โถ๏ธ โฅ์ ์ง ๋ณด์
โฃ ์ํํธ์จ์ด ๊ตฌํ
โ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ ์์ํฌ
- ๊ฐ๋ฐํด์ผํ ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ถ๋ถ์ด ์ด๋ฏธ ๋ด์ฅ๋ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ตฌํ
- ๋์ผ ๋ก์ง ๋ฐ๋ณต ์ต์ํ / ์ฌ์ฌ์ฉ์ฑ ํ๋ / ์์ฐ์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ ํฅ์
→ ๋ชจ๋ํ / ์ฌ์ฌ์ฉ์ฑ / ํ์ฅ์ฑ / ์ ์ด์ ์ญํ๋ฆ(ํ๋ ์์ํฌ๊ฐ ์ดํ๋ฆฌ์ผ์ด์
ํ๋ฆ ์ ์ด)
- ์คํ๋ง ํ๋ ์์ํฌ(Spring Framework)
- JAVA ํ๋ซํผ์ ์ํ ์คํ ์์ค ๊ฒฝ๋ํ ํ๋ ์์ํฌ
- ๋์ ์น ์ฌ์ดํธ ๊ฐ๋ฐ / ์ ์์ ๋ถ ํ์ค ํ๋ ์์ํฌ
- ์ ์์ ๋ถ ํ๋ ์์ํฌ
- ์ฐ๋ฆฌ๋๋ผ ๊ณต๊ณต๋ถ๋ฌธ ์ ๋ณดํ ์ฌ์ ์ ํจ์จ์ ์ธ ์ ๋ณด ์์คํ ๊ตฌ์ถ ์ง์ ์ํด ํ์ํ ๊ธฐ๋ฅ/์ํคํ ์ฒ๋ฅผ ์ ๊ณต
- ๋ท๋ท ํ๋ ์์ํฌ(.NET Framework)
- MS์์ ๊ฐ๋ฐํ Windows ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ
- ๊ณตํต ์ธ์ด ๋ฐํ์(CLR)์ด๋ผ๋ ๊ฐ์ ๋จธ์ ์์์ ์๋
โป API(Application Programming Interface)
- ์ํํธ์จ์ด ๊ฐ ์ธํฐํ์ด์ค (์๋ก ๋ค๋ฅธ ์ํํธ์จ์ด/์๋น์ค ๊ฐ ์ํธ ์์ฉ ์ฉ์ด)
- ์ด์์ฒด์ ๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ธฐ๋ฅ์ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ๊ตฌํ
→ ๊ฐ๋ฐ ๋น์ฉ ์ ๊ฐ / ์ค๋ณต ์์
์ต์ํ / ์ ์ง ๊ด๋ฆฌ ์ฉ์ด / ๋น์ฆ๋์ค ํ์ฅ
โบ ํฌ์ธ(Fan-in): ์์ ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ → ํฌ์ธ์ด ๋์ผ๋ฉด ์ฌ์ฌ์ฉ ์ธก๋ฉด ์ค๊ณ ์ฐ์ but, ๋จ์ผ ์ฅ์ ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ ๋์ ์ง์ค์ ์ธ ๊ด๋ฆฌ/ํ ์คํธ ํ์
โบ ํฌ์์(Fan-out): ์์ ์ด ์ฌ์ฉํ๋ ๋ชจ๋์ ์ → ๋ถํ์ํ ํธ์ถ ๊ฐ๋ฅ์ฑ (๋จ์ํ ํ์)
โ ์์ง๋(Cohesion)
- ๊ฐ๋ณ ๋ชจ๋์ด ๋ ๋ฆฝ์ ์ผ๋ก ๊ธฐ๋ฅ์ผ๋ก ์ ์๋์ด ์๋ ์ ๋ / ์์ง๋ โฒ → ํ์ง โฒ
- ๊ธฐ๋ฅ์ (Function): ๋ชจ๋ ๋ด๋ถ์ ๋ชจ๋ ๊ธฐ๋ฅ ์์๊ฐ ๋จ์ผ ๋ฌธ์ ์ ์ฐ๊ด๋์ด ์ํ
- ์์ฐจ์ (Sequential): ๋ชจ๋ ๋ด ์ถ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ํ๋์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ก ์ฌ์ฉ
- ํต์ ์ ใป๊ตํ์ (Commuication): ๋์ผํ ์ /์ถ๋ ฅ์ ์ฌ์ฉํ์ฌ ์๋ก ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ํ
- ์ ์ฐจ์ (Procedural): ๋ชจ๋ ๋ด ๊ตฌ์ฑ ์์๋ค์ด ๋ค์ ๊ด๋ จ ๊ธฐ๋ฅ์ ์์ฐจ์ ์ผ๋ก ์ํ
- ์๊ฐ์ (Temporal): ํน์ ์๊ฐ ๋ด ์ฒ๋ฆฌ๋๋ ๊ธฐ๋ฅ์ ๋ชจ์ ํ๋์ ๋ชจ๋๋ก ์์ฑ
- ๋ ผ๋ฆฌ์ (Logical): ์ ์ฌํ ์ฑ๊ฒฉ์ ์ฒ๋ฆฌ ์์๋ค๋ก ํ๋์ ๋ชจ๋์ด ํ์ฑ
- ์ฐ์ฐ์ (Coincidental): ๊ฐ ๊ตฌ์ฑ ์์๋ค์ด ์๋ก ๊ด๋ จ์๋ ์์๋ก๋ง ๊ตฌ์ฑ
(๋์ ์์ง๋) ๊ธฐ๋ฅ์ โบ ์์ฐจ์ โบ ํต์ ์ ใป๊ตํ์ โบ ์ ์ฐจ์ โบ ์๊ฐ์ โบ ๋
ผ๋ฆฌ์ โบ ์ฐ์ฐ์ (๋ฎ์ ์์ง๋)
โ ๊ฒฐํฉ๋(Coupling)
- ๊ฐ๋ณ ๋ชจ๋ ๊ฐ ์ํธ ์์กดํ๋ ์ ๋ / ๊ฒฐํฉ๋ โผ → ํ์ง โฒ
- ๋ด์ฉ(Content): ํ ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋์ ๋ด๋ถ ๊ธฐ๋ฅ ๋ฐ ์๋ฃ๋ฅผ ์ง์ ์ฐธ์กฐ/์์
- ๊ณตํต/๊ณต์ (Common): ๊ณต์ ๋๋ ๊ณตํต ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ชจ๋์ด ์ฌ์ฉ(์ ์ญ ๋ณ์ ์ฐธ์กฐ)
- ์ธ๋ถ(External): ํ ๋ชจ๋์์ ์ ์ธํ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ์ ๋ค๋ฅธ ๋ชจ๋์์ ์ฐธ์กฐ
- ์ ์ด(Control): ํ ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋์ ์์ธํ ์ฒ๋ฆฌ ์ ์ฐจ๋ฅผ ์๊ณ ์์ด ์ด๋ฅผ ํต์ ํ๋ ๊ฒฝ์ฐ๋ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ด ๋ ๋ชจ๋์ ๋ถ๋ฆฌ๋์ด ์ค๊ณ, ์ฒ๋ฆฌ ๋์ ๊ฐ๋ฟ๋ง ์๋๋ผ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ ์ด ์์๋ ์ ๋ฌ
- ์คํฌํ(Stamp): ๋ ๋ชจ๋์ด ๋์ผํ ์๋ฃ ๊ตฌ์กฐ(๋ฐฐ์ด, ์ค๋ธ์ ํธ)๋ฅผ ์กฐํ, ์๋ฃ ๊ตฌ์กฐ ๋ฐ ํฌ๋งท ๋ณํ ์ ์กฐํํ๊ณ ์๋ ๋ชจ๋ ๋ชจ๋์ ์ํฅ
- ์๋ฃ(Data): ๋ชจ๋ ๊ฐ์ ์ธํฐํ์ด์ค๊ฐ ์๋ฃ ์์๋ก๋ง ๊ตฌ์ฑ
(๋ฎ์ ๊ฒฐํฉ๋) ์๋ฃ โบ ์คํฌํ โบ ์ ์ด โบ ์ธ๋ถ โบ ๊ณตํต/๊ณต์ โบ ๋ด์ฉ (๋์ ๊ฒฐํฉ๋)
โป ๋ชจ๋์ ๋
๋ฆฝ์ฑ: ๋ชจ๋ ๊ฐ ๊ณผ๋ํ ์ํธ์์ฉ์ ๋ง๊ณ ํ๋์ ๋
๋ฆฝ์ ๊ธฐ๋ฅ๋ง์ ์ํ → ๋์ ๋
๋ฆฝ์ฑ: ๋์ ์์ง๋ / ๋ฎ์ ๊ฒฐํฉ๋
โ ๊ฐ์ฒด ์งํฅ(Object-oriented): ๊ฐ์ฒด์ ์์ฑ, ํด๋์ค์ ๋ฉค๋ฒ, ์ ์ฒด์ ๋ถ๋ถ์ผ๋ก ๋๋ ๋ถ์
๊ฐ์ฒด(Object) | ๊ณ ์ ์๋ณ์ / ํ๋์ ๋
๋ฆฝ๋ ์กด์ฌ / ์ผ์ ํ ๊ธฐ์ต์ฅ์ ๋ณด์ ์ํ(state) = ๊ฐ์ฒด์ ๊ฐ์ง ์ ์๋ ์กฐ๊ฑด, ์์ฑ ๊ฐ์ ์ํด ์ ์ ํ์(์ฐ์ฐ, Method) = ๊ฐ์ฒด๊ฐ ๋ฐ์ํ ์ ์๋ ๋ฉ์์ง ์งํฉ |
ํด๋์ค(Class) | ๊ณตํต ์์ฑ๊ณผ ์ฐ์ฐ(ํ์)์ ๊ฐ๋ ๊ฐ์ฒด์ ์งํฉ / ๋ฐ์ดํฐ ์ถ์ํ ๋จ์ โป ์ธ์คํด์ค(Instance): ํด๋์ค์ ์ํ ๊ฐ๊ฐ์ ๊ฐ์ฒด โป Operation: ํด๋์ค์ ๋์ / ๊ฐ์ฒด์ ๋ํด ์ ์ฉ๋ ๋ฉ์๋ ์ ์ |
์บก์ํ(Encapsulation) | ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํจ์๋ฅผ ํ๋๋ก ๋ฌถ์ ์ธ๋ถ ๋ด์ฉ ์ํ(์ ๋ณด ์๋) → ์ธ๋ถ ์ ๊ทผ ์ ํ ๊ฒฐํฉ๋ ๋ฎ์ / ์ฌ์ฌ์ฉ์ฑ ์ฉ์ด / ์ธํฐํ์ด์ค ๋จ์ / ์ค๋ฅ ํ๊ธํจ๊ณผ ๋ฎ์ |
์์(Inheritance) | ์์ ํด๋์ค์ ์์ฑ๊ณผ ์ฐ์ฐ์ ํ์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ โป ๋ค์ค ์์: ๋จ์ผ ํด๋์ค๊ฐ ๋ ๊ฐ ์ด์์ ์์ ํด๋์ค๋ก๋ถํฐ ์์ |
๋คํ์ฑ(Polymorphism) | ํ๋์ ๋ฉ์์ง์ ๊ฐ ๊ฐ์ฒด ๋ณ ๊ณ ์ ํน์ฑ์ ๋ฐ๋ผ ์ฌ๋ฌ ํํ์ ์๋ต |
- ์ค๋ฒ๋ผ์ด๋ฉ(Overriding): ์์ํด๋์ค๋ก๋ถํฐ ์์๋ฐ์ ๋ฉ์๋๋ฅผ ํ์ํด๋์ค์์ ์ฌ์ ์ → ๋จ, ๋ฉ์๋ ์ด๋ฆ / ๋งค๊ฐ๋ณ์ / ๋ฐํ ํ์
์ ๋์ผํด์ผ ํจ
- ์ค๋ฒ๋ก๋ฉ(Overloading): ๋ฉ์๋ ์ด๋ฆ์ ๋์ผํ๋ ๋งค๊ฐ๋ณ์ ๊ฐ์ ๋๋ ํ์
์ ๋ค๋ฅด๊ฒ ์ง์
โป ๊ฐ์ฒด์งํฅ ์ค๊ณ 5๋ ์์น(SOLID)
- ๋จ์ผ ์ฑ
์ ์์น(SRP, Sigle Responsibility Principle) → ๋ชจ๋ ํด๋์ค/๊ฐ์ฒด๋ ํ๋์ ์ฑ
์๋ง / ์์ ํ ์บก์ํ
- ๊ฐ๋ฐ ํ์์ ์์น(OCP, Open Closed Principle) → ํ์ฅ์๋ Openํ๊ณ , ์์ ์๋ Close
- ๋ฆฌ์ค์ฝํ ๊ต์ฒด ์์น(LSP, Liskov Substitution Principle) → ์์ ํด๋์ค์ ํ๋ ๊ท์ฝ์ ํ์ ํด๋์ค๊ฐ ์๋ฐํ๋ฉด ์๋จ
- ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น(ISP, Interface Segregation Principle) → ํด๋ผ์ด์ธํธ๊ฐ ๋น์ฌ์ฉ ๋ฉ์๋์ ์์กดํ์ง ์์์ผ ํจ
- ์์กด์ฑ ์ญ์ ์์น(DIP, Dependency Inversion Principle) → ์์กด ๊ด๊ณ ์๋ฆฝ ์ ๋ณํํ๊ธฐ ์ด๋ ค์ด ๊ฒ(์ถ์์ฑ์ด ๋์ ์์ ํด๋์ค)์ ์์กดํด์ผ ํจ
โ ๋์์ธ ํจํด: GoF(Gang of Four) ์ฒ์ ์ ์ํ์ฌ ๊ตฌ์ ํ
- ์๋ธ์์คํ
์ ์ํ๋ ์ปดํฌ๋ํธ๋ค๊ณผ ๊ทธ ๊ด๊ณ๋ฅผ ์ค๊ณํ๊ธฐ ์ํ ์ฐธ์กฐ ๋ชจ๋ธ
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ค๊ณ ์ ์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ํ ๋ฐ๋ณต์ ํด๊ฒฐ ๋ฐฉ๋ฒ
[ ์์ฑ ํจํด ]
- Abstract Factory: ๊ตฌ์ฒด์ ์ธ ํด๋์ค์ ์์กดํ์ง ์๊ณ , ์๋ก ์ฐ๊ด๋๊ฑฐ๋ ์์กด์ ์ธ ๊ฐ์ฒด๋ค์ด ์กฐํฉ๋ ์ธํฐํ์ด์ค ์ ๊ณต
- Builder: ๊ฐ์ฒด ์์ฑ ๋จ๊ณ๋ฅผ ์บก์ํ/๋ถ๋ฆฌํ์ฌ ๊ฐ์ฒด๋ฅผ ์กฐ๋ฆฝํ์ฌ ์์ฑ → ๋์ผํ ๊ฐ์ฒด ์์ฑ ์ ์ฐจ์์ ์๋ก ๋ค๋ฅธ ํํ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณต
- Factory Method: ์์ ํด๋์ค์์ ๊ฐ์ฒด ์์ฑ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ์ง๋ง, ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ํด๋์ค๋ ์๋ธ ํด๋์ค์์ ๊ฒฐ์ ํ๋๋ก ๋ถ๋ฆฌ
- Prototype: ์๋ณธ/์ํ ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด ์์ฑ
- Singleton: ํด๋์ค์์ ํ๋์ ๊ฐ์ฒด๋ง ์์ฑ ๊ฐ๋ฅํ๋ฉฐ, ํด๋น ๊ฐ์ฒด๋ฅผ ์ด๋์๋ ์ฐธ์กฐํ ์ ์์ง๋ง ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ฐธ์กฐ๋ ๋ถ๊ฐ
[ ๊ตฌ์กฐ ํจํด ]
- Adaptor: ๋นํธํ ์ธํฐํ์ด์ค์ ํธํ์ฑ ๋ถ์ฌํ๋๋ก ๋ณํ
- Bridge: ๊ตฌํ๋ถ์์ ์ถ์์ธต์ ๋ถ๋ฆฌ ํ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋ณํ/ํ์ฅ ๊ฐ๋ฅ
- Composite: ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ถ๋ถ/์ ์ฒด ๊ณ์ธต ํํ, ๋ณตํฉ/๋จ์ผ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ์์ด ์ฌ์ฉ
- Decorator: ์์ ์ฌ์ฉ์์ด ๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ์ ํตํด ๊ฐ์ฒด ๊ธฐ๋ฅ์ ๋์ ์ผ๋ก ์ถ๊ฐ/ํ์ฅ
- Facade: ์์์ ์ธํฐํ์ด์ค ๊ตฌ์ฑํ์ฌ ์๋ธํด๋์ค์ ๊ธฐ๋ฅ์ ๋ณต์กํ๊ฒ ํํํ์ง ์๊ณ ๋จ์ํ ์ธํฐํ์ด์ค๋ก ๊ตฌํ
- Flyweight: ์ธ์คํด์ค๋ฅผ ๊ณต์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ(ํด๋์ค ๊ฒฝ๋ํ)
- Proxy: ์ ๊ทผ์ด ํ๋ ๊ฐ์ฒด๋ฅผ ์ฐ๊ฒฐํ๋ ์ธํฐํ์ด์ค ์ญํ (๋๋ฆฌ ๊ฐ์ฒด ์ํ)
[ ํ์ ํจํด ]
- Chain of Responsibility: ์ฒ๋ฆฌ๊ฐ๋ฅํ ๊ฐ์ฒด๊ฐ ๋ ์ด์ ์กด์ฌํ์ฌ ํ ๊ฐ์ฒด ๋ด ์ฒ๋ฆฌ ๋ถ๊ฐ ์ ๋ค์ ๊ฐ์ฒด๋ก ์ด๊ด
- Comman: ์์ฒญ ๋ช ๋ น์ด๋ค์ ์ถ์/๊ตฌ์ฒด ํด๋์ค๋ก ๋ถ๋ฆฌ ํ ๋จ์ํ/์บก์ํ
- Interpreter: ์ธ์ด์ ๋ฌธ๋ฒ ํํ ์ ์
- Iterator: ์ ๊ทผ์ด ๋น๋ฒํ ๊ฐํ ์ ๋์ผ ์ธํฐํ์ด์ค ์ฌ์ฉ
- Mediator: ๊ฐ์ฒด๋ค๊ฐ ๋ณต์กํ ์ํธ์์ฉ์ ์บก์ํํ์ฌ ๊ฐ์ฒด๋ก ์ ์ ํ ์ค์ฌ
- Memento: ๊ฐ์ฒด๋ฅผ ์ด์ ์ ํน์ ์์ ์ ์ํ๋ก ์ ์ฅํ๊ณ ๋ณต์(์บก์ํ ์ ์ง)
- Observer: ํ ๊ฐ์ฒด ์ํ ๋ณํ ์ ์์๋์ด ์๋ ๊ฐ์ฒด๋ค์ ๋ณํ ์ ๋ฌ
- State: ๊ฐ์ฒด์ ์ํ์ ๋ฐ๋ผ ๋์ผํ ๋์์ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌ
- Strategy: ๋์ผ ๊ณ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ณ์ ์ผ๋ก ์บก์ํํ์ฌ ์ํธ ๊ตํ
- Template Method: ์ฌ๋ฌ ํด๋์ค์์ ๊ณตํต ์ฌ์ฉ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ์ ์ํ๊ณ , ํ์ ํด๋์ค๋ง๋ค ๋ค๋ฅด๊ฒ ๊ตฌํํด์ผํ๋ ์ธ๋ถ ์ฌํญ์ ๊ฐ๋ณ ๊ตฌํ
- Visitor: ๊ฐ ํด๋์ค ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก๋ถํฐ ์ฒ๋ฆฌ/์ฐ์ฐ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ๋ณ๋์ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ํด๋น ํด๋์ค ๋ฉ์๋๊ฐ ๊ฐ ํด๋์ค๋ฅผ ๋์๋ค๋๋ฉฐ ํน์ ์์ ์ ์ํ → ๊ฐ์ฒด ๊ตฌ์กฐ ๋ณ๊ฒฝX / ์๋ก์ด ์ฐ์ฐ ๊ธฐ๋ฅ๋ง ์ถ๊ฐ
โค ์ํํธ์จ์ด ํ ์คํธ
โ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ ๊ธฐ๋ณธ ์๋ฆฌ
- ํ
์คํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฒฐํจ์ด ์กด์ฌํจ์ ๋ฐํ๋ ๊ฒ (๋ฌด๊ฒฐํจ์ ์ฆ๋ช
ํ ์๋ ์์) → ์๋ฒฝํ ํ
์คํธ๋ ๊ทผ์์ ์ผ๋ก ๋ถ๊ฐ๋ฅ (๋ฌดํ ๊ฒฝ๋ก, ๋ฌดํ ์
๋ ฅ ๋ถ๊ฐ)
- ๊ฒฐํจ ์ง์ค: ํ๋ ํ (Pareto) ๋ฒ์น, 20%์ ๋ชจ๋์์ ์ ์ฒด ๊ฒฐํจ 80% ๋ฐ์
- ์ด์ถฉ์ ํจ๋ฌ๋
์ค: ๋์ผํ ํ
์คํธ ์ผ์ด์ค์ ์ํ ๋ฐ๋ณต ํ
์คํธ๋ ์๋ก์ด ๋ฒ๊ทธ ๋ฐ๊ฒฌ X
- ์ค๋ฅ-๋ถ์ฌ์ ๊ถค๋ณ: ๊ฒฐํจ์ด ์๋ค ํด๋ ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ ๋ฏธ์ถฉ์กฑ ์ ํ์ง ์ ํ
- Brooks์ ๋ฒ์น: ์ง์ฐ๋๋ ํ๋ก์ ํธ์ ์ธ๋ ฅ ์ถ๊ฐ ํฌ์
์ ๋ ์ง์ฐ
โ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ ๋ถ๋ฅ
โ ํ๋ก๊ทธ๋จ ์คํ ์ฌ๋ถ
- ์ ์ ํ
์คํธ: ํ๋ก๊ทธ๋จ ์คํX / ๋ช
์ธ์, ์์ค ์ฝ๋๋ง ๋ถ์
- ex. ๋๋ฃ ๊ฒํ , ์ํฌ ์ค๋ฃจ, ์ธ์คํ์ , ์ฝ๋ ๊ฒ์ฌ
- ๋์ ํ
์คํธ: ํ๋ก๊ทธ๋จ ์คํ ํ ์ค๋ฅ ๊ฒ์ฌ
- ex. ํ์ดํธ/๋ธ๋๋ฐ์ค ํ ์คํธ
โก ํ ์คํธ ๊ธฐ๋ฐ ํ ์คํธ
- ๋ช
์ธ ๊ธฐ๋ฐ: ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ์ ๋ํด ๋ช
์ธ๋ฅผ ๋น ์ง์์ด ํ
์คํธ ์ผ์ด์ค๋ก ๊ตฌํํ๋์ง ํ์ธ
- ex. ๋๋ฑ ๋ถํ / ๊ฒฝ๊ณ๊ฐ ๋ถ์ (๋ธ๋๋ฐ์ค)
- ๊ตฌ์กฐ ๊ธฐ๋ฐ: SW ๋ด๋ถ ๋
ผ๋ฆฌ ํ๋ฆ์ ๋ฐ๋ผ ํ
์คํธ ์ผ์ด์ค ์์ฑ/ํ์ธ
- ex. ๊ตฌ๋ฌธ ๊ธฐ๋ฐ / ๊ฒฐ์ ๊ธฐ๋ฐ / ์กฐ๊ฑด ๊ธฐ๋ฐ (ํ์ดํธ๋ฐ์ค)
- ๊ฒฝํ ๊ธฐ๋ฐ: ํ
์คํธ์ ๊ฒฝํ์ ๊ธฐ๋ฐ์ผ๋ก ์ํ
- ex. ์๋ฌ ์ถ์ , ์ฒดํฌ๋ฆฌ์คํธ, ํ์์ ํ ์คํ
โข ๋ชฉ์ ๊ธฐ๋ฐ ํ ์คํธ
- ํ๋ณต(Recovery): ์์คํ ์ ์ธ์์ ๊ฒฐํจ ๋ถ์ฌ ํ ์ ์์ผ๋ก ํ๋ณต๋๋ ๊ณผ์ ํ์ธ
- ์์ (Security): ์ธ๋ถ ๋ถ๋ฒ ์นจ์ ์ผ๋ก๋ถํฐ ์์คํ ์ ๋ณดํธํ ์ ์๋์ง ํ์ธ
- ๊ฐ๋(Stress): ๊ณผ๋ถํ ์ SW ์ ์ ๊ตฌ๋ ์ฌ๋ถ ํ์ธ
- ์ฑ๋ฅ(Performance): ์ค์๊ฐ ์ฑ๋ฅ ๋ฐ ์ ์ฒด์ ์ธ ํจ์จ์ฑ ์ง๋จ(์๋ต ์๊ฐ, ์ ๋ฌด ์ฒ๋ฆฌ๋)
- ๊ตฌ์กฐ(Structure): SW ๋ด๋ถ ๋ ผ๋ฆฌ์ ๊ฒฝ๋ก ๋ฐ ์์ค ์ฝ๋ ๋ณต์ก๋ ํ๊ฐ
- ํ๊ท(Regression): SW ๋ด ๋ณ๊ฒฝ ๋๋ ์์ ๋ ์ฝ๋์ ์๋ก์ด ๊ฒฐํจ์ด ์์์ ํ์ธ
- ๋ณํ(Parallel): ๋ณ๊ฒฝ ๋ฐ ๊ธฐ์กด SW์ ๋์ผํ ๋ฐ์ดํฐ ์ ๋ ฅ ํ ๊ฒฐ๊ณผ ๋น๊ต
โฃ ์๊ฐ(๊ด์ ) ๊ธฐ๋ฐ ํ ์คํธ
- ๊ฒ์ฆ(Verification): ๊ฐ๋ฐ์์ ์๊ฐ์์ ์ ํ์ ์์ฐ ๊ณผ์ ํ
์คํธ
- ex. ๋จ์/ํตํฉ/์์คํ ํ ์คํธ
- ํ์ธ(Validation): ์ฌ์ฉ์์ ์๊ฐ์์ ์์ฐ๋ ์ ํ์ ๊ฒฐ๊ณผ ํ
์คํธ
- ex. ์ธ์ ํ
์คํธ(์ํ / ๋ฒ ํ)
- ex. ์ธ์ ํ
์คํธ(์ํ / ๋ฒ ํ)
โ ํ์ดํธ๋ฐ์ค ํ ์คํธ (White Box Test)
- ๋ชจ๋ ์์ ๋ด์ฉ(์๋) ์ง์ ๋ณผ ์ ์์ผ๋ฉฐ, ๋ด๋ถ์ ๋
ผ๋ฆฌ์ ์ธ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ํ
์คํธ
- ์์ค ์ฝ๋์ ๋ชจ๋ ๋ฌธ์ฅ์ ํ ๋ฒ ์ด์ ์ํ / ๋
ผ๋ฆฌ์ ๊ฒฝ๋ก ์ ๊ฒ (์ ํ, ๋ฐ๋ณต ์ํ)
- ํ
์คํธ ๋ฐ์ดํฐ ์ ํํ๊ธฐ ์ํด ๊ฒ์ฆ ๊ธฐ์ค ์ปค๋ฒ๋ฆฌ์ง(Coverage) ์ ํจ
[ ํ์ดํธ๋ฐ์ค ํ ์คํธ ๊ฒ์ฆ ๊ธฐ์ค ]
- ๊ตฌ๋ฌธ ์ปค๋ฒ๋ฆฌ์ง(Statement Coverage): ํ๋ก๊ทธ๋จ ๋ด ๋ชจ๋ ๋ช ๋ น๋ฌธ์ ์ ์ด๋ ํ ๋ฒ ์ํ
- ๊ฒฐ์ (๋ถ๊ธฐ) ์ปค๋ฒ๋ฆฌ์ง(Branch Coverage): ํ๋ก๊ทธ๋จ ๋ด ์ ์ฒด ๊ฒฐ์ ๋ฌธ์ด ์ ์ด๋ ํ ๋ฒ์ ์ฐธ/๊ฑฐ์ง ๊ฒฐ๊ณผ ์ํ
- ์กฐ๊ฑด ์ปค๋ฒ๋ฆฌ์ง(Condition Coverage): ๊ฒฐ์ ๋ช ๋ น๋ฌธ ๋ด์ ๊ฐ ๊ฐ๋ณ ์กฐ๊ฑด์์ด ์ ์ด๋ ํ ๋ฒ์ ์ฐธ/๊ฑฐ์ง ๊ฒฐ๊ณผ ์ํ
- ์กฐ๊ฑด/๊ฒฐ์ ์ปค๋ฒ๋ฆฌ์ง(Condition/Decision): ์ ์ฒด ์กฐ๊ฑด์๋ฟ๋ง ์๋๋ผ ๊ฐ๋ณ ์กฐ๊ฑด์๋ ์ฐธ ํ ๋ฒ ์ด์, ๊ฑฐ์ง ํ ๋ฒ ์ด์ ๊ฒฐ๊ณผ ์ํ
- ๋ณ๊ฒฝ ์กฐ๊ฑด/๊ฒฐ์ ์ปค๋ฒ๋ฆฌ์ง(MC/DC): Modified Coverage/Decision Coverage, ๊ฐ ๊ฐ๋ณ์กฐ๊ฑด์์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ฒด ์กฐ๊ฑด์์ ๊ฒฐ๊ณผ์ ์ํฅ
- ๋ค์ค ์กฐ๊ฑด ์ปค๋ฒ๋ฆฌ์ง(Multiple Condition): ๊ฒฐ์ ํฌ์ธํธ ๋ด ๋ชจ๋ ๊ฐ๋ณ์กฐ๊ฑด์์ ๋ชจ๋ ๊ฐ๋ฅํ ๋
ผ๋ฆฌ์ ์กฐํฉ์ ๊ณ ๋ คํ์ฌ 100% ์ปค๋ฒ๋ฆฌ์ง ๋ณด์ฅ
[ ํ์ดํธ๋ฐ์ค ํ ์คํธ ์ข ๋ฅ ]
- ๊ธฐ์ด ๊ฒฝ๋ก ๊ฒ์ฌ(Base Path Testing)
- ๋ํ์ ํ์ดํธ๋ฐ์ค ํ ์คํธ ๊ธฐ๋ฒ (๋์ ํ ์คํธ)
- ํ ์คํธ ์ผ์ด์ค ์ค๊ณ์๊ฐ ์ ์ฐจ์ ์ค๊ณ์ ๋ ผ๋ฆฌ์ ๋ณต์ก์ฑ์ ์ธก์ ํ ์ ์๊ฒ ํด์ฃผ๋ ํ ์คํธ ๊ธฐ๋ฒ
- ์ธก์ ๊ฒฐ๊ณผ๋ ์คํ ๊ฒฝ๋ก์ ๊ธฐ์ด๋ฅผ ์ ์ํ๋ ์ง์นจ์ผ๋ก ์ฌ์ฉ
- ์ ์ด ๊ตฌ์กฐ ๊ฒ์ฌ(Control Structure Testing)
- ์กฐ๊ฑด ๊ฒ์ฌ: ํ๋ก๊ทธ๋จ ๋ชจ๋ ๋ด ๋ ผ๋ฆฌ์ ์กฐ๊ฑด ํ ์คํธ
- ๋ฃจํ ๊ฒ์ฌ: ํ๋ก๊ทธ๋จ ๋ฐ๋ณต(Loop) ๊ตฌ์กฐ ํ ์คํธ
- ์๋ฃ ํ๋ฆ ๊ฒ์ฌ: ๋ณ์์ ์ ์์ ๋ณ์ ์ฌ์ฉ์ ์์น ํ
์คํธ
โ ๋ธ๋๋ฐ์ค ํ ์คํธ (Black Box Test)
- ๋ชจ๋ ๋ด๋ถ์ ๋ด์ฉ ์ ์ ์์ / ์ํํธ์จ์ด ์ธํฐํ์ด์ค์์ ์ค์๋๋ ํ
์คํธ
- SW ๊ฐ ๊ธฐ๋ฅ์ด ์์ ํ ์๋๋๋ ๊ฒ์ ์
์ฆํ๋ ํ
์คํธ๋ก '๊ธฐ๋ฅ ํ
์คํธ' ๋ผ๊ณ ํจ
[ ๋ธ๋๋ฐ์ค ํ ์คํธ ์ข ๋ฅ ]
- ๋์น ๋ถํ ๊ฒ์ฌ(Equivalence Partition): ํ๋ก๊ทธ๋จ ์ ๋ ฅ ์กฐ๊ฑด์ ํ๋นํ ์ ๋ ฅ ์๋ฃ์ ํ๋นํ์ง ์์ ์ ๋ ฅ ์๋ฃ์ ๊ฐ์๋ฅผ ๊ท ๋ฑํ๊ฒ ์งํ
- ๊ฒฝ๊ณ๊ฐ ๋ถ์(Boundary Value): ์ ๋ ฅ ์กฐ๊ฑด์ ๊ฒฝ๊ณ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ก ์ ์ (ex. ๋ฒ์ ๊ตฌ๊ฐ์ ์๋: ~์ด์/์ดํ/์ด๊ณผ/๋ฏธ๋ง)
- ์์ธ-ํจ๊ณผ ๊ทธ๋ํ ๊ฒ์ฌ(Cause-Effect Graphing): ์ ๋ ฅ ๋ฐ์ดํฐ ๊ฐ์ ๊ด๊ณ์ ์ถ๋ ฅ์ ์ํฅ์ ๋ฏธ์น๋ ์ํฉ์ ์ฒด๊ณ์ ์ผ๋ก ๋ถ์ ํ ํจ์ฉ์ฑ์ด ๋์ ํ ์คํธ ์ผ์ด์ค ์ ์
- ์ค๋ฅ ์์ธก ๊ฒ์ฌ(Error Guessing): ๊ณผ๊ฑฐ์ ๊ฒฝํ์ด๋ ํ์ธ์์ ๊ฐ๊ฐ์ผ๋ก ํ ์คํธ ์งํ
- ๋น๊ต ๊ฒ์ฌ(Comparison): ์ฌ๋ฌ ๋ฒ์ ์ ํ๋ก๊ทธ๋จ์ ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋์ง ํ์ธ
โ ์๊ตฌ์ฌํญ ๊ฒ์ฆ(Requirements Verification)
- ์ค์ ๋ก ๊ณ ๊ฐ์ด ์ํ๋ ์์คํ
์ ์ ๋๋ก ์ ์ํ๋์ง ์ ๊ฒํ๋ ๊ณผ์
- ์์คํ
๊ฐ๋ฐ ์๋ฃ ํ ๋ฌธ์ ๋ฐ์ ์ ๋ง๋ํ ์ฌ์์
๋น์ฉ ๋ฐ์ํ๊ธฐ์ ๊ฒ์ฆ ์ค์ (์ค์ ์๊ตฌ์ฌํญ ๋ฐ์ ์ฌ๋ถ / ๋ฌธ์ ์ ์๊ตฌ์ฌํญ์ด ์๋ก ์์ถฉ๋์ง ์๋์ง ์ ๊ฒ)
โ ๋๋ฃ ๊ฒํ (Peer review): ์์ฑ์๊ฐ ๋ด์ฉ ์ค๋ช
ํ ๋๋ฃ๋ค์ด ๊ฒฐํจ ๊ฒํ
โก ์ํฌ ์ค๋ฃจ(Walk through): ์๊ตฌ์ฌํญ ๋ช
์ธ์ ๋ฏธ๋ฆฌ ๋ฐฐํฌ ํ ์งง์ ๊ฒํ ํ์ ์งํ
โข ์ธ์คํ์
(Inspection): ์์ฑ์ ์ ์ธํ ๋ค๋ฅธ ์ ๋ฌธ๊ฐ๋ค์ด ๊ฒฐํจ ๊ฒํ
โป ๊ฒ์ฆ ์ฒดํฌ๋ฆฌ์คํธ: ๊ธฐ๋ฅ์ฑ(Functionality) / ์์ ์ฑ(Completeness) / ์ผ๊ด์ฑ(Consistency) / ๋ช
ํ์ฑ(Unambiguity) / ๊ฒ์ฆ ๊ฐ๋ฅ์ฑ(Verifiability) / ์ถ์ ๊ฐ๋ฅ์ฑ(Traceability) / ๋ณ๊ฒฝ ์ฉ์ด์ฑ(Easily Changeable)
โ ๊ฐ๋ฐ๋จ๊ณ์ ๋ฐ๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ
โ ๋จ์ ํ ์คํธ(Unit test): ์ต์ ๋จ์(๋ชจ๋ - ์ํํธ์จ์ด๋ฅผ ์ด๋ฃจ๋ ๊ธฐ๋ณธ ๋จ์(๋ ๋ฆฝ์ ๊ธฐ๋ฅ)/์ปดํฌ๋ํธ) ๊ธฐ๋ฐ ํ ์คํธ, ์ฃผ๋ก ๊ตฌ์กฐ ๊ธฐ๋ฐ ํ ์คํธ ์งํ / ๊ธฐ๋ฅ์ฑ ํ ์คํธ ์ต์ฐ์
โก ํตํฉ ํ
์คํธ(Integration test): ์ธํฐํ์ด์ค ๊ฐ ์์คํ
์ด ์ ์ ์คํ๋๋์ง ํ์ธ
- ๋จ์ ํ
์คํธ ํ ๋ชจ๋์ ํตํฉํ๋ ๊ณผ์ ์์ ๋ฐ์ํ๋ ์ค๋ฅ ๋ฐ ๊ฒฐํจ์ ์ฐพ๋ ํ
์คํธ ๊ธฐ๋ฒ
- ํํญ์(Top-down)
- ์์ ๋ชจ๋์์ ํ์ ๋ชจ๋ ๋ฐฉํฅ์ผ๋ก ํตํฉ
- ๊น์ด ์ฐ์ (Depth first) ํตํฉ๋ฒ / ๋์ด ์ฐ์ (Breadth first) ํตํฉ๋ฒ
- ์ด๊ธฐ๋ถํฐ ์ฌ์ฉ์์๊ฒ ์์คํ ๊ตฌ์กฐ ๋ณด์ฌ์ค
- ์คํ (Stub): ๋ชจ๋์ ๊ธฐ๋ฅ์ ๋จ์ํ ์ํํ๋ ๋๊ตฌ(์ํ์ฉ ๋ชจ๋)
- ์ํฅ์(Bottom-up)
- ํ์ ๋ชจ๋์์ ์์ ๋ชจ๋ ๋ฐฉํฅ์ผ๋ก ํตํฉ
- ํ๋์ ์ฃผ์ ์ ์ด ๋ชจ๋๊ณผ ๊ด๋ จ๋ ์ข ์ ๋ชจ๋์ ๊ทธ๋ฃน์ธ ํด๋ฌ์คํฐ(Cluster)์ ๋๋ผ์ด๋ฒ(Driver) ์ฌ์ฉ
โข ์์คํ ํ ์คํธ(System test): ๊ฐ๋ฐ๋ SW์ ์ปดํจํฐ ์์คํ ๋ด ์์ฉ์ฌ๋ถ ์ ๊ฒ, ์ค์ ์ฌ์ฉ ํ๊ฒฝ๊ณผ ์ ์ฌํ ํ ์คํธ ํ๊ฒฝ โบ ๊ธฐ๋ฅ์ (๋ธ๋๋ฐ์ค) ๋ฐ ๋น๊ธฐ๋ฅ์ (ํ์ดํธ๋ฐ์ค) ํ ์คํธ ๊ตฌ๋ถ
โฃ ์ธ์ ํ
์คํธ(Acceptance test): ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ ์ถฉ์กฑ ์ฌ๋ถ ํ์ธ
- ์ํ ํ
์คํธ: ํต์ ๋ ํ๊ฒฝ์์ ์ฌ์ฉ์๊ฐ ๊ฐ๋ฐ์์ ํจ๊ป ํ์ธ
- ๋ฒ ํ ํ
์คํธ: ํต์ ๋์ง ์์ ํ๊ฒฝ์์ ๊ฐ๋ฐ์ ์์ด ์ฌ๋ฌ ๋ช
์ ์ฌ์ฉ์๊ฐ ๊ฒ์ฆ
โ ํ ์คํธ ๊ด๋ จ ๊ธฐํ ์ฉ์ด
1) ํ ์คํธ ์๋๋ฆฌ์ค: ํ ์คํธ ์ผ์ด์ค ์ ์ฉ/๋์ ์์์ ๋ฐ๋ผ ์ฌ๋ฌ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ฌถ์ ์งํฉ
2) ํ ์คํธ ์ค๋ผํด: ํ ์คํธ ๊ฒฐ๊ณผ์ ์ฐธ/๊ฑฐ์ง ํ๋จ์ ์ํด ์ฌ์ ์ ์ ์๋ ์ฐธ ๊ฐ์ ๋์
- ์ฐธ ์ค๋ผํด(True): ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค์ ์ ๋ ฅ๊ฐ์ ๊ธฐ๋ ๊ฒฐ๊ณผ ์ ๊ณต
- ์ํ๋ง ์ค๋ผํด(Sampling): ํน์ ํ ์คํธ ์ผ์ด์ค ์ ๋ ฅ๊ฐ์ ๊ธฐ๋ ๊ฒฐ๊ณผ ์ ๊ณต
- ์ถ์ ์ค๋ผํด(Heuristic): ํน์ ํ ์คํธ ์ผ์ด์ค ์ ๋ ฅ๊ฐ์ ๊ธฐ๋ ๊ฒฐ๊ณผ ์ ๊ณต + ๋๋จธ์ง ์ ๋ ฅ๊ฐ์ ๋ํด์ ์ถ์ ๊ฒฐ๊ณผ ์ ๊ณต
- ์ผ๊ด์ฑ ์ค๋ผํด(Consistent): ํ
์คํธ ์ผ์ด์ค์ ์ํ ์ /ํ์ ๊ฒฐ๊ณผ๊ฐ ๋์ผ ์ฌ๋ถ ํ์ธ
โ ํ ์คํธ ํ๋ค์ค(Test harness)
- ํ ์คํธ ๋๋ผ์ด๋ฒ: ์ํ ๋์์ ํ์ ๋ชจ๋ ํธ์ถ / ๋ชจ๋ ํ ์คํธ ์ํ ํ์ ๊ฒฐ๊ณผ ๋์ถ → ์ํฅ์ ํตํฉ ํ ์คํธ์์ ์ฌ์ฉ
- ํ ์คํธ ์คํ : ์ ์ด ๋ชจ๋์ด ํธ์ถํ๋ ํ์ ๋ชจ๋์ ์ญํ ๋จ์ ์ํ → ํํฅ์ ํตํฉ ํ ์คํธ์์ ์ฌ์ฉ
- ํ ์คํธ ์ํธ: ์์คํ ์ ์ฌ์ฉ๋๋ ํ ์คํธ ์ผ์ด์ค์ ์งํฉ (์ปดํฌ๋ํธ / ๋ชจ๋)
- ํ ์คํธ ์ผ์ด์ค: ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ ์ค์ ์ฌ๋ถ ํ์ธ ์ํด ์ค๊ณ๋ ํ ์คํธ ํญ๋ชฉ ๋ช ์ธ์(์ ๋ ฅ๊ฐ, ์คํ ์กฐ๊ฑด, ๊ธฐ๋ ๊ฒฐ๊ณผ ๋ฑ)
- ํ ์คํธ ์คํฌ๋ฆฝํธ: ์๋ํ๋ ํ ์คํธ ์คํ ์ ์ฐจ์ ๋ํ ๋ช ์ธ์
- ๋ชฉ ์ค๋ธ์ ํธ: ์ฌ์ฉ์์ ํ์ ์กฐ๊ฑด๋ถ ์ ๋ ฅ ์ ๊ณํ๋ ํ์๋ฅผ ์ํํ๋ ๊ฐ์ฒด
โฅ ์ํํธ์จ์ด ์ ์ง ๋ณด์
โ ์ ํ๋ฆฌ์ผ์ด์
์ฑ๋ฅ ๊ฐ์
- ์ฑ๋ฅ ๋ถ์ ์งํ: ์ฒ๋ฆฌ๋ / ์๋ต ์๊ฐ / ๊ฒฝ๊ณผ ์๊ฐ / ์์ ์ฌ์ฉ๋ฅ
- ์์ค์ฝ๋ ์ต์ ํ๋ฅผ ํตํ ์ฝ๋ ์ค๋ฉ ์ ๊ฑฐ ํ ํ์ง ๊ฐ์
โป ์ฝ๋ ์ค๋ฉ (Code Smell): ์์ค์ฝ๋ ๋ด ์กด์ฌํ๋ ์ ์ฌ์ ๋ฌธ์ ์
ex. ์ค๋ณต ์ฝ๋ / ๊ธด ๋ฉ์๋ / ํฐ ํด๋์ค / ํด๋์ค ๋์ ์์
→ ์คํ๊ฒํฐ ์ฝ๋: ์์ค์ฝ๋ ๋ก์ง์ด ๋ณต์กํ๊ฒ ์ฝํ์๋ ๊ตฌ์กฐ
→ ์ธ๊ณ์ธ ์ฝ๋: ์ค๋๋์ด ์ ์ง๋ณด์ ์์
์ด ์ด๋ ค์ด ์ฝ๋
โถ๏ธ ํด๋ฆฐ ์ฝ๋ ์์ฑ ์์น: ๊ฐ๋ ์ฑ / ๋จ์์ฑ / ์์กด์ฑ ๋ฐฐ์ / ์ค๋ณต์ฑ ์ต์ํ / ์ถ์ํ
โถ๏ธ ์์ค ์ฝ๋ ํ์ง ๋ถ์ ๋๊ตฌ
- ์ ์ ๋ถ์ ๋๊ตฌ: ํ๋ก๊ทธ๋จ ์คํ ์์ด ์ฝ๋ฉ ํ์ค/์คํ์ผ/๊ฒฐํจ ๋ฑ์ ๋ถ์ → PMD, Checkstyle, SonarQube, Cppcheck, Ccm, Cobertura
- ๋์ ๋ถ์ ๋๊ตฌ: ํ๋ก๊ทธ๋จ ์คํํ์ฌ ์ฝ๋ ๋ด ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ์ค๋ ๋ ๊ฒฐํจ ๋ฐ๊ฒฌ → Avalanche, Valgrind, Valance
โ ์ํํธ์จ์ด ํ์ ๊ด๋ฆฌ (SCM: Software Configuration Management)
- ๊ฐ๋ฐ ๊ณผ์ ์์ SW ๋ณ๊ฒฝ์ฌํญ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ผ๋ จ์ ํ๋ / ๊ฐ๋ฐ ์ ์ฒด ๋จ๊ณ ์ ์ฉ
- ์ค์์ฑ: ๋ณ๊ฒฝ์ฌํญ ์ถ์ /ํต์ , ๋ฌด์ ์ ํ ๋ณ๊ฒฝ ๋ฐฉ์ง, ๊ฐ๋ฐ ์งํ ์ด๋ ฅ ํ์ธ
- ํ์ ๊ด๋ฆฌ ์ญํ : ๋ฐฐํฌ๋ณธ ๊ด๋ฆฌ ์ฉ์ด / ๋ถํ์ํ ์์ค ์์ ์ ํ / ์ฌ๋ฌ ๊ฐ๋ฐ์ ๋์ ๊ฐ๋ฐ
- ํ์ ์๋ณ: ๊ด๋ฆฌ ๋์์ ์ด๋ฆ/๋ฒํธ ๋ถ์ฌ ํ ๊ณ์ธต ๊ตฌ์กฐ๋ก ๊ตฌ๋ถ → ์์ /์ถ์ ์ฉ์ด
- ํ์ ํต์ : ์๋ณ๋ ํ์ ํญ๋ชฉ์ ๋ํ ๋ณ๊ฒฝ ์๊ตฌ ๊ฒํ (๊ธฐ์ค์ ๋ฐ์๋ ์ ์๊ฒ)
- ํ์ ๊ฐ์ฌ: ๊ธฐ์ค์ (Base line)์ ๋ฌด๊ฒฐ์ฑ ํ๊ฐ ์ํด ํ์ธ/๊ฒ์ฆ/๊ฒ์ด ๊ณผ์ ์งํ
- ํ์ ๊ธฐ๋ก: ํ์ ์๋ณ/ํต์ /๊ฐ์ฌ ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ก/๊ด๋ฆฌํ๊ณ ๋ณด๊ณ ์ ์์ฑ
โป ์ ํ SW์ ํ์ ๊ด๋ฆฌ ์ญํ : ๋ฐฐํฌ๋ณธ ๊ด๋ฆฌ ์ ์ฉ / ์์ค ์์ ์ ํ / ๋์ผ ํ๋ก์ ํธ์ ๋ํด ์ฌ๋ฌ ๊ฐ๋ฐ์ ์ฐธ์ฌ ํ ๋์ ๊ฐ๋ฐ ๊ฐ๋ฅ
โ ์ํํธ์จ์ด ๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ
๊ณต์ ํด๋ | ํด๋ผ์ด์ธํธ/์๋ฒ | ๋ถ์ฐ ์ ์ฅ์ |
๊ณต์ ํด๋์ ๋ณต์ฌ | ์๋ฒ์์ ๋ฒ์ ์ผ๊ด ๊ด๋ฆฌ | ์๊ฒฉ → ์ง์ญ ์ ์ฅ์ |
RCS, SCCS, PVCS, QVCS | CVS, SVN, CVSNT, SMBC | Git, GNU arch, DCVS, Bitkeeper, Bazaar |
โป ํ์๊ด๋ฆฌ ๋๊ตฌ
- CVS: ์๋ฒ/ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ, ๋ค์์ ์ธ์์ด ๋์ ๋ฒ์ ๊ด๋ฆฌ ๊ฐ๋ฅ
- SVN(Subversion): CVS ๊ฐ์ ํด / ๋ชจ๋ ๊ฐ๋ฐ์ trunk ๋๋ ํฐ๋ฆฌ์์ ์ํ / Commit ์ํ ์ revision 1์ฉ ์ฆ๊ฐ
- Git: ์๋ฒ(์๊ฒฉ) ์ ์ฅ์์ ๊ฐ๋ฐ์(์ง์ญ) ์ ์ฅ์๊ฐ ๋
๋ฆฝ์ → Commit ์ค์ ๋ฐ์ํด๋ ์๋ฒ์ ์ํฅ ์์(๋ถ์ฐ๋ P2P ๋ชจ๋ธ)
โ ISO 12207 - ์ํํธ์จ์ด ๊ด๋ จ ์๋ช ์ฃผ๊ธฐ
- ๊ธฐ๋ณธ ์๋ช ์ฃผ๊ธฐ: ํ๋, ๊ณต๊ธ, ๊ฐ๋ฐ, ์ด์, ์ ์ง๋ณด์ ํ๋ก์ธ์ค
- ์ง์ ์๋ช ์ฃผ๊ธฐ: ๋ฌธ์ํ, ํ์๊ด๋ฆฌ, ํ์ง๋ณด์ฆ, ๊ฒ์ฆ, ํ์ธ, ํฉ๋๊ฒํ , ๊ฐ์ฌ
- ์กฐ์ง ์๋ช
์ฃผ๊ธฐ: ๊ด๋ฆฌ, ๊ธฐ๋ฐ๊ตฌ์กฐ, ๊ฐ์ , ๊ต์กํ๋ จ
โ CMMI(Capability Maturity Model Integration): SW ๊ฐ๋ฐ ์กฐ์ง์ ์ ๋ฌด ๋ฅ๋ ฅ ํ๊ฐ ๋ชจ๋ธ
1) ์ด๊ธฐ: ํ๋ก์ธ์คX - ์์ ์ ๋ฅ๋ ฅ์ ๋ฐ๋ผ ์ฑ๊ณต ์ฌ๋ถ ๊ฒฐ์
2) ๊ด๋ฆฌ: ๊ท์นํ ํ๋ก์ธ์ค - ํน์ ํ ํ๋ก์ ํธ ๋ด์ ํ๋ก์ ํธ ์ ์/์ํ
3) ์ ์: ํ์คํ ํ๋ก์ธ์ค - ์กฐ์ง์ ํ์ค ํ๋ก์ธ์ค ํ์ฉ ์ ๋ฌด ์ํ
4) ์ ๋์ ๊ด๋ฆฌ: ์์ธก ๊ฐ๋ฅ ํ๋ก์ธ์ค - ํ๋ก์ ํธ ์ ๋์ ๊ด๋ฆฌ/ํต์
5) ์ต์ ํ: ์ง์ ๊ฐ์ฑ ํ๋ก์ธ์ค - ํ๋ก์ธ์ค ์ญ๋ ํฅ์ ์ํ ์ง์์ ์ธ ๊ฐ์
'Computer Science ๐ > ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ ์ฒ๊ธฐ] ์ ๋ณด ๋ณด์ (0) | 2024.07.18 |
---|---|
[์ ์ฒ๊ธฐ] ๋คํธ์ํฌ (0) | 2024.07.17 |
[์ ์ฒ๊ธฐ] ์ด์์ฒด์ (0) | 2024.07.16 |
[์ ์ฒ๊ธฐ] ๋ฐ์ดํฐ ๋ฒ ์ด์ค (5) | 2024.07.15 |
[์ ์ฒ๊ธฐ]์ํํธ์จ์ด ๊ตฌ์ถ I - ํ๋ก์ ํธ ๊ณํ, ์๊ตฌ์ฌํญ ๋ถ์, ์ํํธ์จ์ด ์ค๊ณ etc. (2) | 2024.07.10 |