소프트웨어 공학 (Software Engineering ) 구현 (Implementation) 문양세 강원대학교 ...

Post on 02-Jan-2016

113 views 0 download

description

소프트웨어 공학 (Software Engineering ) 구현 (Implementation) 문양세 강원대학교 IT 대학 컴퓨터과학전공. In this chapter … (1/2). 구현 (Implementation). 구현 , 즉 코딩 (coding) 은  설계된 내용을 원시 코드 (source code) 로 변환시키는 작업 코딩의 원칙 설계 내용을 철저히 반영시킨다 . ( 어렵다고 빼고 진행하면 나중에 후회 …) 원시코드는 간단 명료하도록 한다 디버깅이 쉽도록 한다 . - PowerPoint PPT Presentation

Transcript of 소프트웨어 공학 (Software Engineering ) 구현 (Implementation) 문양세 강원대학교 ...

소프트웨어 공학 (Software Engineer-ing)

구현 (Implementation)

문양세강원대학교 IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 2

구현 , 즉 코딩 (coding) 은 설계된 내용을 원시 코드 (source code) 로 변환시키는 작업

코딩의 원칙• 설계 내용을 철저히 반영시킨다 . ( 어렵다고 빼고 진행하면 나중에 후회… )• 원시코드는 간단 명료하도록 한다• 디버깅이 쉽도록 한다 .• 시험이 용이해야 한다 .• 수정이 간편해야 한다 .

구현 (Implementation)In this chapter … (1/2)

설계 사양(design spec.)

코딩

원시코드(source code)

컴파일디버깅

목적코드(object code)

Software Engineeringby Yang-Sae MoonPage 3

We will cover …• 프로그래밍 언어

• 4 세대 프로그래밍 언어

• 비주얼 프로그래밍 언어

• 코딩 스타일

• 원시 코드의 문서화

구현 (Implementation)In this chapter … (2/2)

Software Engineeringby Yang-Sae MoonPage 4

컴퓨터를 제어 (control)• 소프트웨어의 구현 및 저장• 프로그래머 사이의 의사소통

논리흐름의 표현 문서화 (documentation)

언어의 기능 vs. 사용자들의 반응

소프트웨어의 구조와 알고리즘적인 특성을 크게 좌우 적합한 프로그래밍 언어의 선택이 중요한 요소임

구현 (Implementation)프로그래밍 언어의 역할

Software Engineeringby Yang-Sae MoonPage 5

제 1 세대 언어 : Machine language, assembly language

제 2 세대 언어 : Fortran, Cobol, Algol60, Basic

제 3 세대 언어• 범용 : PL/1, Pascal, Modula-2, C, Ada, C++, SIMULA, Smalltalk, Java,

…• 특수 : CHILL, RPG, Lisp, Prolog, APL, …

제 4 세대 언어 (4GL, non-procedural language):MANTIS, IDEAL, RAMIS II, SQL, …

구현 (Implementation)프로그래밍 언어의 발전 (1/5)

Software Engineeringby Yang-Sae MoonPage 6

Assembly language 예제

구현 (Implementation)프로그래밍 언어의 발전 (2/5)

Intel Chip(Linux)

Software Engineeringby Yang-Sae MoonPage 7

Assembly language 예제

구현 (Implementation)프로그래밍 언어의 발전 (2/5)

Intel Chip(Linux)

Sparc Chip(Solaris)

Software Engineeringby Yang-Sae MoonPage 8

Fortran 프로그램 예제

구현 (Implementation)프로그래밍 언어의 발전 (3/5)

Software Engineeringby Yang-Sae MoonPage 9

Pascal 프로그램 예제

구현 (Implementation)프로그래밍 언어의 발전 (4/5)

Software Engineeringby Yang-Sae MoonPage 10

C 프로그램 예제

구현 (Implementation)프로그래밍 언어의 발전 (5/5)

Software Engineeringby Yang-Sae MoonPage 11

프로젝트의 상황

프로그래밍 언어 자체의 특성

구현 (Implementation)프로그래밍 언어 선택 시 고려 사항

Software Engineeringby Yang-Sae MoonPage 12

사용자의 요구• 유지보수를 사용자가 직접 담당하는 경우 특정 언어를 요구할 수 있음

프로그래머의 지식• ( 가장 ) 숙달된 언어• 기능의 제한성이 파악된 언어

