一、项目管理
范围管理
时间管理
活动定义
活动排序
活动资源估算
活动历时估算
制订进度计划
进度制制
二、系统测试与维护
尽早、不断的进行测试
程序员避免测试自己设计的程序
即要选 择有效、合理的数据,也要选择无效不合理的数据
修改后应进行回归测试
尚未发现的错误数据与已发现的错误成正比
动态测试:利用计算机测试结果、功能测试
黑盒测试法
等价类划分: 不同情况分等价类
边界值分析: 边界值
错误推测:经验
因果图
白盒测试法:语句、判定、路径覆盖
基本路径测试
循环覆盖
逻辑覆盖
静态测试:全人工的测试,不利用到计算机
桌面检查
代码审核
测试阶段
单元测试:模块的功能、性能、接口等
集成测试:模块间的接口
一次性组装 (省成本)
增量式组装(全面)
自顶向下:桩模块
自底向上:驱动模块
混合式
确认测试:验证软件与需求的一致性:
内部确认测试(用户)、
产品Alpha测试、
Beta测试、验证测试
系统测试:真实环境下,验证完软件配置项能滞和系统正确连接
性能测试分类
负载测试:确定在各种工作负载下系统的性能,目标是测试当负载
增加时,系统各项性能指标的变化情况
压力测试:通过确定一个系统的瓶颈或不能接受的性能点,来获得系统能
提供的最大服务级别的测试。(找临界点)
强度测试:系统特别低的情况下考查软件系统运行情况
并发测试:容量测试,主要用来确定系统可处理的同时在线的最大用户数。
回归测试:测试软件变更之后,变更部分的正确性对变更需求的符合性
系统测试活动与步骤
制定系统测试计划:进行人员以及任务的确定、明确测试范围、测试方法、测试
环境与辅助工具。
设计系统测试用例:如等价类划分、边界值分析等测试方法的应用
执行系统测试:执行设计好的测试用例、并记录结果
缺陷管理与改错:消队已经发现的错误
面向对象测试
测试自动化
提高测试执行的速度
提高运行效率
保证测试结果的准备性
连续运行测试脚本
摸拟现实环境下受约束的情况
*不是所测试都适用自动测试
软件调试
蛮力法
回溯法
原因排除法:主要思想是演绎和归纳,用二分法实现
测试与调试区别:
1、测试措错误,调试:定位错误并修改程序以修正错误
2、调式是测试之后的活动,目标方法和思路上都有所不同
3、测试从一个已知的条件开始,使用预先定的过程,有预知的结果调式
从一个未知条件开如、结束的过程不可预计
4、测试过程可以事先设计,进度可以事先确定,调试不能描述过程或持续时间
软件评审
注意:不应以测试代替评审
技术评审
管理评审
验证与确认
验证:阶段
确认:整体全局
软件过程改进-CMMI
阶段式:混乱级、已管理级、已定义(标准化)、定量管理级、优化级
软件开发环境与工具
系统运行与评价
转换
集成(技术高水平、低价值)
改造(技术高水平、高价值)
继承(技术低水平、高价值)兼容
淘汰(双低)
新旧系统转换策略
直接转换
并发转换
分段转换:一个一个子系统上线,一个一个模块的更新
维护
可以维性
易分析、改变、稳定性、易测试性
维护类型
改正性维护(25%) 正确性维护
适应性维护(20%)环境变化
预防性维护(5%)针对未来
完善性维护(50%)增加功能或者增加性能
三、系统设计
处理流程设计
业务注流程建模
标标对照
IDEF
0 业务注流程建模
1 信息建模
1X ER
4 面向对象设计
12 组织结构建模
DEMO
Petri网
业务注流程建模语言
基于服务的BPM
软件架构设计
需求分析 架构 软件设计
架构设计就是需求分配,即将满足需求的职责分配到组件上
架构风格
数据流风格:批处理序列、管道-过滤器
调用、返回风格:主、子程序、面向对旬、层次结构
独立构件: 进程通信、事件驱动系统(隐式)
虚拟机风格:解释器、基于规则的系统
仓库风格:数据库系统,黑板系统(语方处理、信号处理)、超文本系统
结构化设计
概要设计:拆分、模块之间交互 =架构设计
详细设计:单个模块的内部设计
思想:
抽象化
自顶而下、逐步求精
信息隐藏
模块独立(高内聚、低耦合)
多扇入,少扇出
面向对象设计
分析模型
用例模型 用例
分析模型 类图
设计原则
单一职责
开封原则
李氏替换原则
依赖倒置
接口隔离
组合重用
迪米特原则(最少知识法则)
架构模式:高层决策
设计模式:局布,关注软件系统的设计与具体实现语言无关
创建型
抽象工厂模式:生产成系统对象
工厂方法模式:生产一个
构建器模式:将复杂对象构造
原型模式:克隆
单例
结构型
适配器模式(转换接口)
桥接模式:类的抽象部和实现部分分离
组合模式:整本-部分
装饰模式:附加职责
外观模式:对外统一接口
享元模式:共享
代理模式:快捷方式
行为型
职责链:传递职责
命令模式:可撤销
解释器模式:虚拟机的机制
迭代器模式:数据集
中介者:不直接引用
备忘录模式:游戏存档
观察者模式:联动
状态模式:状态变成类
策略模式:多方案切换
模板方法:
访问者:访问和数据做分离
习惯用法:是最低层
人机界面设计
置于用户控制之下
减少用户的记忆负担
保持界面的一致性
Web应用设计
1台单机
1台应用服务器+1台数据库服务器
负责均衡+应用服务器集群+1台数据库服务器
HTTP重定向 (应用层)
特点:实现简单,但性能较差
反向代理 (应用层)
特点:部署简单,但代理服务器可能成为性能的瓶颈
DNS(传输层)域名解析
特点:效率比HTTP重定向高,减少维护负责均衡服务器成本
故障,不能及时通知DNS,控制权在域名服务商那里,无法做更多的改善
NAT(传输层)域名解析
特点:技术较为成熟,一般在网关位置,可以通过硬件实现。像四层
交换机一般就采用了这种技术。
混合
静态算法:轮转
动态算法:最小连接算法、加权最小连接、加权百分比
负责均衡:有状态与无状态问题
无状态:对单次请求的处理,不依赖其他请求,也就是说,处理一次请求
所需的全部信息,要么都包含在这个请求里,要么可以从外部获取
有状态:则相反,它会在自身保存一些数据,先后的请求是有关联的
负责均衡+应用服务器集群+1台写数据库服务器+1-N 从(读)库
负责均衡+应用服务器集群+缓存集群+1台写数据库服务器+1-N 从(读)库
CDN(内容分发网络)Content Delivery Network 就近访问,分发新的资源
XML 与JSON
XML 优点:格式统一,符合标准备,数据共享比较方便
缺点:XML文伯庞大,文件格式复杂,传输占带宽
解析复杂花费时间和资源多,难维护
JSON 优点:格式简单,易于读写,点用带宽小、易于解析、支持多种语言、开发效率高,易维护
缺点:格式,没有XML那么通用
WEB 应用服务器
WEB服务器
应用服务器
REST(表述性状态传递)(Representational state Transfer)是一种只使用HTTP
和XML进行基于Web通信的技术,可以降低开发的复杂性,提高系统的可伸缩性。
四、需求工程
软件需求概述
软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望
需求开发(技术)
需求获取
需求开发-需求分类
业务需求(整体全局)
用户需求(用户视解)偏操作
系统需求(计算机化)功能、非功能、设计约束
QFD:项目管理
基本需求(明示,常规需求)
期望需求(隐含)
兴奋需求(多余、镀金)
需求开发-需求获取
用户访谈:1对3,有代表性的用户 耗时
开放式问题 与封闭式问题相结合(选择题)
问卷调查:用户多,无法一一访谈
现在观察:针对较为复杂的流程和操作
参加业务实践:有效地发现问题的本质和寻找解决问题的办法
联合需求计划(JRP):高度组织的群体会议,各方参与,成本较高
会议的形式获取需求。
情节串联板:一系统图片,通过这些图片来讲故事(原型)
收集资料
阅读历史文档:对收集数据性的信息较为有用。
抽样调查:降低成本。样本大小=a
五、需求分析
结构化需求分析
数据流图(DFD) 功能模型
数据流、加工(功能模块)、数据存储、外部实体
一、补充实体
人物角色、组织机构、外部系统
二、补充存储
特征:”**文件、**表、**库、**清单、**档案”
三、补充数据流
1、数据平衡原则
2、按题目说明与图进行匹配
四、补充加工名
动词+名语
例外,如物流跟踪、用户管理
状态转换图(STD) 行为模型
节点即为状态--事件--节点
实体联系图(ER) 数据模型
实体A 联系 实体B
数据字典:数据元素、数据结构
面向对象需求分析
对象:属性+方法+对象ID
类:(实体类、控制类、边界类)
继承与泛化:复用机制
封装:隐藏对象的属笥和实现细节,仅对外公开接口
多态:不同对象收到同样的消息产生不同的结果
接口:只有定义没有实现
重载:一个类可以有多个同名而参数类型不同的方法
消息和消息通信:消息是异步通信的
OOA-UML
构造块
事务
结构事务:最静态的部分类、接口、协作、用例、活动类、
构件和节点
行为事务:代表时间和空间上的动作。消息、动作次序、连接
分组事物: 看成是个盒子, 包,构件
注解事物:UML模型的解释部分。描述、说明和标注模型的元素。
例题讲解:
类:是描述具有相同属性、方法、关系和语义的对象的集合
接口:是指类或构件提供特定服务的一组操作集合
构件是物理上或可替换的系统部分,实现了一个接口集合;
包是一组将组织的元素分组的机制
用例是一系列的动作,产生有价值的结果
协作:交互的操作,是一些解色和其它事物一起工作
节点:是一个物理元素,它在运行进存
关系
图
静态图(结构图)
类图、对象图、构件图、部署图(软硬件之间的映射)、制品图、包图
动态图(行为图)
用例图:系统与外部参与者的交互
顺序图:强调按时间顺序
通信图:协作图
定时图:强调实际时间
交互概览图
状态图:状态转换变迁
活动图:类似程序程图,并行行为
逻辑视图:展现系统功能 类与对象
实现视图:源代码结构
进行视图:并发与同步结构
部署视图:软件构件到物理结点映射
用户视图:需求分析模型
用例图:描述一组用、参与者及它们之间的关系
关系包括:
包含关系:原始指向被包含用例
扩展关系: 扩展指向原始
泛化关系:
规则
公共机制
OOA-需求建模
用例模型
识别参与者
合并需求获得用例
细化用例描述
调整用例模型
分析模型
定义概念类
识别类之间的关系
为类添加职责
建立交互图
需求定义(SRS)
严格定义法:瀑布模型的思想
原型法:
需求验证
需求评审
需求测试
用户签字确认
验收标准之一
需求基线
需求管理(管理)
需求跟踪
用户原始需求 to 软件需求(用例) to 下游工作产品
需求风险管理
无足够用户参与
忽略了用户分类
不断增加需求
模棱两可的需求
不必要的特性
过于精简的SRS
不准备的估算
六、软件工程
系统规划
软件工程
信息系统生命周期
立项阶段:企业全局、形成概念、需求分析(做与不做)
开发阶段:
系统规划
初步调查、分析系统目标、可行性研究、制定系统建设方案
系统设计任务书(系统建设方案、实施计划)
系统分析
业务流程、数据、软件需求、网络需求分析
产出物:系统需求规格说明书、软件需求规格说
明书、确认测试计划、系统测试计划、初步的用户手册
系统设计
软件架构设计、软件概要设计、详细设计、网络设计
产出物:架构设计文档、概要设计说明书、详细设计说明书
程序规格说明书、概要测试设计、详细测试设计、各类设计图
系统实施
软件编码、软件单位集成系统测试、综合布线
产出物:源码、单元测试、集成测试报告、操作手册
系统收验
确认测试、试运行
产出物:确认测试报告、项目验收报告
运维阶段:通收难收、移交之后(最长的阶段)
消亡阶段:更新改造、功能扩展、报废重新
软件开发模型
瀑布模型 需求明确(结构化方法)
原型 需求不明确、需求分析、了解需求、简易系统可以只有界面
快速原型
增量模型
螺旋模型:制定计划、风险分析、实施工程、客户评估
原型+瀑布模型
V模型 偏向于测试的模型、测试贯穿于始终
喷泉模型 迭代、无间隙
构件组装模型
需求分析和定义
软件架构设计
构件库的建立
构件标准
构件库
构件获取
构件管理
应用软件构件
测试和发布
UP 统一过程 大型系统开发特点:
用例驱动、以架构为中心、迭代和增量
1-初始:确定项目范围和边界、识别系统关键用例
展示系统的候选架构、估计项目费用和时间、评估项目风险
2-细化:建立软件架构基出(完成软件架构设计)
3-构建:开发剩余的构件、构件组装与测试 详细设计+实现
4-交付:进行测试、制作发布版本
敏捷方法共性:小步快跑、分很多轮小迭代
减轻了一些文档负荷
4大价值观:
沟通(面对面)、简单、反馈、勇气
常见方法:XP 对费用控制严格的公司中使用
水晶系列:最少的纪律约束
开放式源码: 地域广
SCRUM:明确定义了的可重复的方法过程
FDD: 首席程序员和类程序员
逆向工程:从最终成果,反推设计,需求
实现级:包括程序的抽象语法树、符号表、过程的设计表示低层
结构级:
功能级:
领域级:UML图
净室软件工程
需求工程
系统设计
系统测试与维护
七、系统规划
初步调查
确定系统目标
分析子系统的组成
拟定系统的实施
进行可行性研究
制订系统建设方案 (系统设计任务书)
可行性分析
经济可行性
成本
固定成本:不随产量变化
管理人员的工资、办公费、员工培训费、
广告费、技术开发经费等
变动成本:随产量变化
开发资金、外包费用、产品包装费、直接材料费
混合成本
直接成本:投入在项目上
间接成本:分摊到项目上
销售额=固定成本+可变成本+利润
现值P=F/(1+i)n
净现值NPV 大于0
净现值率=NPV/Ip(投入)
投资回收期=3+(差钱/收益)
投资回收率=1/投资回收期*100%
总投资收益率=投资收益/投资总额*100%
技术可行性
社会(法律)可行性分析
用户使用可行性
管理可行性 系统与现有管理机制的一致性,改革
运行可行性