• 検索結果がありません。

第10回 コーディングと統合(WWW用).PDF

N/A
N/A
Protected

Academic year: 2021

シェア "第10回 コーディングと統合(WWW用).PDF"

Copied!
22
0
0

読み込み中.... (全文を見る)

全文

(1)

10回 コーディングと統合

(2)

コーディングと統合

algorithm プログラム コード プログラム コード プログラム コード

情報

システム

詳細設計

コーディング

統合

機能

機能

機能

algorithm algorithm

(3)

学習目標

n いくつかの統合の仕方について学ぶ。

n 構造化コーディング技法について学ぶ。

n コメントの書き方について学ぶ。

(4)

コーディングとテストは

並行して実施

n 個々のモジュールを正しくコーディングする

ためには,コーディングとテストを平行して実

施する必要がある。

n テストには,次の3つがある:

p 単体テスト(unit testing):各モジュールに対す

るテスト

p 統合テスト(integrated testing):統合された情

報システムに対するテスト

p 受理テスト(acceptance testing):最終製品とし

て納入する際のテスト

(5)

モジュール統合の

いくつかの代替的順序

n どのモジュールからコーディングすべきか?

p Big-Bang法:すべてのモジュールをコーディングしてか

ら,全体を統合する方法。単体テストはしばしば行われ

ない。

p 漸増的開発(incremental development):部分的に

コーディングしては統合してテストしていく方法。システ

ム構造図におけるどのモジュールを単位とするかに,以

下の3つの方法がある:

トップダウン式

ボトムアップ式

スレッド式:

(6)

ソースコードの質に

影響を与える要因

n ソースコードが最終製品なので,その質は

重要である。

n よい品質のソースコードを作成するために:

p 構造化コーディング技法を使う

p よいコーディングスタイル

p ローカルなデータ構造をうまく選ぶ

p 内部コメントをきちんと書く

p フォーマットや変数名は,読みやすく,整合的に。

(7)

構造化コーディング技法

n 構造化コーディング技法の特徴

p 無条件分岐(goto文)はなるべく使わない。

(あった方がよい場合もある)

p トップダウンで

p 入口と出口はひとつに

(8)

gotoや複数の出口を持つケース

DO 50 I=1,COUNT

IF (ERROR1) GO TO 60

IF (ERROR2) GO TO 60

50 CONTINUE

60 {Code for Error1 handling}

GO TO 80

70 {Code for Error2 handling}

80 CONTINUE

・ ・

(9)

与えられた値を表から

サーチするプログラム

構造化コーディングを使った場合

I = I

while I <= TableSize and Table(I) <> Target do

I = I + 1

if I > TableSize then

{code for Target not found}

else {code for Target found}

構造化コーディングを使わない場合

for I=1 to TableSize do

if Table(i) = Target then goto Found

NotFound: {code for Target not found}

(10)

コーディングスタイル

n 短く。

n 分岐は少なく。

(11)

短く

Procedure FillPowersArray(var Base:integer;var Powers:array of integer); begin Powers[1]:=Base; Powers[2]:=Base*Base; Powers[3]:=Base*Base*Base; Powers[4]:=Base*Base*Base*Base; Powers[5]:=Base*Base*Base*Base*Base; Powers[6]:=Base*Base*Base*Base*Base*Base; Powers[7]:=Base*Base*Base*Base*Base*Base*Base; Powers[8]:=Base*Base*Base*Base*Base*Base*Base*Base; end{procedure FillPowerArray}:

Procedure FillPowersArray(var Base:integer;var Powers:array of integer); var Index:integer; begin Powers[1]:=Base; for Index :=2 to 8 do Powers[Index]:=Powers[Index-1]*Base; end{procedure FillPowerArray}:

(12)

長いからだめというわけではない

function IntegerFromHex(HexDigit:char):integer; var ASCIIValue:integer;

begin

ASCIIValue:=chr(HexDigit);

if ASCIIValue < 58 then IntegerFromHex := ASCIIValue – 48;

else IntegerFromHex := ASCIIValue – 55; end; {function IntegerFromHex}

function IntegerFromHex(HexDigit:char):integer; begin case HexDigit of ‘0’:IntegerFromHex := 0; ‘1’:IntegerFromHex := 1; ‘2’:IntegerFromHex := 2; ‘3’:IntegerFromHex := 3; ‘4’:IntegerFromHex := 4; ‘5’:IntegerFromHex := 5; ‘6’:IntegerFromHex := 6; ‘7’:IntegerFromHex := 7; ‘8’:IntegerFromHex := 8; ‘9’:IntegerFromHex := 9; ‘A’:IntegerFromHex := 10; ‘B’:IntegerFromHex := 11; ‘C’:IntegerFromHex := 12; ‘D’:IntegerFromHex := 13; ‘E’:IntegerFromHex := 14; ‘F’:IntegerFromHex := 15;

