소프트웨어 공학 (software engineering ) 구현 (implementation) 문양세 강원대학교 ...

68
소소소소소 소소 (Software Engineering) 소소 (Implementation) 소소소 소소소소소 IT 소소 소소소소소소소

Upload: aquila-mendoza

Post on 02-Jan-2016

113 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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

구현 (Implementation)

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

Page 2: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 2

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

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

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

설계 사양(design spec.)

코딩

원시코드(source code)

컴파일디버깅

목적코드(object code)

Page 3: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 3

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

• 4 세대 프로그래밍 언어

• 비주얼 프로그래밍 언어

• 코딩 스타일

• 원시 코드의 문서화

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

Page 4: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 4

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

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

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

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

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

Page 5: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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)

Page 6: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 6

Assembly language 예제

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

Intel Chip(Linux)

Page 7: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 7

Assembly language 예제

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

Intel Chip(Linux)

Sparc Chip(Solaris)

Page 8: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 8

Fortran 프로그램 예제

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

Page 9: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 9

Pascal 프로그램 예제

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

Page 10: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 10

C 프로그램 예제

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

Page 11: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 11

프로젝트의 상황

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

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

Page 12: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 12

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

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

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

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

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

Page 13: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 13

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

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

호환성

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

Page 14: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 14

표현력과 적합성

단순성 , 명확성 , 직교성

언어의 문형

제어 구조

자료형

상수

프로시저와 함수

프로시저 및 자료 추상화

재사용

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

Page 15: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 15

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

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

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

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

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

Page 16: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 16

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

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

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

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

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

Page 17: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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

Page 18: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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

Page 19: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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;

Page 20: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 20

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

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

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

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

Page 21: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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;

Page 22: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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

Page 23: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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;

Page 24: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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

Page 25: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 25

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

구현 (Implementation)상수 (Constant)

Page 26: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 26

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

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

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

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

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

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

Page 27: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 27

An example of “call by value”

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

Page 28: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 28

An example of “call by reference”

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

Page 29: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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

Page 30: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 30

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

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

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

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

Page 31: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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)

Page 32: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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 의 사용

Page 33: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 33

We are now …

프로그래밍 언어

4 세대 프로그래밍 언어

비주얼 프로그래밍 언어

코딩 스타일

원시 코드의 문서화

구현 (Implementation)

Page 34: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 34

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

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

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

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

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

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

Page 35: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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 라는 파일에서 영역 , 연도별로 , 각 달에 걸쳐서 매출 평균을 구하는 …

Page 36: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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=‘멜론’ ;

Page 37: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 37

We are now …

프로그래밍 언어

4 세대 프로그래밍 언어

비주얼 프로그래밍 언어

코딩 스타일

원시 코드의 문서화

구현 (Implementation)

Page 38: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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)비주얼 프로그래밍 언어

Page 39: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 39

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

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

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

Page 40: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 40

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

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

Page 41: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 41

구현 (Implementation)Visual Studio

Page 42: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 42

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

Page 43: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 43

We are now …

프로그래밍 언어

4 세대 프로그래밍 언어

비주얼 프로그래밍 언어

코딩 스타일

원시 코드의 문서화

구현 (Implementation)

Page 44: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 44

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

구현 (Implementation)코딩 스타일 ?

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

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

Page 45: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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;

Page 46: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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;

Page 47: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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;

}}

Page 48: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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;

Page 49: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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();

}

Page 50: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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

Page 51: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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: 혼돈을 초래치 않는 변수 명을 사용하라 .

Page 52: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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;

Page 53: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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)...

}

Page 54: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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

}

Page 55: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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;

Page 56: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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();

}

Page 57: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 57

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

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

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

Page 58: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 58

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

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

다 .

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

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

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

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

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

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

Page 59: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 59

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

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

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

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

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

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

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

Page 60: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 60

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

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

오류를 고친다 .

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

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

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

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

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

Page 61: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 61

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

기 타 ( 계속 )

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

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

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

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

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

Page 62: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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.(먼저 자료 구조를 잘 잡는다면 , 프로그램은 저절로 써지게 될 것이다 .)

Page 63: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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? ( 어려운 부분을 먼저 하라 . 어려운 부분이 불가능하다면 , 쉬운 부분을 해서 뭣하나 ?)

Page 64: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 64

We are now …

프로그래밍 언어

4 세대 프로그래밍 언어

비주얼 프로그래밍 언어

코딩 스타일

원시 코드의 문서화

구현 (Implementation)

Page 65: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 65

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

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

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

Page 66: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

Software Engineeringby Yang-Sae MoonPage 66

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

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

Page 67: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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

Page 68: 소프트웨어 공학  (Software Engineering ) 구현  (Implementation) 문양세 강원대학교  IT 대학 컴퓨터과학전공

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***********************************************************************/