软件概念:
软件 = 程序 + 数据 + 文档
软件生命周期:
1.定义时期:
问题定义:确立工程目标(立项调查);
可行性研究:工程可行性分析;
需求分析:导出工程采用策略和软件功能;
2.开发时期:
系统设计:
总体:确定实现方案;确定体系结构(模块组成和模块间的关系)
详细:确定每个模块的数据结构和算法
系统实现:
编码:把详细设计翻译成代码
测试:集成测试;验收测试;
3.维护时期:修复更新(改错误,改需求,改环境);
软件危机:如何开发软件?如何维护软件?
成因:软件本身的复杂性,软件开发方法不当(设计不当,文档不全);
消除:使用成熟技术方法,使用更好的开发工具(SVN),加强组织管理(文档);
模型:
瀑布模型:适用于需求明确的项目;按阶段划分(同步开发),以文档为核心,效率低下
快速原型:适用于需求不明确的项目;构造原型->用户体验->返回修改直到完成;用户全程参与,迭代开发不利维护;
*增量模型:适用于需求明确的项目;需求->设计->分模块实现测试提交;
可行性分析:(计算/经济)
分析可行性不是为了解决问题,而是确定问题是否值得去解决;
&系统流程图:用来描述系统运行流程;
需求分析:
基本任务:准确地回答"系统必须做什么";
需求分析的任务不是确定系统怎样完成它的工作,而仅仅是确定系统必须完成哪些工作;
%软件需求规格说明书:分析员和用户共同完成;
&层次方框图,实体关系图(E-R图),数据流图(DFD),状态变迁图;
%数据字典:解释图中的名词;
实体联系图:(拆分表)
第一范式:字段不可分割;
第二范式:不存在部分依赖(部分主码就能确定一条纪录)
第三范式:没有传递依赖
数据流图中只有数据流,没有控制流;
顶层数据流图没有存储,系统被封在外部实体中,顶层数据流图就是待开发系统的IO;
错图:数据流的起点/终点必须是数加工(圆角矩形)
1. 实体(方角矩形) -> 实体
2. 实体 <-> 存储(开口矩形)
3. 存储 <-> 存储
4. 子功能(圆)的IO不可单一:只有输入/出
设计:
设计原则:模块化,抽象化,高内聚(模块内部联系)低耦合(模块间联系);
耦合的标准:
无直接耦合:Client调用A和B
数据耦合:基本类型做通信
标记耦合:结构体通信
控制耦合:流程控制通信;
外部耦合:全局变量;
公共环境耦合:文件;
内容耦合:模块多入口,内部数据公开,非正常进入其他模块,代码重叠;
低耦合打码:
-------------------
模块功能划分单一化;
使用设计模式;
少继承多实现;
少全局多私有;
避免SQL硬编码;
概要设计:划分模块,定义接口,设计体系流程;
详细设计:设计UI,设计数据库,设计数据结构/算法;
测试:
测试不能证明错误不存在,只能证明错误存在;
测试的目标是尽可能的发现潜在的错误;
成功的测试是发现至今尚未发现的错误;
Alpha测试:
用户在开发者指导下进行测试,开发者记录系统问题;
Beta测试:
用户在用户场所进行测试,用户记录测试问题;
测试用例设计技术:
白盒测试:逻辑覆盖+控制结构测试;
黑盒测试:等价划分+边界测试;
软件工程,有用的也就UML和设计模式了,改天整理好再上传
【理论】软件工程导论
最新推荐文章于 2024-07-04 07:31:16 发布