완성되었거나 현재 진행되는 프로젝트에 사용되고 있는 언어• 익숙한 언어• 두 개 이상의 프로젝트가 진행

가능한 하나의 언어로 통일하는 것이 유리

구현 (Implementation)프로젝트의 상황 (1/2)

Software Engineeringby Yang-Sae MoonPage 13

컴파일러의 가용성과 품질• 하드웨어• 적당한 가격• 목적 코드의 효율성 , 품질 , 오류 메시지의 분량

소프트웨어 개발 도구의 지원• 에디터 (editor)• 디버거 (debugger)• 링커 (linker)• 추적기 (tracer)

호환성

구현 (Implementation)프로젝트의 상황 (2/2)

Software Engineeringby Yang-Sae MoonPage 14

표현력과 적합성

단순성 , 명확성 , 직교성

언어의 문형

제어 구조

자료형

상수

프로시저와 함수

프로시저 및 자료 추상화

재사용

구현 (Implementation)프로그래밍 언어 자체의 특성

Software Engineeringby Yang-Sae MoonPage 15

원하는 작업을 얼마나 효율적으로 충분히 표현할 수 있는가 ?

예제• COBOL : 사무응용 분야• C 언어 : 시스템 프로그래밍 , 임베디드 응용• Pascal : 프로그래밍 교육 ( 풍부한 자료구조 )

• Modula-2 : 시스템 프로그래밍에 적합• Ada : 실시간 처리 응용• Lisp, Prolog : 인공지능• ASP, PHP, JSP : 웹 프로그래밍 • Java : 인터넷 프로그래밍

작업 자체를 실현하기에 가장 적합한 언어를 선택하는 것이 바람직함

구현 (Implementation)표현력과 적합성

Software Engineeringby Yang-Sae MoonPage 16

단순성 : 예약어 (reserved word) 의 개수가 적어야 함 적을수록 쉽게 이해하고 익숙해 질 수 있음

• COBOL-74: 300 여개 , Pascal: 74 개 , Modula-2: 64 개 , Fortran 48 개

명확성 : 언어가 의미를 잘 담고 있으며 모호하지 않아야 함

직교성 : 언어의 기능들이 쉽게 결합될 수 있어야 함예 1) 함수의 리턴 값은 ( 일반적으로 ) 이미 정의된 타입이어야 함예 2) 동일한 용어가 여러 의미 / 기능으로 사용되어서는 안됨

구현 (Implementation)단순성 , 명확성 , 직교성

Software Engineeringby Yang-Sae MoonPage 17

일관적이고 원시 코드의 명료성을 증진시킬 수 있어야 함

구현 (Implementation)언어의 문형 ( 구문 ) (1/2)

① Pascal 의 경우if TotalSales > BonusLevel then Bonus := Commission + (BonusPercent * TotalSales);

if TotalSales > BonusLevel thenbegin Bonus := Commission + (BonusPercent * TotalSales); BonusMonths := BonusMonths + 1end

② Ada 에서 endif, endwhile 의 사용 보다 일관적if TotalSales > BonusLevel then Bonus := Commission + (BonusPercent * TotalSales)endif

if TotalSales > BonusLevel then Bonus := Commission + (BonusPercent * TotalSales); BonusMonths := BonusMonths + 1endif

Software Engineeringby Yang-Sae MoonPage 18

구현 (Implementation)언어의 문형 ( 구문 ) (2/2)

③ dangling else else 가 어디에 해당 ?if conditionA then

if concitionB then action1else action2

if conditionA then if concitionB then action1 endifelse action2endif

Software Engineeringby Yang-Sae MoonPage 19

기본적인 제어 구문 : if-then-else

선택 구조 (case 구조 )• case 선택자의 타입은 가능하면 제한이 없어야• case 문장의 레이블은 범위를 표시할 수 있어야• 선택자가 가질 수 있는 모든 값을 열거하도록 강요해서는 안 된다

구현 (Implementation)제어 구조 (Control Structure) (1/2)

case Person ofwhen Newborn | Infant => Infant_Seat;when Toddler .. Child => Lap_Belt;when Others => Shoulder_and_Lap_Belt;

end case;

Software Engineeringby Yang-Sae MoonPage 20

반복 구조• 반복 횟수를 나타내는 타입이 정수로 제한되어서는 안됨• 반복 횟수를 나타내는 변수 , 초기값을 배정하는 수식 , 점증 값을 반복되는 구조

