当前位置:文档之家› 软件工程基础

软件工程基础


2) 程序编写首先应当考虑清晰性 程序编写首先应考虑清晰性,不要刻意追求技
巧性,使程序显得过于紧凑。 例如,有一个用C语句编写的程序段: a[i] = a[i] +a[t]; a[t] = a[i] - a[t]; a[i] = a[i] - a[t] ; ========== work = a[t]; a[t] = a[i]; a[i] = work;

与 x = a+b
[...,...] 或 [...|...] 或 x = [a , b],x = [a | b]
{ ... }或 m{...}n 重复 x = {a}, x = 3{a}8
(...)
可选
x = (a)
“...”
基本数据元素 x = “a”
..
连结符
x = 1..9
存折格式
存折=户名+所号+帐号+开户日+性质 +(印密)+1{存取行}50
主要完成软件系统结构设计和确定 各组成部分之间的相互关系。
2)软件详细设计
主要确定每个模块的具体执行过程, 也成为过程设计。
1) 软件概要设计
基本任务
1) 进行软件系统总体结构设计 2) 进行软件中所使用的数据结构及数据
库的逻辑结构设计 3) 编写概要设计文档 4) 进行概要设计的评审
3、软件设计的基本原理
1 软件可行性研究
三个方面的可行性
1.技术可行性 对要开发项目的功能、性能、限制条件进行分析,确定在现有的
资源条件下,技术风险有多大,项目是否能实现。这里的资源包括已有 的或可以搞到的硬件、软件资源。现有技术人员的技术水平和已有的工 作基础。
2.经济可行性 进行开发成本的估算以及了解取得效益的评估,确定要开发的项
通过抽象,可以确定组成软件的过程实体。通过信息隐 藏,可以定义和实施对模块的过程细节和局部数据结构 的存取限制。
4)模块独立性
模块独立性是指每个模块只完成系统要求的独立的子功能, 并且与其他模块的联系最少且接口简单,是模块化、抽象、 信息隐藏这些软件工程基本原理的直接产物。 如何衡量软件的独立性呢? 根据模块的外部特征和内部特征,提出了两个定性的度量 标准——耦合性和内聚性。 将软件系统划分模块时,尽量做到“高内聚低耦合”,提 高模块的独立性,为设计高质量的软件结构奠定基础。
目是否值得投资开发。经济可行性研究范围较广,包括成本——效益分 析、公司经营长期策略、开发所需的成本和资源、潜在的市场前景。
3.社会可行性 要开发的项目是否存在任何侵犯、妨碍等责任问题。要开发项目
的运行方式在用户组织内是否行得通。现有管理制度、人员素质、操作 方式是否可行。
2 软件系统需求分析
1)需求分析任务
是指开发人员要准确理解用户的要求,进行细 致的调查分析,将用户非形式的需求陈述转化为完 整的需求定义(回答系统必须“做什么”的问题。 ),再由需求定义转换到相应的形式功能规约(需 求分析说明书)的过程。
近几年来已提出许多软件需求分析与说明的方 法如结构化分析方法和面向对象分析方法.
2)结构化分析方法
程序实际上也是一种供人阅读的文章,有一 个文章的风格问题。应该使程序具有良好的 风格。 1) 源程序文档化 2) 数据说明 3) 语句结构 4) 输入/输出方法
1)源程序文档化
1) 符号名的命名 2) 程序的注释
序言性注释和功能性注释 3) 视觉组织:空格、空行和移行
2)数据说明
在设计阶段已经确定了数据结构的组织及其 复杂性。在编写程序时,则需要注意数据说 明的风格。 为了使程序中数据说明更易于理解和维护, 必须注意以下几点。
为了表达数据处理过程的数据加工 情况,需要采用层次结构的数据流 图。按照系统的层次结构进行逐步 分解,并以分层的数据流图反映这 种结构关系,能清楚地表达和容易 理解整个系统
分层的数据流图
3)结构化分析方法
(2) 用于写加工逻辑说明的工具
结构化英语 判定表 判定树
1)结构化英语
是一种介于自然语言和形式化语言之间的语言
数据流图,(Data Flow Diam),它以图形的方式描绘 数据在系统中流动和处理的过程。
数据流图由数据流、加工(又称为数据处理)
、数据存储(又称为文件)、数据源点或终点四种 基本成分组成。
数据流:
加工:
数据存储: 数据源点、终点:
数据流图实例:银行取款过程
描述银行取款过程的数据流图
数据流图的层次结构
详细描述处理过程常用三种工具:图形、表格和语言。
图形:程序流程图、N-S图、PAD图 表格:判定表 语言:过程设计语言(PDL)
程序流程图
N-S图(盒图)
4 软件编码
软件编码是将上一阶段的详细设计得到的处理 过程的描述转换为基于某种计算机语言的程序,即 源程序代码。
需注意根据项目的应用领域选择适当的编程语 言、编程的软硬件环境以及编码的程序设计风格等 事项
不论是批处理的输入/输出方式,还是交互 式的输入/输出方式,在设计和编码时都应 考虑下列原则:
对所有的输入数据都要进行检验,识别错 误的输入,以保证每个数据的有效性;
检查输入项的各种重要组合的合理性,必 要时报告输入状态信息;
使得输入的步骤和操作尽可能简单,并保 持简单的输入格式;
输入数据时,应允许使用自由格式;
3) 除非对效率有特殊要求, 程序编写要做到清晰第一, 效率第二。
4)尽可能使用库函数。 5)避免不必要的转移。同时如果能保持程序可读性,则不
必用 goto语句。 6)不要修补不好的程序,要重新编写。也不要一味地追求
代码的复用,要重新组织。 7)对太大的程序,要分块编写、测试,然后再集成。使模
块功能尽可能单一化,模块间的耦合能够清晰可见。
数据说明的次序应当规范化 说明语句中变量安排有序化 使用注释说明复杂数据结构
3)语句结构
在设计阶段确定了软件的逻辑流结构,但 构造单个语句则是编码阶段的任务。语句 构造力求简单,直接,不能为了片面追求 效率而使语句复杂化。 1) 在一行内只写一条语句
在一行内只写一条语句,并且采取适当 的移行格式,使程序的逻辑和功能变得更 加明确。
8)利用信息隐蔽,确保每一个模块的独立性。
4)输入和输出
输入和输出信息是与用户的使用直接相关的。 输入和输出的方式和格式应当尽可能方便用户 的使用。一定要避免因设计不当给用户带来的 麻烦。
因此,在软件需求分析阶段和设计阶段,就应 基本确定输入和输出的风格。系统能否被用户 接受,有时就取决于输入和输出的风格。
以“检查发货单”为例
3)判定树
判定树也是用来表达加工逻辑的一 种工具。有时侯它比判定表更直观。
欠款>60天 不发出批准书
检 查 发
金额>$500
欠款ቤተ መጻሕፍቲ ባይዱ0天 发出批准书、 发货单
货 单
金额$500
欠款>60天 发出批准书、 发货单及赊欠报告
欠款60天 发出批准书、
发货单
3)结构化分析方法
(3) 数据字典
if 发货单金额超过$500 then if 欠款超过了60天 then 在偿还欠款前不予批准 else (欠款未超期) 发批准书,发货单
else (发货单金额未超过$500) if 欠款超过60天 then 发批准书,发货单及赊欠报告 else (欠款未超期) 发批准书,发货单
2)判定表
如果数据流图的加工需要依赖于多 个逻辑条件的取值,使用判定表来 描述比较合适
2) 抽象
抽象是认识复杂现象过程中使用的思维工具, 即抽出事物本质的共同的特性而暂不考虑它的 细节,不考虑其他因素。 软件工程过程中的每一步部可以看作是对软件 解决方法的抽象层次的一次细化。在进行软件 设计时,抽象与逐步求精、模块化密切相关, 帮助我们定义软件结构中模块的实体,由抽象 到具体地分析和构造出软件的层次结构,提高 软件的可理解性。
数据词典(Data Dictionary,简称DD)就是用来 定义数据流图中的各个成分的具体含义的。对数 据流图中出现的每一个数据流、文件、加工给出 详细定义。
数据字典主要有四类条目: 数据流、数据项、数据存储、基本加工。 数据项是组成数据流和数据存储的最小元素。
数据结构的描述
符号
含义
举例

