• 검색 결과가 없습니다.

Chapter 8. 소프트웨어구현

N/A
N/A
Protected

Academic year: 2022

Share "Chapter 8. 소프트웨어구현"

Copied!
21
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

Chapter 8. 소프트웨어구현

Copyright Kim, Haeng Kon

E-Mail : hangkon@amare.ac.kr

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

(3)

Contents

 개요

 Programming 선택

 자료 추상화

 Programming Language의 분류

 Coding Style

 표준화

 OOP(Object Oriented Programming)

(4)

8.1 개요

 Coding 단계 = 구현 = programming 단계

 설계 단계에서 작성된 명세서를 이용하여 source code로 변환시키는 단계

 module의 내부설계 과정에서 작성된 module 내부 설계 사양서를 “언어(language)”로 기술함으로써 변환하는 작업

 목표

 명세와 code가 일치하는지 점검

 test와 변경을 용이하게 하는 source code와 내부 문서를 작성하는 것

 가능한 한 source code를 간결하고 명료하게 작성

 Source code를 작성하는 program language의 선택이 중요

(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

(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:

(7)

8.2 program 언어 선택

 Coding 단계에서 programmer가 programming language를 선정할 때 고려하는 요소

 Programmer가 그 programming language를 이용

 Programmer들은 programming language들의 수와 사용이 통일

 어느 기계에나 쉽게 설치 가능

 Programmer들은 효율을 고려

 Programmer들은 응용 목적에 맞는 programming language를 선정

 개인적인 선호

 추상화

 유사성을 표현하고 차이점을 삭제함으로써 관련된 사항들을 묶어 하나로 표현하는 방법

 자료 추상화

 자료형의 표현과 그에 관련된 연산들을 함께 묶어 캡슐화(encapsulation)하는 기법

8.3 자료 추상화

(8)

8.4 program language의 분류

 언어의 개발과정

Fortran

Basic Algol

Alogol 68 Pascal Simula

PL/1

COBOL

Concurrent

Pascal Modula Mesa Euclid Clu

Ada

Lisp

BLCP

C

Maclisp

APL SNOBOL BLISS Interlisp

Forth

SL5

(9)

8.5 Coding Style

 단순하고 간결성에 역점을 두는 코딩원칙

 Coding style을 결정하는 요소

 구조적 coding, 문서화 자료선언, 문장의 작성방법

1. 구조적 프로그래밍

 신뢰성 있는 software의 생산과 coding의 표준화들을 위해서 개발된 방법

 구조적 programming의 diagram에 따라 coding하는데 있어서 그 특징

• 구조화 programming 기법을 적용한 일종의 기능사양

• 자연언어로 기술

• program의 생산성, 신뢰성 및 유지보수성을 향상

 구조적 diagram

프로그램

프로그램 개시부

프로그램 처리부

처리 개시부

처리부(조건)

구체처리

구체처리

구체처리

구체처리

(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

(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

(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 조건

T PERFORM S1 S1

UNTL 조건

(조건)

(13)

2. code의 문서화

Subroutine program과 compile 단위의 prologue에 대한 전형적인 형식

program의 서두 부분에 쓰이는 서언 비실행문 형식

1) 모듈에 관한 설명 2) 접속관계의 설명

가. 호출 순서, 나. 인수에 관한 설명, 다. 하위급 모듈의 목록 3) 주요 변수의 설명과 사용, 제한사항, 관련자료

4) 모듈의 개발 역사자료

가. 모듈의 설계자, 나. 검토자 및 일자, 다. 변경일자와 변경 내용

ⓐ 저자명 :

ⓑ 컴파일 일시 :

ⓒ 실행할 기능 :

ⓓ 사용할 알고리즘 :

ⓔ 변경자/일시/목적 :

ⓕ 매개변수와 이의 전송 모드 :

ⓖ 입력 단정 :

ⓗ 출력 단정 :

ⓘ 광역 변수 :

ⓙ 부작용 :

ⓚ 주요 자료구조 :

ⓛ 호출 루틴 :

ⓜ 피호출 루틴 :

ⓝ 시간 제약 사항 :

ⓞ 예외 조치 방안 :

ⓟ 가정 :

(14)

 주석달기 규약

ⓐ 다음을 사용하여 주석의 필요성을 최소화할 것 · 표준 프롤로그

· 구조적 프로그래밍 구조 · 훌륭한 코딩 스타일

· 사용자 정의 자료형, 변수, 형식 매개 변수, 부울 문자, 서브프로그램, 파일등에 대한 문제영역으로부터의 기술적인 명칭

· 사용자 정의 예외, 사용자 정의 자료형, 자료 캡슐화와 같은 구현 언어의 자기 문서화 양상

ⓑ 다음과 같은 기능을 갖는 모드 블록에 주석을 달 것 · 주요 자료 처리의 실행

· goto문을 사용하여 구조적 제어 구조를 가장 · 예외 조치를 실행

ⓒ 주석내에 문제 영역 관련 용어를 사용할 것.

ⓓ 주석을 부가시키기 위해서 빈줄, 테두리, 그리고 만입을 사용할 것

ⓔ 변경과 개정사항등은 맨 우측에 위치하도록 할 것.

ⓕ 분명하지 않은 복잡한 문서를 코드화하기 위해서 긴 주석을 사용하지 말고 코드를 재 작성할 것

ⓖ 주석과 코드는 서로 일치하며, 요구사항과 설계 사양과도 일치하는가를 항상 확인할 것.

(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

(16)

8.6 표준화

 Programming 표준 항목

 goto문이 사용되지 않을 것

 program 구조의 nesting 깊이는 5 level을 초과하지 않을 것

 Sub routine의 길이는 30 line을 초과하지 않을 것

 programming 지침

 programmer는 programming 지침의 가치를 이해해야 함

 programmer가 지침 수립 시 참여할 수 있는 기회가 제공되어야 함

 지침이 성가시게 느껴질 때는 이를 재조사하여 개정 시켜야 함

 특수환경에서 지침을 위반해도 되는 mechanism이 있어야 함

 자동화 도구는 지침의 준수여부를 수작업으로 검열하는 것은 불가능하며, 자동 check가 실행되지 않으면 그 지침은 가지가 없는 것이어야 함.

(17)

8.7 Object Oriented Programming

 절차형 programming과 OOP의 차이점

1. 추상화(Abstraction)

 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에 따라 해당 class를 분 류

(classification)

 객체의 성질을 분해하는 요소분해(factoring)

 공통된 성질을 추출하여 슈퍼 클래스를 선정하는 추상화(abstract)

 기능 추상화 :method를 정의하는 것

 자료 추상화 : 객체가 속하는 class를 설정하는 것

자료 프로시쥬어

절차지향 프로그래밍

프로시져 호출 자료와 프로시져 독립 분리

프로시져/자료

객체 객체

객체지향 프로그래밍

메시지 전달 객체는 캡슐화 객체/메시지 전달

수동적 능동적 객체

메시지

주체

타는것

su b classin g

(18)

2. Encapsulation = 정보은닉(Information hiding)

 사용자에게는 상세한 구현을 감추고 필요한 사항만 보이게 함

 객체의 전용 자료와 method를 다른 객체가 접근할 수 없음.

 보호막과 부분 보호막의 관계

객체 전용자료

메소드

인터페이스 보호막

메시지 송수신 (객체지향 언어)

라이브러리 모듈 자료형 프로시져

인터페이스 부분 보호막

프로시져 호출 (절차지향 언어)

(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

(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(); // 실행

}

(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); // 시뮬레이션을 위해

 }

}

참조

관련 문서

양궁선수와

- TCP는 흐름 제어와 오류 제어를 구별한다. - 이 절에서는 오류 제어를 무시하고 흐름 제어에

당기손익으로 반영하는 경우의 자산으로서 기업은 공정가치변동을 당기손익에 반영하는 것이 더욱 목적적합한 정보를 제공할 수 있다고 판단되면 해당

E04 Left Side Cover● Water Pump E05 Right Crankcase Cover● Shaft E06 Throttle Body.. E07 Transmission Pulley E08 Starting Motor● Generator E09 Crank

We’re going to use the special init function (in both our Model and our ViewModel) We’re going to use generics in our implementation of our Model. We’re going to use a function

If the coefficients of static friction at the surfaces of contact are as shown, determine the smallest horizontal force P needed to move block A.. The beam AB has

 Under the linear layout, a multi-functional worker handles different types of machines that are laid out in a

내부유동에서의 속도분포로부터 평균속도를, 온도분포로부터 평균온도를