안에서 바꾸는 것은 바람직하지 않음• 반복 횟수를 나타내는 변수의 정의 범위는 반복 문장 안으로 제한하는 것이 바람직함

반복 구조의 구문 예 : for, while, repeat-until, loop, …

구현 (Implementation)제어 구조 (Control Structure) (2/2)

Software Engineeringby Yang-Sae MoonPage 21

Strong typed language• 타입 검사가 매우 강한 특성을 가진다 . (“ 정수 변수 := 실수”는 컴파일 시 에러

발생 )

• Ada, Modula-2, Pascal

Dynamic typed language• 수행 중간에 변수의 형이 변할 수 있다 .

• Lisp, APL, PHP

단순 자료형• 실수 , 정수 , 논리형 , 문자형• 포인터형 (Ada, C, Modula-2, Pascal)

사용자 정의 타입

구현 (Implementation)자료형 (Data Type)

type Ages=(Infant, Toddler, Preschool, Child, Teenager, Adult); var Person: Ages;

Software Engineeringby Yang-Sae MoonPage 22

( 일반적으로 ) 배열 (array) 과 구조체 (structure) 를 의미함

정적 배열• 프로그램 수행 초기 ( 혹은 컴파일 타임 ) 에 배열의 크기가 결정됨• Fortran, Pascal, Modula-2

동적 배열• 프로그램 수행 중간에 ( 메모리 할당 등을 통하여 ) 배열의 크기가 결정됨• C, Ada

구현 (Implementation)구조 자료형 (1/2)

type Puzzle is array (integer range <>, integer range <>) of charac-ter;

subtype SundayPuzzle is Puzzle(1..50, 1..50);

Software Engineeringby Yang-Sae MoonPage 23

구조 (Structure)• 여러 개의 기본 타입으로 보다 복잡한 자료형을 생성하는 방법• 생성된 구조체를 레코드라 부르기도 함

구현 (Implementation)구조 자료형 (2/2)

type SubscriberType = record Name: array[1..50] of char;

IDNumber: 10000..99999; IssuesSent: 0..104; IssuesRemaining: 0..104;

SubscriptionType: (New, Renewal, Free, Life-time)

end;

Software Engineeringby Yang-Sae MoonPage 24

자세한 내용이 encapsulation 되어 있어 , 프로그래머는 자료 값이나 오퍼레이션이 어떻게 구현되어 있는지 자세히 알 필요가 없는 자료형

( 일반적으로 ) Object-Oriented 언어에서 클래스 형태로 사용함

구현 (Implementation)추상 자료형 (Abstract Data Type)

class BankAccount{public: BankAccount(int won, double rate); BankAccount(); void update(); double get_balance(); double get_rate(); void output();private: double balance; interest_rate;}

Software Engineeringby Yang-Sae MoonPage 25

상수란 프로그램이 수행되는 동안에 값이 바뀌지 않는 자료이다 .• Pascal/Modula-2: 단순 자료형 ( 실수 , 정수 , 문자 , 논리형 ) 만 가능• Ada: 사용자 정의 타입도 허용• C/C++: #define 사용하여 정의

구현 (Implementation)상수 (Constant)

Software Engineeringby Yang-Sae MoonPage 26

함수 / 프로시저에 전달되는 매개변수 종류 : 입력 , 출력 , 입출력

매개변수의 전달 방식• Call by value: 호출한 부분의 변수 값이 함수 내의 지역 변수에 복사됨

함수 내에서 변경한 내용이 리턴 후에 반영되지 않음

• Call by reference: 호출한 변수의 주소 값이 함수 내에 전달됨 함수 내에서 변경하면 , 호출한 변수의 값이 직접 변경됨

• Call by value result: 지역 변수에 복사되나 , 리턴 시 매개 변수에 복사됨 지역 변수로 연산을 수행하나 , 마지막에 매개 변수에 복사되는 형태임

구현 (Implementation)함수 / 프로시저 (1/3)

Software Engineeringby Yang-Sae MoonPage 27

An example of “call by value”

구현 (Implementation)함수 / 프로시저 (2/3)

Software Engineeringby Yang-Sae MoonPage 28

An example of “call by reference”

구현 (Implementation)함수 / 프로시저 (3/3)

Software Engineeringby Yang-Sae MoonPage 29

