소프트웨어 공학 (software engineering) 구현 (implementation) 최미정 강원대학교...

65
소소소소소 소소 소소소소소 소소 (Software Engineering) (Software Engineering) 소소 소소 (Implementation) (Implementation) 소소소 소소소 소소소소소 소소소소소소소 소소소소소 소소소소소소소

Upload: fay

Post on 18-Jan-2016

96 views

Category:

Documents


7 download

DESCRIPTION

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

TRANSCRIPT

Page 1: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

소프트웨어 공학 소프트웨어 공학 (Software (Software Engineering)Engineering)

구현 구현 (Implementation)(Implementation)

최미정최미정강원대학교 컴퓨터과학전공강원대학교 컴퓨터과학전공

Page 2: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 2

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

코딩의 원칙• 설계 내용을 철저히 반영시킨다 . ( 어렵다고 빼고 진행하면 나중에 후회… )

• 원시코드는 간단 명료하도록 한다• 디버깅이 쉽도록 한다 .

• 시험이 용이해야 한다 .

• 수정이 간편해야 한다 .

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

설계 사양(design spec.)

코딩

원시코드(source code)

컴파일디버깅

목적코드(object code)

Page 3: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 3

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

• 4 세대 프로그래밍 언어

• 비주얼 프로그래밍 언어

• 코딩 스타일

• 원시 코드의 문서화

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

Page 4: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 4

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

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

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

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

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

Page 5: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 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)(1/5)

Page 6: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 6

Assembly language 예제

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

Intel Chip(Linux)

Sparc Chip(Solaris)

Page 7: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 7

Fortran 프로그램 예제

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

Page 8: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 8

Pascal 프로그램 예제

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

Page 9: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 9

C 프로그램 예제

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

Page 10: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 10

프로젝트의 상황

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

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

Page 11: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 11

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

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

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

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

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

Page 12: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 12

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

소프트웨어 개발 도구의 지원• 에디터 (editor)

• 디버거 (debugger)

• 링커 (linker)

• 추적기 (tracer)

호환성

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

Page 13: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 13

표현력과 적합성

단순성 , 명확성 , 직교성

언어의 문형

제어 구조

자료형

상수

프로시저와 함수

프로시저 및 자료 추상화

재사용

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

Page 14: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 14

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

예제• COBOL : 사무응용 분야

• C 언어 : 시스템 프로그래밍 , 임베디드 응용

• Pascal : 프로그래밍 교육 ( 풍부한 자료구조 )

• Modula-2 : 시스템 프로그래밍에 적합

• Ada : 실시간 처리 응용

• Lisp, Prolog : 인공지능

• ASP, PHP, JSP : 웹 프로그래밍

• Java : 인터넷 프로그래밍

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

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

Page 15: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 15

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

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

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

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

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

Page 16: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 16

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

구현 (Implementation)언어의 문형언어의 문형 (( 구문구문 ) (1/2)) (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

Page 17: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 17

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

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

if concitionB then action1else action2

if conditionA then if concitionB then action1 endifelse action2endif

Page 18: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 18

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

선택 구조 (case 구조 )• case 선택자의 타입은 가능하면 제한이 없어야

• case 문장의 레이블은 범위를 표시할 수 있어야

• 선택자가 가질 수 있는 모든 값을 열거하도록 강요해서는 안 된다

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

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

end case;

Page 19: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 19

반복 구조• 반복 횟수를 나타내는 타입이 정수로 제한되어서는 안됨

• 반복 횟수를 나타내는 변수 , 초기값을 배정하는 수식 , 점증 값을 반복되는 구조 안에서 바꾸는 것은 바람직하지 않음

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

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

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

Page 20: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 20

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

발생 )

• Ada, Modula-2, Pascal

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

• Lisp, APL, PHP

단순 자료형• 실수 , 정수 , 논리형 , 문자형

• 포인터형 (Ada, C, Modula-2, Pascal)

사용자 정의 타입

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

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

Page 21: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 21

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

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

• Fortran, Pascal, Modula-2

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

• C, Ada

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

type Puzzle is array (integer range <>, integer range <>) of character;

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

Page 22: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 22

구조 (Structure)• 여러 개의 기본 타입으로 보다 복잡한 자료형을 생성하는 방법

• 생성된 구조체를 레코드라 부르기도 함

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

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

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

SubscriptionType: (New, Renewal, Free, Lifetime) end;

Page 23: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 23

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

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

구현 (Implementation)추상 자료형 추상 자료형 (Abstract Data Type)(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;

}

Page 24: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 24

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

구현 (Implementation)상수 상수 (Constant)(Constant)

Page 25: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 25

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

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

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

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

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

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

Page 26: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 26

An example of “call by value”

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

Page 27: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 27

An example of “call by reference”

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

Page 28: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 28

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

구현 (Implementation)재사용 재사용 (Reuse)(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);

Page 29: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 29

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

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

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

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

Page 30: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 30

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

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

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

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

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

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

Page 31: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 31

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

