第一章 介绍
1.1 软件的定义
答:
1.指令的集合(程序)通过这些指令来满足预期的特性、功能、需求
2.数据结构。使程序可以良好的使用信息
3.软件描述信息。以硬拷贝和虚拟形式存在,用来描述程序的操作和使用
1.2 软件与硬件的区别(软件特征)
属性 | 软件 | 硬件 |
---|---|---|
开发方式 | 开发或者工程获得 | 以传统方式制造 |
使用时间 | 不会磨损(wear out)(最本质区别),而是退化(deterioriting) | 会磨损 |
复用性 | 客户定制,可复用程度低(尽管模块化) | 可复用程度高 |
替换 | 不存在备用部件 | 存在备用部件 |
双重角色 既是产品也是产品交付的载体
Q:为什么软件要更新/p>
A:新的商业需求,新的环境和技术,与其他软件的兼容和交互,新的计算环境
1.3 软件过程是什么/h3>
软件过程是工作产品构建时所执行的一系列活动,动作和任务的集合.
- 活动 实现宽泛目标(如与利益相关者沟通)
- 动作 如体系结构设计,包含很多任务
- 任务 小而具体,如一个单元测试
软件过程定义了软件工程化中采用的方法(框架活动),但软件工程还包括该过程中的应用技术(技术方法和自动化工具),软件过程包含在软件工程中。
2.2 普适性活动
- 软件项目跟踪和控制Software project management
- 技术评审Formal technical reviews
- 软件质量保障Software quality assurance
- 软件配置管理Software configuration management
- 工作产品的准备和生产Work product preparation and production
- 可复用管理Reusability management
- 测量Measurement
- 风险管理Risk management
2.3 过程评估和改进(Capability maturity Model,CMM等)
-
Standard CMMI Assessment Method for Process Improvement (SCAMPI): 用于过程改进的CMMI标准评估方法.
分五个评估阶段:起始、诊断、建立、行动和学习
-
CMM-Based Appraisal for Internal Process Improvement (CBA IPI):用于组织内部过程改进的CMM评估
为评估软件组织的相对成熟度提供诊断技术;使用SEI-CMM作为评估的基础
-
SPICE—The SPICE (ISO/IEC15504) :软件过程改进和能力测定(software process improvement and capability determination)
标准定义了软件过程评估的一组需求。本标准的目的是帮助组织对任何定义的软件过程的有效性进行客观的评估。
-
ISO 9001:2000 for Software:国际标准化组织的软件开发标准
一种通用标准,适用于任何希望提高其提供的产品、系统或服务的总体质量的组织。因此,本标准直接适用于软件组织和公司。
-
GB 国标
2.5.1 瀑布模型
典型生命周期模型 沟通、策划、建模、构建、部署
好处 | 坏处 |
---|---|
适用于:需求固定,工作将以线性方式进行到完成 | 真正的项目很少遵循顺序流程。随着项目团队的进行,更改可能会导致混乱 |
要求客户明确地陈述所有需求,并且难以适应许多项目开始时所存在的自然不确定性 | |
最后才能看到可执行程序,如果系统存在重大缺陷,会导致灾难后果 |
V-模型 与之相似 提供了将验证确认动作应用于早期软件工程中的方法
2.5.2 增量模型
优点 | 缺点 | ||||||||
---|---|---|---|---|---|---|---|---|---|
克服人手不足 | 关注每一个增量的操作产品的交付。早期的增量很容易被“忽略”。 | ||||||||
技术风险控制 | |||||||||
线性(每个增量按照瀑布模型进行管理)+并行 | |||||||||
敏捷 | 传统 |
---|---|
个人与交互 | 过程和工具 |
可运行软件 | 繁复文档 |
客户合作 | 合同谈判 |
响应变更 | 遵循计划 |
3.3 极限编程(XP)
3.3.1 极限编程框架活动
策划
设计 KIS, CRC
编码 结对编码
测试 关注重要的、易出错的地方,进行回归测试,80%错误发生在20%代码中
3.3.2 极限编程的关键
五个要素
沟通(紧密的非正式口头协作,避免大量文档)
简单(只为眼前的需要而设计,不考虑未来的需要)
反馈(来自实施的软件本身、客户、其他软件团队成员)
勇气(今天的设计意味着未来的需求可能会发生巨大的变化,因此需要大量的返工)
尊重(IT成员之间、利益相关者之间)
3.4 其他敏捷过程
Scrum
DSDM-Dynamic Systems Development Method
AM
AUP
第四章 需求工程
4.1 需求工程的定义
- 需求工程是指致力于不断理解需求的大量任务和技术。
- 建立了从设计到构建的桥梁
- 从软件过程的角度来看,需求工程是一个软件工程动作,开始于沟通活动并持续到建模活动
4.2 质量功能部署(quality funtion development,QFD)
将用户要求转换成软件技术需求。
QFD概念可应用于整个软件过程(不仅仅在需求收集中)
三种需求
- 常规需求
- 预期需求
- 兴奋需求
四种展开
- 功能展开
- 信息展开
- 任务展开
- 价值评估
4.3 ERD图
椭圆表示属性,加在长方形上
4.4 用例图
4.7.1 基于场景的建模
用例:
用户故事: 描述对用户有价值的功能,好的用户故事应该包括角色、功能和商业价值三个要素
1.角色:谁要使用这个功能。
2.功能:需要完成什么样的功能。
3.价值:为什么需要这个功能,这个功能带来什么样的价值。
4.7.2 基于类的建模(class-modeling, CRC)
类图、协作图
CRC建模提供了一个简单方法,可以识别和组织与系统或产品需求相关的类
职责 封装在类中的属性和操作
类之间关系
- Aggregate聚合**(is-part-of)**
(强关联)
- Associate关联**(has-knowledge-of)**
(只有控制面板和传感器协作,才能确定传感器状态)
(双向)
- Dependency依赖**(depends-upon)**
(单向)
4.7.3 面向流的建模
DFD,数据模型,数据流图
4.7.4 行为模型
状态图、序列图
- 状态图描述系统的状态,并显示事件如何影响系统状态。
- 序列图指示事件如何导致从对象到对象的转换。
4.8 UML是什么
4.9 分析建模所使用的图
-
用例图
-
活动图
-
类图
-
状态图
-
部署图
-
序列图
-
协作图
第五章 设计概念
5.1 设计概念
模块化
信息隐藏
关注点分离
重构
内聚(cohesion)
耦合(coupling)
5.2 面向对象概念
类、属性、行为
多态性
封装
继承
5.3 质量属性(FURPS)
功能性Functional
易用性Usability
可靠性Reliability
性能Performance
可支持性Supportability
5.4 DFD
变换流/事务流
使用数据流映射
举例
5.5 四个设计模块
包括数据设计、架构设计、界面设计、部件设计、(部署设计)
5.5.1 数据设计
5.5.2 架构设计
架构设计包括软件构件,构件的属性和构件之间的相互关系
架构设计的重要性
- 有助于各方的交流
- 突出早期的设计,对其后工作很重要(打好设计的根基)
- 建立一个相对小的、易于理解的模型,其描述了系统如何构成及构件如何一起工作
架构的风格流派
- 以数据为中心架构
- 数据流架构
- 调用和返回架构
- 面向对象架构
- 层次化架构
5.5.3 界面设计
黄金原则
- 用户操作控制
- 减少用户的记忆和负担
- 保持界面的一致性
用户界面设计模型
- 用户模型 所有终端用户的画像
- 设计模型 用户模型的设计实现
- 感知模型 界面给用户的印象
- 实施模型 界面的外观和给用户的感觉与描述的支持文档相符合
用户界面设计过程
- 界面分析和建模
- 界面设计
- 界面构建
- 界面确认
界面分析和建模
- 用户分析
- 任务分析
- 展出内容分析
- 工作环境分析
界面设计
- 使用接口分析期间获得的信息定义接口对象和操作
- 定义将导致用户界面改变的事件,对这种行为进行建模
- 将每个接口状态描述为它将实际呈现给终端用户的样子
- 指示用户通过界面提供的信息理解系统的状态
5.5.4 部件设计
构件是模块化的、可部署的和可替换的部件,该部件封装了操作实现和接口
从面向对象角度看部件是
从方便角度看部件是
决策表Decision Table
部件设计原则
- 开闭原则 (open-close principle, OCP)
- 替换原则 (the liskov substitution, LSP)
- 依赖倒置原则(dependency inversion principle, DIP)
- 接口分离原则(the interface segregation principle, ISP)
5.5.5(部署设计)
第六章 测试
6.1 测试是什么
测试是为了在将软件交付给用户之前发现软件设计和实现过程中因疏忽所造成的错误
6.2 测试策略
- 为了执行有效的测试,应该进行有效的技术审查.这样可以在测试开始之前消除许多错误
- 测试是从部件级开始并且向外朝着整个基于计算机的系统的集成测试
- 不同的测试方法适用于不同时间点的不同软件工程方法
- 测试是由软件开发者和一个独立的测试组执行的
- 测试和调试是不同的活动,但任何测试策略都应该适应调试
6.3 测试方法
-
单元测试
-
集成测试
- 自顶向下
- 自底向上
- 三明治测试
-
验证测试
- 软件的验证是通过一系列证明符合要求的测试来实现的.设计测试计划和测试用例都是为了确保所有的功能需求得到满足,所有的行为体征和属性得到实现,所有的内容都是准确的,并且正确的呈现,所有的性能需求都得到了满足,文档是正确的,并且可用性和其他需求都得到了满足
- 配置检查
- 验收测试(alpha/beta testinng)
-
系统测试
- 恢复测试
- 安全性测试
- 压力测试
- 性能测试
- 部署测试
- 配置测试
-
黑盒测试与白盒测试
-
黑盒测试
就是功能测试,从外部执行测试用例,用以验证待测功能的正确性,而不考虑软件内部处理逻辑,外部测试
-
白盒测试
也叫玻璃盒测试,是一种测试用例设计方法.它利用作为构件层设计的一部分所描述的控制结构来生成测试用例.白盒测试是基于过程细节的封闭测试.测试构建内部的数据结构,算法流程与接口,内部测试.
-
-
其他测试
回归测试冒烟测试调试|调试方法
6.4 面向对象的测试
-
面向对象的单元测试
单元的概念改变,最小的可测试单元是封装的类,单个操作不能再单独测试,而是作为类的一部分
-
面向对象的集成测试
集群测试是OO软件集成测试的一个步骤,定义一个协作类集群(通过检查CRC和对象关系模型确定),是通过测试用例来实现的,这些测试用例试图发现协作中的错误.
两种集成方法
- 基于线程的测试集成了响应系统使用的一个输入或事件所需的一组类.
- 基于使用的测试通过测试那些很少使用服务类在独立的类测试后,下一层的类称为从属类
6.5 环复杂度(cyclomatic complexity)
V(G) = E(edge) – N(Node) + 2
V(G) = P(选择节点数) + 1
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!