软件工程 | 第五章 详细设计与实现
软件工程 系列为本学期(2020春季)软件工程以及软件工程实践课程笔记整理~需求文档已经交了,设计文档还会远吗?从理论到实践,果然还有很多东西需要掌握整理这部分笔记时想起了毕设学长的话,代码要让自己看懂,更要让其他人看明白,因为今天自己写的代码未来可能是其他学弟学妹需要拿来学习和维护的。目录前言一、详细设计内容二、详细设计工具三、详细设计文档四、程序设计语言的...
软件工程 系列为本学期(2020春季)软件工程以及软件工程实践课程笔记整理~
需求文档已经交了,设计文档还会远吗?从理论到实践,果然还有很多东西需要掌握
整理这部分笔记时想起了毕设学长的话,代码要让自己看懂,更要让其他人看明白,因为今天自己写的代码未来可能是其他学弟学妹需要拿来学习和维护的。
目录
前言
1.软件经过模型设计之后,便进入详细设计阶段
详细设计:将软件模型转化为图表或者编码,并进行详细定义和说明-->每一模块的详细功能、输入数据、使用文件、输出内容及格式、详细算法、程序构成。
2.与详细设计过程对应的是概要设计:
(1)软件的结构:组成模块,模块的层次结构、调用关系、功能等
(2)应用系统的总体数据结构和数据库结构
一、详细设计内容
1.详细设计的目的
在进行程序编码以前,对系统所采用算法的逻辑关系进行分析,给出明确清晰的表达,为后面的程序编码打下基础。
2.任务
为软件结构图中的每个模块确定所采用的算法和块内数据结构,用某种选定的表达工具给出清晰的描述。
3.设计内容
(1)对每个模块进行详细的算法设计,使用某种图像、表格、语言等工具描述每个模块处理过程的详细算法;
(2)设计模块内的数据结构;
(3)确定数据库的物理结构-->存储记录格式、存储记录安排和存储方法
(4)其他方面:代码设计、输入输出格式设计、人机对话设计
(5)详细设计说明书
(6)评审
二、详细设计工具
1.工具
图形工具:程序流程图、问题分析图、盒图
语言工具:伪码 程序设计语言
2.评价软件设计工具的指标
(1)模块性:支持模块化软件的开发 提供接口规约的手段
(2)整体简单性
(3)易编辑性
(4)机器可读性:符号可以直接被输入基于计算机的开发系统
(5)可维护性
(6)结构增强性:针对于结构化程序设计,使用结构化构成元素的设计符号体系有助于好的设计实现
(7)自动处理能力:给设计者关于设计正确性和质量信息提示
(8)数据表示:表示全局和局部数据的能力是软件详细设计工具的关键特征
(9)逻辑验证
(10)“面向代码”的能力:将详细设计转化为对应的源代码

三、详细设计文档
1.软件系统的一个重要特性是需求和设计的不断构建和改进,在写详细设计文档的过程中,详细设计实际上是对系统的一次逻辑构建,可以有效验证需求的完整性。
2.详细设计文档作为需求人员、总体设计人员、开发人员之间的沟通工具,体现静态页面无法展现的设计,包含整体设计对模块设计的规范,体现对设计上的决策。
3.文档主要为开发人员、后期维护人员服务,要具有较强的可读性、准确性和一致性;建立严格的文档模板和标准,保证文档的可读性、准确性;建立评审和评审制度,保障设计及文档的质量。
四、程序设计语言的特性与选择
1.对任何程序设计语言来说,人的因素在程序设计过程中是至关重要的。
2.程序设计语言特性
(1)心理特性-->影响程序员心理的语言性能
- 二义性:一些语法规则容易让人用不同的方式来解释,产生心理上的二义性
 - 简洁性:根据人们必须记住的语言成分数量来衡量-->既要简洁也要容易被理解和使用
 - 局部性和顺序性
 - 传统性:新的语言与人们已经掌握的语言有相同或者相似的特征
 
(2)工程特性
- 源代码可移植性:尽量不要与程序设计语言本身有太紧密的联系,尽量使用标准函数和标准数据操作
 - 配套开发工具
 - 可维护性
 - 可复用性
 - 有效性:设计变换为源代码的便利程度以及编译器的有效性
 
3.程序设计语言分类
(1)第一代语言--机器语言
- 机器语言:二进制代码表示的计算机可以直接识别和执行的一种机器指令的集合
 - 特点:灵活 直接执行 速度快;不同型号计算机的机器语言不相通
 - 编写的程序是01指令代码,直观性差,容易出错
 
(2)第二代语言--汇编语言
- 汇编语言:面向机器的程序设计语言,使用符号代替机器语言的二进制码,使用汇编程序将汇编语言翻译成机器语言
 - 汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序
 
(3)第三代语言--高级语言
- 发展于20世纪50年代中期到70年代
 - 比机器代码和汇编语言更接近自然语言或数学语言,很少依赖机器
 - 利用高级语言编写的程序需要经过转换: 
  
- 解释类:应用程序源代码一边由解释器翻译成目标代码,一边执行;效率低且不能生成可独立执行的文件;灵活,可以动态调整修改应用程序
 - 编译类:源程序执行之前将源代码编译为目标代码,目标程序可以脱离语言环境而独立执行,但不易修改
 
 