被定义为
应允许缺省值;
输入一批数据时, 最好使用输入结束标志, 而不要由用户指定输入数据数目;
在交互式输入时,要在屏幕上使用提示符明 确提示交互输入的请求,指明可使用选择项 的种类和取值范围。同时,在数据输入的过 程中和输入结束时,也要在屏幕上给出状态 信息;
当语言对输入/输出格式有严格要求时,应 保持输入格式与输入语句要求的一致性;
3) 信息隐藏
信息隐藏指在设计和确定模块时,使得一个模块内包含 的信息(过程或数据),对于不需要这些信息的其他模 块来说,是不能访问的。
“隐藏”的意思是,有效的模块化通过定义一组相互独 立的模块来实现,这些独立的模块彼此之间仅仅交换那 些为了完成系统功能所必需的信息,而将那些自身的实 现细节与数据“隐藏”起来。信息隐蔽为软件系统的修 改、测试及以后的维护都带来好处。
代码设计、输人输出格式设计、人机对话设计。 5) 编写详细设计说明书。 6) 为每一个模块设计一组测试用例。 7) 评审。对处理过程的算法和数据库的物理结构都要评审。
2)软件详细设计
结构化程序设计方法
结构化程序设计是E.W.Dijikstra在1965年提出的。它的主 要观点是采用自顶向下、逐步求精的程序设计方法;使用三 种基本控制结构构造程序,任何程序都可由顺序、选择、重 复三种基本控制结构构造 。
概要设计文档主要包括:
a. 概要设计说明书。 b. 数据库设计说明书。 c. 进一步补充需求分析阶段编写的用户手册。 d. 修订测试计划,对测试策略、方法、步骤提
相关主题