⭐️ 以下为软件工程课程期末复习重点总结,如果需要pdf版本可以评论或私信博主~
软工复习整理
一、软件工程概述
软件=程序+文档+数据
软件:复杂性、不可见性、服从性(软件服从硬件、行业需求等)、易变性
软件危机:
表现:规模大、复杂度增加、供需差增大、价格昂贵、开发速度慢、质量难以保证
两个方面的问题:如何开发软件以满足对软件日益增长的用户需求;如何维护不断膨胀的现有软件
解决途径:重视需求分析,与客户沟通;重视设计和实现过程的资料;充分的测试;维护和管理;规范的方法论和指导
软件工程:运用现代科学技术知识来设计并构造计算机程序以及开发、运行和维护这些程序所必需的相关文件资料;是开发、运行、维护、修复软件的系统方法论
软件工程三要素:方法、过程、工具
结构化开发方法学:自顶向下,逐级细化,过程式,适用于需求较为稳定
面向对象开发方法学:封装了数据及操作,可扩展,易维护
二、软件过程及其模型
软件生存周期:
划分为:开发、定义、运行三个时期
包括:可行性分析、项目计划、需求分析、软件设计、编码与测试、运行与维护
软件过程是软件生存周期中的一系列相关过程所涉及的活动
软件过程模型:软件过程的抽象表示,一种结构框架
瀑布模型:
每个阶段都会有循环反馈,顺序进行,文档驱动
顺序性和依赖性
末期才能看到开发成果,风险大,不能很好适应需求变化
适用于产品定义稳定,需求明确
原型模型:
尽可能快的构造一个简化模型
快速实现系统初步模型
适用于不能预先确切定义需求的软件项目
增量模型:
增量构造模型:
某些阶段按照瀑布模型,某些按照增量方式
可以尽早看到部分软件功能,发现问题
采用增量方式开发系统
演化提交模型:
在瀑布模型基础上,所有阶段进行增量开发
螺旋模型:
风险分析
适用于大而复杂
每个周期都有需求定义、风险分析、工程实现和评审
风险驱动
结合瀑布模型和快速原型
构件集成模型:
基于构件
开发过程是迭代的
统一过程模型:
各个阶段整合在一个框架
二维的软件开发模型
用例驱动
以架构为中心,迭代和增量
三、敏捷软件开发方法
敏捷方法两大主要特征:对适应性和人的关注
scrum开发过程:迭代式增量软件开发过程,适用于敏捷软件开发
实施scrum过程:
确定产品订单
分解产品订单成一系列冲刺订单
召开冲刺计划会议
进入冲刺开发周期,每天需要召开立会
整个冲刺周期结束,召开冲刺评审会,得到一个增量发布
召开冲刺反思会,计划增量的新功能和改进
燃尽图:
以任务数或时间为度量
实际剩余时间、预估剩余时间、实际花费时间
极限编程:适合于规模小、进度紧、需求不稳定、开发小项目
四、软件需求分析
软件需求分类:业务需求(组织者或客户)、用户需求(使用者)、功能需求(产品本身)、非功能需求
功能需求:完整性、一致性、准确性
非功能需求:性能、外部接口、质量属性
五、结构化分析
建模方法:数据流图(DFD) —功能域、实体关系图(E-R图)—信息域、状态转换图(STD)—行为域
面向数据流建模:
数据流图、数据字典(DD);自顶向下、逐层分解
数据流图:
数据字典:数据流条目、数据存储条目、数据项条目、加工条目
面向状态建模:
行为模型
适用于描述实时系统
模块的作用域:受该模块内一个判定影响的所有模块的集合
模块的控制域:模块本身以及其所有的下属模块的集合
六、软件设计
模块独立性:开发具有独立功能而和其它模块没有过多关联的模块
高内聚低耦合
内聚性:
功能性内聚:模块各个成分结合在一起,完成一个特定功能
顺序性内聚:模块内的各个任务是顺序执行,通常上一个任务的输出是下一个任务的输入
通信性内聚:模块内各个任务依靠公用数据,如使用同一个输入数据或者产生同一个输出数据
过程性内聚:各个任务必须按照一定的次序执行
过程性内聚与顺序性内聚的区别:顺序性内聚是输入流从一个处理单元到另一个处理单元;过程内聚是控制流从一个动作流向另一个动作
时间性内聚:模块内各个任务由相同的执行时间联系在一起
逻辑性内聚:模块通常由若干个逻辑功能相似的任务组成,通过模块外的一个开关量选择其一执行
偶然性内聚:纯属偶然
耦合性:
非直接耦合:没有信息传递,即没有耦合
数据耦合:交换的是简单变量,传递参数、基本数据类型,不是数据结构
特征耦合:交换数据结构
控制耦合:传递的不是一般数据,而是控制信息的开关或者标志量;逻辑性内聚的模块调用就是控制耦合
外部耦合:允许一组模块访问同一个全局变量
公共耦合:允许一组模块访问同一个全局性的数据结构
内容耦合:一个模块可以访问另一个模块中的内部数据;或者一个模块直接转到另一个模块内部
七、软件测试
静态测试:不运行被测程序,仅通过分析或者检查源程序;人工检测和计算机辅助静态分析
动态测试:黑盒测试、白盒测试
黑盒测试:等价类划分法、边界值划分法、错误推测法、因果图法
白盒测试:逻辑覆盖法(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖)、基本路径覆盖法、循环路径测试
程序图的环形复杂性:
V(G)=G的区域数
V(G)=E-N+2
V(G)=P+1 (P是G中判定的节点数)(多个汇聚到1个—>一个节点)
软件测试步骤:
包含:单元测试、集成测试、确认测试、系统测试
单元测试:为测试模块开发驱动模块、桩模块
集成测试:自顶向下、自底向上
自顶向下:深度或广度优先;每次代替一个桩模块;每集成一个模块立即测试一遍;可以尽早发现错误;在测试高层时低层处理采用桩模块,不能反映真实情况
自底向上:最低层开始集成测试;不需要桩模块;最后一个模块加入时才有整体形象
确认测试:一般运用黑盒测试
系统测试:把已经确认的软件系统移植到实际运行环境中;包括功能测试和性能测试
八、面向对象分析
面向对象分析与设计是用例驱动的
逻辑模型:对象模型、类模型、包模型
三层架构:界面层、业务逻辑层、数据访问层;区分层次是为了“高内聚低耦合”思想
MVC模式的Web体系结构:业务逻辑、数据、界面显示分离;包括视图、控制器、模型;耦合性低、重用性高、有利于开发,提高生产效率、可维护性高
包图:同类的类、对象、模型放在一起;高内聚低耦合
精化类图:依赖、关联、泛化、实现
九、软件维护
软件维护:软件生存周期的最后阶段,时间最长
类型:纠错性维护、完善性维护(占比最大)、适应性维护、预防性维护
十、软件项目管理
项目的五个阶段:启动、计划、实施、控制、首尾阶段
代码行数(LOC)、功能点(FP)
估算功能点:估算变量的期望值(EV)=(Sopt+4xSm+Spess)/6
计算功能点数:FP=4xInpEV+5xOutEV+4xInqEV+10xMafEv+7xInfEV
计算技术复杂性因子(TCF)=0.65+0.01XDI
FP=UFPxTCF
⛳ 你好哇,我是小瑾,是一名在校大学生~
⛵目前博文包含课程设计、csp刷题、算法介绍、当下科技热点分享、网站软件推荐等等哦,还会更新学习到的深度学习、视觉等方面的知识~(如果发现你和博主是一个学校,那么仔细找找,也许会找到许多你需要的东西✌️)
⛄一个希望与大家携手共进的小博主
✍关注我,让你的代码之旅不再孤独