(4)第四代语言
- 第四代编程语言(fourth generation language, 4GL)是按照计算机科学理论指导设计出来的结构化语言
 - 特点:简单易学、用户界面良好、非过程化程度高、面向问题(只告诉计算机做什么而不需要告诉怎么做);编写的代码量减少、可以成数量级地提升软件生产率。
 - 判断是否为第四代编程语言的标准: 
  
- 生产率:4GL比3GL提高成产率至少一个数量级以上
 - 非过程化:4GL基本上是面向问题的,非过程化是其主要特色
 - 用户界面:简单易学,使用方便灵活
 - 功能:在某一范围内具有通用性
 
 
4.程序设计语言的选择
(1)合适的程序设计语言可以提高编程的速度,提高程序代码的质量
(2)考虑因素:
- 软件系统的应用领域:最适合该领域的程序设计语言
 - 软件开发人员的水平:软件开发人员对语言的熟悉程度
 - 软件系统用户的需求
 - 软件可移植性:针对需要在不同操作系统或者使用寿命较长的软件,选择可移植性高的程序设计语言
 
(3)典型的程序设计语言
- 汇编语言
 - C语言 
  
- 既具有高级语言的特点,也具有汇编语言的特点,可以直接对硬件进行操作
 - 程序执行效率高
 - 可移植性好,适合多种操作系统
 - 结构式语言,按照模块化的方式组织程序,层次清晰,各个模块除了必要的信息交流外彼此独立
 
 - Java语言 
  
- 面向对象
 - 分布式:支持面向Internet应用的开发
 - 安全机制
 - 支持多线程
 
 
五、编码规范
(一)通用的编码规范
1.关于数据说明
- 数据次序本着有利于测试、排错和维护的原则
 - 规范数据说明的先后次序:常量、变量、数组、共用数据块等
 - 复杂的数据结构要有注释说明
 - 一个语句说明多个变量时:按照字母顺序
 
2.关于语句构造
- 基本原则是简单和直接,不要为了显示水平和提高效率而故意使程序设计的过分复杂
 - 不要把多个语句写在一行
 - 避免复杂的条件测试
 - 减少对“非”条件的测试
 - 避免大量使用循环嵌套和条件嵌套
 - 尽量不要利用优先关系书写程序,采用括号使得逻辑表达和算术表达更加清晰
 
3.关于输入输出
- 所有输入数据进行检验,从而识别出错误的输入,保证每个输入数据具有正确的格式
 - 检查输入项的各种重要组合的合理性,必要时报告输入状态信息
 - 输入步骤、操作简单
 - 容许使用自由格式输入
 - 允许默认值
 - 输入一批数据时,最好使用结束标志而不是让用户指定输入数据的数目
 - 交互输入方式输入时:屏幕上使用提示符提示输入的请求、选择项的种类、范围,输入开始和结束要提示状态信息
 - 给输出加注解,并设计输出报表的格式
 
4.程序文档化-->具有标准文档的特性
- 标识符的命名能反映其代表的实际的东西,具有一定的意义,有助于程序功能的理解,增强程序的可读性
 - 程序注释
 - 标准的书写格式,eg: 
  
- 分层缩进显示嵌套
 - 程序段之间、与注释行之间使用空行隔开
 - 每行写一条语句
 - 书写表达式时适当使用空格或者圆括号作隔离符
 
 
5.关于程序的效率
- 程序的效率以需求为基础,需要在明确需求的基础上进行提高
 - 程序的效率与程序的执行速度(运行时间)、存储器效率、输入输出效率有关
 - 程序的运行时间:源程序的效率与详细设计阶段确定的算法的效率直接相关,将详细设计转换成源代码后,算法的效率反映为程序的执行速度和存储容量的要求
 - 存储器效率:提升存储器效率的关键是程序的简单性
 
(二)编码规范的实践
1.变量名
- 有意义:通过变量名知道变量的基本含义
 - 一致性:同一变量不要使用不同的名字;构成变量名的词的顺序要一致
 
2.表达式
- 尽量少使用中间变量
 - 减少对程序设计语言中优先级顺序的依赖性
 - 整数运算和小数运算的误差处理
 - 数值运算的溢出处理
 
3.代码编排
- 一行不要出现多个语句,一行长度不超过80个字符
 - 使用缩进
 - 利用空行分割代码块
 
4.文档注释
- 源文件的头部要有必要的注释信息:文件名、版本号、作者、生成日期、模块功能描述、主要函数清单、文件历史修改记录
 - 全局变量的注释:包括其功能、取值范围、调用的函数以及注意事项
 - 变量常量的注释位于上方或者右方
 - 代码的注释、数据结构的注释位于上方相邻位置
 
六、代码复用
1.代码复用:使用一个产品的组件来简化另外一个功能不同的产品的开发
2.注意事项
- “非我发明”不可取,即拒绝使用他人发明技术的思想是不可取的
 - 知识产权问题
 - 代码复用要适可而止:代码复用前要评估其质量
 - 消除对可重用代码的盲目推崇
 - 注意可重用代码的规模和适用范围
 
更多推荐
 

所有评论(0)