특정 자료형이나 목적에 맞도록 구현하는 것이 아니라 , 일반적 자료형 및 목적에 맞도록 구현 재사용 측면에서 유리Ada example: 모든 자료형을 지원하는 스택의 구현

구현 (Implementation)재사용 (Reuse)

generictype StackItem is private;package Stack is

procedure Push(Element: in StackItem);function Pop return StackItem;

.

.end Stack;

package CharStack is new Stack(character);package IntegerStack is new Stack(integer);

Software Engineeringby Yang-Sae MoonPage 30

프로그램을 계층적으로 중첩되게 작성하는 규율 (formulation) –- N. Wirth

프로그램을 쉽게 이해하고 오류를 줄여 , 프로그래밍의 생산성을 높이려는 목적으로 프로그램 작성에 적용하는 철학

프로그램의 제어 흐름을 선형화시켜 논리 구조가 명백하게 하려는 코딩 규율

구현 (Implementation)구조적 프로그래밍 (1/3)

Software Engineeringby Yang-Sae MoonPage 31

Proper Program( 의 정의 )• 단일입구 , 단일 출구• 모든 노드는 입구에서 도달할 수 있는 경로가 있어야• 모든 노드는 출구까지 도달할 수 있는 경로가 있어야

구조적 프로그램 ( 의 정의 )• 세 가지 제어구조 ( 순차 , 선택 , 반복 ) 로 무조건적 goto 에 의한 복잡한 제어흐름을

방지• 제어구조가 하향식• Stepwise refinement 를 이용한 프로그래밍

Structure Theorem• Proper program 은 구조적 프로그램으로 변환 가능

최신 프로그래밍 언어 • 구조적 언어 문형 (if-then, if-then-else, case, while, for, repeat-until 등 )

구현 (Implementation)구조적 프로그래밍 (2/3)

Software Engineeringby Yang-Sae MoonPage 32

Goto文은 구조적인 제어 흐름을 해치지 않는 범위에서 사용해야 함 가능하면 마음 속에서 , 머리 속에서 “ goto” 를 지우는 것이 바람직 함

구현 (Implementation)구조적 프로그래밍 (3/3)

DO 50 I=1, COUNT . IF (ERROR1) GO TO 60 . IF (ERROR2) GO TO 70 . 50 CONTINUE 60 {Code for Error1 handling} GO TO 80 70 {Code for Error handling} 80 CONTINUE

I = 1 for I = 1 to TableSize do while I <= TableSize and if Table(I) = Target then goto

Found Table(I) <> Target do I = I + 1 NotFound: {code for Target not found} if I > TableSize then Found: {code for Target found} {code for target not found} else { code for Target found} (a) 구조적 코딩 (b) goto 의 사용

Software Engineeringby Yang-Sae MoonPage 33

We are now …

프로그래밍 언어

4 세대 프로그래밍 언어

비주얼 프로그래밍 언어

코딩 스타일

원시 코드의 문서화

구현 (Implementation)

Software Engineeringby Yang-Sae MoonPage 34

1970년대 후반부터 나온 개념임

“ 누구나 쉽게 프로그래밍을 할 수 있는 언어”를 기치로 내세움 결국 , ( 전문 ) 프로그래머의 설 자리는 없어질 것이라며…

절차적 / 순서적 언어가 아니고 , 비절차 (non-procedural) 의 언어임 즉 , how 가 나타나지 않고 , what 을 위주로 프로그램을 작성

실질적으로 “실패”했다고 보고 있음… 우리 주위에 4GL 이 있는가 ?

4 세대 언어 종류 : Focus, RAMIS-II, SQL SQL 의 경우 특수 목적 (DBMS 처리 ) 으로 널리 사용되고 있음

구현 (Implementation)4 세대 언어 (4GL)

Software Engineeringby Yang-Sae MoonPage 35

구현 (Implementation)Focus 프로그램 예

TABLE FILE SALESHEADING CENTER ‘SAMPLE SALES REPORT’SUM SALES

BY REGIONACROSS MONTHBY YEAR

ON YEAR SUMMARIZEON YEAR PAGE-BREAKEND

어떤 의미인지 정확하지는 않지만… 아마도SALES 라는 파일에서 영역 , 연도별로 , 각 달에 걸쳐서 매출 평균을 구하는 …

Software Engineeringby Yang-Sae MoonPage 36

구현 (Implementation)SQL 프로그램 예

