- 1.1 软件
- 基于软件功能分类:系统软件、支撑软件、应用软件
- 1.2 软件工程
- 发展的四个阶段:程序设计阶段、程序系统阶段、软件工程阶段、第四阶段
- 什么是软件危机:在计算机软件的开发和维护过程中所遇到的一系列严重问题。
表现:对软件开发成本和进度估计不准确、用户对软件系统不满意、软件产品的质量不行、软件没有合适的文档资料、软件成本上升、软件开发生成率跟不上、软件不可维护
- 软件工程定义:把系统化、规范化、可度量的途径应用于软件开发、运行和维护过程,并研究其实现途径。
- 1.3软件生成周期
- 定义:软件从产生、发展到成熟、直至衰亡为止的过程
- 组成:软件定义、软件开发、软件维护
- 国标《计算机软件开发规范》分为8阶段:
- 可行性研究与计划
内容:关键任务(行不行)、问题定义报告、可行性研究报告、项目开发计划
- 需求分析
内容:关键任务(要干嘛)、需求规格说明书
- 总体设计
内容:关键任务(怎么实现)、总体设计说明书
- 详细设计
内容:关键任务(怎么具体实现)、详细设计说明书
- 实现(编码和单元测试)
内容:关键任务(开发、测试)
- 集成测试
内容:关键任务(组装后测试)
- 确认测试
内容:关键任务(用户按需求规格说明书来测试)
- 使用和维护
内容:关键任务(怎么满足用户~嘿嘿^-^~)
- 可行性研究与计划
- 1.4 常用软件过程模型
- 瀑布模型(无反馈环)
特点:1.阶段间具有顺序性和依赖性 2.推迟实现观点 3.质量保证观点
- 改进的瀑布模型(不灵活)
添加了反馈环,发现问题可以回到上一级进行修改
- 快速原型模型(先确定用户需求)
确定需求上优于瀑布,提供学习手段,对用户对系统熟悉有帮助
- 增量模型(分批次提交产品)
- 螺旋模型(加入风险周期)
- 喷泉模型(面向对象、迭代且无缝)
要随时添加资料、文档管理难度大、审核难度大
- *Rational统一过程模型(二维)
- **微软过程模型
- 瀑布模型(无反馈环)
- 2.1结构化分析概述
- 需求分析重要性
对软件需求的深入了解是开发成功的前提与关键
- 结构化分析核心思想
分解化简问题、物理与逻辑表示分开、进行数据与逻辑抽象
- 结构化分析具体步骤
发现需求、求精、建模(三大模型:2.2\ 2.3 \2.4)、规格说明、复审
- 结构化分析模型(有助知识架构,故标红)
- 需求分析重要性
- 2.2数据模型(ER图)
- 组成
- 数据对象
软件必须理解的复合信息的表示,复合信息是具有一系列不同性质和属性的事物,例如事务、地点、角色、行为等。
- 数据对象之间的关系
对象彼此之间相互连接方式,也叫联系,有1:1、1:N、N:N
- 属性
定义数据对象的性质,如学生的学号、性别。
- 数据对象
- 实体-关系图(ER图)
实体用矩形、对象用圆角矩形(类椭圆)、关系用菱形
- 组成
- 2.3功能模型(数据流图DFD)
- 数据流图(DFD)
数据流图描述系统逻辑模型,图中没有具体的物理元素,只描述信息在系统中流动处理情况。- 数据流图符号
正方形(立方体):表示数据的源点和终点
圆角矩形(圆形):代表变换数据的处理
开口矩形(平行线):代表数据存储
箭头:数据流
- 数据流图范例
- 分层数据流图
顶层DFD只有一个加工项、底层DFD(处理无法在细化)、位于二者之间叫中间DFD
要注意:1.编号的设置、2.父图子图的数据流平衡、3.局部数据存储(分层细化)
- 数据流图命名规则
人能看懂,避免'加工'、'处理'这种笼统的
- **数据流图用途
- 数据流图符号
- 2.4行为模型(状态转换图)
- 软件的行为模型:状态、事件、行为
- 主要符号
- 理解范例
- 2.5数据字典
对系统所使用的所有数据元素定义的集合,半形式化方法表达- 数据字典定义方法
对数据流、数据元素、数据存储、处理进行定义(四类建议结合视频学习了解)
- 数据字典定义符号
=表示等价于、+表示与、[ | ]表示或、m{ }n表示最小重复m和最多重复n次--> 8{字符}8 表示8位有效输入,可做学号、()表示可选、" "表示基本数据范围、' '表示范围、
- 范例
自己找范例,理解最重要!
- 数据字典定义方法
- 数据流图(DFD)
- 3.1结构化设计(SD)的概念与原理
- 结构化设计与分析关系图
- 模块化
模块化设计:按照适当的原则将软件划分为一个个较小、相关又独立的模块(!各个击破)
C(P1)>C(P2) C(P1+P2)>C(P1)+C(P2) E(P1)>E(P2) E(P1+P2)>E(P1)+E(P2)
但是接口成本和模块成本成反比 而总成本=模块成本+接口成本
- *抽象
- *逐步求精
- *信息隐蔽
只露出接口,隐藏细节
- 模块独立(3.2)
具有独立功能且和其他模块没有过多作用,追求高内聚低耦合- 耦合:软件结构中不同模块间互连程度度量
取决于模块间接口复杂程度,通过接口数据。追求尽可能的松散耦合系统- 非直接耦合(松)
两个模块分别能独立地工作不需要另一模块存在
- 数据耦合(松)
两模块通过参数交换数据信息
- 控制耦合(紧)
两模块通过参数交换控制信息(包括数字形式)
- 公共环境耦合(OR)
两个或者和多个模块通过公共环境作用
公共环境:内存、通信区、文件、资源系统...
- 内容耦合(最紧)
两模块访问、两模块入口问题、两模块代码有重复、模块多入口
- 非直接耦合(松)
- 内聚:模块内各元素彼此结合紧密程度
- 功能内聚(最高10)
模块内所有元素共同完成单一功能
- 顺序内聚(高9)
元素按顺序处理,前一个操作的输出是下一个的输入。
- 通信内聚(一般7)
一个模块内使用相同的输入数据或产生相同的输出数据
- 过程内聚(一般5)
模块内的处理元素是相关的,按照特定次序执行
- 时间内聚(较低3)
模块内处理元素在同一时间段完成。(启动、紧急故障)
- 逻辑内聚(低1)
模块所完成的功能在逻辑上相同或者相似
- 偶然内聚(低0)
模块中的元素之间无逻辑关联,只是偶然被组合在一起。
- 功能内聚(最高10)
- 耦合:软件结构中不同模块间互连程度度量
- 结构化设计与分析关系图
- 3.3结构化设计启发规则
- 改进软件结构提高模块独立性
- 模块规模要适中
- 深度、宽度和扇出、扇入应适当
- 模块控制在控制域内
- 降低接口复杂程度
- 设计单入单出模块
- 模块功能可预测
- 3.面向数据流的设计方法
- 软件结构图(看书 6版103)
空心圆箭头表数据、实心圆箭头表控制、菱形判断、环形重复用
- 信息流类型
变换流、事务流
- 面向数据流设计过程(需理解)
- *变换分析
- *事务分析
- 软件结构图(看书 6版103)
- 3.5人机界面设计
- 设计问题
系统相应时间、用户帮助设施、出错信息处理、命令交互、
- 设计指南
一般交互指南、信息显示指南、数据输入指南
- 设计问题
- 3.6过程设计
- 过程设计任务
确定模块算法、确定模块使用数据结构、确定模块接口
- 结构化程序设计
经典定义:程序代码通过顺序、选择、循环三种控制结构连接、并且单入口单出口
- 结构化程序设计工具
- 程序流程图
注意:新版的循环和老版不同
- N-S图(盒图)
控制域明确、不可能任意转控制、比较容易确定数据的作用域
- PAD图
必是结构化程序、能够自顶向下逐步求精、清晰明了
- 判定表
能够清晰表达复杂的条件组合和应做动作之间的关系
- 判定树
- 过程设计语言
PDL(伪码)
- 程序复杂度(可不是408的算法复杂度!)
介绍使用比较广泛的McCabe方法
将程序流程图映射为流图、三种方法:
复杂度V(G)=区域数、V(G)=E-N+2、V(G)=P(判定点数)+1
- 程序流程图
- 过程设计任务
- 3.7*面向数据结构设计方法
- Jackson方法
该方法不做总结、因为小吴学长觉得这个太鸡肋了、不想学
- Jackson方法
- 4.1*编码
编码的目的就是吧模块的过程性描述翻译为用选定的程序设计语言(源代码)
程序设计语言分为:机器语言(010101)、汇编语言(mov、ax、bx )、高级语言(C、java) - 4.2软件测试基础知识
- 软件测试的目标
- 测试是为了发现程序中的错误而执行程序的过程
- 好的测试方案是极有可能发现迄今为止尚未发现的尽可能多的错误的测试
- 成功的测试时发现了至今为止尚未发现的错误的测试
- 测试方法
- 黑盒测试
如果已经知道产品应该就有的功能,可以通过测试来检验是否每个功能都能正常使用
- 白盒测试
如果已经知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行
- 黑盒测试
- 测试准则
- 所有测试都应该可以追溯到用户需求
- 应该远在测试之前就制定测试计划
- 把Pareto原理应用在测试中
pareto:80%的测试是在20%的模块中
- 从小规模到大规模逐步测试
- 穷举测试是不可能的
- 选择第三方从事测试工作
- 软件测试的目标
- 4.3白盒测试技术
- 逻辑覆盖
- 1.语句覆盖
选择测试数据,使被测程序中每个语句至少执行一次
- 2.判定覆盖
每个语句都要执行一次,每个判定的真假分支至少执行一次
- 3.条件覆盖
每个语句都要执行一次,并且判定表达式的每个条件都取到可能的结果
- 4.判定/条件覆盖
每个语句都要执行一次,每个判定的真假分支至少执行一次,并且判定表达式的每个条件都取到可能的结果
- 5.条件组合覆盖
判定表达式的各个条件的所有组合都得取到
- **6.点覆盖/边覆盖/路径覆盖
- 1.语句覆盖
- 控制结构测试
- 1.基本路径测试
步骤:(1)根据过程设计结果画流图
(2)根据流图计算环形复杂度 (p3.6)
(3)确定线性独立路径(不重复的路径)
(4)设计可以强制执行的各路径测试用例
- 2.条件测试
- 3.循环测试
(1)简单循环(n为循环最大次数)
测试:跳过、一次、两次、m次(m<n-1)、n-1,n,n+1次
(2)嵌套循环
测试:内层同简单,一层一层向外测试,过程中外侧保持最低次
(3)串接循环
- 1.基本路径测试
- 逻辑覆盖
- 4.4黑盒测试技术
黑盒测试主要测试软件功能- 力图发现的错误类型
1.功能不正确或者遗漏
2.界面错误
3.数据结构/外部数据库访问错误
4.性能错误
5.初始化/终止错误
- 1.等价类划分方法
虽然穷举测试不可行,但是我们可以把输入划分类别,测试时涵盖所有类别
- 2.边界值分析
常见的边界:16bit的整数-32768~32767、屏幕光标的最左上和最右下、第一行和最后一行
- 3.错误推测
靠经验和直觉推测程序可能存在的错误,再有针对性的编写检查这些错误的测试用例
- 力图发现的错误类型
- 4.5测试策略
- 测试步骤
- 单元(模块)测试
模块通过编译 的语法检查后进入单元测试- 1.测试重点
- (1)模块接口
数据是否正确进入模块
- (2)局部数据结构
局部数据的说明、初始化、默认值是否有问题
- (3)重要执行路径
重要执行路径是否有错误计算、不正确比较或者不适当控制流
- (4)出错处理通路
- (5)边界条件
- (1)模块接口
- 2.代码审查(人工)
优点:一次可以发现多个问题,而计算机发现一个问题后需要先处理在继续检查,因此代码审查可以减少系统验证的总工作量
- 3.计算机测试
需要辅助模块模拟与被测模块相联模块(需要编写辅助测试模块),两种:驱动模块、存根模块
- 1.测试重点
- 集成测试
主要测试模块与模块之间的接口有没有问题- 1.非渐增式集成
把所有模块一次组装后测试
- 2.渐增式集成
- (1)自顶向下集成方法
- (2)自底向上集成方法
- (3)混合法
上层模块自顶向下,下层用自底向上
- 3.回归测试
集成之后可能会有新的问题,需要进行回归测试,将已经测试过的用例重新测试一遍。
重测代表性用例、有可能受影响功能、被修改成分
- 1.非渐增式集成
- 系统测试
使软件和其他系统元素(硬件、网络)结合测试。(新版只有概述)
主要包括:恢复测试、安全性测试、强度测试、性能测试
- 测试步骤
- 4.6软件调试
软件调试是在进行了成功的测试之后才开始的工作。它与软件测试不同,调试的任务是进一步诊断和改正程序中潜在的错误。- 蛮干法
将内存内容全部打印出来分析、程序特定部位设立输出、自动调试工具
- 回溯法排错(小程序常用)
确定错误位置,人工沿着控制流回溯找到错误的位置
- 对分查找法
在程序中间点输入正确值,让程序运行
- 归纳法调试
- 演绎法排错
- 蛮干法
- 4.7软件可靠性
软件可靠性指程序在给定的时间间隔和环境条件下按照规格说明书给定的规定,成功运行的概率。
设系统故障停机时间为Td1、Td2,正常时间为Tu1和Tu2,那么系统可用性:
Ass = Tu1+Tu2/( Tu1+Tu2+Td1+Td2)
- 1.公式
Ass = MTTF/MTTF+MTTR (MTTF 平均无故障时间、MTTR 平均维修时间)
- 2.符号
Et——测试前程序错误总数
It——程序长度(机器指令总数)
t——测试(包括调试)时间
Ed(t)——在0至t时间内发现的错误数
Ec(t)——在0至t时间内改正的错误数
- 3.基本假定
单位长度的错误数Et/It,近似常数(1000条指令5~20错误)
MTTF与剩余错误数成反比。
为简化讨论,假设Ec(t)=Ed(т)、剩余错误数Er(t)=Et-Ec(t)、单位长度剩余错误数 のr(t)=Et/It-Ec(t)/It
- 4.估算无故障时间(k常取200)
- 5.估算错误总数
植入错误法(标志重捕法)
分别测试法
- 1.公式
- 5.1面向对象方法学(请同学务必先看(下),在考虑要不要看以下内容)
- 面向对象方法学概念
1.对象:具有相同状态的一组操作 的集合,对状态和操作的封装
2.类:对具有相同状态和相同操作的一组相似对象的定义
3.实例:实例是由某个特定类所描述的一个具体对象
4.消息:要求某个对象执行某个操作的规格说明
5.方法:对象执行的操作,即类中定义的服务
6.属性:类中所定义数据,对客观世界实体具体性质的抽象。
7.继承:子类自动共享基类中定义的属性和方法的机制
8.多态:在类等级不同层次可以共享一个方法名,不同层次每个类按各自需要实现这个方法
9.重载:在同一个类内,参数特征不同的函数可以使用同一个名字
- 与传统方法学比较
- 面向对象方法学优点
1.与人类思维一致
2.稳定性好
3.可重用性好
4.易开发大型软件产品(封装性好)
5.可维护性好
- 面向对象方法学概念
- 5.2UML(统一建模语言)
- 组成
- 视图
1.用例视图:定义的系统外部行为
2.设计视图:描述的时支持用例视图中规定的功能需求的逻辑结构(类、数据)
3.实现视图:描述的是构造系统的物理条件(文件)
4.进程视图:进程视图包括形成并发和同步机制的进程和线程
5.部署视图:部署视图中描述物理组件如何在系统运行的实际环境中分布
- 组成
- 5.3 UML静态建模——用例图
用例图描述外部执行者与系统的交互,表述系统功能,即系统提供服务
本章节需要理解,概念理解就用例和执行者。故采用Deepseek总结- 核心组成
- 参与者(Actor)
系统外部的角色,与系统交互的人、设备或其他系统。
表示:小人图标,标注角色名称(如“用户”、“管理员”)。
- 用例(Use Case)
系统提供的独立功能单元,表示用户与系统的一次完整交互。
表示:椭圆框,标注动词短语(如“登录系统”、“下单”)。
- 系统边界(System Boundary)
界定系统内部功能与外部环境的矩形框,用例置于框内,参与者置于框外。
- 参与者(Actor)
- 关系类型
- 关联关系(Association)
参与者与用例之间的交互,用实线连接。
例:用户与“登录系统”用例关联。
- 包含关系(Include)
一个用例必须调用另一个用例的功能。
表示:虚线箭头 + <<include>>。
例:“下单”用例必须包含“验证用户身份”。
- 扩展关系(Extend)
在特定条件下扩展用例功能,属于可选行为。
表示:虚线箭头 + <<extend>>,箭头指向被扩展用例。
例:“结账”用例可扩展“使用优惠券”。
- 泛化关系(Generalization)
父子用例或参与者之间的继承关系。
表示:空心箭头实线(箭头指向父类)。
例:管理员(子类)泛化自用户(父类)。
- 关联关系(Association)
- 范例
- 核心组成
- 5.4UML静态建模——类图、对象图
- 类图(第6版有删改,同视频课程不同)
- 定义与作用
定义:类图是UML中用于描述系统静态结构的模型,展示类(Class)、接口(Interface)、属性(Attribute)、方法(Operation)及其之间的关系。
作用:
描述系统的逻辑结构和设计规范。
支持面向对象设计(OOD),明确类之间的协作关系。
为代码实现提供蓝图。
- 核心组成
- 表示:矩形框分为三栏(类名、属性、方法)
可见性:+表公有、—表私有、#表示受保护
- 接口
- 关系
- 表示:矩形框分为三栏(类名、属性、方法)
- 关系类型
- 关联关系
类之间的静态联系,用实线表示
- 聚合关系
表示“整体-部分”关系,部分可独立存在
- 组合关系
强聚合关系,部分不能脱离整体存在
- 泛化关系
继承关系,子类继承父类
- 依赖关系
一个类的变化可能影响另一个类
- 实现关系
类实现接口的功能
- 关联关系
- 定义与作用
- 类图(第6版有删改,同视频课程不同)
- 5 面向对象方法学(用uml)
对应第六版第九章,这一部分内容学长并未使用到,考虑到这一章节繁杂且可用性低,如果你是有数据库或者其他科目基础,那你对面向对象多少有些了解,这里就不在赘述,为应为考试建议将以下习题温习即可。(注重理解,不同书名词不同,但是意思是一样的)
1.什么是面向对象方法学?有哪些优点?
面向对象方法学是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类解决问题的方法与过程,使描述问题的问题空间与实现解法的解空间在结构上尽可能一致的方法学科。优点:与人类习惯的思维方法一致、面向对象软件稳定性好、面向对象软件可重用性好、较易开发大型软件产品、可维护性好
2.什么是对象?与传统的数据有何异同?
对象是对问题域中某个实体的抽象、相对于传统数据结构的静态被处理,对象既有静态的属性,也有动态的行为,是进行处理的主体。
3.什么是类?
对具有相同状态和相同操作的一组相似对象的定义
4.什么是继承?
在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。
5.什么是模型?开发软件为什么要建立模型?
模型是现实世界或目标系统的抽象化、简化表示,通过特定的符号、图表或规则描述系统的结构、行为、功能或数据等核心特征。模型是软件工程的“设计图纸”,通过抽象化、可视化的方式,平衡复杂性与可控性,确保软件开发的系统性、可靠性和高效性。
6.什么是对象模型,在建立对象模型的时候用到哪些符号,分别什么意思?
对象模型表示静态的、结构化的系统的“数据”性质...
7.什么是动态模型,在建立动态模型的时候用到哪些符号,分别什么意思?
动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列...
8.什么是功能模型,在建立动态模型的时候用到哪些符号?
功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,因此更直接地反映了用户对目标系统的需求...
- 6 面向对象分析(不用uml)
步骤:获取需求、整理需求、建立模型
模型:
功能模型(指明系统应该做什么、用例图表示)
对象模型(描述静态结构,类图+对象图)
动态模型(描述交互过程,状态图+顺序图)- 建立功能模型
1.识别执行者
2.识别用例
3.建立用例图
4.补充用例描述
- 建立对象模型
1.确定分析类
边界类、控制类、实体类
2.确定类的关联
3.划分主题
4.确认属性
5.识别继承
6.反复修改
- 建立动态模型
开发交互式系统,动态模型非常重要
编写脚本
- 建立功能模型
- 7 面向对象设计
- 面向对象启发规则
1.设计结果要清晰易懂
2.一般特殊结构的深度要适当(5-9)
3.设计简单的类
4.使用简单协议
5.使用简单的服务
- 面向对象设计准则
- 抽象
通过像类抽象 机制实现
提高可重用性
- 信息隐蔽
通过封装性实现
提升设计独立性
- 弱耦合(交互耦合、继承耦合)
交互耦合尽量松散,降低消息连接复杂度、减少信息数
继承耦合要高
- 强内聚
服务内聚、类内聚、一般特殊内聚
- 可重用性
尽量使用已有的类、创建新类考虑以后的可重用性
- 抽象
- 系统分解
- 设计问题域子系统
1.调整需求
2.重用已有类
3.把问题域类组合到一起
4.增加一般化类
5.调整继承关系
- 设计人机交互子系统
- 允许用户控制的原则
1.交互模式的定义不能强迫用户进行不必要或者不希望的操作
2.提供灵活的交互
3.允许用户交互可以被中断或者撤销
4.当技能级别增长是可以使交互流水化并允许定制交互
5.使用户隔离内部技术细节
- 减少用户不必要的记忆
1.减少短期记忆
2.建立有意义的缺省
3.定义一些直觉性的捷径
4.和实际相一致
5.用不断进展的方式展示
- 用户以一致的方式展示和获取信息
1.所有可视信息的组织均按照贯穿所有屏幕显示所抱持的设计标准
2.输入机制约束到有限的集合
3.从任务到任务的导航机制被一致的实现
- 允许用户控制的原则
- 设计任务管理子系统(动态模型)
- 分析并发性
如果没有交互行为、同时接受事件的对象(这两者就是并发对象)
- 设计任务子系统
1.事件驱动型
睡眠任务
2.时钟驱动任务
特定时间去触发的事件
3.确定优先任务
4.确定关键任务
5.确定协调任务(3个以上)
6.尽量减少任务数
7.确定资源需求
- 分析并发性
- 设计数据管理子系统
- 1.选择数据储存管理模式
- 文件管理系统
- 关系数据库管理系统
- 面向对象数据库管理系统
- 2.设计数据管理子系统
文件系统到达1nf
关系数据库、面向对象数据库管理系统都要达到3nf
- 1.选择数据储存管理模式
- 面向对象启发规则
- 8.1面向对象程序设计风格
- 面向对象实现
把面向对象设计结果翻译成面向对象程序
测试并调试面向对象程序
- 程序设计语言
- 程序设计风格
- 提高可重用性
1.提高方法的内聚
2.减小方法的规模
3.保持方法的一致性
4.把策略和实现分开
5.全面覆盖
6.尽量不使用全局信息
7.利用继承机制
- 提高可扩充性
封装实现策略
不要用一个方法遍历多条关联链
避免使用多分支语句
精心确定公有方法
- 提高健壮性(鲁棒性)
1.预防用户操作错误
2.检查参数合法性
3.不预先确定限制条件
4.先测试后优化
- 提高可重用性
- 面向对象实现
- 8.2测试策略和设计测试用例
- 单元测试
- 集成测试
基于线程的集成测试(把响应系统的一个输入或者一个事件所需类集成起来)
基于使用的集成测试(先测 独立类,测完以后 测独立类下一层类(依赖类),直到测完)
- 确认测试(黑盒)
- 测试用例设计
1.测试类的方法(单个类)
随机测试、划分 测试、基于故障的测试
2.集成测试方法
- 9.1度量软件规模
- 代码行技术(缺点:源程序不同于软件、不同语言行数不同、非结构化不行)
参考以往类似项目的历史数据估算本次项目的行数(loc),千代码行(kloc)
估算方法:N个工程师
a:程序最小规模 b:程序最大规模 m:程序最可能规模
求三种规模的平均值:
a^=(a1+a2+a3+...+an)/n
b^=(b1+b2+b3+...+bn)/n
m^=(m1+m2+m3+...mn)/n
求程序规模:L=(a^+4m^+b^)/6
- 功能点技术
- 信息域特征
用户输入、输出、查询数、文件数、外部接口数
- 加权计算
- 信息域特征
- 代码行技术(缺点:源程序不同于软件、不同语言行数不同、非结构化不行)
- 9.2工作量估算(单位:人月 pm)
- 静态单变量
- 动态多变量
- 基于过程
- 静态单变量
- 9.3进度计划(GANTT图)
- 甘特图(GANTT图)
在gantt图中加菱形点表示里程碑
- 甘特图(GANTT图)
- 9.4组织方式
多名软件卡法人员合理组织起来,分工协作完成工作- 程序设计小组的组织形式
1.民主制小组(研制时间长、开发难度大)
优点:充分发挥每个成员积极性
缺点:削弱个人责任心和必要权威作用
2.主程序员制小组
专业化、层次化
主程序员+其他程序员+项目经理
3.现代程序员组
主程序员有两个(行政+技术)
- 程序设计小组的组织形式
- 9.5控制
使软件按照预定计划和预期目标执行- 风险控制
现代项目管理和传统项目管理的不同之处
风险特性(不确定性、损失)
风险类别:项目风险(预算、进度、资源)、技术风险(实现、维护、接口)、商业风险(威胁软件生存如市场风险)- 风险识别
采用系统化的方法
- 风险分析
定性分析、定量分析
将风险分为:可忽略、轻微、严重、灾难性四个级别
- 风险驾驭
- 风险识别
- 质量控制
软件质量:与软件产品满足规定的和隐含的需求能力有关的特征或者特征全体
软件质量保证的措施:基于非执行的测试(复审和评审)、基于执行的测试(软件测试)、程序正确性证明
- 配置管理
- 软件配置项
1.计算机程序(源程序和目标程序)
2.文档
3.数据结构
- 基线
基线标志着软件开发过程的各个里程碑
- 配置管理过程
1.配置标识
2.版本管理
3.变更控制
4.配置审计
5.配置报告
- 软件配置项
- 风险控制