首页>参考读物>计算机科学与技术>软件工程及软件方法学

Hyperledger Fabric源代码分析与深入解读
作者 : 蔡亮 梁秀波 宣章炯 著
丛书名 : 区块链技术丛书
出版日期 : 2018-09-17
ISBN : 978-7-111-60870-7
定价 : 89.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 396
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

内容简介
这是一本深度解读Hyperledger Fabric架构设计与实现原理的著作,由国内知名区块链公司趣链科技的创始人和核心技术团队成员撰写。
全书的核心内容以Hyperledger Fabric的源代码为切入点,首先从宏观上分析了Hyperledger Fabric项目的整体架构与设计,然后深入源代码详细分析了Hyperledger Fabric各个重要模块的设计与实现原理。此外,为了兼顾没有区块链开发基础的读者,书中还加入了Hyperledger Fabric开发环境搭建、综合案例、项目部署等实战性内容,可使读者能在深入理解Hyperledger Fabric设计机制的基础上快速动手实践。
全书共14章,逻辑上分为两大部分:
第一部分:源码分析(第2~11章)
第2章首先从宏观的角度Hyperledger Fabric的整体架构、项目的结构,以及交易流程,这为后面的源码分析打下基础;
第3章分析了Logging日志模块、Error错误处理框架、Config配置模块、GRPC服务4个模块的源码,对理解后续的源码有帮助;
第4~11章深入纤细地分析了Peer、Order、Chaincode、MSP、Gossip、BCCSP、Fabric-CA、账本机制等节点和功能的设计与实现,这部分内容能让读者全面、透彻了解整个Hyperledger Fabric的运作机制。
第二部分:开发实战(第1章,及第12~14章)
第1章主要是为开发Hyperledger Fabric应用做准备,讲解了Go语言开发环境的准备,以及Docker环境的准备;
第12~14章分别讲解了一个智能合约的案例、完整的Hyperledger Fabric项目案例,以及项目的部署方法。
实战部分不仅能提升读者的动手实践能力,而且还能辅助他们更好地理解源码分析的内容,使理论和实践完全融合到一起。

图书特色

趣链科技创始人及核心团队撰写
从源代码角度剖析Hyperledger Fabric项目的整体架构设计,以及各核心模块的实现原理

图书前言