어떻게 (how) 찾고 , 넣고 , 바꾸고 , 지우고 하는지를 기술하는 것이 아니라 ,무엇 (what) 을 찾고 , 넣고 , 바꾸고 , 지우고 하는지를 기술한다 . 결국 , “how” 보다는 “what” 에 중점을 둔 보다 지능적인 언어라 할 수 있음 내부적으로 무엇인가 (query processor, query optimizer) 가 엄청 고생하겠죠 ?

SELECT name, price FROM fruit WHERE color = ‘빨간색’ ;

INSERT INTO fruit VALUES (‘멜론’ , 110, ‘ 초록색’ , ‘ 한국’ );

UPDATE fruit SET price=120, country=‘ 미국’ WHERE name=‘멜론’ ;

DELETE FROM fruit WHERE name=‘멜론’ ;

Software Engineeringby Yang-Sae MoonPage 37

We are now …

프로그래밍 언어

4 세대 프로그래밍 언어

비주얼 프로그래밍 언어

코딩 스타일

원시 코드의 문서화

구현 (Implementation)

Software Engineeringby Yang-Sae MoonPage 38

C, Pascal, Java 등으로만 비주얼 프로그래밍을 한다면…

코드가 너무 많아질 것이다 . 버튼 하나 그리는데 30~40줄… 시간이 너무 많이 걸릴 것이다 .

비주얼 프로그래밍• 주어진 도구 (tool) 를 사용하여 화면을 설계 및 구현하고 ,• 각 객체에 대한 이벤트 (event) 에 대해서 액션 (action) 을 프로그래밍한다 .• 관련된 많은 API 라이브러리가 제공된다 .

얼마나 많은 API 를 아느냐 하는 경험의 척도가 기술력이 된다 .

종류 : Visual C/C++, Visual Basic, J Builder, Delphi, …

구현 (Implementation)비주얼 프로그래밍 언어

Software Engineeringby Yang-Sae MoonPage 39

Visual Basic 의 경우① 원하는 윈도우를 그린다

② 버튼 , 텍스트 박스의 속성을 (properties) 를 설정

구현 (Implementation)비주얼 베이직 예제 (1/2)

Software Engineeringby Yang-Sae MoonPage 40

③ 연계 ( 관련 ) 된 이벤트에 대해서 코드를 작성한다 .

구현 (Implementation)비주얼 베이직 예제 (2/2)

Software Engineeringby Yang-Sae MoonPage 41

구현 (Implementation)Visual Studio

Software Engineeringby Yang-Sae MoonPage 42

구현 (Implementation)Java – Eclipse (Android 개발 )

Software Engineeringby Yang-Sae MoonPage 43

We are now …

프로그래밍 언어

4 세대 프로그래밍 언어

비주얼 프로그래밍 언어

코딩 스타일

원시 코드의 문서화

구현 (Implementation)

Software Engineeringby Yang-Sae MoonPage 44

옷을 입는 것에도 스타일이 있다 .• 빨간색을 좋아하는 사람 북으로 보내셔~• 진바지를 좋아하는 사람• 청바지가 잘 어울리는 여자 …

구현 (Implementation)코딩 스타일 ?

프로그램에도 스타일이 있다 ?• 정수형은 사용하지 않는 사람 모름지기 수란 모두 실수여 ~• 다섯 줄만 넘으면 함수로 분리하는 사람 모듈화 안 배웠어 ~ 나눠 ! 나눠 ! 나눠 !• 포인터를 엄청 많이 사용하는 사람 난 포인터의 황제다… 어렵지 ~ 나만 알면 장땡~

어떤 스타일이 가장 좋은가 ?원칙은 없다 . 다만 권고 (recommendation) 가 있을 뿐…

Software Engineeringby Yang-Sae MoonPage 45

부제 : 너무 똑똑한 체 하지 말 것

구현 (Implementation)스타일 1: 명확하게 작성하라 . (1/3)

int i, j;float v[N][N];....for(i=1;i <= N;i++)

for(j=1;j <= N;j++)v[i-1][j-1] = (i/j)*(j/i); 1 0 0

0 1 0

0 0 1

int i, j;

float v[N][N];....for(i=0;i < N;i++)

for(j=0;j < N;j++)if(i == j) v[i][j] = 1;else v[i][j] = 0;

Software Engineeringby Yang-Sae MoonPage 46

일반적으로 짧을수록 명확해 진다 .

