1、软件工程
包括4个基本工程活动:PDCA
P(Plan):软件规格说明。规定软件的功能及运行时的限制。
D(Do):软件开发,开发出满足规格说明的软件。
C(Check):软件确认,确认开发的软件能够满足用户的需求。
A(Action):软件演进,软件在运行过程中不断改进以满足客户新的需求。
2、软件开发方法
结构化方法:需求明确、按一定的步骤(面向过程,功能模块)
面向对象的开发方法:普适型的,对现实世界的抽象(类、对象)
原型法
面向服务的开发:粒度更粗
3、软件过程模型
瀑布模型:采用结构化开发方法,需求明确的情况。
按照:需求分析、系统设计、程序设计、编码实现、单元测试、集成测试、系统测试、运行维护逐步进行。
原型模型:需求不明确的情况,快速构建原型。迭代思想,但不适超大项目。
有两个阶段:原型开发阶段;目标软件开发阶段。
原型开发3种途径:利用模拟软件系统的人机界面和人机交互方式;真正开发一个原型;找来一个或几个正在运行的类似软件进行对比。
螺旋模型: 增加了风险分析(多种模式的混合),适合大型项目,尤其是高风险项目。
4阶段:目标设定、风险分析、开发和有效性验证、评审
V模型:测试与开发并行
基于构件的模型:增强了复用性
敏捷模型:两个特点:敏捷型方法是“适应性”而非“预设性”的;是“面向人”的而非“面向过程“”的
适应性和预设性,面向人而非过程,强调以人为本,拥抱变化。
敏捷方法的核心思想:适应型而非可预测型;以人为本,而非以过程为本;迭代增量式的开发过程。
主要敏捷方法:极限编程XP,水晶系列方法,Scrum,特征驱动开发方法FDD。
RUP统一过程模型:重量级,面向过程的;
核心概念:角色、活动、制品、工作流
3大特点:用例驱动、以体系结构为中心、迭代与增量
4个阶段:初始、细化、构建、移交
9大核心工作流(6+2+1):业务建模、需求、分析与设计、实现、测试、部署,配置与变更管理、项目管理,环境。
RUP的特点:用例驱动、以体系结构为中心、迭代和增量
RUP采用4+1视图描述软件系统的体系结构:逻辑视图、实现视图、进程视图、部署视图、用例视图
4、软件能力成熟度模型CMM(软件能力成熟度模型集成CMMI)
CMM:初始级、可重复级、已定义级、已管理级、优化级
CMMI:初始级、已管理级、已定义级、量化管理级、优化级
5、需求工程
业务需求、用户需求、系统需求(功能需求、非功能需求、设计约束)
需求获取方法:用户面谈,需求专题讨论会,问卷调查(采样),现场观察,原型化方法,头脑风暴法
需求定义:软件需求规格说明书 SRS
需求管理:定义需求基线、需求变更和风险管理、需求跟踪、变更控制委员会CCB
需求验证:需求评审,需求测试(设计概念测试用例))—验证通过后请用户签字确认作为验收标准之一
需求变更:确保仔细评估已建议的变更;挑选合适的人选对变更做出判定;变更应及时通知所有现相关人员;项目要按一定的程序来采纳需求变更,对变更的过程和状态进行管控。
变更控制过程:问题分析和变更描述 -> 变更分析和成本计算 -> 变更实现
变更控制委员会CCB:项目所有者权益代表,负责裁定接受哪些变更。
过程和操作步骤:制定决策、交流情况、重新协商约定
需求追踪:正向跟踪、逆向跟踪
6、系统分析与设计:结构化方法
结构化需求分析:自顶向下,逐步分解,面向数据
3大模型:功能模型(数据流图)、行为模型(状态转换图)、数据模型(ER图)
数据流图DFD:
4个基本元素:外部实体、加工、数据存储、数据流
分层数据流图:
数据字典DD各部分:数据项、数据结构、数据流、数据存储、处理过程
结构化设计:
系统设计:处理流程设计、系统设计、人际界面设计
程序流程图DFD:数据流图的流向必须经过加工
加工的三种错误:有输入没有输出(黑洞),有输出但没输入(奇迹),输入不足以产生输出(灰洞)
顶层图只展示与外部的关系,0层图分级第一层的加工。
IPO图,输入输出和数据加工
N-S图:盒图
问题分析图:PAD
业务流程重组BPR
基本原则:以流程为中心的原则、团队管理原则(以人为本)、以客户为导向的原则
战略规划 -> 流程规划 -> 数据规划 -> 功能规划 -> 系统实施
项目的启动 -> 拟定变革计划 -> 建立项目团队 -> 分析目标流程 -> 重新设计目标流程 -> 实施新的设计 -> 持续改进 -> 重新开始
业务流程管理BPM:规范流程、优化流程、再造流程
系统设计原则(6大原则):模块大小适中、减少调用深度、多扇入少扇出、单入口单出口、模块作用域在模块内、功能应是可预测
高内聚低耦合
偶然内聚 -> 逻辑内聚 -> 时间内聚 -> 过程内聚 -> 通信内聚 -> 顺序内聚
无直接耦合 -> 数据耦合 -> 标记耦合 -> 控制耦合 -> 外部耦合 -> 公共耦合 -> 内容耦合
人机界面设计3原则:置于用户控制之下,减少用户记忆负担,界面一致性
7、系统分析与设计:面向对象方法
面向对象分析OOA
OOA模型5个层次:主题层、对象类层、结构层、属性层和服务层
OOA模型5个活动:标识对象类、标识结构、定义主题、定义属性和定义服务
OOA原则:抽象、封装、集成、分类、聚合、关联、消息通信、粒度控制、行为分析
OOA基本5步骤:确定对象和类、确定结构、确定主题、确定属性、确定方法
面向对象设计OOD
基本思想:抽象、封装、多态,可扩展性主要通过继承和多态来实现
OOD 3种类:实体类、控制类、边界类
UML统一建模语言
常见10种类型图:用例图、类图、对象图、状态图、活动图、序列图、协作图、部署图、包图、剖面图
面向对象编程OOP
基本特点:封装、集成和多态
数据持久化和数据库,主流持久化技术框架:Hibernate、iBatis(MyBatis)和JDO.
8、软件测试
测试方法
动态测试:黑盒测试、白盒测试、灰盒测试
白盒测试:结构测试
黑盒测试:功能测试,方法:等价类划分、边界值分析、错误推测、因果分析等
灰盒测试:白+黑
覆盖率(白盒测试覆盖率):语句覆盖 -> 判定覆盖 -> 条件覆盖 -> 条件判定组合覆盖 -> 路径覆盖
静态测试:桌前检查、代码审查、代码走查
测试阶段:
单元测试、集成测试、确认测试(Alpha测试/Beta测试/验收测试)、系统测试、配置测试、回归测试
人工测试/自动化测试
新型测试:A/B测试,Web测试,链接测试,表单测试
测试模型:
W模型:V模型的改进,尽早开展测试;目标:发现缺陷->保证质量;从需求分析开始与开发每个阶段活动同步进行
H模型 :改进W和V模型,测试活动独立出来;只要测试条件满足即开展测试,测试流程是并行的,兼顾测试的效果和灵活性
敏捷测试模型:保持紧密协作,时刻关注需求变化并实时测试,体现时效性和适应性,能力要求高。
9、净室软件工程CSE
技术手段:统计过程控制下的增量式开发,基于函数的规范与设计,正确性验证(CSE的核心),统计测试与软件认证
CSE的缺点:太理论化,需要更多的数据知识;CSE开发小组不进行传统的模块测试,不现实;源自传统软件工程,有传统软件工程的弊端
10、基于构件的软件工程CBSE
特征:可组合型、可部署性、文档化、独立性、标准化
构件模型(要素):接口、使用信息、部署
构件模型提供的通用服务包括:平台服务、支持服务
CBSE过程(6步骤):系统需求概览;识别候选构件;根据发现的构建修改需求;体系结构设计;构建定制与适配;组装构建,创建系统。
构件组装:顺序组装、层次组装、叠加组装
接口不兼容的3类情况:参数不兼容、操作不兼容、操作不完备
11、软件项目管理
软件进度管理:工作分解结构、任务活动图
软件配置管理:版本控制、变更管理
软件质量管理:产品运行质量(正确性、健壮性、效率、完整性、可用性、风险),产品修改质量(可理解性、可维修性、灵活性、可测试性),产品转移质量(可移植性、可再用性、互运行性)
软件风险管理等。