软件工程参考2doc.docx
- 文档编号:24926745
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:93
- 大小:371.05KB
软件工程参考2doc.docx
《软件工程参考2doc.docx》由会员分享,可在线阅读,更多相关《软件工程参考2doc.docx(93页珍藏版)》请在冰豆网上搜索。
软件工程参考2doc
第一章
1﹑软件产品的特性是什么?
产品特性:
⑴是一种逻辑产品,与物质产品有很大的区别。
⑵软件产品的生产主要是研制,生产成本主要在开发和研制,开发研制完成后,通过复制就产生了大量软件产品。
⑶软件产品不会用坏,不存在磨损,消耗。
⑷生产主要是脑力劳动,还末完全摆脱手工开发方式,大部分产品是"定做"的
⑸开发软件的费用不断增加,致使生产成本相当昂贵。
2﹑软件生产有几个阶段?
各有何特征?
⑴程序设计时代:
这个阶段生产方式是个体劳动,使用的生产工具是机器语言,汇编语言。
⑵程序系统时代:
这个阶段生产方式是小集团合作生产,使用的生产工具是高级语言,开发方法仍依靠个人技巧,但开始提出结构化方法。
⑶软件工程时代:
这个阶段生产方式是工程化的生产,使用数据库﹑开发工具﹑开发环境﹑网络﹑分布式﹑面向对象技术来开发软件。
3﹑什么是软件危机?
产生原因是什么?
软件开发技术的进步未能满足发展的要求。
在软件开发中遇到的问题找不到解决的办法,问题积累起来,形态尖锐的矛盾,导致了软件危机。
产生原因:
⑴软件规模越来越大,结构越来越复杂。
⑵软件开发管理困难而复杂。
⑶软件包开发费用不断增加。
⑷软件开发技术落后。
⑸生产方式落后,仍采用手工方式。
⑹开发工具落后,生产率提高缓慢。
4﹑什么是软件工程?
它目标和内容是什么?
软件工程就是用科学的知识程和技术原理来定义,开发,维护软件的一门学科。
软件工程目标:
付出较低开发成本;达到要求的功能;取得较好的性能;开发的软件易于移植;只需较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。
软件工程内容:
研究内容包括开发技术和开发管理两个方面。
开发技术主要研究:
软件开发方法,开发过程,开发工具和环境。
开发管理主要研究:
软件管理学,软件经济学,软件心理学。
5﹑软件工程面临的问题是什么?
软件工程需要解决的问题:
软件的费用,可靠性,可维护性,软件生产率和软件的重用。
6﹑什么是软件生存周期?
它有哪几个活动?
软件生存周期:
一个软件从提出开发要求开始直到该软件报废为止的整个时期。
包括:
可行性分析和项目开发计划,需求分析,概要设计,详细设计,编码,测试,维护。
7﹑什么是软件生存周期模型?
有哪些主要模型?
生存周期模型:
描述软件开发过程中各种活动如何执行的模型。
对软件开发提供强有力的支持,为开发过程中的活动提供统一的政策保证,为参与开发的人员提供帮助和指导,是软件生存周期模型化技术的基础,也是建立软件开发环境的核心。
主要有:
瀑布模型,增量模型,螺旋模型,喷泉模型,基于知识的模型,变换模型。
8﹑什么是软件开发方法?
有哪些主要方法?
使用早已定义好的技术集及符号表示习惯来组织软件生产的过程。
通过使用成功的软件开发方法,在规定的投资和时间内,开发出符合用户需求的高质量的软件。
软件开发方法是克服软件危机的重要方面之一,对软件工程及软件包产业的发展起了不可估量的作用。
主要有:
结构化方法,JACKSON方法,维也纳开发方法﹙VDM﹚,面向对象开发方法。
第二章
1.可行性研究的任务是什么?
可行研究的任务:
首先需要进行概要的分析研究,初步确定项目的规模,目标,约束和限制。
分析员再进行简要的需求分析,抽象出项目的逻辑结构,建立逻辑模型。
从逻辑模型出发,经过压缩的设计,探索出若干种可供选择的解决方法,对每种解决方法都要研究它的可行性。
主要从三个方面考虑:
⑴.技术可行性:
一般要考虑的情况包括开发的风险即设计出的系统能否达到要求的功能和性能;资源的有效性;相关技术的发展是否支持;
⑵.经济可行性:
进行开发成本的估算以及了解取得效益的评估,确定要开发的项目是否值得投资。
⑶.社会可行性:
要开发的项目是否存在任何侵权问题,运行方式在用户组织内是否可行,现有管理制度﹑人员素质﹑操作方式是否可行。
2.可行性研究有哪些步骤?
⑴.确定项目规模和目标;
⑵.研究正在运行的系统;收集﹑研究﹑分析现有系统的文档资料,实地考察系统访问有关人员,然后描绘现有系统的高层系统流程图。
⑶.建立新系统的高层逻辑模型;使用数据流图和数据字典描述数据在系统中的流动和处理情况。
⑷.导出和评价各种方案;导出若干较高层次的物理解决方法,根据技术可行性﹑经济可行性﹑社会可行性进行评估,得到可行的解决方法。
⑸.推荐可行方案;进行成本~效益分析,决定该项目是否值得开发,若值得开发那么解决方案是什么,并且说明该方案可行的原因和理由。
⑹.编写可行性研究报告;将上述可行性过程的结果写成相应文档,即可行性研究报告。
3.可行性研究报告有哪些主要内容?
⑴.引言:
编写本文档的目的;项目名称﹑背景;本文档用到的专门术语和参考资料。
⑵.可行性研究前提:
说明开发项目的功能﹑性能和基本要求;达到的目标;各种限制条件;可行性研究方法和决定可行性的主要因素。
⑶.对现有系统的分析:
说明现有系统的处理流程和数据流程;工作负荷;各项费用支出;所需各类专业技术人吧和数量;所需各种设备;向有系统存在什么问题。
⑷.所建议的技术可行性分析:
所建议系统的简要说明;处理流程和数据流程;与现有系统比较的优越性;采用所建议系统对用户的影响;对各种设备﹑现有软件﹑开发环境﹑运行环境的影响;对经费支出的影响;对技术可行性的评价。
⑸.所建议系统的经济可行性分析:
说明建议系统的确良各种支出,各种效益;收益投资比;投资顺收周期。
⑹.社会因素可行性分析:
说明法律因素,对合同责任﹑侵犯专利权﹑侵犯版权等问题的分析;说明用户使用可行性,是否满足用户行政管理﹑工作制度﹑人吧素质的要求。
⑺.其它可供选择方案:
逐一说明其他可供选择的方案,并说明未被推荐的理由。
⑻.结论意见:
说明项目是否能开发;还需什么条件才能开发;对项目目标有何变动等。
4.成本--效益分析可用哪些指标进行度量?
⑴.投资回收率:
通常把建立系统若干年后能取得的收益折算成现在的价值和开发系统所需的费用进行比较得出投资回收率。
⑵.投资回收期:
就是使累计的经济效益等于最初的投资费用所需的时间。
⑶.纯收入:
整个生存周期之内的累计经济效益(折成现在值)与投资之差。
5.项目开发计划有哪些内容?
⑴.项目概述:
说明项目的各项主要工作;说明软件的功能﹑性能;为完成项目应具有的条件;用户及合同承包者承担的工作完成的期限及其他条件限制;应交付的程序名称;所使用的语言及程储形式;应交付的文档。
⑵.实施计划:
说明任务的划分,各任务责任人,项目开发进度,项目的预算,各阶段的费用支出,各阶段应完成的任务,用图表说明每项任务的开始和完成时间。
⑶.人员组织及分工:
所需人员类型﹑数量﹑组成结构。
⑷.交付期限:
最后完工日期。
第三章
⒈什么是需求分析?
需求分析阶段的基本任务是什么?
需求分析:
开发人员准确地理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的需求规格说明的过程。
基本任务:
⑴问题识别:
双方确定对问题的综合需求,这些需求包括功能需求,性能需求,环境需求,用户界面需求。
⑵分析与综合,导出软件的逻辑模型
⑶编写文档:
包括编写"需求规格说明书","初步用户使用手册","确认测试计划","修改完善软件开发计划"
⒉什么是结构分析方法?
该方法使用什么描述工具?
结构化分析:
简称SA,面向数据流进行数据分析的方法。
采用自顶向下逐层分解的分析策略。
顶层抽象地描述整个系统,底层具体地画出系统工程的每个细节。
中间层则是从抽象到具体的过渡。
使用数据流图,数据字典,作为描述工具,使用结构化语言,判定表,判定树描述加工逻辑。
⒊结构化分析方法通过哪些步骤来实现?
⑴了解当前系统的工作流程,获得当前系统的物理模型。
⑵抽象出当前系统的逻辑模型。
⑶建立目标系统的逻辑模型。
⑷作进一步补充和优化。
⒋什么是数据流图?
其作用是什么?
其中的基本符号各表示什么含义?
数据流图(DFD):
以图形的方式描述数据在系统中流动和处理的过程。
只反映系统必须完成的逻辑功能,是一种功能模型。
⒌画数据流图应注意什么事项?
命名:
不能使用缺乏具体含义的名字,加工名应能反映出处理的功能。
画数据流而不是控制流。
数据流名称只能是名词或名词短语,整个图中不反映加工的执行顺序。
一般不画物质流。
每个加工至少有一个输入数据流和一个输出数据流,反映出此加工数据的来源与加工的结果。
编号:
某个加工分解成加一张数据流图时,上层图为父图,下层图为子图。
子图应编号子图上的所有加工也应编号,子图的编号应与父图的编号相对应。
父图与子图的平衡:
子图的输入输出数据流同父图相应加工的输入输出数据流必须一致
局部数据存储:
当某慨数据流图中的数据存储不是父图中相应加工的外部接口,而只是本图中某些加工之间的数据接口,则称这些数据存储为局部数据存储。
注意数据流图的易理解性。
⒍什么是数据字典?
其作用是什么?
共有哪些条目?
数据字典(DD)用来定义数据流图中的各个成分的具体含义。
有以下四类条目:
数据流,数据项,数据存储,基本加工。
具体条目内容及举例如下:
数据流条目
数据流名称:
订单
别名:
无
简述:
顾客订货时填写的项目
来源:
顾客
去向:
加工1"检验订单"
数据流量:
1000份/每周(单位时间内的传输次数)
组成:
编号+订货日期+顾客编号+地址+电话+银行帐号+货物名称+规格+数量
数据存储条目
数据存储名称:
库存记录
别名:
无
简述:
存放库存所有可供货物的信息
组成:
货物名称+编号+生产厂家+单价+库存量
组织方式:
索引文件,以货物编号为关键字
查询要求:
要求能立即查询
数据条目
数据项名称:
货物编号
别名:
G-No,G-num,Goods-No
简述:
本公司所有货物的编号
类型:
字符串
长度:
10
取值范围及含义:
第一位:
进口/国产
第2-4位:
类别
第5-7位:
规格
第8-10位:
品名编号
加工条目
加工名:
查阅库存
编号:
1﹒2
激发条件:
接收到合格订单时
优先级:
普通
输入:
合格合格订单
输出:
可供货订单,缺货订单
加工逻辑:
根据库存记录
IF订单项目数量<该项目库存量临界值
THEN可供货处理
ELSE此订单缺货,登录,待进货后再处理
ENDIF
⒎描述加工逻辑有哪些工具?
加工逻辑的描述:
一般用结构化语言,判定表,判定树
结构化语言是介于自然语言和形式语言之间的一种半形式化语言。
它的结构可分里层和内层
⑴外层:
用来描述控制结构,采用顺序,选择,重复三种基本结构。
①顺序结构:
是一组祈使语句,选择语句,重复语句的顺序排列
②选择结构:
一般用IF-THEN-ELASE-ENDIF,CASE-OF-ENDCASE等关键词。
③重复结构:
一般用DO-WHILE-ENDDO,REPEAT-UNTIL等关键词。
⑵内层:
一般采用祈使语句的自然语言短语,使用数据字典中的名词和有限的自定义词,其动词含义要具体,尽量不使用形容词和副词来修饰。
例:
加工逻辑描述为,如果申请者的年龄在21岁以下,要额外收费;如果申请者是21岁以上并是26岁以下的女性,适用于A类保险;如果申请者是26岁以下的已婚男性,或者是26岁以上的男性,适用于B类保险;如果申请者是21岁以下的女性或是26岁以下的单身C类保险。
附此之外的其他申请者都适用于A类保险。
⒏什么是IDEF方法?
IDEF0方法有哪些特点?
IDEF方法是美国空军针对计算机辅助制造工程项目中用于进行复杂系统分析和设计的方法,是在结构化分析方法基础上提出来的。
包括:
IDEF0描述系统的功能活动及联系,建立系统的功能模型。
即反映系统"做什么"折功能。
IDEF1描述系统的信息及联系,建立系统的信息模型。
IDEF2进行系统模拟,建立系统的动态模型。
IDEF0特点:
⑴采用方框和箭头等简单图形符号描述系统的活动和数据流,描述活动所受的约束条件及实现机制。
如下图描述,其中输入为完成某活动时所需的数据,输出指执行活动产生时的数据,控制活动指所受到的约束条件,机制是指活动由谁来完成。
⑵采用严格的自顶向下﹑逐层分解的方式建立系统功能模型。
⒐简述SA方法的优缺点。
SA方法是软件需求分析中公认的,有成效的,技术成熟,使用广泛的一种结构化分析方法。
较适用于开发数据处理类型软件的需求分析。
利用图形等半形式化工具表达需求,简明,易读,也易于使用。
但也存在一些弱点,表现如下:
⑴SA方法仅是一个静态模型,没有反映处理的顺序,即控制流程。
⑵SA方法使用DFD在分析与描述"数据要求"方面是有局限的,只有与数据库技术中的实体联系图(ER图)结合起来,才能较完整地描述用户对系统的需求。
⑶DFD不适合描述人机界面系统的要求,一些人机交互较频繁的软件系统。
⑷SA方法要与形式化方法结合起来,才能更精确地描述软件需求。
⑸要借助需求分析工具,提高需求分析的质量及效率。
⒑某银行的计算机储蓄系统功能是:
将储户的存户填写的存款单或存款单输入系统,如果是存款,系统记录存款人姓名﹑住址﹑存款类型﹑存款日期﹑利率等信息,并打印出存款单给储户;如果是取款,系统计算清单给储户。
请用DFD,IDEF0描绘该功能的需求,并建立相应数据字典。
答:
数据流名称:
取款单、存款单
别名:
无
简述:
顾客存/取款时填写的单据
来源:
顾客
去向:
核查
数据流量:
200份/天
组成:
日期+[取|存款金额]+姓名+地址+[存/取款类型]+密码+{账号}
数据流名称:
存款凭证
别名:
无
简述:
顾客存款后得到的凭据
来源:
银行存款系统
去向:
顾客
数据流量:
200份/天
组成:
日期+存款金额+储户姓名+储户地址+存款类型+账号+利率+操作员
数据流名称:
结算单
别名:
无
简述:
顾客取款时得到的利率清单
来源:
银行储蓄系统
去向:
顾客
数据流量:
200份/天
组成:
取款日期+取款金额+储户姓名+储户地址+存款类型+利息+总金额+操作员
数据流名称:
存/取款信息
别名:
无
简述:
系统检查确认后得到的存/取信息
来源:
银行储蓄系统
去向:
登录
数据流量:
200份/天
组成:
日期+[存|取款金额]+储户姓名+储户地址+存款类型+账号+利率+密码+操作员
数据流名称:
付款信息
别名:
无
简述:
存储系统处理的取款信息
来源:
银行储蓄系统
去向:
付款处理
数据流量:
200份/天
组成:
日期+取款金额+储户姓名+储户地址+存款类型+账号+利息+总金额+操作员
数据存储名称:
账卡
别名:
无
简述:
存放用户信息及存取款情况
组成:
储户姓名+储户地址+账号+|日期|+[存/取款金额]+存款类型+利率+密码+操作员
组织方式:
数据文件,以储户姓名或账号为关键字进行索引
查询要求:
要求能立即查询并修改
数据项名称:
存款类型
别名:
无
简述:
国家规定的几类存款方式
类型:
字符串
长度:
2位
取值范围及含义:
00:
定期;01:
零存整取;10:
活期;11:
定/活两便
加工名:
核查
编号:
激发条件:
接受存款单或取款单
输入:
存款单或取款单
输出:
认定的合格的村/取款信息
加工逻辑:
根据账卡及用户存/取款单据
if单据=存款单then
存款单据是否填写规范,是否与现金一致
else
审核是否为有效取款单,取款金额不得超出存款金额,密码是否正确
⒒某图书管理系统有以下功能:
⑴借书:
输入读者借书证。
系统首先检查借书证是否有效,若有效,对于第一次借书的读者,在借书证上建立档案。
否则,查阅借书文件,检查该读者所借图书是否超过10本,若已达10,拒借,末达10本,办理借书(检查库存,修改库存目录并将读者借书情况录入借书文件。
)
⑵还书:
从借书文件中读出与读者有关的记录,查阅所借日期,如超期(3个月)作罚款处理。
否则,修改库存目录与借书文件。
⑶查询:
通过借书文件,库存目录文件查询读者情况﹑图书借阅及库存情况,打印统计表。
解:
数据字典
数据流名称:
借书
别名:
借书单
简述:
读者借书时填写的单据
来源:
读者
去向:
审核借书
数据流量:
250份/天
组成:
借书证编号+借阅日期+书名+借阅方式+密码+借阅人
数据流名称:
还书
别名:
无
简述:
读者还书时附带的数据
来源:
读者
去向:
审核还书
数据流量:
250份/天
组成:
借书证编号+借阅日期+书名+借阅方式
数据存储名称:
借书文件
别名:
无
简述:
借书证编号+借阅日期+书名+借阅方式+密码+借阅人+操作员
查询要求:
要求能立即查询并修改
数据存储名称:
库存文件
别名:
无
简述:
存放图书出/入库信息
组成:
书名+出版社+作者+出版日期+入库数据+总数量+(内容简介)+当前库存量
组织方式:
数据文件,以书名为关键字进行索引
查询要求:
要求能立即查询并修改
加工名:
审核借书证
编号:
1.1
激发条件:
接受到借书证
输入:
借书证
输出:
认定合格的借书证
加工逻辑:
根据借书文件及读者借书证
if借书证编号在借书文件存在and未过期and密码正确then
借书证有效
else借书证无效
⒓某厂对部分职工重新分配工作的政策是:
年龄在20岁以下者,初中文化程度脱产学习,高中文化程度当电工。
20岁至40岁之间,中学文化程度,男性当钳工,女性当车工,大学文化程度都当技术员。
年龄在40岁以上者,中学文化程度当材料员,大学文化程度当技术员。
请用结构化语言﹑判定表或判定树描述上述问题的加工逻辑。
结构化语言:
CASE年龄<20
CASE文化程度初中
分配工种脱产学习
CASE文化程度高中
分配工种电工
ENDCASE
CASE年龄<=40.AND.>=20
CASE文化程度初中.OR.高中
CASE性别男
分配工种钳工
CASE性别女
分配工种车工
ENDCASE
ENDCASE
CASE文化程度大学
分配工种技术员
ENDCASE
ENDCASE
CASE年龄>40
CASE文化程度初中.OR.高中
分配工种材料员
CASE文化程度大学
分配工种技术员
ENDCASE
ENDCASE
第4章
1.什么是软件概要设计?
该阶段的基本任务是什么?
把一个软件需求转换为软件表示时,首先设计出软件总的体系结构。
称为概要设计或结构设计。
基本任务:
⑴设计软件系统结构,具体为:
采用某种设计方法,将一个复杂的系统按功能划分为模块。
确定每个模块的功能。
确定模块之间的调用关系。
确定模块之间的接口(模块之间传递的信息)
评价模块的结构质量
⑵进行数据结构及数据库的设计
⑶编写概要设计的文档
主要内容有:
概要设计说明书,数据库说明书(DBMS的简介,概念模型,逻辑设计,结果)用户手册,修订测试计划(测试的策略﹑方法﹑步骤)
⑷评审:
是否完整地实现了规定的功能﹑性能要求。
设计方案是否可行。
关键的处理及内部接口定义的正确性,有效性,各部分的一致性。
2.软件设计的基本原理包括哪些内容?
⑴模块化:
模块是软件的组成部分,是具有独立功能且可命名的一段程序,所有模块组成
整体,可以满足问题的要求。
模块化即按照一定的原则,将软件划分成若干个模块,每个模块完成一个特定的功能,然后把这些模块按照某种方法组装成一个软件系统。
(可降低复杂度、减少工作量)
模块具有以下几种特性:
接口:
模块的输入输出。
功能:
指模块实现什么功能。
逻辑:
描述模块内部如何实现要求及所需的数据。
状态:
该模块的运行环境,模块间调用与被调用关系。
⑵抽象:
认识复杂现象过程所使用权的工具,只考虑事物本质的共同特性,忽略细节和其它因素。
通过抽象确定组成软件的过程实体。
⑶信息隐蔽:
将模块实现自身功能的细节与数据"隐蔽"起来。
模块间仅交换为完成系统功能所必须的信息。
⑷模块独立性:
每个模块只完成系统要求的独立的子功能。
3.衡量模块独立性的两个标准是什么?
各表示什么含义?
内聚和耦合
内聚:
又称为块内联系,指模块内部各成分之间相互关联的程度,以高内聚为设计目标。
耦合:
也称块间联系,模块之间相互联系程度的度量,联系越紧密,耦合性越强,独立性越差,以低耦合为设计目标。
4.模块的耦合性有哪几种?
各表示什么含义?
⑴内容耦合:
一个模块直接操作或修改另一模块的数据,或者不通过正常入口直接转入另一模块
⑵公共耦合:
两个或多个模块通过共同引用一个全局数据环境相互作用
⑶控制耦合:
模块之间通过传递控制信息相互作用
⑷标记耦合:
两个模块之间通过传递公共指针或地址相互作用的耦合
⑸数据耦合:
模块之间通过传递数据交换信息
⑹无耦合:
模块间无任何关系,独立工作
5.模块的内聚性有哪几种?
各表示什么含义?
⑴偶然内聚:
一个模块各个成分之间毫无关系
⑵逻辑内聚:
将几个逻辑上相关的功能放在同一个模块中
⑶时间内聚:
一个模块完成的功能在同一时间执行
⑷过程内聚:
一个模块内部的处理成分是相关的,而且必须以特定的次序执行
⑸通信内聚:
一个模块的所有成分都集中在同一个数据结构上
⑹顺序内聚:
一个模块的各个成分同一个功能密切相关,而且一个成分的输出,作为另外一个成分的输入
⑺功能内聚:
模块内的所有成分属于一个整体,完成单一的功能。
(内聚最高)
6.什么是软件结构?
简述软件结构设计的优化准则。
⑴改进软件结构,提高模块独立性首先设计出软件初始结构,评价该结构,通过模块分解或合并,力求降低耦合提高内聚。
⑵模块的规模应该适中
⑶模块结构的深度、宽度、扇出和扇入应适中
深度:
软件结构中控制的层数
宽度:
软件结构中同一层次上最大模块总数
扇入:
某一模块有多少直接调用它的上级模块数目(越大越好)
扇出:
一个模块直接控制(调用)下级模块的数目。
(越少越好,3,4个为宜,不超过9个,
"顶层扇出较高,中间扇出较少,底层模块高扇入多"
⑷一个模块的作用域(范围),应处在这个模块的控制域(范围)之内
模块的作用域:
受该模块内一个判定影响的所有模块的集合
模块的控制域:
这个模块本身以及所有直接或间接从属于它的模块的集合
7.什么是模块的影响范围?
什么是软件的控制范围?
它们之间应建立什么关系?
模块的影响范围(作用域):
受该模块内一个判定影响的所有模块的集合
模块的控制范围(控制域):
这个模块本身以及所有直接或间接从属于它的模块的集合
一个模块的影响范围(作用域),应处在这个模块的模块的控制范围(控制域)内。
8.什么样是"事物流"?
什么是"变换流"?
试将相应形式的数据流图转换为软件结构图
数据流图(DFD)一般可分为"变换流","事物流"两种。
"变换流":
由输入﹑输出﹑变换(或称处理)三部分组成,是一顺序结构。
"事物流":
它的某个加工,分离成许多发散的数据流,形成许多加工路
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 参考 doc