软件工程整理

2、软工问题(基本上群文件的知识点总结就是)
1)软件工程基础
① 软件危机的概念,出现原因,解决办法。
软件危机是在开发和维护软件的过程中,遇到的一系列严重的问题。
原因:需求不明确、开发复杂度越来越高、开发规模越来越大、缺乏正确理论指导
???????????????????????????????????????

② 软件工程的概念。
软件工程是应用计算机科学技术以及工程管理原则和方法,按预算和进度实现满足用户要求的软件产品工程

③ 软件的生命周期有哪些。
建立工程、需求分析、设计、编码、测试、上线和维护

④ 软件开发模型:瀑布模型、快速原型模型、增量模型、喷泉模型等模型的概念和原理。
2)需求分析
① 数据流图的定义、功能、组成元素(20年我被问了)。
DFD 叫做 data-flow-diagram
DFD 方块表示数据源或宿,直线加箭头标示数据流,圆圈表示加工,两个横线表示文件
补充符号:*表示全部输入来了才能干活;+表示一个输入来了就能干活;圈加表示只能有一个输入来才能干活。
数据流图是用数据流转的方式表示系统逻辑。

② 数据字典的组成元素,定义。
数据字典就是对DFD图中元素定义的集合。
包括:数据源条目、数据流条目、数据处理条目、数据文件条目

③ 获取需求的方法。
发布调研表、开会、与专家座谈、实地考察、查阅资料
④ E-R即实体-联系图的组成元素,定义。
E-R 叫做 entity-relationship diagram,也叫实体-联系图
提供了实体、属性、联系的方法,用于描述现实世界的概念模型
实体用方框表示,属性用椭圆表示,联系用菱形表示

⑤ 状态转移图的定义、组成元素。
STD 叫做 state-translation-diagram,
状态转移图简称状态图,
通过描述系统状态以及引起系统状态转换的事件,来描述系统的行文
点表示初态,圈点表示终态,直线加箭头表示迁移(经过某个事件),3层方块表示中间态(状态名 状态变量 活动do exit)

⑥ UML的全部图,尤其是类图。
部队包袱够累
部——部署队——对象图包——包图袱——复合图够——构件图累——类图
用东西装信是管制
用 —— 用例图 东 —— 活动图 西 —— 顺序图 装 —— 状态图 信 —— 通信图 是 —— 定时图 管 —— 交互概观图 制 —— 制品图
所有的图都需要画一遍????????????????????????????????????????????????
1、需求
采用用例图描述需求。
2、 分析
采用类图描述静态结构
采用顺序图、合作图、活动图、状态图描述动态行为
3、设计
采用类图、包图,对类的接口进行设计
4、 实现
将类用某现象对象语言实现
5、继承与交付
构件图、包、部署图

⑦ 用例图。
是从外部看系统,以一个不懂代码的人的角度去看系统
用例图描述的是:一个系统应该做什么的图
用例图由:参与者 用例 系统边界 箭头
/关联关系(用户登录系统) 人->登录系统
/泛化关系(一个基础用例被多个子用例继承)指向父类
/包含关系(一个基础用例包括了多个小步骤) <<include>>
/扩展关系(特定条件下执行的用例) <<extend>>

⑦ 类图
类图是ER图的延申
类的表示:
普通类:三层正方形,姓名,属性,方法
接口类:和普通类相同,右边直线加圆圈
子类继承父类: 直线三角形指向父类
类实现接口:虚线三角形指向接口
类依赖另一个类:虚线箭头指向
关联关系:直线连接
聚合关系:直线菱形
组合关系:直线黑色菱形

⑦ 对象图
描述的某一瞬间 对象的状态和他们之间的关系
方块表示对象,直线连接表示关系

⑦ 包图
1.分析系统模型元素,将概念上/语义上相近的模型元素放到一个包内
2.对每个包,设置可见性 public protected private
3.确定包和包之间的依赖关系
4.确定包和包之间的泛化关系
5.继续绘制/简化包图

⑦ 构件图
表示系统的静态实现视图

⑦ 部署图
表示有几个服务器,几个客户端,服务器之间的调用

⑦ 活动图
用于分析用例
菱形的判断/
一个点表示初态/
圈加点表示终态/
方块表示活动名/
箭头表示转移
甬道: 表示不同的人的分割


需求说明书包括什么;
功能分析、性能分析、运行环境分析、可靠性分析、异常分析、对外发布接口分析、未来补充需求
3)软件系统设计
① 软件设计原则。模块独立中重点考察内聚和耦合的概念。
抽象/模块化/信息隐藏/功能独立
开里依接单迪和
开闭原则 对扩展开放,对修改关闭
里氏替换原则 什么时候用继承,什么时候不用继承。是对开闭原则的补充。继承不应该修改父类
依赖倒置原则 高层模块不应该依赖低层模块,两者都应该依赖其抽象
单一职责原则 一个对象不应该承受太多职责,承担一个最好
接口隔离原则 将庞大的接口变成一个个小的接口,让接口只包含客户关心的信息。 为类提供专门的接口,而不应该提供一个所有类使用的通用接口
迪米特法则 只和自己的朋友交谈
合成复用原则 多用组合,少用继承

② 面向数据流的设计方法:
流的种类:变换流、事务流。
将数据流图DFD转换成结构图(分层、映射、高内聚低耦合的修改)

③ 面向对象的设计方法。
?????????????????????????????????????