区块链技术自诞生以来就受到社会各界的广泛关注,甚至被认为是继互联网之后最具颠覆性意义的技术革命。如果说最初的互联网实现了信息在全球范围内的高速传播与共享,那么区块链则致力于构建一个可用于价值交换的下一代可信互联网;如果说人工智能等技术改变的是生产力,那么区块链技术改变的是生产关系。据专家预测,区块链在不远的将来会引发政治、经济、文化、科技、军事、教育、医疗、能源等诸多领域的颠覆性革命。
区块链的本质是一个去中心化的分布式账本系统,是一种涵盖了分布式数据存储、点对点传输、共识机制、加密算法等一系列计算机技术的集成创新技术。区块链采用分布式数据库来存储数据,通过自信任的共识机制实现全网数据的一致性,将对称与非对称加密技术相结合以保证数据安全和不可篡改,采用智能合约技术规范化数据处理,最终实现在无需第三方中介机构的情况下进行人与人之间的价值交换,进而解决信任问题。
众所周知,区块链技术源于比特币,最初是作为比特币的底层技术而存在的。因此,区块链的发展也与比特币息息相关。2008年,一个化名为中本聪的人在一篇名为《比特币:一个点对点的电子现金系统》的论文中详细描述了一种去中心化的分布式账本系统,并把这个系统中所使用的数字加密货币称为比特币。比特币的诞生开启了区块链1.0时代,这一时期各种基于区块链技术的加密数字货币如雨后春笋般涌现出来,如以太币、莱特币、瑞波币等。然而此时的区块链技术仅仅用于交易记账,应用范围非常有限。
随着各种加密数字货币的广泛流行,一些有识之士逐渐意识到区块链技术的巨大应用潜力。他们将区块链技术从比特币系统中分离出来,并通过添加智能合约技术构建出一个更通用的去中心化应用开发平台,其中最具代表性的就是以太坊。以太坊的出现标志着区块链迈入了2.0时代,这一时期区块链技术的应用范围得到了极大的扩展,同时涉及股权众筹、证券交易、货款抵押等诸多金融领域。
然而,以太坊平台作为一个基于公有链的区块链平台,依然存在一些不足之处亟待改进,比如存在共识效率低下、隐私保护缺乏、大规模存储困难和信息难以监管等问题。为了应对大规模商业应用的业务需求,面向企业级应用的联盟区块链技术应运而生。其中的典型代表就是Hyperledger Fabric开源项目,它通过模块化和可插拔设计、权限控制、多链和多通道等技术为区块链技术在各领域的应用打开了广阔的空间。
本书是一本介绍Hyperledger Fabric架构、源代码及其底层实现的专业书籍。从编程语言、源码分析、网络节点、加密算法、智能合约、架构设计等多个角度深入解读Fabric项目,并通过对项目实例的分析介绍,使读者能够理论结合实践,增强实际动手能力,更好地理解Fabric的实现原理。本书是一本实际操作性极强的Hyperledger Fabric的专业书籍,通过阅读本书,能够帮助读者零基础快速入门Fabric。
本书结构
本书共分为14章。
第1章主要介绍如何从零开始,通过准备工作完成多种平台上Hyperledger Fabric应用环境的配置。首先,讲解不同系统中Go语言的安装与环境配置,并简单介绍了Go语言。之后,讲解不同系统中Docker的安装和简单使用方法。最后,介绍了Hyperledger社区与社区中一些常用软件,方便读者在完成环境配置之余,更好地了解Hyperledger Fabric的相关信息。
第2章主要讲解Fabric的架构并进行分析。首先介绍了Fabric整体架构,包括系统架构、交易背书及策略、证实账本和节点账本的检查。然后介绍了Fabric交易流程。接着介绍了Fabric整体项目结构,并详细阐述了Fabric源码中相关缩写的含义。
第3章主要介绍了Fabric中的四个模块:Logging日志模块、Error错误处理框架、Config配置模块、grpc服务。理解日志模块有助于理解源码;理解错误处理框架能使读者学会独立处理代码中常见错误的方法;理解配置模块对具象化程序很有帮助;理解grpc有助于读者理解如何实现客户端与服务器端的远程调用,从而为进一步理解源码打下基础。
第4章主要介绍了Fabric中peer节点的设计与实现。peer节点作为Fabric中处理交易、存储区块的角色,承担了重要的作用。本章对CommandLine进行了解析,介绍了Admin及Endorser服务的实现。同时具体分析了Committer机制及其作用。
第5章主要介绍了order的设计与实现。orderer为Fabric的排序节点,其为所有的客户端提供统一的交易排序及打包服务,并将区块分发到所有的leader节点。本章的内容包括Orderer内部机制窥探、kafka排序服务机制讲解以及orderer在Fabric中的交互流程。
第6章主要介绍了chaincode的设计与实现。chaincode是Fabric实现智能合约的方式,利用容器技术将智能合约放置在容器中运行,同时进行调用。本章的内容包括chaincode生命周期管理,原理浅析,数据结构分析,SystemChaincode的讲解,CSCC、ESCC、LSCC、QSCC、VSCC等概念的分析,SystemChaincode的注册和实例化,ApplicationChaincode的部署及实例化,以及chaincode操作步骤。
第7章主要介绍了MSP成员服务提供者及Fabric的交易网络。通过Membership Service Providers (MSP)主题帮助读者更好地理解加密操作、签名、校验、认证等在Fabric中的应用。
第8章主要介绍了Gossip协议。Gossip协议是分布式系统用于保证分布式一致性的一种方式,也是Fabric中传递各种信息及区块信息的手段。本章后对Gossip协议原理进行了解析,介绍了Gossip的服务组件、服务初始化、消息广播、channel通道的设计与实现以及事件机制 。
第9章主要介绍了Fabric中BCCSP加密服务提供者的设计与实现。BCCSP为加密服务提供者,为Fabric网络信息传输提供了密码学的保障。本章介绍了密码学相关知识及BCCSP概要,并对BCCSP源码进行了剖析。
第10章主要讲解了Fabric CA的架构设计。Fabric CA是Hyperledger Fabric 行使证书机构的功能。本章介绍了Fabric CA用户指南,以及如何使用Fabric-CA-Server、Fabric-CA-Client等指令和HSM(硬件安全模块)。
第11章主要介绍了在Fabric中账本机制的设计与实现。本章的内容包括Ledger架构概述,Ledger中的Block-Storage、VersionedDB、HistoryDB等概念及其作用。
第12章主要通过具体的案例,加深读者对chaincode智能合约的理解,让读者了解Fabric中智能合约的编写方法。
第13章通过介绍一个完整的项目实例的实现来帮助读者更好地理解Fabric,让读者做到理论结合实际,进而提升实战经验。
第14章通过对官网案例进行部署,以体现源码和实际操作的呼应关系。
勘误与后续技术支持
由于作者的写作时间和水平有限,本书难免会存在一些纰漏和错误,欢迎广大读者批评指正。勘误请发送至作者邮箱:liangxiubo@hyperchain.cn。对于读者发现的问题,我们将在本书后续印次和版本中加以改正。
为了进一步降低区块链技术使用门槛,让更多的区块链开发者、爱好者以及正在尝试接入区块链技术的企业能够快捷地开发区块链应用,趣链科技于2017年9月14日正式上线了基于联盟链的“开发者平台”。基于该平台,用户可以更方便地创建、发布和使用多中心化的应用程序。通过平台提供的在线智能合约编辑器,用户可便捷、准确地编写智能合约程序;通过平台提供的区块链浏览器,用户可方便地获取链上区块信息、区块链节点状态、节点维护方信息等。欢迎广大区块链相关从业人员访问体验,开发者平台网址为:https://dev.hyperchain.cn/。
如需获得更多关于区块链技术的最新技术动态和趣链科技的技术支持,可关注微信公众号:hyperchain。
致谢
在此向所有给我们提供指导、支持和鼓励的朋友表示衷心的感谢。
感谢浙江大学计算机科学与技术学院和软件学院为我们提供的良好条件和各种便利,感谢陈纯院士、杨小虎研究员一直以来的关怀和支持。
感谢杭州趣链科技有限公司全体人员的大力支持,特别感谢李伟博士、李启雷博士、邱炜伟博士、尹可挺博士为本书成稿给予的鼎力支持,感谢曹靖、易洋溢、梁健、孟德佳、秦启睿、余清波、何昊等对书稿材料汇编所做的突出贡献,感谢余高成、周健、施泰龙等对书稿校阅所付出的时间和汗水。
感谢机械工业出版社华章分社的编辑们,他们不辞辛苦进行的仔细严谨的审阅和校对工作是本书顺利出版的有力保障。