구현 (Implementation)스타일 1: 명확하게 작성하라 . (2/3)

power[1] = base;power[2] = base*base;power[3] = base*base*base;power[4] = base*base*base*base;power[5] = base*base*base*base*base;power[6] = base*base*base*base*base*base;power[7] = base*base*base*base*base*base*base;power[8] = base*base*base*base*base*base*base*base;...

power[1] = base;for(i=2;i < N;i++)

power[i] = power[i-1]*base;

Software Engineeringby Yang-Sae MoonPage 47

짧으면 항시 명확하다 ? 꼭 그렇지만은 않다 .

구현 (Implementation)스타일 1: 명확하게 작성하라 . (3/3)

int IntegerFromHex(char HexDigit){

if(HexDigit < 58) return(HexDigit – 48); // ‘0’ = 48else return(HexDigit – 55); // ‘A’ = 65

}

int IntegerFromHex(char HexDigit){

switch(HexDigit) {case ‘0’: return 0; break;case ‘1’: return 1; break;

...case ‘9’: return 9; break;case ‘A’: return 10; break;

...case ‘F’: return 15; break;

}}

Software Engineeringby Yang-Sae MoonPage 48

최소값을 구하는 예제 (x = y, or y = x 인 경우 , 바른 값을 찾지 못한다 .

구현 (Implementation)스타일 2: 간결하고 직접적으로 표현하라 . (1/2)

if(x < y) {if(x < z) small = x;if(x > z) small = z;

}if(x > y) {

if(y < z) small = y;if(y > z) small = z;

}

small = x;

if(y < small) small = y;if(z < small) small = z;

Software Engineeringby Yang-Sae MoonPage 49

If-then-else 에서는 짧은 선택 구조를 먼저 기술한다 .

구현 (Implementation)스타일 2: 간결하고 직접적으로 표현하라 . (2/2)

if(in_user_code) {in_user_code = FALSE;r2 = r;reset_pharlap();send_sig_segv();

} elserevert();

if(!in_user_code)revert();

else {in_user_code = FALSE;r2 = r;reset_pharlap();send_sig_segv();

}

Software Engineeringby Yang-Sae MoonPage 50

임시 변수 (temporary variable) 의 사용은 가급적 피한다 .

구현 (Implementation)스타일 3: 임시 변수 사용을 피하라 .

t1 = x1 –(x2 + x2);t2 = 7 – x2;Y = t1 + t1 + t2 + t2;

y = 2*(x1 – 2*x2) + 2*(7 – x2);

1 2 22 2 2 7 ;y x x x

Software Engineeringby Yang-Sae MoonPage 51

혼돈하기 쉬운 글자들의 예• 1 과 l a1 al• 0 과 O term0 termO• 5 와 S TEXT5 TEXTS• I 와 l Iist list• m 과 n 의 연속 사용 mnnm mnmn• u 와 v 의 연속 사용 vuvu uuvu

변수 수정의 예제• positionx, positiony xpos, ypos• n, nn, nnn n, nsq, ncube nunit, nsqur, ncube

구현 (Implementation)스타일 4: 혼돈을 초래치 않는 변수 명을 사용하라 .

Software Engineeringby Yang-Sae MoonPage 52

Hungarian notation: 변수 이름의 처음 몇 자는 변수의 타입이나 범위를 나타내도록 한다 .예 ) ptr_to_date_key ( 포인터 )

일관성 있는 이름을 사용한다 .

구현 (Implementation)스타일 5: 일관성 있는 변수 명을 사용하라 .

char buffer[500], mssge[80];void read_instance(void), SaveCurrent(void);void get_line(void), write_line(void);int index1, index2;

char buffer[500], message[80];void read_instance(void), save_current(void);void read_line(void), write_line(void)int i, j;

Software Engineeringby Yang-Sae MoonPage 53

구현 (Implementation)스타일 6: 문장 그룹이 명확하도록 { } 와 들여쓰기를 사용하라 .

for(i=0;i < N;i++){ k = a[i];if(k>100) a[i] = i*3;else if(j ==N)...}

for(i=0;i < N;i++) {k = a[i];if(k > 100) a[i] = i * 3;else if(j == N)...

}

Software Engineeringby Yang-Sae MoonPage 54

구현 (Implementation)스타일 7: 한 가지 선택이면 if 만 , 두 가지이면 if-else

if(swctl == ‘1’) goto conti;else {

dvictl += 10;swctl = ‘1’;

}conti;

