dev is book 2

225
САРАТОВСКИЙ ГОСУНИВЕРСИТЕТ МЕХАНИКО-МАТЕМАТИЧЕСКИЙФАКУЛЬТЕТ Проектирование информационных систем Составил: Блинков Ю. А.

Upload: alexander-kudryashov

Post on 28-Nov-2014

642 views

Category:

Documents


0 download

TRANSCRIPT

-

: . .

I. 56 9 9 11 11 11 29 36 36 37 38 39 40 41 42 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

0.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.2. . . . . . . . . . . . . . . . 0.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.2.2. . . . . . . . . . . . . . . . . . . . . . . . . 0.2.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.4. . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.8. . . . . . . . . . . . . . . . . . . . . . . . 0.3.9. . . . . . . . . . . . . . . . . . . . . 0.3.10. . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.11. . . . . . . . . . . . . . . . . . . 0.3.12. . . . . . . . . . . . . . . . . . . . . . . . . 0.3.13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.15. . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.16. . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.20. . . . . . . . . . . . . . . . . . . . . . . . . 0.3.21. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.22. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3.23. 0.3.24. . . . . . . . . .

2

0.3.25. - . . . . . . . . . . 0.3.26. . . . . . . . 0.3.27. . . . . . . . . . . . 0.3.28. . . . . . . . . . . . . . . 0.3.29.

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

61 62 63 64 65

II.1. 2. 3. 3.1. 3.1.1. 3.1.2. 3.2. 3.3. 3.4. 3.4.1. 3.4.2. 4. 4.1. 4.2. 4.3. 5. 5.1. 5.2. 5.3. 5.4. 5.5. 5.6.

1 . . . . . . . . . . . . . . . . ( 34.602-89) ( 34.602-89) . . . . . . . . . . . . . . . . . . . . . . . . ISO/IEC 12207 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6667 74 78 78 83 86 89 93 97 97 99

108 - . . . . . . . . . . . . . . . . . . . . . . . . . . 108 - . . . . . . . . . . . . . . . 112 - . . . . . . . . 120 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 126 129 131 139 139 143

III.6. 6.1. 6.2. 6.3. 7.

2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

145146 146 151 161 163

3

7.1. 7.2. 8. 8.1. 8.2. 8.3. 9. 9.1. 10. 10.1. 10.2. 10.3. 10.4. 10.5. 10.6.

. . . . . . . . . . . . . . . . . . . 164 . . . . . . . . . . . . . . . . . 173 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 178 181 190

(UML) 192 UML . . . . . . . . . . . . . . . . 193 UML - . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 205 209 210 211 215 218 221 222 224 225

4

I.

5

. CASE -, (). : ; ; ; ; ; CASE-. , : ; ; ( , ), ; , : , , , , .. CASE- . ( ), . . . , , , . .

6

(). " ". . . , , , . . : , , , , . . . : , , . . : , , . . . . . . (" " " "). . . . , . . . . (). . . () . . . . -. , . : , , . . . . - . -. - . - . . . . . . : , , , , . . , , . . . , , . . . . . . . . - .

7

IDEF. . - . . . . . . . . . . . . . IDEFI. ERwin. ERwin. . : ; ; ; ; , ; . : ; ; ; ; ; ; ; . ERwin. . . Unied Modeling Language (UML ) . UML. . . , . : , , . . : , , . . . . , UML. UML -, . . UML . : -, -, , , , , .

8

0.1. ( 3) . . . xml. 1 , + 2 . 4, , . Python ( telephonedir.py CSV1 ( , load tdcsv.py ) Postgresql ( knoda, load tddb.py ) XML ( kxmleditor, ).

)

load tdxml.py

1

