武汉大学软件工程复习重点总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件工程复习
一、概论
1、软件的组成:程序+文档+数据;
软件的特点:更依赖于人、开发成本进度难以估计、正确性难保证、维护困难、不磨损老化、可长期使用;
软件开发的三个时期:程序设计语言兴起时期、结构化程序设计时期、软件工程与软件开发环境时期;
2、软件危机的表现:难以控制开发进度、软件工作量难以估计、软件修改维护困难,原因:需求问题、管理问题、方法工具问题、局限性;
3、软件工程是:(1)把系统化的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程化应用于软件中;(2)研究(1)中提到的途径;
软件工程三要素:以质量保证为基础的过程、方法、工具;
4、软件生存的三个时期:定义时期、开发时期、使用和维护时期;
软件生存的六个阶段:软件计划、需求分析、软件设计、实现编码、测试、维护;
5、瀑布模型
基本思想:分而治之
优点:规范管理开发过程、文档驱动
缺点:初期系统的需求难以完全确定、文档驱动、周期长
V型模型:瀑布模型+质量控制
适用范围:结构化方法、面向过程的软件开发方法,需求变化少,开发人员熟悉应用领域,低风险项目,使用环境稳定
6、原型模型
针对软件开发初期需求难以确定,采用快速原型法
基本思想:快速建立原型,完善用户需求
优点:用户参与、快速
缺点:快速、对开发环境要求高
适用范围:已有产品、有快速原型开发工具、进行产品移植或升级
二、软件质量评价
1、良软件结构:具有层次性,无回路块调用的软件结构
2、模块独立性测量
耦合:零耦合、数据耦合、控制耦合、公共环境耦合、内容耦合,尽量使用数据耦合,少用控制耦合,限制公共环境变量耦合的范围,完全不用内容耦合;
内聚:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚,内聚更重要
3、软件质量定性评价
用户角度:达到需求、界面友好、简单易学
开发人员角度:良结构、易测试、易维护、可移植
4、软件质量定量评价——软件度量:软件复杂性度量(规模、文本复杂性、控制结构的复杂性)、软件可靠性度量(系统故障率、软件修复与软件有效性、软
件可靠性估算)
5、软件质量好的宏观标准:可靠性、良软件结构、文档齐全
三、软件计划
1、任务:弄清开发项目的性质、目标、规模、可行性、成本、风险分析、开发计划等,并编写项目任务说明书(项目计划书、可行性分析报告)
2、可行性研究的内容:经济可行性(成本效益分析)、技术可行性(风险分析、资源分析、技术分析)、法律可行性、开发方案的选择
3、软件项目的量化估算:成本估算&工作量估算(代码行成本估算、阶段成本估算)、工程进度安排(甘特图、任务网络图)
四、软件需求分析
1、需求分析的任务:问题分析、需求描述、需求评审
2、初步获取需求技术:调研、阅读相关资料、市场问卷调查、同类产品用户手册等
3、需求内容:功能性需求、非功能性需求(技术需求)
4、需求建模方法
面向数据流的分析方法:结构化方法建模、实体关系图、数据流图、状态转换图
面向对象的分析方法
面向数据结构的分析方法
五、传统软件设计方法
1、设计启发规则:提高模块独立性(水平划分、垂直划分)、模块规模适中、深度广度扇入扇出适当、作用域在控制域内、降低接口的复杂程度、单出单入避免内容耦合、模块功能可预测
2、表示软件结构的图形工具:层次图(调用关系)、HIPO图(H图+IPO图+IPO 表)、结构图
3、软件系统设计技术
面向数据流的设计方法:DFD的类型决定映射方法(变换流、事务流、混合型)SA/SD方法优点:自顶向下,逐步求精,各模块可单独设计、编码、测试、修改SA/SD方法缺点:纸上设计,长时间偏离软件实体、开发周期长、剥离了数据/功能的关系、顶在何方,下到何处
面向数据结构的设计方法:Jackson方法、Warnier方法
原型法
4、详细设计
设计表示方法:流程图、PAD、伪码
流程图:
5、结构化程序设计(SP):避免用GOTO语句、自顶向下的程序设计、一种组织和编程方法、主要作用是使程序正确性的证明易于实现、讨论如何将大规模和复杂的流程图转换为一种标准形式,能用几种标准的控制结构通过嵌套来表示。
6、结构化定理:任何正规程序都可语义等价于由基集合{顺序、条件、循环}通过嵌套复合成结构化程序。
正规程序:有一个入口点和出口点、程序中的任何一个结点都可以找一条从入口点经过该点到出口点的路径。
六、软件编码
1、结构化程序设计的观点首要是强调好的结构而不是效率,它的目的在于编写结构清晰、易于理解,也易于验证的程序
七、软件测试
1、程序正确性证明
2、测试:也是软件的“建设性”,为了发现程序中的错误而执行程序的过程,证明程序错误,暴露错误;分为动态测试和静态测试。
3、动态测试分为黑盒测试(功能测试法)和白盒测试
黑盒测试方案:等价划分法、边界值分析法、错误推测法
等价划分的评价:选用等价类中的任意值/典型值作为用例、没有选用某些高效率的测试方案;
边界值分析的评价:边界值易发现错误,考虑输出等价类,联合使用等价划分和边界值分析法
白盒测试方案:语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖
4、软件测试的步骤与策略
单元测试:模块、白盒法
集成测试:接口、多以黑盒为主,辅以白盒
增式测试法:
自顶向下集成,深度优先策略、宽度优先策略
优势:尽早测试主要控制、关键选择(上层)、尽早实现软件的完整功能并验证、无需driver
缺点:需编写stub、底层关键模块测试晚、软件结构中没有重要的
数据自下往上流、并行测试困难
自底向上集成,
优势:无需stub、可尽早并行测试、可尽早发现底层关键模块的错误、
易建立测试条件和判定测试结果
缺点:需编写driver、接口出错发现较迟、系统轮廓形成较晚
混合法
确认测试:验证软件的有效性、以用户为主或用户积极参与、黑盒法
系统测试:软件作为计算机系统的一部分,与硬件、外设等其它系统结合起来,对计算机系统进行一系列的集成测试和确认测试
5、面向对象的软件测试:不能孤立测试单个操作,把操作作为类的一部分来测试(不能再‘真空’中孤立地进行测试操作,有必要在每个子类的语境中测试继承的操作)、OOM易于测试与纠错
八、软件维护
1、软件维护的类型:校正性维护/纠错性维护、适应性维护、完善性维护、预防性维护
2、提高可维护性的措施
需求分析:清晰、易读、结构好——易修改
设计:结构层次清晰、独立性强——修改局部化、灵活的数据逻辑结构——适应处理的变化
编码:编码规则、风格,SP,通用性高的PL
测试:测试充分
文档:
3、维护的副作用:修改软件后导致新错误的发生
编码的副作用——严格执行回归测试、数据的副作用——完善的设计文档资料、文档资料的副作用——对整个软件配置进行评审
九、软件管理
1、软件管理的内容:开发计划与进度管理、成本估算与控制、人员管理与组织管理、质量管理、文档管理