蔡亮 梁秀波 宣章炯

上架指导

计算机\区块链

封底文字

区块链通过技术层面上的信任机制大大降低了为保证多方信任而依赖中介等传统非技术手段所付出的成本,显著提升了业务效率。未来数字化社会中的各行各业都将受到该技术的深刻影响,这使得区块链技术成为当下最炙手可热的新兴IT技术之一。Hyperledger Fabric是面向商业区块链应用开发的企业级区块链底层支撑平台,源代码开源,吸引了世界范围内的众多开发者竞相学习和贡献代码,是了解区块链理念和探知区块链技术的良好研习平台。本书以Hyperledger Fabric为研究对象,全面剖析了其架构设计理念和具体源码实现。通过本书的学习,你将具备从事区块链底层技术开发的基础能力,以及基于Hyperledger Fabric快速上手开发区块链应用项目的能力。
通过阅读本书,你将:
  能够搭建Hyperledger Fabric开发环境
  了解Hyperledger Fabric项目的架构设计
  熟悉Hyperledger Fabric重要模块、节点和功能的源码实现
  深入学习网络通信、加密算法和共识机制等区块链基础技术
  熟练掌握Fabric智能合约(Chaincode)的设计、实现和使用
  实现区块链项目案例从学习、开发到上线部署的全流程
  具备区块链底层平台和上层应用开发的基本素质
  了解和参与Hyperledger开源社区的各种活动

作者简介

