Copyright Kim, Haeng Kon 2
Software Engineering Roadmap
Plan
project
Integrate
& test system
Analyze
requirements
Design
Maintain
Test units Implement
Identify
corporate
practices
Implement in parts
- use detailed designs
- apply coding standards
- created “implementation model”
(USDP)
Copyright Kim, Haeng Kon 3
Contents
개요
Programming 선택
자료 추상화
Programming Language의 분류
Coding Style
표준화
OOP(Object Oriented Programming)
Copyright Kim, Haeng Kon 4
8.1 개요
Coding 단계 = 구현 = programming 단계
설계 단계에서 작성된 명세서를 이용하여 source code로 변환시키는 단계
module의 내부설계 과정에서 작성된 module 내부 설계 사양서를 “언어(language)”로
기술함으로써 변환하는 작업
목표
명세와 code가 일치하는지 점검
test와 변경을 용이하게 하는 source code와 내부 문서를 작성하는 것
가능한 한 source code를 간결하고 명료하게 작성
Source code를 작성하는 program language의 선택이 중요
Copyright Kim, Haeng Kon 5
개요
Detailed design
- pseudocode?
- flowcharts?
For each (1)... framework package
(2) ...application package ...
For each class ...
Requirements
2. Implement method
-- see section SSS
1. Identify coding
standards
Copyright Kim, Haeng Kon 6
개요
Detailed design
- seudocode?
- flowcharts?
Architecture
For each class: Requirements
2. Implement methods
5. Release for integration
1. Define coding
standards
4. Perform unit testing
3. Inspect class
For each ... framework package
...application package:
Copyright Kim, Haeng Kon 7
8.2 program 언어 선택
Coding 단계에서 programmer가 programming language를 선정할 때 고려하는 요소 Programmer가 그 programming language를 이용
Programmer들은 programming language들의 수와 사용이 통일
어느 기계에나 쉽게 설치 가능
Programmer들은 효율을 고려
Programmer들은 응용 목적에 맞는 programming language를 선정
개인적인 선호
추상화 유사성을 표현하고 차이점을 삭제함으로써 관련된 사항들을 묶어 하나로 표현하는
방법
자료 추상화 자료형의 표현과 그에 관련된 연산들을 함께 묶어 캡슐화(encapsulation)하는 기법
8.3 자료 추상화
Copyright Kim, Haeng Kon 8
8.4 program language의 분류
언어의 개발과정
Fortran
Basic Algol
Alogol 68 Pascal Simula
PL/1
COBOL
ConcurrentPascal
Modula Mesa Euclid Clu
Ada
Lisp
BLCP
C
MaclispAPL
SNOBOL BLISSInterlispForth
SL5
Copyright Kim, Haeng Kon 9
8.5 Coding Style
단순하고 간결성에 역점을 두는 코딩원칙
Coding style을 결정하는 요소
구조적 coding, 문서화 자료선언, 문장의 작성방법
1. 구조적 프로그래밍
신뢰성 있는 software의 생산과 coding의 표준화들을 위해서 개발된 방법
구조적 programming의 diagram에 따라 coding하는데 있어서 그 특징
• 구조화 programming 기법을 적용한 일종의 기능사양
• 자연언어로 기술
• program의 생산성, 신뢰성 및 유지보수성을 향상
구조적 diagram
프로그램
프로그램 개시부
프로그램 처리부
프로그램 종료부
처리 개시부
처리부(조건)
처리 종료부
구체처리
구체처리
구체처리
구체처리
구체처리
Copyright Kim, Haeng Kon 10
Coding Style
1. Confirm the detailed designs you must implement
– code only from a written design
2. Prepare to measure time spent, classified by:
– residual detailed design; detailed design review; coding; coding
review; compiling & repairing syntax defects; unit testing
3. Prepare to record defects using a form
– default: major (requ. unsatisfied), trivial, or neither
– default: error, naming, environment, system, data, other
4. Understand required standards
– for coding
– for the personal documentation you must keep
• see the case study for an example
5. Estimate size and time based on your past data
6. Plan the work in segments of ± 100 LOC
Copyright Kim, Haeng Kon 11
Coding Style
1. Plan the structure and residual design for your code
(complete missing detailed design, if any)
note pre- and post-conditions
note the time spent
2. Self-inspect your design and/or structure
note time spent, defect type, source (phase), severity
3. Type your code
do not compile yet
try methods listed below
apply required standards
code in a manner that is easiest to verify
• use formal methods if appropriate
Copyright Kim, Haeng Kon 12
program의 기본구조
• 순차구조 : 몇 개의 process가 순서적으로 연속된 구조
• 선택 구조 : 어떤 조건에 따라 두 가지 이상의 흐름 중 한 개를 선택하여 수행하는 구조
• 반복구조 : 어떤 조건을 만족할 때까지 program의 수행을 반복하는 routine
program의 기본구조 S1
S2
S3
S1
S2
S3
.
.
.
(a) 순차 구조
S2 S1
S2
(b) 선택 구조
조건T
F
IF 조건SI
S1
S2
(THEN)
(ELSE)
조건
S1
(c) 반복 구조
조건T S1
PERFORM S1UNTL 조건
(조건)
Copyright Kim, Haeng Kon 13
2. code의 문서화
Subroutine program과 compile 단위의 prologue에 대한 전형적인 형식
program의 서두 부분에 쓰이는 서언 비실행문 형식
1) 모듈에 관한 설명
2) 접속관계의 설명
가. 호출 순서, 나. 인수에 관한 설명, 다. 하위급 모듈의 목록
3) 주요 변수의 설명과 사용, 제한사항, 관련자료
4) 모듈의 개발 역사자료
가. 모듈의 설계자, 나. 검토자 및 일자, 다. 변경일자와 변경 내용
ⓐ 저자명 :
ⓑ 컴파일 일시 :
ⓒ 실행할 기능 :
ⓓ 사용할 알고리즘 :
ⓔ 변경자/일시/목적 :
ⓕ 매개변수와 이의 전송 모드 :
ⓖ 입력 단정 :
ⓗ 출력 단정 :
ⓘ 광역 변수 :
ⓙ 부작용 :
ⓚ 주요 자료구조 :
ⓛ 호출 루틴 :
ⓜ 피호출 루틴 :
ⓝ 시간 제약 사항 :
ⓞ 예외 조치 방안 :
ⓟ 가정 :
Copyright Kim, Haeng Kon 14
주석달기 규약
ⓐ 다음을 사용하여 주석의 필요성을 최소화할 것
· 표준 프롤로그
· 구조적 프로그래밍 구조
· 훌륭한 코딩 스타일
· 사용자 정의 자료형, 변수, 형식 매개 변수, 부울 문자, 서브프로그램, 파일등에 대한
문제영역으로부터의 기술적인 명칭
· 사용자 정의 예외, 사용자 정의 자료형, 자료 캡슐화와 같은 구현 언어의 자기 문서화
양상
ⓑ 다음과 같은 기능을 갖는 모드 블록에 주석을 달 것
· 주요 자료 처리의 실행
· goto문을 사용하여 구조적 제어 구조를 가장
· 예외 조치를 실행
ⓒ 주석내에 문제 영역 관련 용어를 사용할 것.
ⓓ 주석을 부가시키기 위해서 빈줄, 테두리, 그리고 만입을 사용할 것
ⓔ 변경과 개정사항등은 맨 우측에 위치하도록 할 것.
ⓕ 분명하지 않은 복잡한 문서를 코드화하기 위해서 긴 주석을 사용하지 말고 코드를
재 작성할 것
ⓖ 주석과 코드는 서로 일치하며, 요구사항과 설계 사양과도 일치하는가를 항상 확인할 것.
Copyright Kim, Haeng Kon 15
3. 자동 programming
Software programming은 설계 database와 추상화 data로 설계된 software 부품
database를 검색하여 번역을 자동적으로 하여 program을 작성
code 생성기
자동 programming을 실행해주는 도구로서 CASE(Computer Aided Software
Engineering)환경에서 사용
Upper-CASE : front-end도구로서 분석과 설계사이의 결합을 메우어 주는 도구
Lower CASE : back-end 도구로서 code 생성기
통합 CASE
개발환경은 다음과 같은 표준화된 문서환경을 제공
입출력 System diagram, 물리적 설계 설명서, screen과 report 출력 형식, field 정
의와 속성, 중간에 생성된 항목의 정의, menu navigation tree, 자료항목 요소들의 논
리적 관계, 자료항목과 module을 설명한 report
Copyright Kim, Haeng Kon 16
8.6 표준화
Programming 표준 항목
goto문이 사용되지 않을 것
program 구조의 nesting 깊이는 5 level을 초과하지 않을 것
Sub routine의 길이는 30 line을 초과하지 않을 것
programming 지침
programmer는 programming 지침의 가치를 이해해야 함
programmer가 지침 수립 시 참여할 수 있는 기회가 제공되어야 함
지침이 성가시게 느껴질 때는 이를 재조사하여 개정 시켜야 함
특수환경에서 지침을 위반해도 되는 mechanism이 있어야 함
자동화 도구는 지침의 준수여부를 수작업으로 검열하는 것은 불가능하며, 자동
check가 실행되지 않으면 그 지침은 가지가 없는 것이어야 함.
Copyright Kim, Haeng Kon 17
8.7 Object Oriented Programming
절차형 programming과 OOP의 차이점
1. 추상화(Abstraction)
주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에 따라 해당 class를 분
류(classification)
객체의 성질을 분해하는 요소분해(factoring)
공통된 성질을 추출하여 슈퍼 클래스를 선정하는 추상화(abstract)
기능 추상화 :method를 정의하는 것
자료 추상화 : 객체가 속하는 class를 설정하는 것
자료 프로시쥬어
절차지향 프로그래밍
프로시져 호출자료와 프로시져 독립 분리
프로시져/자료
객체 객체
객체지향 프로그래밍
메시지 전달객체는 캡슐화
객체/메시지 전달
수동적 능동적 객체메시지
주체
타는것
자동차 말 비행기
specialization
subclassing
Copyright Kim, Haeng Kon 18
2. Encapsulation = 정보은닉(Information hiding)
사용자에게는 상세한 구현을 감추고 필요한 사항만 보이게 함
객체의 전용 자료와 method를 다른 객체가 접근할 수 없음.
보호막과 부분 보호막의 관계
객체전용자료메소드
인터페이스
보호막
메시지 송수신(객체지향 언어)
라이브러리 모듈자료형
프로시져
인터페이스
부분 보호막
프로시져 호출(절차지향 언어)
Copyright Kim, Haeng Kon 19
3. 상속(Inheritance)
Class 계층 구조에서는 상위 class로 갈수록 보다
더 추상화 된 형태이므로 그 sub class들은 상위
class가 가진 속성을 그대로 물려 받는 것
Super class가 가지고 있는 속성인 전용 자료와
method를 sub class가 접근 가능
다중상속 (Multiple inheritance) : 여러 개의
super class로 부터 상속을 허용하는 것
class 계층 구조에서의 상속
4. 다형성(Polymorphism)
동일한 message라도 method가 정의되어 있는 수
신자가 누구인가에 따라 각각 다른 기능을 수행하
는 것
• A print
• B1 print
• C print
A
B1 B2
C
Copyright Kim, Haeng Kon 20
Vending Machine 구현 예
/**********************************************
M A I N . C P P
***********************************************/
#include<iostream.h>
#include<ctime> // time함수
#include<iomanip.h>
#include<windows.h> // Sleep 함수
#include "vendingmachine.h"
#define randomize() srand((unsigned)time(NULL)) // 난수 발생
void main(){
VendingMachine v; // 객체 생성
randomize();
v.Run(); // 실행
}
Copyright Kim, Haeng Kon 21
void VendingMachine::Run(){
int value[3] = {50, 100, 500}; // 선택되는 금액
int coins=0, minute, people;
int temp;
for(int i=1; i<=24; i++){
people = random(3)+1; // 동시에 오는 사람수
minute = random(60); // 1시간 단위로 시뮬레이션하기에 랜덤 분을 체크
time.setTime(i, minute); // time설정
cout << time << endl; // 현재시간 출력
cout << setw(2) << people << "명이 왔습니다. " << endl; // 사람수 출력
for(int j=1; j<=people; j++){ // 사람수 만큼 자판기를 가동한다.
do{ // 최소 450원 이상의 값을 넣기 위해 while문을 돌린다.
temp = value[random(3)];
money.incCoin(temp); // 들어온 동전을 잔금에 추가한다.
coins += temp; // 총들어온 돈
}while(coins < 450);
if(j >=2){
time.incTime(3);
cout << time << endl;
}
cout << " Insert the coins : " << coins << endl;
cout << " " << coins << "원이 들어왔습니다. " << endl;
User(coins); // 사용자
printStatus(); // 자판기 상태 출력
coins = 0; // 사용이 끝났으므로 초기화
}
Sleep(100); // 시뮬레이션을 위해
}
}