if(swctl != ‘1’) {dvictl += 10;swctl = ‘1’;

}

Software Engineeringby Yang-Sae MoonPage 55

if 다음의 if 나 null else 는 가독성을 크게 떨어뜨리며 , 오해의 소지가 있다 .

구현 (Implementation)스타일 8: if 다음의 if 구조 , null else 는 피한다 .

if(qty > 10) // Aif(qty > 200) // B

if(qty >= 500) bill_a += 1.00; // Celse bill_a += 0.50; // C

else; // Belse bill_a = 0.0; // A

if(qty >= 500.0) bill_a += 1.00;if(qty < 500 && qty > 200) bill_a += 0.5;if(qty <= 10) bill_a = 0.0;

Software Engineeringby Yang-Sae MoonPage 56

반복되는 문장은 가급적 반복문을 사용하여 제거한다 .

구현 (Implementation)스타일 9: 문장의 반복은 최소화한다 .

tkn = get_token();if(tkn == T_END) return;if(tkn == T_START) start_proc();while(ntokens < T_LIMIT) {

process_token();add_token();tkn = get_token();if(tkn == T_END) return;if(tkn == T_START) start_proc();

}

for(;;) {tkn = get_token();if(tkn == T_END) return;if(tkn == T_START) start_proc();if(ntokens >= T_LIMIT) break;process_token();add_token();

}

Software Engineeringby Yang-Sae MoonPage 57

같은 역할을 하는 문장들인 경우에는 Grouping 하여 모듈화한다 .

반복되는 기능에 대해서는 함수로 분리한다 .

구현 (Implementation)스타일 10: 모듈화하라 . 서브루틴을 사용하라 .

Software Engineeringby Yang-Sae MoonPage 58

구현 (Implementation)그 밖의 원칙들 (1/4)

수식 표현• 명료하게 작성하라 - 효율성을 위하여 명료함을 희생하지 않도록 한

다 .

• 번거로운 일은 기계가 하도록 만들라 .

• 괄호를 사용하여 모호성을 제거하라 .

• 언어의 좋은 기능을 이용하고 불안한 기능의 사용은 피하라 .

제어 구조• 위에서 아래로 읽을 수 있도록 프로그래밍하라 .

• 중복 구조를 최소화하라 .

• 맨 처음 작성한 것으로 끝나지 말고 , 계속해서 리뷰하라 .

Software Engineeringby Yang-Sae MoonPage 59

구현 (Implementation)그 밖의 원칙들 (2/4)

프로그램• 각 모듈은 분명한 한 가지 역할만 수행하도록 하라 .

• 잘못 작성된 코드는 짜 맞추려 하지 하지 말고 다시 작성하라 . 차리리 버리고 , 처음부터 다시

• 큰 프로그램은 작은 단위로 나누어 따로 작성하고 따로 검사하라 .

입출력 • 자료가 한계 값을 벗어나지 않는지 항상 검사하라 .

• 입력형식은 사용자가 쉽게 준비할 수 있게 하고 출력형식은 그 모양이 스스로 드러나게 구성하라 .

• 입출력은 따로 모아서 독립된 서브루틴으로 만들라 .

Software Engineeringby Yang-Sae MoonPage 60

구현 (Implementation)그 밖의 원칙들 (3/4)

기 타• 발견된 오류만 고치지 말고 , 전체적으로 보고 수정 가능한 모든

오류를 고친다 .

• 하나 차이에 의한 오류 (off-by-one) 를 주의하라 .

• 프로그램을 방어적으로 작성하라 .

• 빠른 프로그램보다 먼저 바른 프로그램을 작성하라 .

• 빠른 프로그램보다 먼저 명료한 프로그램을 작성하라 .

• 간결함을 유지하면서 빠른 프로그램을 만들라 .

Software Engineeringby Yang-Sae MoonPage 61

구현 (Implementation)그 밖의 원칙들 (4/4)

기 타 ( 계속 )

• 주석과 코드가 일치하는지 확인하라 .

• 주석을 달 때 코드를 되풀이해서는 않도록 한다 .

• 잘못된 코드에는 주석을 달지 않는다 . -- 다시 작성한다 .

• 과다하게 주석을 달지 않는다 .

• 덕지덕지 고쳐서 사용하려고 애쓰지 않는다 . -- 과감히 버리고 새로 작성한다 .