구현 (Implementation)구조적 프로그래밍 구조적 프로그래밍 (3/3)(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 의 사용

Page 32: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 32

We are now …We are now …

프로그래밍 언어

4 세대 프로그래밍 언어

비주얼 프로그래밍 언어

코딩 스타일

원시 코드의 문서화

구현 (Implementation)

Page 33: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 33

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

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

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

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

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

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

Page 34: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 34

구현 (Implementation)Focus Focus 프로그램 예프로그램 예

TABLE FILE SALESHEADING CENTER ‘SAMPLE SALES REPORT’SUM SALES

BY REGIONACROSS MONTHBY YEAR

ON YEAR SUMMARIZEON YEAR PAGE-BREAKEND

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

Page 35: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 35

구현 (Implementation)SQL 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=‘ 멜론’ ;

Page 36: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 36

We are now …We are now …

프로그래밍 언어

4 세대 프로그래밍 언어

비주얼 프로그래밍 언어

코딩 스타일

원시 코드의 문서화

구현 (Implementation)

Page 37: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 37

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

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

비주얼 프로그래밍• 주어진 도구 (tool) 를 사용하여 화면을 설계 및 구현하고 ,

• 각 객체에 대한 이벤트 (event) 에 대해서 액션 (action) 을 프로그래밍한다 .

• 관련된 많은 API 라이브러리가 제공된다 . 얼마나 많은 API 를 아느냐 하는 경험의 척도가 기술력이 된다 .

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

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

Page 38: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 38

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

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

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

Page 39: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 39

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

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

Page 40: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 40

We are now …We are now …

프로그래밍 언어

4 세대 프로그래밍 언어

비주얼 프로그래밍 언어

코딩 스타일

원시 코드의 문서화

구현 (Implementation)

Page 41: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 41

옷을 입는 것에도 스타일이 있다 .• 빨간색을 좋아하는 사람 빨갱이인가 ?

• 진바지를 좋아하는 사람• 청바지가 잘 어울리는 여자 …

구현 (Implementation)코딩 스타일코딩 스타일 ??

프로그램에도 스타일이 있다 ?• 정수형은 사용하지 않는 사람 모름지기 수란 모두 실수여 ~

• 다섯 줄만 넘으면 함수로 분리하는 사람 모듈화 안 배웠어 ~ 나눠 ! 나눠 ! 나눠 !

• 포인터를 엄청 많이 사용하는 사람 난 포인터의 황제다… 어렵지 ~ 나만 알면 장땡 ~

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

Page 42: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 42

부제 : 너무 똑똑한 체 하지 말 것 내가 가장 하기 어려운 …

구현 (Implementation)스타일 스타일 1: 1: 명확하게 작성하라명확하게 작성하라 . (1/3). (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;

Page 43: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 43

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

구현 (Implementation)스타일 스타일 1: 1: 명확하게 작성하라명확하게 작성하라 . (2/3). (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;

Page 44: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 44

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

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

int IntegerFromHex(char HexDigit)

{

if(HexDigit < 58) return(HexDigit – 48); // ‘0’ = 48

else 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;

}

}

Page 45: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 45

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

구현 (Implementation)스타일 스타일 2: 2: 간결하고 직접적으로 표현하라간결하고 직접적으로 표현하라 . (1/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;

Page 46: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 46

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

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

if(in_user_code) {

in_user_code = FALSE;

r2 = r;

reset_pharlap();

send_sig_segv();

} else

revert();

if(!in_user_code)

revert();

else {

in_user_code = FALSE;

r2 = r;

reset_pharlap();

send_sig_segv();

}

Page 47: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 47

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

구현 (Implementation)스타일 스타일 3: 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

Page 48: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 48

혼돈하기 쉬운 글자들의 예• 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: 4: 혼돈을 초래치 않는 변수 명을 사용하라혼돈을 초래치 않는 변수 명을 사용하라 ..

Page 49: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 49

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

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

구현 (Implementation)스타일 스타일 5: 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;

Page 50: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 50

구현 (Implementation)스타일 스타일 6: 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)

...

}

Page 51: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 51

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

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

else {

dvictl += 10;

swctl = ‘1’;

}

conti;

if(swctl != ‘1’) {

dvictl += 10;

swctl = ‘1’;

}

Page 52: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 52

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

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

if(qty > 10) // A

if(qty > 200) // B

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

else bill_a += 0.50; // C

else; // B

else 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;

Page 53: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 53

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

구현 (Implementation)스타일 스타일 9: 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();

}

Page 54: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 54

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

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

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

Page 55: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 55

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

수식 표현

• 명료하게 작성하라 - 효율성을 위하여 명료함을 희생하지 않도록 한다 .

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

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

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

제어 구조

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

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

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

Page 56: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 56

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

프로그램

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

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

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

입출력

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

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

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

Page 57: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 57

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

기 타

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

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

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

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

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

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

Page 58: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 58

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

기 타 ( 계속 )

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

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

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

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

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

Page 59: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 59

구현 (Implementation)프로그램에 관한 몇 가지 격언 프로그램에 관한 몇 가지 격언 (1/2)(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 program will write itself.( 먼저 자료 구조를 잘 잡는다면 , 프로그램은 저절로 써지게 될 것이다 .)

Page 60: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 60

구현 (Implementation)프로그램에 관한 몇 가지 격언 프로그램에 관한 몇 가지 격언 (2/2)(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? ( 어려운 부분을 먼저 하라 . 어려운 부분이 불가능하다면 , 쉬운 부분을 해서 뭣하나 ?)

Page 61: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 61

We are now …We are now …

프로그래밍 언어

4 세대 프로그래밍 언어

비주얼 프로그래밍 언어

코딩 스타일

원시 코드의 문서화

구현 (Implementation)

Page 62: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 62

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

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

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

Page 63: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 63

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

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

Page 64: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 64

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

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

- EXAM SCORE SUMMARY PROGRAM- WRITTEN BY : HONG, KIL DONG- RELEASE DATE : April 1, 1994-- 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

Page 65: 소프트웨어 공학  (Software Engineering) 구현  (Implementation) 최미정 강원대학교 컴퓨터과학전공

Software EngineeringPage 65

구현 (Implementation)프로그램 헤더 주석의 예제 프로그램 헤더 주석의 예제 (2/2)(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***********************************************************************/