蔡亮 梁秀波 宣章炯 著:作者简介
蔡亮
博士,副教授,浙江大学软件学院副院长、浙江大学区块链研究中心常务副主任、中国计算机学会区块链专业委员会副主任、中国可信区块链联盟副理事长,浙江省重大科技专项专家。
主要从事区块链、云计算、网络安全、可信计算和金融业务处理的研究,在国家级核心期刊和国际会议上发表了数十篇论文。参与了多项国家级或省部级科研项目,如国防军工预研基金项目、国家创新基金项目、863项目等。获得教育部科技进步一等奖、浙江省科技进步一等奖和三等奖。
梁秀波
博士,浙江大学软件学院副研究员、浙江大学区块链研究中心主任助理、杭州趣链科技有限公司副总经理。
主要从事区块链、智能信息处理、金融信息技术和移动互联网等方面的研究与开发工作,曾赴法国进行为期一年的访问研究。主持或参与国家级和省部级科研项目十余项,主持企事业单位委托项目二十余项。已发表论文十余篇,已申请区块链方面的发明专利三十余项。
宣章炯
硕士,趣链科技高级架构师,曾就职于网易杭州研究院、阿里巴巴-蚂蚁金服事业群,有丰富大型金融区块链项目开发经验。目前从事Hyperledger Fabric开源项目的研究工作,并为其贡献源代码,对其有较深理解,Hyperledger TWG-China大中华区技术工作组成员,负责社区发展与创新工作及翻译工作,杭州地区Meetup的组织者,担任过Meetup的讲师。

图书目录

