Professional Documents
Culture Documents
01 Cackinhnghiemptpm
01 Cackinhnghiemptpm
Khám phá các triệu chứng và các nguyên nhân cốt lõi của các
vấn đề trong phát triển phần mềm
Trình bày 6 kinh nghiệm tốt của Rational trong quá trình phát
triển phần mềm
Xem xét cách sử dụng các kinh nghiệm này để giảI quyết các
vấn đề trong phát triển phần mềm
Tester Release
Engineer
Project
Manager
Developer
Tester Release
Engineer
Root Causes
Symptoms
insufficient requirements
end-user needs
ambiguous communications
changing
brittle architectures
requirements
overwhelming
modules don’t fit
complexity
hard to maintain
undetected inconsistencies
late discovery
poor testing
poor quality
subjective
poor performance assessment
colliding waterfall
developers development
build-and-release uncontrolled change
Diagnose insufficient automation
Sử dụng
Quản trị Mô hình hóa Kiểm định
kiến trúc trực quan
các y/c chất lượng
Component
Project
Manager
Developer
Develop Iteratively
Tester
Use
Manage Component Model Verify
Requirements Architectures Visually Quality
Release
Engineer
Control Changes
Develop Iteratively
Use
Manage Model Verify
Component Visually
Requirements Architectures Quality
Control Changes
Một thiết kế ban đầu có thể không hoàn chỉnh so với các yêu
cầu chính
Việc phát hiện trễ các thiếu sót trong bản thiết kế sẽ làm tăng
giá thành, tốn thời gian và thậm chí làm hủy bỏ dự án
$$$
Thời gian và tiền bạc chi ra để cài đặt một thiết kế sai
là không thể bù đắp
Requirements
Analysis
Design
Subsystem
Testing
System Testing
T I M E
Requirements
R Analysis
I
Design
S
K Code & Unit
Testing
Subsystem
Testing
System Testing
T I M E
T I M E
Các vòng lặp đầu dành cho các vấn đề nhiều rủi ro
Mỗi vòng lặp sinh ra một phiên bản với một sự bổ sung cho hệ
thống
Mỗi vòng lặp bao gồm cả việc tích hợp và kiểm chứng
K Iterative Waterfall
Các rủi ro chính được giải quyết trước khi có các phát triển lớn
Các vòng lặp đầu tiên cho phép nhận feedback
Việc kiểm chứng và tích hợp diễn ra liên tục
Các cột mốc cục bộ sẽ định ra các tiêu điểm ngắn hạn
Sự tiến triển được đo bằng bản cài đặt
Các cài đặt bộ phận có thể triển khai riêng
Phases
Process Workflows Inception Elaboration Construction Transition
Business Modeling
Requirements
Analysis & Design
Implementation
Test
Deployment
Supporting Workflows
Configuration & Change Mgmt
Project Management
Environment
Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter.
Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1
Iterations
Các kinh nghiệm quí của CNPM 20
Qui trình lặp giải quyết các vấn đề
Nguyên nhân cốt lõi Cách giải quyết
Không đủ các yêu cầu đốI Nhận và khuyến khích các
với hệ thống feedback từ người dùng
Trao đổi thông tin mơ hồ Các hiểu lầm nghiêm trọng
được làm rõ sớm
Kiến trúc kém bền vững
Độ phức tạp quá cao Tập trung phát triển các khái
niệm chứa nhiều rủi ro trước
Đánh giá chủ quan
Đánh giá khách quan thông
Các mâu thuẫn không được qua test
phát hiện
Mâu thuẫn đc phát hiện sớm
Kiểm chứng kém
Qui trình thác nước Bắt đầu test sớm
Các thay đổi không kiểm soát Các rủi ro được xác định và
Thiếu công cụ tự động giải quyết sớm
Develop Iteratively
Use
Model Verify
Manage Component Visually Quality
Requirements Architectures
Control Changes
Một yêu cầu là một điều kiện hoặc khả năng mà hệ thống phải
tuân theo/có
Quản lý yêu cầu là một tiếp cận có hệ thống để:
Suy dẫn, tổ chức, và tạo sưu liệu về các yêu cầu chức năng
đối với hệ thống, và
Thiết lập và duy trì sự thỏa thuận giữa customer/user và
project team liên quan đến các thay đổi về yêu cầu đối với
hệ thống
Đích
Phân tích vấn đề và suy dẫn ra các nhu cầu của người dùng
một cách có hiệu quả
Đạt được thỏa thuận với customer/user về các yêu cầu đối với
hệ thống
Mô hình hóa sự tương tác giữa user và system
Thiết lập một đường ranh giới (baseline) và qui trình kiểm soát
thay đổi (change control process)
Duy trì khả năng theo vết tiến và lùi các yêu cầu đốI với hệ
thống
Sử dụng một qui trình lặp
Develop Iteratively
Control Changes
Kiến trúc phần mềm chứa đựng các quyết định quan trọng về
tổ chức của hệ thống phần mềm
Sự lựa chọn các phần tử cấu trúc và interface của chúng để
cấu thành một hệ thống
Hành vi được mô tả như sự cộng tác giữa các phần tử này
Sự tổng hợp của các phẩn tử cấu trúc và hành vi này thành
các subsystem lớn hơn
Kiểu kiến trúc định hướng cho tổ chức này, cho các phần tử
cấu trúc và interface của chúng, các công tác, và sự tổng
hợp giữa chúng
Kiến trúc phần mềm liên quan đến cấu trúc, hành vi và ngữ
cảnh (context):
Cách dùng (Usage)
Chức năng (Functionality)
Hiệu năng (Performance)
Tính co dãn (Resilience)
Khả năng tái sử dụng (Reuse)
Tính dễ hiểu (Comprehensibility)
Các ràng buộc về kinh tế và kỹ thuật và các dung hòa
Tính thẩm mỹ (Aesthetics)
Các kiến trúc tốt thỏa mãn các yêu cầu đối với chúng, là tính
đàn hồi, và component-based
Một kiến trúc đàn hồi cho phép
Tăng cường khả năng dễ bảo trì và dễ mở rộng
Khả năng tái sử dụng với lợi ích kinh tế cao
Phân chia công việc rõ ràng trong đội ngũ phát triển phần
mềm
Gói gọn các phụ thuộc phần cứng & hệ thống
Một kiến trúc component-based cho phép
Tái sử dụng hoặc tùy chỉnh các component sẵn có
Chọn lựa giữa hàng ngàn component thương mại trên thị
trường
Tiến hóa không ngừng phần mềm đang tồn tại
User Interface
Mechanisms
Key:
- Purchased Oracle Vantive
- Built
- New
Develop Iteratively
Use
Manage Component Verify
Requirements Model Quality
Architectures Visually
Control Changes
Nắm bắt cấu trúc và hành vi của các thành phần kiến trúc
Thể hiện cách mà các phần tử hệ thống khớp với nhau
Che dấu hoặc phơi bày chi tiết theo nhu cầu công việc
Duy trì tinh nhất quán giữa thiết kế và cài đặt
Tăng cường trao đổi thông tin rõ ràng
Scenario State
Scenario
Diagrams State
Diagrams
Sequence
Diagrams State
Diagrams
Diagrams Models Diagrams
Scenario Component
Scenario
Diagrams
Component
Diagrams
Component
Collaboration
Diagrams Deployment Diagrams
Diagrams Diagrams Diagrams
DocumentList
FileMgr Doc ument
add( )
name : int
fetchDoc( ) delete( )
docid : int
sortByName( ) numField : int
Writing
add file [ numberOffile==MAX ] /
get( ) flag OFF
open( ) read() fill the
close( ) code..
FileList read( )
sortFileLis t( ) Openning
use-case 1 add( )
fList create( )
fillDocument( )
dele te( )
1 close file
Actor A Actor B
close file
Closing
Reading
rep
use-case 2
<<entity>>
File
Repository
Customer
(from Persis tenc e) GrpFile
read( )
name
name : char * = 0
read( )
readDoc( )
addr
open( )
readFile( )
create( )
receive()
fillFile( )
use-case 3 withdraw()
Domain fetch()
Expert UI
send()
Deployment
MFC Class Diagram
DocumentApp
ºÐ»ê ȯ°æÀÇ Çϵå¿þ¾î¹× ³×Æ®¿÷À¸·ÎÀÇ Á¤º¸ ½Ã½ºÅÛ ¿¬°á ¸ðµ¨
- À©µµ¿ì 95 : Ŭ¶óÀ̾ðÆ®
- À©µµ¿ì NT: ÀÀ¿ë¼ ¹ö
- À¯´Ð½º ¸Ó½Å: ÀÀ¿ë ¼ ¹ö ¹× µ¥ÀÌŸ ¼¹ ö, Åë½Å ¼¹ ö
- IBM ¸ÞÀÎÇÁ·¹ÀÓ: µ¥ÀÌŸ ¼¹ ö, Åë½Å ¼¹ ö
RogueWave
Repository DocumentList Window95 Windows95
9: sortByName ( )
Persistence Windows95
global
¹®¼°ü¸®
FileManager Ŭ¶óÀ̾ðÆ®.EXE
User Interface
¹®¼°ü¸® ¾ÖÇø´
mainWnd : MainWnd
Package
Windows
NT
Definition
L
Document Solaris
2: fetchDoc( )
¹®¼°ü¸® ¿£Áø.EXE
4: create ( )
gFile : GrpFile
Diagram
Alpha
8: fillFile ( ) UNIX
ÀÀ¿ë¼¹ ö.EXE
Windows
NT
fileMgr : FileMgr
Mainframe
3: create ( )
File FileList
6: fillDocument ( )
µ¥ÀÌŸº£À̽º¼ ¹ö
7: readFile ( )
5: readDoc ( )
document : Document
repository : Repository
2: fetchDoc( )
3: create ( )
4: create ( )
5: readDoc ( )
7: readFile ( )
8: fillFile ( )
Sequence Diagram
Executable System
risk targeting
deployment
risk targeting
deployment
Cái gì thay đổi? Những thay đổi này được phép không?
Develop Iteratively
Use
Manage Model
Component Visually Verify
Requirements Architectures Quality
Control Changes
Chi phí tìm kiếm và sửa chữa các vấn đề của phần mềm sẽ tăng
hàng trăm, hàng ngàn lần sau khi phát triển
Cost
Development Deployment
Một
One
chu
Manual
trình test
Testthủ
Cycle
công
13,000
13,000
lầnTests
Test 2 Weeks
2 Tuần 6 People
6 Người
Test
tự động
13,000 Test
6 giờ Chạy ngày càng nhiều test hơn
1 người
Độ tin cậy Ứng dụng của tôi có làm mất bộ Các công cụ phân tích và các
nhớ? thiết bị coding
Hiệu năng ứng Ứng dụng của tôi có hồi đáp Kiểm tra hiệu năng của mỗi
dụng hợp lệ? use-case/scenario đã cài đặt
Develop Iteratively
Use
Manage Model Verify
Component Visually
Requirements Architectures Quality
Control Changes
Nhiều developer
Nhiều team
Nhiều vị trí
Nhiều vòng lặp
Nhiều release
Nhiều project
Nhiều platform
Phát triển theo qui Dự án chỉ tiến triển khi các thay đổi
trình lặp được kiểm soát
Quản lý yêu cầu Để loại bỏ sự dãn phạm vi, đánh giá
ảnh hưởng của mọi thay đổi dự kiến
trước khi chấp nhận
Dùng kiến trúc Các Component phải đáng tin cậy, i.e.,
component tìm thấy phiên bản đúng đắn của tất cả
các phần hợp thành
Để bảo đảm sự hội tụ, phải tăng
Mô hình hóa trực dần kiểm soát các model khi các
quan thiết kế ổn định
Test chỉ có ý nghĩa nếu các version
Kiểm định chất các phần tử đang test được biết rõ và
lượng các phần tử được bảo vệ trước các
thay đổi
Các kinh nghiệm quí của CNPM 54
Các vần đề được giải quyết nhờ kiểm soát thay đổi
Nguyên nhân cốt lõi Cách giải quyết
Thiếu y/c đ/v HT Requirements change workflow
được xác định và lặp lại đi lặp lại
Truyền tin mơ hồ Các Change request làm cho thông
Kiến trúc kém bền tin trao đổi rõ ràng
Vùng làm việc biệt lập giảm các trở
Quá phức tạp ngại do làm việc song song
Đánh giá chủ quan Thống kê về mức độ thay đổi là độ
đo tốt cho các đánh giá khách quan
Mâu thuẫn chưa được về trạng thái của dự án
xác định
Vùng làm việc chứa tất cả các
Test kém artifact dễ tạo sự nhất quán
Qui trình thác nước Kiểm soát được sự lan truyền các
thay đổi
Thay đổi không thể
Các thay đổi được duy trì trong một
kiểm soát hệ thống mạnh mẽ, có khả năng tùy
chỉnh
Thiếu ccụ tự động
Các kinh nghiệm quí của CNPM 55
Các kinh nghiệm hỗ trợ lẫn nhau
Project
Develop Iteratively
Manager
Developer
Use Model
Manage Component Visually Verify
Requirements Architectures Quality
Tester
Control Changes
Release
Engineer
Các kinh nghiệm quí của CNPM 57