《軟件架構理論與實踐》
架構師書庫

軟件架構理論與實踐
李必信 廖力 王璐璐 孔祥龍 周穎 編著
前 言
軟件架構(Software Architecture,SA)設計是成熟軟件開發過程中的一個重要環節,它不僅是連接用戶需求和進一步設計、實現的橋梁,也是軟件開發早期階段質量保證的關鍵步驟。無數例子告訴我們,那些忽視SA設計質量的企業最終的教訓總是慘痛的。SA是軟件系統的一種整體的高層次結構表示,是系統的骨架和根基,決定了軟件系統的健壯性和生命周期長短。“根基不穩,大廈將傾”這句話在軟件系統中同樣適用。
近幾年,在與大型企業的合作過程中筆者更加感覺到SA的重要性,大量的試驗已經證明SA不僅與軟件產品的質量屬性(如安全性、可靠性、可維護性等)有關,還與軟件產品的壽命有關。一個設計不夠完善的SA存在脆弱性問題,容易招致惡意攻擊,嚴重時會帶來安全風險;一個設計不夠完善的SA也有可能存在難以維護和擴展的問題,導致升級困難,影響軟件產品的壽命,等等。
如你所知,在物理世界中,房屋、橋梁、汽車的架構等都是決定它們質量好壞和生命周期長短的重要因素之一;同樣,在軟件世界中,SA也是決定軟件質量好壞和軟件生命周期長短的重要因素之一。好的SA會使得軟件自身的性能、可靠性、安全性、可維護性等質量指標能夠很好地滿足用戶的需求,不好的SA會導致所有這些指標或部分指標達不到用戶要求。可見,“SA設計非常重要!那么,如何在實踐中設計和實現一個好的SA,如何評價某個SA的好與不好,以及如何控制SA的設計和演化過程,以便獲得質量更高的SA?這些都是軟件利益相關者日常關注的問題。
本書全面介紹了SA,從SA發展的歷史、現在到可能的未來,從SA的基礎理論方法到技術手段,從SA的設計開發實踐到質量保障實踐,從靜態SA到動態SA再到運行態SA等,涵蓋了SA涉及的幾乎所有必要的知識點。本書包括三篇:基礎理論篇(上篇)包含6章內容,詳細介紹了SA的基礎理論方法和技術手段;工程實踐篇(中篇)包含10章內容,詳細介紹了SA的開發實踐和質量保障實踐;未來主題篇(下篇)包含7章內容,詳細介紹了SA的新研究主題、新業界關注點以及SA未來發展趨勢等。
本書的讀者對象如下:
作為高等學校軟件工程、計算機科學技術、網絡空間安全等相關學科的入門級教科書,面向高年級本科生和研究生;
作為SA研究人員的參考書,本書討論的SA度量、仿真、驗證、評估等各種質量保障技術,以及解耦、技術債、演化、重構等各種軟件架構主題,為相關研究人員提供了很好的啟迪和行動指南;
作為軟件架構師及其他工程技術人員的工具書,本書針對SA進行全方位介紹,涵蓋了與SA相關的幾乎所有知識點,為系統地學習和熟練掌握SA提供了所需的各方面知識。
由于本書的定位是軟件架構入門級教材,我們將為廣大教師和學生提供豐富的教學和學習資源(可從華章網站www.hzbook.com獲取),包括課件、思考題解答、案例庫、訓練題庫,以及部分在線的軟件架構監控、仿真、度量、驗證和重構等原型工具。
參與本書撰寫的人員主要是來自東南大學軟件工程研究所、計算機科學與工程學院的教師,包括李必信博士、廖力博士、王璐璐博士、周穎博士、孔祥龍博士等,其中李必信博士負責規劃全書內容和結構,并參與所有章節的撰寫,其他幾位老師分別參與部分章節的撰寫以及全書的校訂和完善工作。軟件工程研究所的部分博士后、博士生和碩士生參與了文字校對和畫圖等工作,他們是李宗花、董瑞志、劉輝輝、王桐、熊壬浩、王麗、宋啟威、韓偉娜、李慧丹、謝仁松、楊安奇、杜鵬程、尹強、宋震天、汪小飛、蘇曉威、段鵬飛、王家慧、湯立輝、杜成杰、程昕云、張理想、張春光、廖飛龍、許周等。
在本書寫作過程中,還得到了來自武漢大學的應時教授和梁鵬教授、大連理工大學的江賀教授、南京大學的鄭滔教授、華為公司的吳文勝先生的指導和幫助,在此對他們的辛苦勞動表示衷心的感謝。
李必信
說明:
1)建議課堂教學全部在多媒體機房內完成,實現“講-練”結合。
2)建議教學分為核心知識技能模塊(前16章的內容)和技能提高模塊(第17~23章的內容),不同學校可以根據各自的教學要求和計劃學時數對教學內容進行取舍。
3)建議本科生的教學內容是第1~16章必修,第17~23章選修;研究生的教學內容是第1~23章全部必修。
目錄
前言
教學建議
上篇 基礎理論篇
第1章 軟件架構概述 …… 2
1.1 軟件架構產生的背景 …… 2
1.2 軟件架構的主要思想和特征 …… 3
1.2.1 軟件架構的主要思想 …… 3
1.2.2 軟件架構的特征 …… 3
1.3 軟件架構的發展階段 …… 4
1.3.1 基礎研究階段(1968—1994) …… 4
1.3.2 概念體系和核心技術形成階段(1991—2000) …… 6
1.3.3 理論體系完善與發展階段(1996年至今) …… 7
1.3.4 普及應用階段(1999年至今) …… 7
1.4 軟件架構研究和應用現狀 …… 7
1.4.1 軟件架構理論和方法研究 …… 8
1.4.2 軟件架構的應用研究 …… 11
1.5 本章小結 …… 13
思考題 …… 13
參考文獻 …… 14
第2章 軟件架構的概念 …… 17
2.1 引言 …… 17
2.2 組成派的主要定義 …… 18
2.3 決策派的主要定義 …… 19
2.4 其他定義 …… 20
2.5 參考定義框架 …… 20
2.6 本章小結 …… 21
思考題 …… 22
參考文獻 …… 22
第3章 軟件架構模型?…… 23
3.1 引言 …… 23
3.2 軟件架構的可視化建模方法 …… 24
3.2.1 基于圖形可視化的建模方法 …… 24
3.2.2 基于UML的建模方法 …… 25
3.3 軟件架構的形式化建模方法 …… 31
3.3.1 基于形式化規格說明語言的建模方法 …… 32
3.3.2 基于UML的形式化建模方法 …… 36
3.4 其他建模方法 …… 45
3.4.1 文本語言建模方法 …… 45
3.4.2 模型驅動的架構建模方法 …… 47
3.5 軟件架構建模方法的發展趨勢分析 …… 49
3.5.1 第1層:文本模型 …… 50
3.5.2 第2層:圖形可視化模型 …… 50
3.5.3 第3層:UML模型 …… 50
3.5.4 第4層:形式化模型 …… 51
3.5.5 第5層:未來模型 …… 52
3.6 本章小結 …… 52
思考題 …… 53
參考文獻 …… 53
第4章 軟件架構的風格與模式 …… 59
4.1 軟件架構風格的定義 …… 59
4.2 軟件架構風格的分類 …… 60
4.3 典型的軟件架構風格 …… 60
4.3.1 管道-過濾器風格 …… 60
4.3.2 主程序/子程序風格 …… 62
4.3.3 面向對象風格 …… 64
4.3.4 層次化風格 …… 65
4.3.5 事件驅動風格 …… 67
4.3.6 解釋器風格 …… 69
4.3.7 基于規則的系統風格 …… 71
4.3.8 倉庫風格 …… 73
4.3.9 黑板系統風格 …… 75
4.3.10 C2風格 …… 77
4.3.11 客戶機/服務器風格 …… 79
4.3.12 瀏覽器/服務器風格 …… 83
4.3.13 平臺/插件風格 …… 85
4.3.14 面向Agent風格 …… 87
4.3.15 面向方面架構風格 …… 91
4.3.16 面向服務架構風格 …… 93
4.3.17 正交架構風格 …… 95
4.3.18 異構風格 …… 97
4.3.19 基于層次消息總線的架構風格 …… 99
4.3.20 模型-視圖-控制器風格 …… 101
4.4 軟件架構模式 …… 103
4.5 本章小結 …… 103
思考題 …… 104
參考文獻 …… 104
第5章 軟件架構描述語言 …… 107
5.1 引言 …… 107
5.2 ADL的核心設計元素 …… 107
5.2.1 組件 …… 108
5.2.2 連接件 …… 108
5.2.3 架構配置 …… 109
5.3 幾種典型的ADL …… 109
5.3.1 Aesop …… 109
5.3.2 C2 SADL …… 110
5.3.3 UniCon …… 114
5.3.4 Wright …… 116
5.3.5 XYZ/ADL …… 117
5.3.6 ACME …… 118
5.3.7 XBA …… 118
5.3.8 ABC/ADL …… 120
5.3.9 MetaH …… 121
5.3.10 Rapide …… 121
5.3.11 Darwin …… 122
5.3.12 xADL 2.0 …… 122
5.4 本章小結 …… 123
思考題 …… 123
參考文獻 …… 123
第6章 軟件架構與敏捷開發 …… 125
6.1 軟件開發的發展簡史 …… 125
6.2 敏捷開發 …… 127
6.2.1 敏捷開發的基本理念 …… 127
6.2.2 敏捷開發實踐 …… 128
6.3 敏捷開發過程中的軟件架構設計 …… 130
6.3.1 需求分析 …… 130
6.3.2 初始設計 …… 130
6.3.3 迭代過程 …… 130
6.3.4 敏捷的設計思想 …… 131
6.4 兩類常見的敏捷軟件架構設計方法 …… 132
6.4.1 敏捷開發初始階段設計 …… 133
6.4.2 敏捷開發迭代過程中的設計 …… 134
6.5 本章小結 …… 136
思考題 …… 137
參考文獻 …… 137
中篇 工程實踐篇
第7章 架構驅動的軟件開發 …… 140
7.1 架構驅動的軟件開發簡介 …… 140
7.2 架構需求獲取 …… 140
7.3 架構設計、文檔化和評估 …… 144
7.3.1 架構設計、文檔化和評估是一個迭代過程 …… 144
7.3.2 什么是架構的結構 …… 147
7.3.3 從架構需求出發的評估 …… 148
7.3.4 尋找ATAM中的“權衡點”和“敏感點” …… 149
7.4 架構的實現與維護 …… 151
7.4.1 架構的實現 …… 151
7.4.2 架構的維護 …… 152
7.5 本章小結 …… 152
思考題 …… 152
參考文獻 …… 153
第8章 軟件架構設計和實現 …… 154
8.1 從需求分析到架構設計 …… 154
8.1.1 軟件架構對需求的影響 …… 155
8.1.2 基于軟件需求的軟件架構設計 …… 156
8.1.3 需求與架構的協同演化 …… 163
8.2 從軟件架構到詳細設計 …… 163
8.2.1 詳細設計對軟件架構的影響 …… 164
8.2.2 從軟件架構映射到詳細設計 …… 166
8.2.3 軟件架構視圖 …… 168
8.3 軟件架構設計原則 …… 169
8.3.1 架構設計的一些基本原則 …… 169
8.3.2 架構設計的關鍵原則 …… 170
8.4 軟件架構設計面臨的主要威脅及對策 …… 171
8.4.1 被忽略的重要非功能需求 …… 171
8.4.2 頻繁變化的需求 …… 172
8.4.3 考慮不全面的架構設計 …… 172
8.4.4 不及時的架構驗證 …… 173
8.4.5 較高的創造性架構比重 …… 173
8.4.6 架構的低可執行性 …… 174
8.5 本章小結 …… 174
思考題 …… 174
參考文獻 …… 174
第9章 軟件架構的演化和維護 …… 178
9.1 軟件架構演化和軟件架構定義的關系 …… 179
9.1.1 對象演化 …… 179
9.1.2 消息演化 …… 180
9.1.3 復合片段演化 …… 184
9.1.4 約束演化 …… 186
9.2 軟件架構演化方式的分類 …… 186
9.2.1 軟件架構靜態演化 …… 187
9.2.2 軟件架構動態演化 …… 190
9.3 軟件架構演化原則 …… 197
9.4 軟件架構維護 …… 201
9.4.1 軟件架構知識管理 …… 201
9.4.2 軟件架構修改管理 …… 202
9.4.3 軟件架構版本管理 …… 202
9.5 本章小結 …… 202
思考題 …… 203
參考文獻 …… 203
第10章 軟件架構恢復 …… 207
10.1 引言 …… 207
10.1.1 軟件架構的恢復過程 …… 208
10.1.2 架構信息提取 …… 208
10.1.3 架構恢復技術 …… 209
10.2 架構信息提取 …… 212
10.2.1 相關定義 …… 212
10.2.2 從源代碼提取架構信息 …… 212
10.2.3 從編譯構建過程提取架構信息 …… 215
10.2.4 從目錄層次提取架構信息 …… 217
10.2.5 基于架構文檔的架構信息提取 …… 219
10.3 基于多規則聚類的架構恢復 …… 220
10.3.1 聚類理論基礎 …… 220
10.3.2 架構恢復流程 …… 222
10.3.3 具體恢復技術 …… 223
10.4 本章小結 …… 232
思考題 …… 233
參考文獻 …… 233
第11章 軟件架構質量 …… 237
11.1 引言 …… 237
11.2 軟件架構與質量屬性 …… 239
11.3 軟件架構質量指標 …… 240
11.3.1 內部質量指標 …… 240
11.3.2 外部質量指標 …… 243
11.4 軟件架構質量保障和評估方法 …… 245
11.4.1 評估準備 …… 246
11.4.2 利益相關者 …… 247
11.4.3 參與者 …… 248
11.4.4 評估時機 …… 249
11.4.5 評估技術 …… 250
11.4.6 軟件架構評估的收益與成本 …… 253
11.5 本章小結 …… 254
思考題 …… 254
參考文獻 …… 254
第12章 軟件架構仿真 …… 256
12.1 軟件仿真的概念 …… 256
12.1.1 連續型仿真 …… 256
12.1.2 離散型仿真 …… 257
12.1.3 混合型仿真 …… 257
12.2 軟件架構仿真流程 …… 258
12.3 UML軟件架構仿真 …… 259
12.3.1 基于UML類圖和順序圖的軟件架構仿真 …… 259
12.3.2 基于UML用例圖和活動圖的軟件架構仿真 …… 259
12.3.3 從帶有注釋的UML圖產生OPNET仿真模型 …… 260
12.4 非UML軟件架構仿真 …… 261
12.4.1 SASIM仿真:用于系統功能分析 …… 261
12.4.2 面向對象數據庫的架構仿真 …… 263
12.5 軟件架構仿真實踐 …… 264
12.5.1 軟件架構描述文檔 …… 264
12.5.2 SSD和SD轉化為事件執行圖 …… 266
12.5.3 局部仿真和整體仿真 …… 269
12.5.4 仿真結果的分析 …… 275
12.6 本章小結 …… 276
思考題 …… 276
參考文獻 …… 277
第13章 軟件架構度量和評估 …… 279
13.1 引言 …… 279
13.1.1 單版本的軟件架構度量和評估 …… 280
13.1.2 多版本的軟件架構度量和評估 …… 281
13.2 典型的軟件架構度量和評估方法 …… 283
13.2.1 SAEM方法 …… 283
13.2.2 SAABNet方法 …… 283
13.2.3 SACMM方法 …… 285
13.2.4 SASAM方法 …… 287
13.2.5 ALRRA方法 …… 288
13.2.6 AHP方法 …… 290
13.2.7 COSMIC+UML方法 …… 291
13.2.8 基于Shannon信息論的方法 …… 292
13.3 軟件架構度量和評估過程 …… 293
13.3.1 質量屬性選擇 …… 293
13.3.2 軟件架構可維護性度量及評估 …… 294
13.3.3 軟件架構可靠性度量及評估 …… 297
13.4 軟件架構演化度量和評估實踐 …… 302
13.4.1 演化過程已知的軟件架構演化評估 …… 302
13.4.2 演化過程未知的軟件架構演化評估 …… 305
13.4.3 實例分析 …… 305
13.5 本章小結 …… 313
思考題 …… 313
參考文獻 …… 313
第14章 軟件架構形式化驗證 …… 317
14.1 引言 …… 317
14.2 形式化驗證 …… 317
14.2.1 形式語義 …… 318
14.2.2 規約語言 …… 318
14.2.3 求精分析 …… 319
14.2.4 驗證方法 …… 320
14.2.5 形式化驗證方法的優缺點 …… 320
14.3 軟件架構驗證 …… 322
14.3.1 靜態軟件架構驗證 …… 322
14.3.2 動態軟件架構驗證 …… 323
14.3.3 運行態軟件架構驗證 …… 323
14.4 基于SPIN的靜態軟件架構驗證實踐 …… 324
14.4.1 SPIN簡介 …… 324
14.4.2 基于SPIN的驗證過程 …… 325
14.4.3 架構模型 …… 326
14.4.4 驗證模型 …… 332
14.4.5 驗證結果 …… 334
14.5 架構演化驗證案例分析——以MVC為例 …… 335
14.5.1 演化案例 …… 335
14.5.2 場景1演化評估 …… 337
14.5.3 場景2演化評估 …… 341
14.6 本章小結 …… 344
思考題 …… 345
參考文獻 …… 345
第15章 軟件架構分析與測試 …… 347
15.1 引言 …… 347
15.2 軟件架構分析方法 …… 347
15.2.1 SAAM …… 348
15.2.2 SAAMCS …… 350
15.2.3 ESAAMI …… 351
15.2.4 SAAMER …… 352
15.2.5 ATAM …… 352
15.2.6 QAW …… 356
15.2.7 OATAM …… 358
15.2.8 ARID …… 358
15.2.9 SBAR …… 361
15.2.10 ALPSM …… 362
15.2.11 SNA …… 362
15.2.12 ALMA …… 363
15.2.13 PSAEM …… 364
15.2.14 ASAAM …… 365
15.2.15 PASA …… 365
15.2.16 SALUTA …… 367
15.2.17 HoPLAA …… 368
15.2.18 CBAM …… 370
15.2.19 CPASA …… 370
15.3 軟件架構測試 …… 371
15.4 本章小結 …… 371
思考題 …… 372
參考文獻 …… 372
第16章 軟件架構重構 …… 375
16.1 引言 …… 375
16.2 軟件重構現狀 …… 376
16.2.1 軟件重構概念 …… 376
16.2.2 重構點識別和定位方法 …… 376
16.2.3 重構實施技術 …… 379
16.2.4 現狀分析 …… 380
16.3 基于度量的軟件架構重構 …… 381
16.3.1 軟件架構度量評估 …… 382
16.3.2 產生重構需求 …… 385
16.3.3 分析重構需求 …… 385
16.3.4 建議重構操作 …… 387
16.3.5 實施重構操作 …… 389
16.4 面向模式的軟件架構重構 …… 392
16.4.1 模式選擇 …… 392
16.4.2 重構點定位 …… 393
16.4.3 重構實施 …… 394
16.5 本章小結 …… 397
思考題 …… 398
參考文獻 …… 398
下篇 未來主題篇
第17章 軟件架構的腐蝕和對策 …… 402
17.1 引言 …… 402
17.2 軟件架構腐蝕的含義 …… 403
17.3 軟件架構腐蝕的預防控制策略 …… 403
17.3.1 腐蝕最小化方法 …… 403
17.3.2 腐蝕預防方法 …… 406
17.3.3 腐蝕修補方法 …… 407
17.4 軟件架構實踐中面臨的主要威脅及其對策 …… 408
17.4.1 主要威脅 …… 408
17.4.2 有效對策 …… 409
17.5 本章小結 …… 409
思考題 …… 409
參考文獻 …… 409
第18章 軟件架構解耦 …… 412
18.1 引言 …… 412
18.2 分層架構及其解耦 …… 413
18.2.1 模式描述 …… 413
18.2.2 架構解耦 …… 413
18.2.3 實例分析 …… 414
18.3 微內核架構及其解耦 …… 414
18.3.1 模式描述與解耦 …… 415
18.3.2 實例分析 …… 415
18.4 微服務架構及其解耦 …… 416
18.4.1 模式描述與解耦 …… 416
18.4.2 設計原則 …… 417
18.4.3 實例分析 …… 417
18.5 黑板架構風格及其解耦 …… 418
18.6 干凈架構及其解耦 …… 419
18.6.1 模式描述 …… 419
18.6.2 架構解耦 …… 421
18.7 管道-過濾器風格及其解耦 …… 421
18.7.1 模式描述與解耦 …… 421
18.7.2 實例分析 …… 422
18.8 基于元模型的架構及其解耦 …… 422
18.9 REST架構風格及其解耦 …… 422
18.10 本章小結 …… 424
思考題 …… 424
參考文獻 …… 424
第19章 軟件架構技術債 …… 426
19.1 引言 …… 426
19.2 技術債簡介 …… 426
19.2.1 技術債的定義 …… 426
19.2.2 技術債的分類 …… 427
19.2.3 技術債的產生 …… 428
19.3 設計債 …… 429
19.3.1 設計債的定義 …… 429
19.3.2 設計債的識別方法 …… 429
19.3.3 架構技術債 …… 430
19.4 代碼債 …… 432
19.5 測試債 …… 432
19.6 文檔債 …… 433
19.7 技術債的處理 …… 433
19.7.1 發現技術債 …… 433
19.7.2 管理技術債 …… 433
19.7.3 償還技術債 …… 435
19.8 本章小結 …… 435
思考題 …… 435
參考文獻 …… 436
第20章 軟件架構壞味道 …… 438
20.1 引言 …… 438
20.2 典型的代碼壞味道 …… 439
20.2.1 應用級壞味道 …… 439
20.2.2 類級壞味道 …… 440
20.2.3 方法級壞味道 …… 441
20.3 典型的設計壞味道 …… 442
20.3.1 架構壞味道 …… 442
20.3.2 架構壞味道的檢測 …… 447
20.4 本章小結 …… 450
思考題 …… 451
參考文獻 …… 451
第21章 軟件架構脆弱性 …… 453
21.1 引言 …… 453
21.2 什么是軟件脆弱性 …… 453
21.2.1 軟件脆弱性定義 …… 453
21.2.2 軟件脆弱性的特點和產生的原因 …… 454
21.2.3 軟件脆弱性的生命周期 …… 455
21.3 典型的軟件架構脆弱性 …… 455
21.3.1 分層架構 …… 456
21.3.2 C/S架構 …… 457
21.3.3 B/S架構 …… 457
21.3.4 事件驅動架構 …… 458
21.3.5 MVC架構 …… 460
21.3.6 微內核架構 …… 461
21.3.7 管道-過濾器架構 …… 461
21.3.8 黑板模式架構 …… 462
21.3.9 微服務架構 …… 462
21.3.10 基于空間的架構 …… 463
21.3.11 PAC架構 …… 464
21.4 本章小結 …… 465
思考題 …… 466
參考文獻 …… 466
第22章 軟件架構模式識別 …… 468
22.1 引言 …… 468
22.2 模式識別方法現狀 …… 468
22.2.1 設計模式識別現狀 …… 468
22.2.2 架構模式識別現狀 …… 469
22.3 兩種典型的架構模式識別方法 …… 470
22.3.1 IDAPO方法 …… 470
22.3.2 基于DSL的架構模式識別方法 …… 472
22.4 基于本體的架構模式識別方法 …… 473
22.4.1 可行性分析 …… 473
22.4.2 識別過程 …… 474
22.4.3 典型步驟 …… 475
22.5 本章小結 …… 481
思考題 …… 481
參考文獻 …… 481
第23章 結束語 …… 484
23.1 軟件架構是早期階段質量保障的基礎 …… 484
23.2 軟件架構的作用 …… 485
23.2.1 好的架構設計能夠滿足系統的多種品質 …… 485
23.2.2 架構設計能夠使利益相關者達成一致的目標 …… 485
23.2.3 架構設計能夠支持計劃編制過程 …… 485
23.2.4 架構設計能夠有效地管理復雜性 …… 486
23.2.5 架構設計為重用奠定了基礎 …… 486
23.2.6 架構設計能夠降低維護費用 …… 487
23.2.7 架構設計能夠支持沖突分析 …… 487
23.2.8 架構設計的其他作用 …… 487
23.3 軟件架構發展趨勢 …… 487
思考題 …… 489
參考文獻 …… 489
軟件開發 架構設計 軟件
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。