面向程序设计过程:系统设计、对象设计、消息设计、复审
?????????????????????????????????????

④ 程序复杂度的定量度量:McCabe、Halstead。
McCabe度量法 = m-n+2 边数-顶点数+2
Halstead度量法 = 什么


4)编码与测试
① 软件测试的定义、目的和步骤。
测试是为了发现程序的错误而执行程序的过程
好的测试方案是极有可能发现新问题的测试方案
成功的测试是发现了新问题
目的:发现程序中的问题
步骤:V模型:建立工程、需求分析、设计、编码、单元测试、集成测试、确认测试、系统测试
单元测试:白盒测试的一种,自己写测试类去测试
集成测试:对软件进行测试
确认测试:确认需求和当前的软件是否一致
系统测试:当前系统和其他元素集成起来,查看是否正确

③ 白盒测试的概念,技术;黑盒测试的技术和概念。(必考)
白盒测试就是看着代码去测试,全面了解代码内部结构,对所有路径进行测试
黑盒测试就是检测功能是否可用,针对输入是否能得到正确的输出,主要对功能和页面进行检测,站在用户的角度

④ 什么叫软件可靠性,衡量它可不可靠的标准。
软件可靠性是关于软件能够够满足需求功能的性质,软件不能满足需求是因为软件中的差错引起了软件故障

⑤ 调试的定义,调试途径:蛮干、回溯、原因排除的定义。

5)维护
① 软件维护的概念,维护过程有哪些(必考)。
软件维护是指软件系统交付使用以后,为了改正错误或满足新的需要而修改软件的过程
维护过程有哪些:建立维护组织;确定维护过程;保管维护记录;进行维护评价

② 软件的可维护性,因素有哪些。
软件的可维护性就是软件的理解、改正、调整、改进的难易程度。
因素:可理解性、可测试性、可修改性、可移植性、可重用性

③ 软件再工程的概念
再工程是指在逆向工程所获取信息的基础上修改或重构已有的系统,产生系统的一个新版本
不是反编译代码,而是用uml生成代码
流程:库存目录分析->文档重构->逆向工程->代码重构->数据重构->正向工程

④ DevOps概念。
development operations 开发运维一体化
在保证研发效率的基础上,提高运维的手段都叫做DevOps,敏捷开发+敏捷运维+全过程标准化(最好全自动化)
一般来说,就是制定一条流水线,实现开发、测试、打包、上线的自动流程
监控工具、性能分析工具、批量自动化运维、日志分析工具、持续集成发布工具、iaas工具


6)软件项目管理
① 软件项目管理的任务。
概念:软件项目管理是指软件生存周期中软件管理者所进行的一系列活动
任务(目的):在一定的时间和预设范围内,有效的利用人力、资源、技术和工具,
使软件系统或软件产品按原定计划和质量要求完成。
② 成本效益分析。
成本估计:1.人数*工资;2.代码行数*每行的成本;3.任务分解技术:任务数*任务成本;4.自动成本估计技术
风险分析:
风险标识、风险预估、风险评估、风险监控
③ 项目进度安排:甘特图的定义和使用(重要),工程网络图。
一种简单的水平条形图,以日历为基准描述项目任务
横轴是时间,纵轴是任务。内容是是否持续
甘特图可以反应出任务何时开始,何时结束,但是不能反应任务之间的依赖性
④ 软件质量保障技术和措施。
代码走查/程序正确性证明/技术复审

解释一下软件工程的能力成熟度
软件工程能力有五个等级,等级越高,软件质量越可靠
初始级、可重复级、已定义级、已管理级、已优化级
初始级:无秩序、无规定
可重复级:已经建立了基本的管理过程,可以对成本、进度、功能进行追赠
已定义级:软件过程已标准化和文档化
已管理级:有详细的度量标准
已优化级:通过对过程、新概念、新技术等有用的信息进行定量分析,持续的对促进过程进行整改


如何高内聚:
1.把不能纳入到其他内聚类型的相关程序放到一起,形成实用内聚
2.时间内聚。同一时间完成的内聚操作放在一起,达到时间内聚
3.过程内聚。几个一次调用的过程放在一起,达到调用结构
4.顺序内聚。一个的输入是另一个的输出。顺序调用达到顺序内聚。
5.通信内聚。访问和操作同一数据的过程放到一个类中。比如String类里都是访问char数组的方法
6.功能内聚。模块只执行单一的计算并返回计算结果,没有副作用。 如函数
7.层内聚。高层可以访问低层,但是低层不能访问高层。如分层结构

如何低耦合:
1.内容耦合:一个构件在不被察觉的情况下修改另一个构建内部的数据
2.公共耦合:一个构件使用了全局数据
3.控制耦合:一个构件通过命令控制另一个构件的动作
4.标记耦合:在一个操作的参数表中将一个类作为参数。应该传递简单参数
5.数据耦合:一个函数的入参的数量要少

尽可能的提高可复用性。
尽可能的复用已有的设计和代码
防御性设计
可测试性设计
可移植性设计
预计过期
灵活设计

模块的要求:
1.可以独立运行,不依赖其他模块
2.信息隐蔽,只和自己临近的人沟通
3.高内聚低耦合

模块不应该太大,也不应该太小。 太大则不易理解,太小则接口开销大
HIPO图是什么?就是层次图加输入输出图

 

posted @ 2022-04-08 11:08  纯丿乱  阅读(124)  评论(0编辑  收藏  举报