《大型软件系统的开发介绍v.ppt》由会员分享,可在线阅读,更多相关《大型软件系统的开发介绍v.ppt(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、大型软件系统的开发介绍大型软件系统的开发介绍(An Introduction to the Development of Large Software Systems,ver.02)于忠德于忠德 2003年年3月月中国成都中国成都Zhongde YuMarch 2003Chengdu,China大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)大型软件系统的开发介绍大型软件系统的开发介绍 1.软件工程方面的考虑软件工程方面的考虑2.软件系统开发软件系统开发实例介绍实例介绍于忠德
2、 2002年11月 于中国2大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)1.软件工程方面的考虑软件工程方面的考虑1.1 软件开发的生命周期软件开发的生命周期Software Life Cycle 1.2 软件质量保证软件质量保证Software Quality Assurance,SQA1.3 软件开发的方法软件开发的方法Software Dev Methodology于忠德 2002年11月 于中国3大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型
3、软件系统的开发介绍 (Development of Large Software Systems)1.1 软件开发的生命周期软件开发的生命周期市场调查市场调查(Marketing Investigation)需求分析需求分析(Requirement Specification)概要设计概要设计(High-Level Design)接口设计接口设计(Interface Design)详细设计详细设计(Low-Level Design)编码编码(Coding/Implementation)单元测试单元测试(Unit Testing)集成测试集成测试(Integration Testing)系统测试
4、系统测试(System Testing)售后服务售后服务(After-Sale Service)系统升级系统升级(System Upgrade)技术支持技术支持(Technical Support)于忠德 2002年11月 于中国4大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)1.1 软件开发的生命周期软件开发的生命周期(contd)(contd)市场调查市场调查需求分析需求分析概要设计概要设计接口设计接口设计详细设计详细设计编码编码单元测试单元测试集成测试集成测试系统测试
5、系统测试系统升级系统升级技术支持技术支持售后服务售后服务After SaleDesignTestingCodingRequirementSQA于忠德 2002年11月 于中国5大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)市场调查市场调查市场调查市场调查(Marketing Investigation)由市场部由市场部(Marketing Dept.)来完成,产品经来完成,产品经理理PM(Product Manager)负责负责了解用户需求,确立研发方向了解用户需求,确立研
6、发方向形成形成 MRD(Marketing Requirement Document)举例举例:在路由器上实现在路由器上实现IP电话功能电话功能企业局域网企业局域网,租用电信专线租用电信专线,连接位于不同城市的连接位于不同城市的总部与分部总部与分部提供附加业务提供附加业务,在局域网内打电话在局域网内打电话,零话费零话费!向局域网外打电话向局域网外打电话,只花只花本市话费本市话费!于忠德 2002年11月 于中国6大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)需求分析需求分析
7、需求分析需求分析(Requirement Specification)引言引言目的目的,范围范围 系统概述系统概述 系统体系结构系统体系结构,功能简单描述功能简单描述,数据流描述数据流描述 运行需求运行需求 对硬件环境的需求对硬件环境的需求,对软件环境的要求对软件环境的要求 需求分解需求分解 功能体划分功能体划分,功能体功能体1,功能体功能体2,功能体功能体n功能体描述功能体描述,需求条目需求条目 于忠德 2002年11月 于中国7大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software System
8、s)需求分析需求分析(contd)(contd)举例举例:IP电话系统的电话系统的语音处理模块语音处理模块下图描述了语音处理模块与其它主要模块之间的关系:于忠德 2002年11月 于中国8大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)需求分析需求分析(contd)(contd)需求条目需求条目:RTP/RTCP基本需求条目基本需求条目 RTP/RTCP包的字节顺序和对齐方式包的字节顺序和对齐方式 RTP数据包格式数据包格式 RTCP包结构与发送时间间隔包结构与发送时间间隔R
9、TP使用使用UDP偶数端口号,偶数端口号,RTCP使用下一个连续的使用下一个连续的奇数端口号奇数端口号RTP的端口号从的端口号从5000以上开始选择以上开始选择RTP包没有长度域,包没有长度域,RTP包依靠包依靠UDP提供长度指示提供长度指示RTP包的处理包的处理RTCP包的处理包的处理 于忠德 2002年11月 于中国9大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)需求分析需求分析(contd)(contd)OctetType765432101MV=2PXCC2MMPT3
10、Msequence number4M5Mtimestamp6M7M8M9Msynchronization source identifier(SSRC)10M11M12M13Ocontributing source identifiers(CSRC)14O15O16O17nOCSRC(一个(一个RTP包包头头中最多可包含中最多可包含15个个CSRC)可可变长变长度度MRTP包静荷(包静荷(语语音数据)音数据)于忠德 2002年11月 于中国10大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software
11、Systems)概要设计概要设计概要设计概要设计(High-Level Design)VERY IMPORTANT but VERY HARD!引言引言 目的目的,范围范围 子系统概述子系统概述 功能区域分割功能区域分割 功能区域功能区域1,功能区域功能区域n 功能区域描述功能区域描述,数据结构描述数据结构描述,需求条目需求条目 逻辑接口逻辑接口功能区域功能区域X到功能区域到功能区域Y的接口的接口 接口接口1,接口接口n 于忠德 2002年11月 于中国11大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large So
12、ftware Systems)概要设计概要设计(contd)(contd)举例:举例:VoIP功能模块的划分功能模块的划分 接口卡驱动(接口卡驱动(POTS卡驱动)卡驱动)PDRV语音模块语音模块VOICE呼叫控制呼叫控制CC呼叫控制(呼叫控制(FXS)CCFXS呼叫控制(呼叫控制(FXO)CCFXO呼叫控制(呼叫控制(H323)CCH323网络接口网络接口NETH.245 Control SignallingH245H.225.0 Call Signalling(Q.931)Q931H.225.0 RASRAS跟踪告警信息处理跟踪告警信息处理INFOASN.1编解码编解码ASN1配置数据配置
13、数据CFG动态存储管理动态存储管理DMM其他其他:虚拟操作系统,命令行接口虚拟操作系统,命令行接口VOS,OAM/CLI于忠德 2002年11月 于中国12大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)概要设计概要设计(contd)(contd)语音模块的功能区域划分:语音模块的功能区域划分:模块控制功能区域模块控制功能区域 RTP会话管理功能区会话管理功能区RTP包转发功能区包转发功能区RTCP包收发功能区和统计信息表包收发功能区和统计信息表Note1:VoIP 实时操作
14、系统任务实时操作系统任务(Tasks)或进程或进程(Processes)控制任务控制任务(VOIPC)语音任务语音任务(VOIPV)网络任务网络任务(VOIPN)于忠德 2002年11月 于中国13大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)概要设计概要设计(contd)(contd)于忠德 2002年11月 于中国14大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software S
15、ystems)概要设计概要设计(contd)(contd)功能区域功能区域1:模块控制功能区域:模块控制功能区域功能区域描述功能区域描述语音模块类语音模块类 class VOIP_CVoice的定义的定义语音任务主进程函数语音任务主进程函数 task_VOIPVMain()语音模块的初始化语音模块的初始化消息的分发消息的分发语音模块的配置、统计查询、跟踪监视、出错信息报语音模块的配置、统计查询、跟踪监视、出错信息报告告于忠德 2002年11月 于中国15大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Soft
16、ware Systems)概要设计概要设计(contd)(contd)需求条目需求条目 语音任务与消息队列的创建语音任务与消息队列的创建语音模块对象语音模块对象(object)的建立的建立语音任务主进程函数完成如下的功能语音任务主进程函数完成如下的功能语音模块的初始化语音模块的初始化 进入一个永久循环,进行消息分拣进入一个永久循环,进行消息分拣 接收消息的处理概述接收消息的处理概述 消息分拣的原则消息分拣的原则 RTP会话管理会话管理 RTP包的转发包的转发 RTCP包的接收与发送包的接收与发送 配置、跟踪监视、出错报告配置、跟踪监视、出错报告 VOS时钟超时时钟超时 于忠德 2002年11月
17、 于中国16大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)接口设计接口设计接口设计接口设计(Interface Design)引言引言 目的目的,范围范围 系统概述系统概述 系统体系结构系统体系结构,子系统说明子系统说明,子系统间接口机制子系统间接口机制 公共定义描述公共定义描述 消息结构消息结构,消息头消息头,通用规则通用规则,公共参数定义公共参数定义消息定义消息定义消息名消息名,方向方向,消息鉴别号消息鉴别号,消息体消息体于忠德 2002年11月 于中国17大型软件系统
18、的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)接口设计接口设计(contd)(contd)公共单元编码公共单元编码单元名单元名,单元描述单元描述,单元值单元值共享数据区共享数据区数据名数据名,数据描述数据描述,数据值域数据值域,使用机制使用机制,保护机制保护机制函数接口函数接口函数名函数名1,函数名函数名n 功能描述功能描述,输入量输入量,输出量输出量信号量信号量信号量信号量1,信号量信号量n信号量描述信号量描述,使用机制使用机制,保护机制保护机制于忠德 2002年11月 于中国18大
19、型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)接口设计接口设计(contd)(contd)举例:举例:VoIP子系统间接口机制子系统间接口机制VoIP子系统与其它子系统子系统与其它子系统:与与TCPUDP采用采用socket接口接口与与VOS采用函数接口采用函数接口VoIP子系统内部各模块之间子系统内部各模块之间与与ASN1,CFG,DMM采用函数接口采用函数接口其它子模块之间采用消息接口(通过其它子模块之间采用消息接口(通过VOS消息传递消息传递机制,以及机制,以及VoIP
20、内部消息分发机制)内部消息分发机制)于忠德 2002年11月 于中国19大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)详细设计详细设计详细设计详细设计(Low-Level Design)引言引言目的目的,范围范围功能区域分割功能区域分割任务划分任务划分任务设置任务设置,任务间调度策略任务间调度策略任务任务1名称名称,任务任务n名称名称功能描述,优先级,功能描述,优先级,输入项,输入项,输出项,处理过输出项,处理过程描述程描述于忠德 2002年11月 于中国20大型软件系统的
21、开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)详细设计详细设计(contd)(contd)功能区域设计功能区域设计功能区域功能区域1,功能区域功能区域n功能区域描述功能区域描述模块模块1名称名称,模块模块n名称名称模块描述,函数构成模块描述,函数构成函数函数1名称名称,函数函数n名称名称函数原型函数原型,功能描述功能描述,输入参数输入参数,输出参数输出参数调用者调用者,全局数据全局数据,算法描述算法描述,伪码描述伪码描述数据字典数据字典内存的需求内存的需求,结构结构消息消息,表格表格其他
22、数据结构其他数据结构于忠德 2002年11月 于中国21大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)详细设计详细设计(contd)(contd)举例:举例:VoIP语音模块语音模块给出数据结构给出数据结构(data structures)给出具体算法给出具体算法(algorithms)写出函数原型写出函数原型(prototypes)写出伪码描述写出伪码描述(pseudo-code)。系统详尽的详细设计能够使编码工作易于进行,系统详尽的详细设计能够使编码工作易于进行,软件蓝
23、领可以据此进行软件蓝领可以据此进行“代码填写代码填写”于忠德 2002年11月 于中国22大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)编码编码编码编码(Coding/Implementation)建立开发环境:建立开发环境:操作系统操作系统(Operating System)编程语言编程语言(Programming Language)编译器连接器调试器编译器连接器调试器(Compiler/Linker/Debugger)目标机工控机目标机工控机(Target)掌握编程规范
24、掌握编程规范编写代码编写代码于忠德 2002年11月 于中国23大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)编码编码(contd)(contd)举例:举例:VoIP软件开发软件开发实时嵌入式软件实时嵌入式软件(Real-Time,Embedded s/w)跨平台开发跨平台开发(Cross-Platform Dev)Host:Windows 98/NT/2000Target:Intel Pentium x86 processorConnection:Ethernet 实时操
25、作系统实时操作系统(RTOS)VxWorks集成开发环境集成开发环境(IDE)Tornado编程语言编程语言ANSI C&C+于忠德 2002年11月 于中国24大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)编码编码(contd)(contd)Cross-Platform DevelopmentLAN(Ethernet)Download&Debug于忠德 2002年11月 于中国25大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (
26、Development of Large Software Systems)编码编码(contd)(contd)软件编程规范软件编程规范 1(for VoIP only)目的:目的:为增加软件编码的一致性,减少程序员的理解误差为增加软件编码的一致性,减少程序员的理解误差适用范围:适用范围:适用于标准适用于标准CC+语言语言模块命名:模块命名:RTP(rtp),RTCP(rtcp),RAS(ras),etc.文件命名方法和内部格式文件命名方法和内部格式 一律为小写,格式为一律为小写,格式为“子系统名子系统名_模块名模块名.扩展名扩展名 e.g.voip_voice_rtp_session.cpp
27、头文件的格式头文件的格式,内容内容 于忠德 2002年11月 于中国26大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)编码编码(contd)(contd)前缀缩写前缀缩写:Hungarian Notation类型前缀类型名称BOOLb布尔型BYTEby无符号整型WORDw无符号短整型DWORDdw无符号长整型Charc字符型Shortn短整型 Inti整型Long l长整型Fn函数P指针st结构类型un联合类型a数组otOCTET STRINGsz以null做结尾的字符串型
28、于忠德 2002年11月 于中国27大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)编码编码(contd)(contd)常用类型的统一定义常用类型的统一定义 typedef int INT32;typedef unsigned int UINT32;typedef short INT16;typedef unsigned short UINT16;typedef char INT8;typedef unsigned char UINT8;typedef signed long
29、 LONG;typedef unsigned long DWORD;typedef unsigned short WORD;typedef unsigned char BYTE;typedef unsigned int BOOL;于忠德 2002年11月 于中国28大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)编码编码(contd)(contd)标识符标识符 本模块特有的命名风格自始至终保持一致,不要来回变化本模块特有的命名风格自始至终保持一致,不要来回变化普通常量、普通宏
30、:普通常量、普通宏:使用全大写字母加下划线的方式,结构为:模块名称使用全大写字母加下划线的方式,结构为:模块名称+下下划线划线+变量内容名称,例如:变量内容名称,例如:#define VOIP_VOICE_PAYLOAD_TYPE_G711 1 普通局部变量:普通局部变量:建议采用建议采用UNIX的全小写加下划线的风格或大小写混排的的全小写加下划线的风格或大小写混排的匈牙利方式,不要使用大小写和下划线混排的方式匈牙利方式,不要使用大小写和下划线混排的方式,例例如:如:ip_packet_recv_tid、arp_frame_count全局变量:全局变量:前缀为小写的前缀为小写的“g_”,然后是
31、模块名称加下划线,然后,然后是模块名称加下划线,然后是由两个以上单词形成的字符串,每个单词首字母大写,是由两个以上单词形成的字符串,每个单词首字母大写,其他字母小写,例如:其他字母小写,例如:g_Icmp_TraceRouteQueue、g_Ospf_InterfList于忠德 2002年11月 于中国29大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)编码编码(contd)(contd)指针变量:指针变量:命名前缀为小写的命名前缀为小写的“p_”,然后是由两个以上单词形成,
32、然后是由两个以上单词形成的字符串,每个单词首字母大写,其他字母小写,例如:的字符串,每个单词首字母大写,其他字母小写,例如:pIppkt、pAccessList如果是全局指针变量,则添加小写的如果是全局指针变量,则添加小写的“g_”,例如:,例如:g_pIppkt函数和过程名:函数和过程名:前缀为全小写的模块名称,中间为下划线,然后为由两前缀为全小写的模块名称,中间为下划线,然后为由两个以上单词形成的字符串,每个单词首字母大写,其他个以上单词形成的字符串,每个单词首字母大写,其他字母小写。例如:字母小写。例如:vos_MsgCreate()、icmp_PktRecv()调试用的编译开关:调试用
33、的编译开关:首尾均为下划线的全大写字符串,具体格式是:下划线首尾均为下划线的全大写字符串,具体格式是:下划线+子系统名称子系统名称+下划线下划线+模块名称模块名称+下划线下划线+调试内容名称调试内容名称+DEBUG+下划线,例如:下划线,例如:_IPF_IP_PACKET_DEBUG_SUPP_TCPUDP_UDP_DEBUG_于忠德 2002年11月 于中国30大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)编码编码(contd)(contd)可理解性可理解性注意运算符的优
34、先级,并用括号明确表达式的操作顺注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。序,避免使用默认优先级。源程序中关系较为紧密的代码应尽可能相邻,以形成源程序中关系较为紧密的代码应尽可能相邻,以形成一个相对独立的语意群。一个相对独立的语意群。除非很有必要,不要使用难懂的技巧性很高的语句。除非很有必要,不要使用难懂的技巧性很高的语句。于忠德 2002年11月 于中国31大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)编码编码(contd)(contd)语音模
35、块代码语音模块代码voip_voice.cppvoip_voice_main.cppvoip_voice_rtp_session.cppvoip_voice_rtp_endpoint.cppvoip_voice_rtcp_packet.cppvoip_voice.hvoip_voice_defs.hvoip_voice_rtp_session.hvoip_voice_rtp_endpoint.hvoip_voice_rtcp_packet.hvoip_message_voice.h于忠德 2002年11月 于中国32大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统
36、的开发介绍 (Development of Large Software Systems)单元测试单元测试单元测试单元测试(Unit Testing)编码完成后,测量每个程序单元(函数、算法等)编码完成后,测量每个程序单元(函数、算法等)侧重于程序单元的功能侧重于程序单元的功能(function)与结构与结构(structure)的正确性的正确性由每个由每个developer亲自进行亲自进行种类:种类:白盒测试白盒测试(White-Box Testing):保证代码结构编写无误:保证代码结构编写无误黑白盒测试黑白盒测试(Black-Box Testing):保证代码功能正确:保证代码功能正确回
37、归测试回归测试(Regression Testing):保证后续修改不影响以:保证后续修改不影响以前的代码前的代码需要驱动函数需要驱动函数(Drivers)和桩函数和桩函数(Stubs)有利于系统的逐步完成有利于系统的逐步完成于忠德 2002年11月 于中国33大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)集成测试集成测试集成测试集成测试(Integration Testing)完成单元测试之后,将各个功能模块连在一完成单元测试之后,将各个功能模块连在一起进行测试起进行测试
38、侧重于程序模块之间接口侧重于程序模块之间接口(interface)的正确的正确性,保证各个模块能够在一起正常工作性,保证各个模块能够在一起正常工作由开发组内的所有由开发组内的所有developer来配合进行来配合进行于忠德 2002年11月 于中国34大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)系统测试系统测试系统测试系统测试(System Testing)对开发出的整个软件产品(或一定的功能部对开发出的整个软件产品(或一定的功能部分)从使用者的角度进行测试分)从使用者的
39、角度进行测试侧重系统总体功能上的测试,一般不关注内侧重系统总体功能上的测试,一般不关注内部细节(也无从关注)部细节(也无从关注)一般由专门的测试部门进行,软件开发人员一般由专门的测试部门进行,软件开发人员不直接参与不直接参与发现问题后,测试部门反馈给软件开发部门,发现问题后,测试部门反馈给软件开发部门,后者针对问题进行分析,找到相应的责任人后者针对问题进行分析,找到相应的责任人员进行改进,完成后再次提交测试部门进行员进行改进,完成后再次提交测试部门进行测试,直到解决问题测试,直到解决问题于忠德 2002年11月 于中国35大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软
40、件系统的开发介绍 (Development of Large Software Systems)售后服务系统升级技术支持售后服务系统升级技术支持售后服务售后服务(After-Sale Service)配合销售部门对用户进行服务,入使用培训、配合销售部门对用户进行服务,入使用培训、问题解答等问题解答等系统升级系统升级(System Upgrade)软件版本升级、功能改进等软件版本升级、功能改进等技术支持技术支持(Technical Support)用户报告软件产品问题,组织开发人员修改用户报告软件产品问题,组织开发人员修改软件,解决问题,提高性能等软件,解决问题,提高性能等一般地,软件工程师使用
41、其一般地,软件工程师使用其25工作时间工作时间于忠德 2002年11月 于中国36大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)1.2 软件质量保证软件质量保证软件质量保证软件质量保证(Software Quality Assurance,SQA)定义定义:为保证软件产品和服务充分满足消费:为保证软件产品和服务充分满足消费者要求的质量而进行的有计划、有组织的活者要求的质量而进行的有计划、有组织的活动;动;目的目的:向用户及社会提供满意的:向用户及社会提供满意的高质量的软高质
42、量的软件产品;件产品;活动活动:含盖软件产品从产生到消亡的所有阶:含盖软件产品从产生到消亡的所有阶段;段;软件能力成熟度模型第二级(可重复级)的软件能力成熟度模型第二级(可重复级)的内容之一内容之一(SQA in SE CMM Level-2)于忠德 2002年11月 于中国37大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)1.2 软件质量保证软件质量保证(contd)(contd)实行实行SQA的原因与的原因与软件的维护代价越来越高软件的维护代价越来越高开发规程中应特别注
43、重代码的质量开发规程中应特别注重代码的质量严格遵循开发流程中的各项规章制度严格遵循开发流程中的各项规章制度良好的职业素养良好的职业素养 认真负责、方法得当认真负责、方法得当每个每个developer都应树立良好的质量意识,并掌握一定的质都应树立良好的质量意识,并掌握一定的质保方法保方法明确的需求分析明确的需求分析 详尽准确的设计详尽准确的设计 Design for Change细致的编码细致的编码 注意编程规范!注意编程规范!全面的单元测试与集成测试全面的单元测试与集成测试使用使用SQA工具,帮助提高代码质量工具,帮助提高代码质量于忠德 2002年11月 于中国38大型软件系统的开发介绍大型软
44、件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)1.2 软件质量保证软件质量保证(contd)(contd)SQA方法方法编程规范编程规范SQA工具工具静态工具:在程序运行之前检查代码静态工具:在程序运行之前检查代码PC-LINT 动态工具:在程序运行之中检查代码动态工具:在程序运行之中检查代码BoundsChecker,C-CoverSQA发现发现BUG的后续处理的后续处理MR:Modification Request记录,分配,解决,跟踪记录,分配,解决,跟踪于忠德 2002年11月 于中国39大型
45、软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)PC-LintSQA工具简介之一工具简介之一PC-LintPC-LINT是一种软件质量保证工具,即是一种软件质量保证工具,即一种更加一种更加严格的编译器;严格的编译器;可以查出普通可以查出普通compiler无法查出的错误,即那些无法查出的错误,即那些虽然完全合乎语法要求,但很可能是潜在的、不虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误;易发现的错误;许多国内外大型专业软件公司(许多国内外大型专业软件公司(微软、华为微软、
46、华为)都)都把把PC-LINT作为程序检查工具;作为程序检查工具;在程序合入正试版本或交付测试之前一定要保证在程序合入正试版本或交付测试之前一定要保证通过了通过了PC-LINT检查。检查。于忠德 2002年11月 于中国40大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)PC-Lint(contd)(contd)PC-LINT除了能指出简单语法错误除了能指出简单语法错误,还能指出以下还能指出以下的错误的错误:无法达到的语句无法达到的语句没有进入循环没有进入循环没有被使用的变量
47、没有被使用的变量函数参数从未使用函数参数从未使用没有赋值之前自动使用参数没有赋值之前自动使用参数函数在有些地方有返回值函数在有些地方有返回值,但在其他地方不返回但在其他地方不返回函数调用在不同地方使得参数个数不同函数调用在不同地方使得参数个数不同错误使用结构指针错误使用结构指针模糊使用操作符优先级模糊使用操作符优先级于忠德 2002年11月 于中国41大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)BoundsCheckerSQA工具简介之二工具简介之二BoundsCheck
48、er于忠德 2002年11月 于中国42大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)BoundsChecker(contd)(contd)BoundsChecker可以发现很多隐藏的、危害性可以发现很多隐藏的、危害性极大的错误。如:极大的错误。如:无效的参数无效的参数可疑的线程应用可疑的线程应用动态的内存越界操作动态的内存越界操作内存分配冲突内存分配冲突指向非法内存的指针指向非法内存的指针静态的内存越界操作静态的内存越界操作堆栈内存越界操作堆栈内存越界操作释放引起的内存泄
49、漏释放引起的内存泄漏重赋值引起的内存泄漏重赋值引起的内存泄漏资源泄漏资源泄漏未赋值的指针未赋值的指针数组下标越界数组下标越界指针越界指针越界函数指针指向非函数函数指针指向非函数返回指向局部变量的指针返回指向局部变量的指针于忠德 2002年11月 于中国43大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)BoundsChecker(contd)(contd)结合结合C-COVER一起使用一起使用 BoundsChecker是动态检查程序,即是在执行过程中是动态检查程序,即是在执
50、行过程中发现错误。发现错误。所以使用所以使用BoundsChecker检查程序时,应该保证能够检查程序时,应该保证能够覆盖所有代码,否则覆盖所有代码,否则BoundsChecker不会发现未覆盖不会发现未覆盖的代码中的错误。的代码中的错误。因此可以与因此可以与C-Cover工具结合起来执行。工具结合起来执行。于忠德 2002年11月 于中国44大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍大型软件系统的开发介绍 (Development of Large Software Systems)C-CoverSQA工具简介之三工具简介之三C-CoverWhat is C-Cove