(13)

2 3 4 5 0 間隔 0 @ P 1 ! 1 A Q 2 ” 2 B R 3 # 3 C S 4 $ 4 D T 5 % 5 E U 6 & 6 F V 7 ’ 7 G W 8 ( 8 H X 9 ) 9 I Y A * : J Z B + ; K [ C , < L ¥ D − = M ] E . > N ^

JIS X0201ローマ字・

片仮名用

8単位符号

第1ニブル

第2ニブル

(14)

ソートされた配列から

最頻値と頻度を求める

(1)

procedure Mode1(A:array[1..N] of integer;N:integer;

var Mode,ModeFrequency:integer); var I,TempFreq:integer; begin Mode := A[1]; ModeFrequency := 1; TempFreq := 1; for I:= 2 to N do begin

if A[I] <> A[I-1] then TempFreq := 1

else TempFreq := TempFreq + 1; if TempFreq > ModeFrequency then

begin

ModeFrequency := TempFreq; Mode := A[I]

end end {for}

(15)

ソートされた配列から

最頻値と頻度を求める

(2)

procedure Mode2(A:array[1..N] of integer;N:integer;var Mode,ModeFrequency:integer); var I:integer; begin Mode := A[1]; ModeFrequence := 1; TempFreq := 1; for I:= 2 to N do begin

if A[I] = A[I-ModeFrequency] then begin Mode := A[I]; ModeFrequency := ModeFrequency + 1; end {if} end {for} end{procedure Mode2}

(16)

分岐は少なく

n 論理的にも心理的にも,分岐が多いと複雑

(17)

2つの距離の近さを判定(1)

DistanceRecord = record yards:integer; Feet:integer; Inches:integer end; function D1isLonger(Distance1,Distance2:DistanceRecord):boolean; begin D1isLonger := false;

if (Distance1.Yards = Distance2.Yards) and (Distance1.Feet >Distance2.Feet)

then D1isLonger := true

else if (Distance1.Feet = Distance2.Feet) and (Distance1.Inches > Distance2.Inches) then D1isLonger := true

(18)

2つの距離の近さを判定(2)

DistanceRecord = record yards:integer; Feet:integer; Inches:integer end; function D1isLonger(Distance1,Distance2:DistanceRecord):boolean; var TotalDistance1,TotalDistance2:integer; begin TotalDistance1 := (Distance1.Yards * 36) + (Distance1.Feet * 12) + Distance1.Inches; TotalDistance2 := (Distance2.Yards * 36) + (Distance2.Feet * 12) + Distance2.Inches; D1isLonger := TiotalDistance1 > TotalDistance2 end {function D1isLonger}

(19)

ソースコードの

ドキュメンテーション

n 情報システム構築後の修正の源は,ソース

コードなので,他者と共有できるようなもの

にしなければならない。

n 3つのコメントが必要

p プログラムヘッダのコメント

p モジュールヘッダのコメント

p 行のコメント

(20)

プログラムヘッダのコメント

n プログラムヘッダには次の情報が必要

p プログラムの題目

p 著者

p 日付と版

p 目的

p 構造と設計

p 大域変数

p 使用するファイル

p 外部参照

(21)

モジュールヘッダのコメント

(22)

行のコメント

begin

Next := 1;

while (not eoln) and (Next <= Maxlength) do

begin

read(Instring[Next]);

Next := Next + 1

end;

readln;

for Next := Next to Maxlength do

Instring[Next] := Blank

end

必要と思われるコメント

を書いてみよう。

参照

関連したドキュメント

In Section 5, we study the contact of a 1-lightlike surface with an anti de Sitter 3-sphere as an application of the theory of Legendrian singularities and discuss the

Given a homogeneous linear discrete or continuous dynamical system, its stability index is given by the dimension of the stable manifold of the zero solution.. In particular, for the

We show how they apply to the higher index theory for coverings and to flat foliated bundles, and prove an index theorem for C ∗ -dynamical systems associ- ated to actions of compact

A line bundle as in the right hand side of the definition of Cliff(X ) is said to contribute to the Clifford index and, among them, those L with Cliff(L) = Cliff(X) are said to

made this degree of limited practical value, this work revealed that an integer-valued degree theory for Fredholm mappings of index 0 cannot comply with the homotopy in-

Richmond studies the asymptotic behaviour for partition functions and their differences for sets satisfying certain stronger conditions.. The results none-the-less apply to the cases

In my earlier paper [H07] and in my talk at the workshop on “Arithmetic Algebraic Geometry” at RIMS in September 2006, we made explicit a conjec- tural formula of the L -invariant

The mock theta functions are (up to powers of q) holomorphic parts of the specializations of weight 1/2 harmonic Maass forms..?. Eichler integrals of Eisenstein