Software Engineeringby Yang-Sae MoonPage 62

구현 (Implementation)프로그램에 관한 몇 가지 격언 (1/2)

The sooner you start to code, the longer the program will take.( 코딩을 일찍 시작하면 할 수록 , 프로그래밍에 시간이 많이 걸린다 .)

If you can't write it down in English, you can't code it.(글로써 표현할 수 없다면 , 코딩도 할 수 없다 .)

If the code and the comments disagree, then both are probably wrong.( 코드와 주석이 맞지 않으면 , 둘 다 잘못되었을 가능성이 높다 .)

If you have too many special cases, you are doing it wrong.(너무 많은 예외 케이스가 있다면 , 뭔가 잘못하고 있는 것이다 .)

Get your data structures correct first, and the rest of the pro-gram will write itself.(먼저 자료 구조를 잘 잡는다면 , 프로그램은 저절로 써지게 될 것이다 .)

Software Engineeringby Yang-Sae MoonPage 63

구현 (Implementation)프로그램에 관한 몇 가지 격언 (2/2)

Don't debug standing up. It cuts your patience in half.( 서서 디버깅하지 말아라 . 참을성을 가지란 이야기… )

Each new user of a new system uncovers a new class bugs.(새로운 시스템에 대한 새로운 사용자는 항시 새로운 종류의 버그를 발견한다 .)(Naïve user 는 유익한 테스트 결과를 가져올 것이고 , 새롭게 porting 하면 항시 문제점이 생길 것임을 명심하란 이야기… )

Whenever possible, steal code.( 가능하다면 코드를 훔쳐라 . 즉 , 코드를 재사용하라 .)

Always do the hard part first. If the hard part is impossible, why waste time on the easy part? ( 어려운 부분을 먼저 하라 . 어려운 부분이 불가능하다면 , 쉬운 부분을 해서 뭣하나 ?)

Software Engineeringby Yang-Sae MoonPage 64

We are now …

프로그래밍 언어

4 세대 프로그래밍 언어

비주얼 프로그래밍 언어

코딩 스타일

원시 코드의 문서화

구현 (Implementation)

Software Engineeringby Yang-Sae MoonPage 65

구현 (Implementation)원시 코드의 문서화

소스 코드의 문서화는 즉 , 주석 쓰는 것을 의미한다 .

주석의 종류• 프로그램 헤더 : 전체 프로그램의 기능을 설명하는 주석• 모듈 헤더 ( 함수 헤더 ): 해당 모듈의 기능을 설명하는 주석• 각 줄에 삽입된 주석 : 해당 줄을 설명하는 주석

Software Engineeringby Yang-Sae MoonPage 66

구현 (Implementation)프로그램 헤더 주석

프로그램의 제목제작자작성일과 버전번호구조와 설계공유 변수사용되는 파일외부 참조 파일

Software Engineeringby Yang-Sae MoonPage 67

구현 (Implementation)프로그램 헤더 주석의 예제 (1/2)

/*********************************************************************************

- EXAM SCORE SUMMARY PROGRAM- WRITTEN BY : HONG, KIL DONG- RELEASE DATE : April 1, 2010-- PURPOSE : This program produces a variety of statistics on a- group of student's exam scores. For each score that is entered,- the score and a row of stars representing the magnitute of the- score is printed out. In addition, the number of scores, the- average score, the highest score and the lowest score are- printed out.-- DESIGN : The program is composed of the following modules:- Main module - The Main, controlling module- Validate Input - Gets and validates the user's input- Process Valid Score - Prints score and row of stars for one score- Update Statistics - Updates global statistics- Print Summary Report - Prints summary statistics

Software Engineeringby Yang-Sae MoonPage 68

구현 (Implementation)프로그램 헤더 주석의 예제 (2/2)

- MAJOR VARIABLES :- SumOfScore (subrange of integer, 0..2000) -- The sum of all score entered- NumOfStudents (subrange of integer, 0..100) -- The total number of score entered- LargestScore (subrange of integer, 0..20) - - The largest score in the set of scores- SmallestScore (subrange of integer, 0..20) -- The smallest score- FILES USED:- Input - contains integer scores, one to a line- Output - contains a one-line histogram for each score- read, followed on the next line by the number of- students and their average score, then on the next

line- by the top score, and concluding on the next line with- the lowest score.- EXTERNAL REFERENCES: None***********************************************************************/