CSV ( . Comma Separated Values , ) , . . (delimiter), , (,), (;), . ("); .

9

Web- ( index.tmpl ODF2 ( tdods.py 5 tdodt.py ).

tdweb.py

)

load save . load save CSV Postgresql XML. 2 . .

2

OpenDocument Format (ODF, OASIS Open Document Format for Oce Application ) , ( , ), , , , .

10

0.2. 0.2.1. . . . , , . (), . (, , ). (, , ). (). (, , ).

, . ( ).

0.2.2. . (), .

.

11

Collaborator :

code , , , ; family ; name ;

patronym . : __init__ , ; __hash__ ; __eq__ , ,

e iu _ (viid e )siS ( ob _ s nd (( e )ai (r st e )_ iu _ ) __ ndd ( (t_ (vd n _ q oba _ __ )siS () )q _a d h _p _ i_ or h_ _r_ a_ )a (h rb (h __ o _i a a n ) t_ )o )_ d e ne nc h_ p oi_ vti es_ ro r)ql o_ alti __ h yl ta C e ooo oyn sots rnall rbr o_c ep_ m mli ch_ tel ob e m d_ e oa au Rhc ae sbi_ de(eltmaf ndi_ iso ira iin _T nb _ sS ( e va _ )l ou ( n )q h _ n id ) p_ n p e y(e eo es T_i e )) h n ( d p e(t_ e(e nu o_ )a h e h_ d v T _ _ ehl_ pot_ np_ n_e ypii obli oai T__ e(e p_ n) ots e_ h sii_ e n e he hd sdi _t eet rht _l spll nT e o ip ) sT ee (n o _t ee D l sl h_ )q __ _ n )t_ ( e_ T_a ypl y yp_pha pt emieod t phnsnd ed e(h Te e na ee a oT T s ei_ ) a e ( t l12

. __hash__ __eq__ . Subdivision, : name ; collaborators ; subdivisions . , __hash__ __eq__ subdivisions, : __iter__ , ; add ; addSubdivision ; iterSubdivision . . TelephoneType . TelephoneTypes TelephoneType. Telephone . Telephones. TelephoneRecord . . 1-4 - Python [?] .1 2 3 4 5 6 7 8 9 10 11 12 13 # -*- coding: utf-8 -*""" """ import itertools class Collaborator: """ """ def __init__(self, code, family, name, patronym):

13

14 15 16 17 18 19 20 21 22 23 24 25 26

self.code = code self.family = family self.name = name self.patronym = patronym def __str__(self): return "%s %.2s. %.2s." % (self.family, self.name, self.patronym) def __hash__(self): return hash(self.code) def __eq__(self, other): return self.code == other.code

1 . , 3-5, . 7 itertools . Collaborator. hash Python.28 class Subdivision: 29 """ 30 31 """ 32 def __init__(self, name): 33 self.name = name 34 self.collaborators = set() 35 self.subdivisions = set() 36 37 def __hash__(self): 38 return hash(self.name) 39 40 def __eq__(self, other): 41 return self.name == other.name 42 43 def __iter__(self): 44 i = iter(self.collaborators) 45 for s in self.subdivisions: 46 i = itertools.chain(i, iter(s)) 47 return i 48 49 def add(self, collaborator): 50 assert collaborator not in self 51 self.collaborators.add(collaborator) 52 53 def addSubdivision(self, subdivision): 54 assert subdivision not in self.subdivisions

14

55 56 57 58 59 60 61 62

assert not set(self).intersection(set(subdivision)) self.subdivisions.add(subdivision) def iterSubdivision(self): i = iter(self.subdivisions) for s in self.subdivisions: i = itertools.chain(i, s.iterSubdivision()) return i

Subdivision __iter__ iterSubdivision . add 50 . __iter__ Python. 54 , 55 .64 class TelephoneType: 65 """ 66 67 """ 68 def __init__(self, name): 69 self.name = name 70 71 def __hash__(self): 72 return hash(self.name) 73 74 def __eq__(self, other): 75 return self.name == other.name

.77 class TelephoneTypes(set): 78 """ 79 80 """ 81 def add(self, telephoneType): 82 assert telephoneType not in self 83 set.add(self, telephoneType)

82 .85 class Telephone: 86 """ 87 88 """ 89 def __init__(self, telephone, telephoneType): 90 self.number = telephone

15

91 92 93 94 95 96 97

self.type = telephoneType def __hash__(self): return hash(self.number) def __eq__(self, other): return self.number == other.number

.99 class Telephones(set): 100 """ 101 102 """ 103 def __init__(self, telephoneTypes): 104 set.__init__(self) 105 self.telephoneTypes = telephoneTypes 106 107 def add(self, telephone): 108 assert telephone not in self 109 assert telephone.type in self.telephoneTypes 110 set.add(self, telephone)

108 109 telephoneTypes.112 class TelephoneRecord: 113 """ 114 115 """ 116 def __init__(self, telephone, collaborator): 117 self.telephone = telephone 118 self.collaborator = collaborator 119 120 def __hash__(self): 121 return hash((self.telephone, self.collaborator)) 122 123 def __eq__(self, other): 124 return self.telephone == other.telephone and \ 125 self.collaborator == other.collaborator

.127 class TelephoneDir(set): 128 """ 129 130 """ 131 def __init__(self, telephones, subdivision):

16

132 133 134 135 136 137 138 139 140

set.__init__(self) self.telephones = telephones self.subdivision = subdivision def add(self, telephoneRecord): assert telephoneRecord.telephone in self.telephones assert telephoneRecord.collaborator in self.subdivision assert telephoneRecord not in self set.add(self, telephoneRecord)

137 , . , 138, . 139 , .142 if __name__ == __main__: 143 import tdcsv 144 145 telephoneDir = tdcsv.load() 146 147 for s in telephoneDir.subdivision.iterSubdivision(): 148 if s.name == : 149 for r in telephoneDir: 150 if r.collaborator in s and r.collaborator.family.find() >= 0: 151 print r.telephone.number, "%s %s. %s."% \ 152 (r.collaborator.family, r.collaborator.name[:2], r.collaborator.patronym[:2]) 153 break 154 155 for s in telephoneDir.subdivision.iterSubdivision(): 156 if s.name == . : 157 for r in telephoneDir: 158 if r.collaborator in s and r.collaborator.family.find() >= 0: 159 print r.telephone.number, "%s %s. %s."% \ 160 (r.collaborator.family, r.collaborator.name[:2], r.collaborator.patronym[:2]) 161 break

Python , __name__ __main__ (. 142). 143 CSV, 145 . 147153 , . 155161 , , . , . .

17

51-57-39 . . 51-18-84 . .

, . CSV 7 - Python [?] . subdivision.csv . ssu.csv

subdivision

. .

ssu

UTF8 . load tdcsv.py CSV.

30 def load(): 31 subdivision = {} 32 for rec in csv.reader(open(os.path.join(os.curdir, subdivision.csv), rb), delimiter=;): 33 subdivision[rec[0]] = telephonedir.Subdivision(rec[0]) 34 if rec[1]: 35 subdivision[rec[1]].addSubdivision(subdivision[rec[0]]) 36 else: 37 telephoneDir = telephonedir.TelephoneDir(telephonedir.Telephones(telephonedir.TelephoneTypes( subdivision[rec[0]]) 38 39 telephones, telephoneTypes, collaborators = {}, {}, {} 40 for rec in csv.reader(open(os.path.join(os.curdir, ssu.csv), rb), delimiter=;): 41 if rec[6] not in telephoneTypes: 42 telephoneTypes[rec[6]] = telephonedir.TelephoneType(rec[6]) 43 telephoneDir.telephones.telephoneTypes.add(telephoneTypes[rec[6]]) 44 if rec[0] not in telephones:

18

45 telephones[rec[0]] = telephonedir.Telephone(rec[0], telephoneTypes[rec[6]]) 46 telephoneDir.telephones.add(telephones[rec[0]]) 47 key = int(rec[1]) 48 if key not in collaborators: 49 collaborators[key] = telephonedir.Collaborator(key, rec[2], rec[3], rec[4]) 50 subdivision[rec[5]].add(collaborators[key]) 51 telephoneDir.add(telephonedir.TelephoneRecord(telephones[rec[0]], collaborators[key])) 52 53 return telephoneDir

subdivision 31 , subdivision.csv . 39

ssu.csv . . save .

SQL Postgresql telephonedir.sql .

1 CREATE TABLE ( 2 SERIAL PRIMARY KEY, 3 TEXT,

19

4 INTEGER REFERENCES () DEFAULT NULL, 5 UNIQUE(, ) 6 ); 7 8 CREATE TABLE ( 9 INTEGER PRIMARY KEY, 10 INTEGER REFERENCES () DEFAULT NULL, 11 TEXT, 12 TEXT, 13 TEXT 14 ); 15 16 CREATE TABLE ( 17 SERIAL PRIMARY KEY, 18 TEXT, 19 UNIQUE() 20 ); 21 22 CREATE TABLE ( 23 SERIAL PRIMARY KEY , 24 INTEGER REFERENCES (), 25 TEXT 26 ); 27 28 CREATE TABLE ( 29 SERIAL PRIMARY KEY, 30 INTEGER REFERENCES (), 31 INTEGER REFERENCES (), 32 UNIQUE(, ) 33 );

create-db BASH telephonedir1 SQL . knoda . dump dump.tar ,

restore . 10 - Python [?] . Postgresql 3 tddb.py psycopg2. 7 , 13 .1 # -*- coding: utf-8 -*-

20

2 3 import psycopg2 as db 4 5 import telephonedir 6 7 def createConn(): 8 conn = db.connect(host=localhost, database="telephonedir1", user="postgres") 9 db.threadsafety=2 10 curs = conn.cursor() 11 return (db, conn, curs) 12 13 def closeConn(db, conn, curs): 14 conn.close()

87 . for 88 . , psycopg2 DBI-2.0 rec . Python, , . NULL Python None.75 def load(): 76 db, conn, curs = createConn() 77 78 sql = """ 79 SELECT 80 , 81 , 82 83 FROM 84 """ 85 subdivisions, subdivisionOwners = {}, {} 86 try: 87 curs.execute(sql) 88 for rec in curs.fetchall(): 89 s = telephonedir.Subdivision(rec[1]) 90 subdivisions[rec[0]] = s 91 subdivisionOwners[s] = rec[2] 92 except db.DatabaseError, x: 93 print x 94 conn.rollback() 95 else: 96 conn.commit() 97 for s, i in subdivisionOwners.iteritems(): 98 if i: 99 subdivisions[i].subdivisions.add(s)

21

100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

else: subdivision = s sql = """ SELECT , , , , FROM """ collaborators = {} try: curs.execute(sql) for rec in curs.fetchall(): c = telephonedir.Collaborator(rec[0], rec[2], rec[3], rec[4]) collaborators[rec[0]] = c subdivisions[rec[1]].add(c) except db.DatabaseError, x: print x conn.rollback() else: conn.commit() sql = """ SELECT , FROM """ telephoneTypes = {} try: curs.execute(sql) for rec in curs.fetchall(): telephoneTypes[rec[0]] = telephonedir.TelephoneType(rec[1]) except db.DatabaseError, x: print x conn.rollback() else: conn.commit() sql = """ SELECT , ,

22

147 FROM 148 """ 149 telephones = {} 150 try: 151 curs.execute(sql) 152 for rec in curs.fetchall(): 153 telephones[rec[0]] = telephonedir.Telephone(rec[2], telephoneTypes[rec[1]]) 154 except db.DatabaseError, x: 155 print x 156 conn.rollback() 157 else: 158 conn.commit() 159 160 telephoneDir = telephonedir.TelephoneDir(telephonedir.Telephones(telephonedir.TelephoneTypes( subdivision) 161 for t in telephoneTypes.itervalues(): 162 telephoneDir.telephones.telephoneTypes.add(t) 163 for t in telephones.itervalues(): 164 telephoneDir.telephones.add(t) 165 166 sql = """ 167 SELECT 168 , 169 170 FROM 171 """ 172 try: 173 curs.execute(sql) 174 for rec in curs.fetchall(): 175 telephoneDir.add(telephonedir.TelephoneRecord(telephones[rec[0]], collaborators[rec[1]])) 176 except db.DatabaseError, x: 177 print x 178 conn.rollback() 179 else: 180 conn.commit() 181 182 closeConn(db, conn, curs) 183 184 return telephoneDir

XML XML

23

t elephonedir1

telephonedir.xml kxmleditor. 7 - Python [?] . . telephonedir.xml load tdxml.py SAX, XML save DOM. Web tdweb.py web- , .

24

:python tdweb.py http://localhost:8080. http://"ip ":8080 web- "Ctrl-C" / . Web- Python: Cheetah CherryPy. index.tmpl html-. html $ $() ${}. #.1 #encoding utf-8 2 3 4 5 6 7

25

8 9 : ${len($telephoneDir)} 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #if $subdivision == 0 33 34 #else 35 36 #end if 37 #for $i in range(1, len($subdivisions)) 38 #if $i == $subdivision 39 $(subdivisions[$i].name) 40 #else 41 $(subdivisions[$i].name) 42 #end if 43 #end for 44 45 46 47 48 49 50 51

26

52 53 54 #if $telephoneType == 0 55 56 #else 57 58 #end if 59 #for $i in range(1, len($telephoneTypes)) 60 #if $i == $telephoneType 61 $(telephoneTypes[$i].name) 62 #else 63 $(telephoneTypes[$i].name) 64 #end if 65 #end for 66 67 68 69 70 71 #set $pageSize = 20 72 73 74 # 75 76 77 78 79 80 81 82 #set $r=2 83 #for i in range($page*$pageSize, min(($page+1)*$pageSize, len($telephoneDir))) 84 85 ${i+1} 86 ${telephoneDir[i].collaborator} 87 ${telephoneDir[i].telephone.number} 88 ${telephoneDir[i].telephone.type.name} 89 90 #if $r == 1 91 #set $r = 2 92 #else 93 #set $r = 1 94 #end if 95 #end for 96

27

97 98 #if $page == 0 99 #set $prevPage = " " 100 #else 101 #set $prevPage =".

200

. 9.8.:

. . , . (. 9.8): , ; , ( ); , ( ); , . , . , . , . ( ). .

201

. 9.9.:

. . . () , , , . : , . , . UML. , , , , . , ( ) . , , , , . , . , , . .9.9 . . . , .

202

UML . . , , , . , , , . . , . (. ).

203

10. UMLUML . - - , - . , , . , , . ( , ). ( , use case diagrams) . ( , activity diagrams) - . (interaction diagrams) , (sequence diagrams) (collaboration diagrams). (statechart diagrams) . (class diagrams) , . (database diagrams) , , , .. (component diagrams) , , . ( , deployment diagrams) , . . 10.1 UML. " ..."(, ).

204

. 10.1.: UML

UML. UML.

10.1. - - - , .. . - . , - : ( , Actor) , , ; ( , .. ) ( ). . , ( ), . , . , , . , . . . , ()

205

. 10.2.:

(). . , (). . (. 10.2). . . . 10.2 . " " , (. 10.3), . : , , ; ; ; .

206

. 10.3.: -,

207

. 10.4.:

, -, . , (. 10.4). , , , . . " . (" ""), () ( , ). , . -. , - .

208

. 10.5.: -

. 10.6.:

.

10.2. - -, - . - , -, , -. - " " . 10.5. . : , , . , " " " "(. 10.6). " " (). - (. 10.7). (), , , , .

209

. 10.7.:

. 10.8.:

, , .

10.3. , -, , . . 10.8 " ". , () . " " " " , " "

210

" " . ( ), . , , () : , , . - , . , - . , , , , , .

10.4. , , . , . -. , . , : ( , , / ); ; ; ( , ); ( ); ; ;

211

. 10.9.:

, ; . - . Rational Unied Process 10.1. . 10.9 - " ". , , . , . . " "(. . 10.4, . 10.7) " ". (, " ") , .. . ( . 10.9 ): "" , ;

212

10.1.:

213

- - ,

. 10.10.:

"" , . " " . , (. 10.10). " " " ". , , , . . : , -; ( , , .) , . , . UML . . .

214

. 10.11.:

, , . 10.11. , , , . -, , . , , , .

10.5. : ; ; ; ( "--" "--" );

215

. 10.12.:

. , (. 10.12). , , (, " ). (, ) (, , , , ). , , . : ; ; . , . , . , , (. 10.13). ( ). UML (Prole for Database Design), : ; , ;

216

. 10.13.:

() , ; (FK) , ; , ; , ; , , ; , ; . . 10.14 , ""(. 10.3, . 10.6) " "(. 10.8). , " " "". : ( (PK,FK) , ; (Check) , ; (Unique) , , );

217

. 10.14.:

, ; . .

10.6. . . 10.15 "" (Tablespace) . UML, , : ; , ; , ; , ; . ( ) (. 10.16).

218

. 10.15.:

, , . : ( ) () . : " = + ". -, " "(), . " " ( ), , () . , UML. , UML . , , , , . : , , , ,

219

. 10.16.:

, .. UML , . .

220

[1] Iso/iec 12207:1995. [2] . 34.601-90. 1997. [3] xxx. // . 2001. . 9. [4] . . . : , 2000. [5] .., .., .. . - - ., 2005. [6] ., . . . - - ., 2005. [7] . . http://www.carabisolutions.sp.ru.

221

2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. . . . . . . . . . . . . . . . . 2.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1. - . . . . . . . . 4.2. - . . . . . . . . . . . 4.3. - . . . . . . . . . . . . . . . . . . . . . . . . . 4.4. ( ) . . . . . . . . . . . . . . . . 4.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6. . . . . . . . . . . . . . . . . . . . . . . . . . 4.7. ( ) . . . . . . . . . . . . . 4.8. - . . . . . . . . . . . . . . . 4.9. . . . . . . . . . . . 4.10. . . . . . . . 4.11. . . . . . . . . . . . . . . . . . . . . . . . . . . 4.12. . . . . . . . . . . . . . . . . . . . . . . . . 4.13. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.14. 4.15. . . . . . 5.1. 5.2. 5.3. 5.4. 5.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - - - - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 75 75 109 112 113 114 115 116 117 117 118 119 119 120 123 124 125 129 132 136 138 138

6.1. 7.1. 7.2. 7.3. 7.4. 7.5.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 . . . . . . . . . . 165 167 167 168 174

. . . . . . . . . . . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8.1. . . . . . . . . . . . . . . . . . . . 180 8.2. . . . . . . . . . . . . . . . . . . . . 180 8.3. . . . . . . . . . . . . . . . . . . . 180

222

8.4. 8.5. 8.6. 8.7. 8.8. 9.1. 9.2. 9.3. 9.4. 9.5. 9.6. 9.7. 9.8. 9.9.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

181 184 185 185 186 193 195 196 198 199 199 200 201 202 205 206 207 208 209 209 210 210 212 214 215 216 217 218 219 220

10.1. UML . . . . . . . . . . . . . . . . . . . . . 10.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3. -, . . . . 10.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.5. - . . . . . . . . . . . . 10.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.7. . . . . . 10.8. . . . . . . . . . . . . . . . . . . . . . . . . . 10.9. . . . . . . . . . . . . . . . . . . . . . . . . . 10.10. . . . . . . 10.11. . . . . . . . . . . . . . . . . . . . . . . 10.12. . . . . . . . . . . . . . 10.13. . . . . . . . . . . . . . . . . . . . . . . . 10.14. . . . . . . . . . . . . . . . . . . . . . . . . . . 10.15. . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.16. . . . . . . . . . . . . . . . . . . . .

223

3.1. (ISO/IEC 12207) . . . . . . . 94 10.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

224

, 15 , 15 , 15 , 15 , 15 , 17 -, 15 -, 15 , 17 , 17 , 15 , 15 , 15 , 17 , 15 , 15 , 45 , 13 , 21 , 21 , 21 , 47 , 31 , 37 , 21 CRC, 47 UnitTest, 53 UserStory, 53 XP XP XP XP , 45 , 47 , 45 , 47 XP XP XP XP XP XP , 47 , 45 , 45 , 45 , 45 , 45

225