开发软件的流程--软件工程
2016-06-05 17:40
253 查看
二、可行性研究
2.1可行性研究的任务
可行性研究的目的:确定问题是否值得去解决。从下面三个方面研究每种解法的可行性:
1. 技术可行性
2. 经济可行性
3. 操作可行性
2.2 可行性研究结果
八个步骤:1. 复查系统规模和目标
2. 研究目前正在上使用的系统
3. 导出新系统的高层逻辑模型
4. 进一步定义问题
5. 导出和评价供选择的解法
6. 推荐行动方针
7. 草拟开发计划
8. 书写文档提交审查
2.3 数据流图
数据流图的画法:参见这里
2.4 数据字典
2.4.1 数据字典的内容
数据字典由下列的四个元素组成:1. 数据流
2. 数据流分量(数据元素)
3. 数据存储
4. 处理
2.4.2 数据字典的用途
数据字典最重要的用途是作为分析阶段的工具。2.4.3 数据字典的实现
下面的例子:名字:订货报表 别名:订货信息 描述:每天一次送给采购员的需要的订货信息 定义:订货报表 = 零件编号+零件名称+订货数量+目前价格+主要供应者+次要供应者 位置:输出到打印机
名称:零件编号 别名: 描述:唯一的标识库存清单中一个特定零件的关键域 定义:零件编号 = 8{字符}8 位置:订货报表 订货信息 库存清单 事务
三、 需求分析
需求分析是软件定义时期的最后一个阶段,他的基本任务是准确地回答”系统必须做什么”这个问题。3.1需求分析完成的任务
3.1.1确定对系统的综合要求
功能需求性能需求
可靠性和可用性需求
出错处理需求
接口需求
约束
逆向需求
将来可能提出的要求
3.2 于用户沟通获取需求的方法
3.2.1 访谈
3.2.2 面向数据流自定向下求精
3.2.3 简易的应用规格说明技术
3.2.4 快速建立软件模型
四、总体设计
总体设计完成的任务:通过这个阶段的工作将划分出组成系统的物理元素。总体设计阶段的另一项重要的任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及模块间的相互关系。44.1 模块化的概念
模块化就是把程序划分为独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定功能满足用户需求。4.2 HIPO图
五、详细设计
详细设计阶段完成的任务:确定应该怎样实现所要求的系统,也就是说经过这个设计阶段的设计工作,应该得出对目标系统的精确描述从而在编码阶段可以把这个描述直接翻译为用某种程序设计语言能书写出的程序
5.1过程设计的工具
5.1.1流程图
优点:对控制流程的描绘很直观,便于初学者掌握缺点:
1. 本质上不是逐步求精的好工具,它诱导程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构
2. 不用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,任意转义控制
3. 不易表示数据结构
5.1.2判定表
一个判定表由四部分组成,左上列出所有条件,左下是所有可能的动作,右上是表示各种条件组合的一个矩阵,右下部分是每种条件组合相应的动作5.1.3PAD图
具体可以看这篇文章优点:
1. 使用表示结构化控制结构的PAD符号设计出来的程序必然是结构化程序
2. PAD图所描绘的程序结构十分清晰,最左边的竖线是程序的主线,即第一层结构。随着程序层次的增加,PAD图逐渐向右延伸,没增加一个层次,图形向右扩展一条竖线。PAD图中的竖线的总条数就是程序的层次数
3. 用PAD图表现程序逻辑,易读,易懂,易记。PAD图是二维树形结构的图形,程序从图中最左竖线的上端开始执行,自上而下,自左至右的顺序执行,遍历所有节点
4. 容易将PAD图转换为高级语言源程序,这种转换可用转件自动完成,有利于提高软件可靠性和软件生产率
5. 表示程序逻辑,也可用于描绘数据结构
6. PAD图的符号支持自动向下,逐步求精的方法使用。开始设计者可以定义一个抽象的程序,随着设计工作的深入而使用def符号逐步增加细节,直至完成详细设计
5.1.4伪码
程序设计语言(PDL)也也称为伪码.PDL具有下述的特点:
1. 关键字的固定语法,他提供了结构化控制结构,数据说明和模块化的特点。为了使结构清晰和可读性好,通常在都有可能嵌套使用的控制结构的头和尾都有关键字
2. 自然语言的自有语法,它描述处理特点
3. 数据说明的手段,应该既包括简单的数据结构又包括复杂的数据结构
4. 模块定义和调用技术,应该提供各种接口描述模式
PDL作为一种设计工具有如下特点
1. 可以作为注释直接插在源程序中间,这样能促使维护人员在修改代码的同时也相应的修改PDL注释,因此有助于保持文档和程序的一致性,提高文档的质量
2. 可以使用普通的正文编辑器程序或者文字处理系统,很方便的完成PDL的书写和编写
3. 已经有自动处理PDL的程序存在,可以自动由PDL生成程序代码
PDL的缺点是不如图形工具形象直观,描述复杂的条件组合与动作间的对应关系,不如判定表来的清晰简单。
5.2面向数据结构的设计方法
5.2.1 Jackson图表示一个二维表的数据结构
5.3 程序复杂程度的定量度量
5.3.1 McCabe方法
计算环形复杂度的方法1. 流图中限行无关区域数等于环形复杂度
2. 流图G的环形复杂度V(G) = E - N + 2,其中E是流图中边的条数,N是节点数
3. V(G) = P +1 P是流图中判定节点的数目
六、实现
6.1编码
6.1.2编码风格
应该遵循下面的规则:1. 程序内部文档
所谓程度内部文档包括
恰当的标识符,
适当的注释,
程序的视觉组织
2.数据说明
3. 语句构造
4. 输入输出
5. 效率
6.2软件测试基础
6.2.1 软件测试的目标
测试是为了发现程序中的错误而执行程序的过程好的测试方案是极可能发现迄今为止尚未发现错误的测试方案
成功的测试发现了至今为止尚未发现的错误测试方案
6.2.2 测试的方法
黑盒测试和白盒测试6.3白盒测试
6.3.1 逻辑覆盖
语句覆盖判定覆盖
条件覆盖
判定/条件覆盖
条件组合覆盖
点覆盖
边覆盖
路径覆盖
6.3.2 控制结构测试
基本路径测试条件测试
循环测试
6.4 黑盒测试
黑盒测试着重测试软件功能黑盒测试力图发现下述错误:
1. 功能不正确或遗漏对的功能
2. 界面错误
3. 数据结构错误或者外部数据库访问错误
4. 性能错误
5. 初始化和终止错误
三种测试技术:
1. 等价划分
2. 边界值分析
3. 错误推测
七、维护
7.1 维护的意义
保证软件在一个相当长的时期能正常运行7.2决定和可维护的因素
7.2.1 决定软件可维护的因素
可理解性可测试性
可修改性
可移植性
可重用性
相关文章推荐
- pv原语的定义及解释理解
- c++ 运算符重载和转换
- 172. Factorial Trailing Zeroes [easy] (Python)
- web 项目配置详解
- Mybatis 入门之resultMap与resultType讲解实例
- C++之内联函数inline
- Git Bash中 log输出乱码的问题/文末收集了有关的博文
- Python Flask Web 第八课 —— request 请求对象
- Android 启动模式 launchMode
- Codeforces 676D Theseus and labyrinth
- 字符串去重,并打印出现次数
- LeetCode OJ 33. Search in Rotated Sorted Array
- MySQL MHA配置常见问题
- 四年没更新了
- stl
- 【天梯赛-练习题】L1-009 N个数求和
- 逻辑运算&(2+3的计算过程)
- 【牛腩】验正码
- 进程控制块PCB结构 task_struct 描述
- Bootstrap的配置