序一
序二
前言
第1章 准备工作1
1.1 Go语言环境配置1
1.1.1 Go语言简介1
1.1.2 Go安装2
1.1.3 Go标准包安装4
1.1.4 第三方工具安装6
1.1.5 Go环境配置7
1.1.6 代码目录结构规划8
1.1.7 编译应用9
1.1.8 获取远程包10
1.1.9 程序的整体结构11
1.2 安装Docker11
1.2.1 macOS11
1.2.2 Ubuntu12
1.2.3 Docker的简易使用13
1.3 Hyperledger社区介绍14
第2章 架构分析18
2.1 Fabric整体架构18
2.1.1 概述18
2.1.2 系统架构19
2.1.3 交易背书的基本工作流程24
2.1.4 背书策略27
2.1.5 证实账本和节点账本检查28
2.2 Fabric交易流程30
2.3 Fabric整体项目结构介绍33
2.3.1 Fabric项目结构33
2.3.2 Fabric源码中相关缩写的含义34
第3章 源码分析37
3.1 Logging日志模块浅析37
3.1.1 go-logging简介37
3.1.2 flogging38
3.1.3 init函数、MustGetLogger函数与其他函数38
3.2 Error错误机制设计39
3.2.1 总体概览39
3.2.2 使用说明40
3.2.3 显示错误消息40
3.2.4 错误处理的一般准则41
3.3 Config配置模块的设计41
3.3.1 viper简介41
3.3.2 安全文件配置44
3.3.3 命令选项配置44
3.3.4 环境变量配置44
3.4 grpc服务45
3.4.1 grpc用法的Demo45
3.4.2 Fabric中的grpc服务接口和实例46
第4章 peer的设计与实现53
4.1 CommandLine解析53
4.1.1 peer目录结构53
4.1.2 第三方包54
4.1.3 peer命令结构解析55
4.1.4 以node为例进行子命令结构解析55
4.1.5 peer命令结构55
4.2 Admin及Endorser服务的实现56
4.2.1 Admin56
4.2.2 Endorser58
4.2.3 频道中的策略检查器64
4.3 Committer的机制66
4.3.1 committer.go 分析66
4.3.2 committer_impl.go 分析67
4.3.3 validator.go 分析70
4.3.4 vscc_validator.go分析71
第5章 order的设计与实现73
5.1 orderer内部机制窥探73
5.1.1 kingpin73
5.1.2 模块74
5.1.3 配置74
5.1.4 模块的初始化75
5.2 kafka排序服务机制讲解79
5.3 orderer在Fabric中的交互流程82
5.3.1 建立连接82
5.3.2 Broadcast83
5.3.3 orderer83
5.3.4 Deliver86
第6章 chaincode的设计与实现89
6.1 chaincode生命周期管理89
6.1.1 打包89
6.1.2 安装chaincode91
6.1.3 实例化chaincode91
6.1.4 升级chaincode92
6.1.5 停止与启动93
6.1.6 CLI93
6.2 chaincode原理浅析94
6.2.1 什么是chaincode94
6.2.2 Chaincode Support服务95
6.2.3 FSM95
6.2.4 Register96
6.2.5 Handler97
6.2.6 processStream97
6.2.7 HandleMessage97
6.2.8 serialSend或serialSendAsync99
6.2.9 系统chaincode99
6.3 chaincode数据结构分析100
6.3.1 chaincode元数据100
6.3.2 chaincode的元工具102
6.4 SystemChaincode讲解103
6.4.1 SystemChaincode104
6.4.2 预定义和注册104
6.5 CSCC分析106
6.5.1 结构体106
6.5.2 函数106
6.6 ESCC分析108
6.6.1 结构体108
6.6.2 Init函数108
6.7 LSCC分析109
6.7.1 结构体和接口110
6.7.2 函数操作110
6.7.3 安装、部署和升级111
6.7.4 chaincode stub 接口实现112
6.8 QSCC分析113
6.8.1 结构体113
6.8.2 函数操作114
6.8.3 路由规则114
6.9 VSCC分析115
6.9.1 结构体115
6.9.2 函数115
6.10 SystemChaincode的注册和实例化116
6.10.1 概述116
6.10.2 安装117
6.10.3 部署117
6.10.4 Launch118
6.10.5 Execute123
6.10.6 部署后状态124
6.11 ApplicationChaincode的部署124
6.11.1 概述125
6.11.2 生成签名申请包125
6.11.3 处理安装申请125
6.11.4 执行申请126
6.11.5 Launch127
6.11.6 Execute127
6.11.7 一路返回128
6.11.8 安装后的状态129
6.12 ApplicationChaincode的实例化129
6.12.1 概述129
6.12.2 起点130
6.12.3 部署130
6.12.4 广播139
6.12.5 部署后的状态139
6.13 chaincode操作步骤140
6.13.1 选择一个代码存放位置140
6.13.2 内务处理140
6.13.3 初始化chaincode140
6.13.4 调用chaincode142
6.13.5 实现chaincode应用143
6.13.6 整合全部代码143
6.13.7 编译chaincode145
6.13.8 在开发者模式下测试145
6.13.9 安装Hyperledger Fabric样例145
6.13.10 下载Docker镜像146
6.13.11 1号终端146
6.13.12 2号终端146
6.13.13 3号终端147
6.13.14 测试新的chaincode147
第7章 MSP成员服务提供者148
7.1 MSP的设计思路148
7.1.1 MSP配置149
7.1.2 如何生成MSP证书和它们的签名匙150
7.1.3 MSP setup on the peer & orderer side150
7.1.4 Channel MSP setup150
7.1.5 最佳实践151
7.2 MSP实现剖析153
7.2.1 目录结构153
7.2.2 MSP配置154
第8章 Gossip节点间的流言蜚语162
8.1 Gossip协议原理解析162
8.1.1 Gossip协议(Gossip protocol)162
8.1.2 Gossip消息传输(Gossip messaging)163
8.2 Gossip之服务组件163
8.2.1 protos/gossip分析163
8.2.2 Gossip服务组件169
8.2.3 gossip消息发送方式详解176
8.3 Gossip之服务初始化178
8.3.1 gossipSvc 组件179
8.3.2 chains组件185
8.3.3 leaderElection组件187
8.3.4 gossip服务的停止193
8.4 Gossip之消息广播194
8.4.1 gossip服务消息的散播过程194
8.4.2 消息从何而来194
8.4.3 消息如何散播196
8.4.4 消息去往何方200
8.5 channel通道的设计与实现201
8.5.1 概述201
8.5.2 配置文件202
8.5.3 命令203
8.6 事件机制 208
8.6.1 Fabric中Event相关实现208
8.6.2 events/producer209
8.6.3 Go SDK中Event相关实现210
第9章 BCCSP加密服务提供者的设计与实现212
9.1 密码学相关知识介绍212
9.1.1 安全基础212
9.1.2 加密基础213
9.1.3 哈希函数214
9.1.4 共享密钥加密214
9.1.5 公钥加密215
9.1.6 混合加密216
9.1.7 消息验证码216
9.1.8 数字签名218
9.1.9 数字证书219
9.2 BCCSP概要220
9.2.1 BCCSP简介220
9.2.2 陷阱函数222
9.2.3 为什么要使用ECDSA223
9.2.4 生成签名223
9.2.5 验证签名224
9.3 BCCSP源码剖析224
9.3.1 BCCSP服务结构224
9.3.2 BCCSP中的接口和选项225
9.3.3 SW实现方式227
9.3.4 pkcs11实现方式230
第10章 Fabric CA架构设计与讲解233
10.1 Fabric CA用户指南233
10.2 Fabric-CA-Server240
10.2.1 初始化服务端241
10.2.2 算法和密钥长度242
10.2.3 启动服务端243
10.2.4 配置数据库243
10.2.5 PostgreSQL243
10.2.6 PostgreSQL SSL配置244
10.2.7 MySQL245
10.2.8 MySQL SSL配置245
10.2.9 配置LDAP246
10.2.10 构建一个集群249
10.2.11 构建多个CA249
10.2.12 登录一个中间CA250
10.2.13 升级服务端251
10.2.14 升级一个集群251
10.3 fabric-ca-client253
10.3.1 登录启动用户253
10.3.2 注册一个新身份253
10.3.3 登录一个节点256
10.3.4 从另一个Fabric CA服务器获得CA证书链257
10.3.5 重新登录一个身份257
10.3.6 撤销一个证书或身份257
10.3.7 生成一个CRL259
10.3.8 启用TLS259
10.3.9 基于属性的访问控制260
10.3.10 动态更新服务器配置261
10.3.11 联系特定的CA实例265
10.4 HSM265
第11章 账本机制的设计与实现267
11.1 Ledger架构概述267
11.1.1 总览267
11.1.2 ledger部分摘要268
11.2 Ledger之Block-Storage275
11.2.1 peer节点中的leveldb276
11.2.2 peer节点中的账本276
11.2.3 创建276
11.2.4 使用277
11.2.5 idStore278
11.2.6 存储账本ID278
11.2.7 ConstructionFlag278
11.2.8 账本恢复279
11.2.9 BlockStore280
11.3 Ledger之VersionedDB286
11.3.1 peer节点使用VersionedDB286
11.3.2 交易模拟器/交易查询器288
11.3.3 重启恢复298
11.4 Ledger之HistoryDB300
11.4.1 历史查询器300
11.4.2 使用301
第12章 chaincode智能合约案例分析303
12.1 encc_example303
12.1.1 chaincode代码分析303
12.1.2 使用EncCC307
12.2 eventsender308
12.3 example01310
12.4 example02311
12.5 example03314
12.6 example04315
12.7 example05317
12.8 invokereturnsvalue319
12.9 map320
12.10 marbles02324
12.11 passthru332
12.12 sleeper332
第13章 Fabric-samples项目分析与实践334
13.1 Fabric-samples项目结构334
13.2 First-network335
13.2.1 安装预置环境335
13.2.2 想要现在运行吗?335
13.2.3 生成网络神器336
13.2.4 启动网络337
13.2.5 关闭网络339
13.2.6 加密生成器339
13.2.7 配置交易生成器340
13.2.8 运行工具341
13.2.9 启动网络342
13.2.10 了解Docker Compose技术347
13.2.11 使用CouchDB348
13.2.12 关于数据持久化的提示350
13.2.13 故障排除350
13.3 basic-network351
13.4 Fabcar353
13.4.1 编写第一个应用353
13.4.2 下载测试网络(Getting a Test Network)354
13.4.3 应用程序如何与网络进行交互355
13.4.4 查询账本355
13.4.5 更新账本358
13.5 Balance transfer360
13.5.1 预置环境360
13.5.2 工件360
13.5.3 运行示例程序360
13.5.4 示例—REST APIs请求361
13.6 Hyperledger Fabric CA 示例365
13.6.1 运行这个示例366
13.6.2 了解这个例子366
13.7 高性能网络367
13.7.1 用例368
13.7.2 如何使用368
第14章 部署教程371
14.1 下载部署环境371
14.2 编译peer、orderer、configtxgen等程序373
14.3 部署374
14.4 Crypto Generator374
14.4.1 crypto-config.yaml375
14.4.2 crypto-config文件夹375
14.5 Configuration Transaction Generator376
14.6 networkUp-启动Fabric网络378
14.7 运行容器+区域链操作378
附录 专业术语381

教学资源推荐
作者: [美]Paul C.Jorgensen
作者: 李龙澍 郑诚 主编 杨为民 李学俊 程凡 姚晟 编著
作者: [美]罗杰 S.普莱斯曼(Roger S. Pressman) 布鲁斯 R. 马克西姆(Bruce R. Maxim) 著
作者: Roger S.Pressman
参考读物推荐
作者: Chris Wysopal;Lucas Nelson;Dino Dai Zovi;Elfriede Dustin
作者: Jim Arlow Ila Neustadt
作者: (印)Gopalaswamy Ramesh
作者: (美)Elisabeth Hendrickson 著