软件工程11.ppt_第1页
软件工程11.ppt_第2页
软件工程11.ppt_第3页
软件工程11.ppt_第4页
软件工程11.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程 第十一讲 Chap 10软件编码 软件开发工作沿着生存期的顺序 逐步推进 最终要得到能在计算机上运行的程序 我们通常称它为源程序 把软件设计作进一步转换 产生源程序过程 称为编码阶段 软件工程项目对代码编写的要求 绝不仅仅是源程序语法的正确性 也不只是源程序中没有各种错误 它还要求源程序具有良好的结构性和良好的程序设计风格 programmingstyle Chap 10软件编码 本章并不讨论如何用某种语言编写某个具体程序的问题 而是讨论与编码有关的基本问题 10 1结构化程序设计 结构化程序设计是60年代末至70年代形成的技术 它主要包括两个方面 对代码编写时使用控制结构的要求 强调使用三种基本结构 避免使用可能降低程序结构性的转向语句 在软件开发的设计与实现过程中 提倡采用自顶向下 Top down 和逐步细化 Stepwiserefinement 的原则 10 1结构化程序设计 一 结构化程序与结构化语言早在1963年ALGOLGO语言的主要作者PeterNaur提出 在程序中由于大量的 无限制地使用GOTO语句 使得程序结构非常混乱 许多转向语句把程序的各个部分勾联在一起 如同一堆乱麻 参见图A所示 10 1结构化程序设计 图A纷乱如麻的程序结构 10 1结构化程序设计 1965年E W Dijkstra提出 由于GOTO语句造成程序结构的混乱 致使程序质量下降 为了解决这一问题 应该把GOTO语句从高级语言中取消 1966年Bohm和Jacopini证明了任何单入口和单出口 且没有 死循环 的程序都能由三种最基本的控制结构构造出来 10 1结构化程序设计 70年代初N Wirth在设计Pascal语言时对GOTO语句的处理可被当作对GOTO语句争论的结论 在Pascal语句中没有支持上述三种基本控制构造的语句 另一方面 GOTO语句仍然保留在该语言中 不过N Wirth解释说 通常使用所提供的几种控制语句已经足够了 习惯于这样做的人不会感到GOTO语句的必要 也就是说 一般情况下 可以完全不用GOTO语句 如果在特殊情况下 由于特定的要求 偶然使用GOTO语句能解决问题 那也未尝不可 只是不应大量使用它罢了 10 1结构化程序设计 早期的程序设计语言 由于没有考虑到程序结构化的要求 当然没有直接支持几种基本控制结构的特性 比如FORTRAN COBOL ALGOL和BASIC语言中大都没有一些与基本控制结构相对应的控制语句 我们称这些语言为非结构化程序设计语言 对于那些考虑到结构化要求的新程序 如Pascal C等 由于具有与基本控制结构对应的控制语句 可以直接编写出结构化程序来 我们称之为结构化程序设计语言 10 1结构化程序设计 二 自顶向下与逐步细化自顶向下与逐步细化是结构化程序设计的原则 它把整个设计过程分出层次来 逐步加以解决 每一步是在前一步的基础上进行的 是前一步设计的细化和具体化 这可以从一个树结构图上来理解 参看图B 树结构上每一层都由一些要解决的问题 这些问题往往是相互独立的 各层结点表示各个步骤 在每一结点上都要解决怎样进一步分解 怎样细化的问题 以便得到在它下面的各个子女结点 这种做法就把一个原来复杂的大问题 划分为多个容易解决的小问题 最后整个问题得到逐步解决 10 1结构化程序设计 自顶向下 图B自顶向下 逐步细化的树结构 10 1结构化程序设计 按照自顶向下 逐步细化的原则进行设计有着许多好处 比如 同一层结点上的细化工作彼此独立无关 任何一步发生了错误 只能影响到它所在树枝的子女节点 测试工作可按顺序 逐个节点独立进行 最后再集成 每一步工作仅在上层节点基础上做不多的设计扩展 便于检查 有利于设计的分工和组织工作 10 1结构化程序设计 为进一步说明自顶向下 逐步细化的设计原则 这里再给出一个用C语言开发程序的实例 该例要求利用筛选法求100以内的质数 所说的筛选法 是从2至100中去掉2 3 9 10的倍数 剩下的便是100以内的质数 以下分为6步 逐步建立程序 第一步 从2 100中筛弃2 10的倍数第二步 建立2 100的表若X在表中 且X是2 10中任一数的倍数 则去掉X 10 1结构化程序设计 第三步 建立数组A 100 其中某一元素A i i若是2 10中任一数的倍数 则去掉A i 第四步 建立数组A 100 其中某一元素A i I若是2 3 5 7中任一数的倍数 则去掉A i 10 1结构化程序设计 第五步 for i 2 i 100 i A i i 对于j 2 3 5 7 for i 2 i 100 i if A i j j A i A i 0 for i 2 i 100 i if A i 0 printf A d d n i A i 10 1结构化程序设计 第六步 for i 2 i 100 i A i i B 1 2 B 2 3 B 3 5 B 4 7 for j 1 j 4 j for i 2 i 100 i if A i B j B j A i A i 0 for i 2 i 100 i if A i 0 printf A d d n i A i 10 1结构化程序设计 三 H Mills指出 结构化程序设计问题除去从控制结构入手 消除不适当使用的GOTO语句外 还有数据结构的不合理使用的情况 使控制结构合理化只是解决结构化程序设计问题的初步成果 下一步还应解决数据访问的合理化和规范化问题 10 1结构化程序设计 目前在许多程序中广泛地使用着数组和指针 对于这两种数据结构中元素的存取完全依赖于它们的下标值 实际上下标的取值是随机的 这一混乱存取的现象和使用GOTO语句一样对程序是十分有害的 H Mills建议用栈结构和队结构去代替数组和指针 使得数据的存取分别遵循后进先出 LIFO 和先进先出 FIFO 的规律合理而规范的进行 有人已经证明在程序中用栈和队把数组和指针替换掉是完全可能的 H Mills说 我们期待着这一论点尽快为人们普遍接受 但恐怕至少需要十年时间 10 2程序设计风格 编程序与写文章一样 程序不仅仅要被计算机理解和执行 还要经常被人阅读 例如 设计测试用例 排错 修改扩充时都要程序设计者和其他人来阅读 因此 程序设计者应养成好的程序设计风格 10 2程序设计风格 一个逻辑虽然完全正确 但杂乱无章的程序是不受欢迎的 因为它无法供人阅读 难于测试 排错和维护 研究文学的人会逐渐熟悉某个具体作家的风格 经常阅读别人程序的人也会发现程序员有其各自的风格 什么样的编码风格才是好的风格 Kernighan和Plauger所著的 程序设计风格的基础 一书有精彩的论述 值得一读 10 2程序设计风格 为了提高程序的可读性 选取有意义的标识符名字对于理解代码是很必要的 无论是对大程序还是小程序 有意义的标识符都会有助于理解 当然不是说名字越长越好 太长了不仅难记 还增加了出错的可能 注解是软件开发人员与源程序的其他读者之间信息交流的方式之一 注解在软件生命期的维护阶段可以对维护者理解程序提供清楚的指导 注解可分为序言性注解和功能性注解 10 2程序设计风格 序言性注解和功能性注解使用的范围和方法不同 序言性注解应该安排在每个模块的首部 其格式如下 1 模块功能 2 接口描述包括 调用序列 的样例 对参数的描述 所有从属于此模块的模块表 3 对有关数据的讨论 如重要的变量和它们的用途 约束和限制以及其他要说明的信息 4 开发日志 包括模块的设计者 复查人员及复查日期 修改人 修改日期及对修改的描述 10 2程序设计风格 大型软件系统一般都是由多人同时并行编码的 分配的原则是以模块为单位 为了便于测试和维护 为每个模块书写一个序言性注解是必要的 10 2程序设计风格 功能性注解嵌在语言程序内部用来描述处理功能 注解不仅仅是解释程序代码 还提供一些必要的附加说明 此外 书写功能性注解还应该注意 1 描述程序块 而不是解释每一行代码 2 使用空行 空格或括号 使得注解与代码容易区分 3 注解要正确 错误的或容易引起误解的注解还不如没有注解 10 3程序设计语言 编写程序代码与程序设计语言的选择有很大关系 程序设计语言的特性和设计风格对于设计程序代码的难易程度和质量有着直接影响 所以有必要对程序设计语言做一些讨论 10 3 1程序设计语言的理论基础 表10 1列出了各类语言所依赖的数学 元计算模型和计算模型 由于按计算理论的证明 各类语言所依赖的元计算模型是等价的 因此 现有程序设计语言的功能也是等价的 所谓语言功能等价指的是用A语言编写的某一问题的求解程序 用B语言也能编写出同一问题的语义等价的求解程序 我们认为 语言之间的差别在描述问题的方便性方面的差别 即某种语言适合于描述某类问题 另外的语言适合于描述另外的问题 10 3 1程序设计语言的理论基础 程序设计语言的理论基础 数学 布尔代数 数理逻辑 组合数学 元计数模型 计算模型 Turing Post机 冯 诺依曼结构 ASSEMBLERFORTRANCOBOLCPASCAL ADASMALLTALK 一阶逻辑归结原理 组合算子入 归约 产生式系统 语言 一阶谓词演算 组合算子演算 OPS5 PROLOG LISP FP 表10 1 10 3 2程序设计语言的类型 从50年代中期至60年代末期 计算机软件工作者把主要精力用于语言的设计上 从汇编程序设计语言到Ada语言 研究出许许多多的通用程序设计语言 近50年程序设计语言的发展过程可简单的用图10 3表示 10 3程序设计语言 Imperative Language AssemberFortran 77Algol58 60 68PL IPascalc AdaOopl etc lisp LogicLanguage PROLOG FP SASL NonimperativeLanguage FunctionLanguage 图10 3程序设计语言的发展过程 10 3程序设计语言 从上述分析可把语言分为两大类型 通用语言和专用语言 按应用领域的方便性来划分 又可把通用语言分为 1 用于科学计算的语言 Fortran Algol Pascal C等 2 用于系统软件设计的语言 Assmbler Pascal C Modula等 3 商用数据处理语言 COBOL PL I DBASEII DBASEIII DBASEIII FOXBASE FOXPRO SQL SYBASE ORACLE等 10 3程序设计语言 4 人工智能语言 Lisp Prolog FLL等 5 实时计算机系统 汇编语言 Ada 其他实时处理语言 6 面向对象语言 SMALLTALK C 等 必须再次强调 并不是语言功能上有差别而只描述某类问题而不能描述另一类问题 只是某种语言更适合于描述某种问题 如今 语言的发展已成为基于某种语言构造的程序设计环境 即提供一组编程工具 并构造一个协调的编程环境 如VisualBASIC VisualPascal Delphi C JAVA等 10 3 3编码语言的选择 语言选择的准则是 1 项目的应用领域这是选择语言的最关键因素 在其他条件都具备的情况下 尽量选取适合某个应用领域的语言 可参考上节的语言分类 10 3 3编码语言的选择 2 算法和计算复杂性一般来说 商用数据处理和某些应用软件的算法要简单一些 而系统软件 工程计算和模拟实时计算机系统以及人工智能的算法要复杂的多 根据各个语言的特点 选取能够适应软件项目算法和计算复杂性的语言 实质上 这也是与项目的特点密切相关的 10 3 3编码语言的选择 3 性能因素这也是一个结合工程具体性能考虑的准则 4 数据结构的复杂性一般来说 商用数据处理和系统软件的数据结构较复杂 工程计算和模拟 实时计算机系统等数据结构较为简单 10 3 3编码语言的选择 5 软件开发人员的水平人们习惯使用自己熟悉的语言 要使用新的语言 不仅是软件开发人员的学习和使用问题 而且还要克服心理上对新语言的抵制 10 4软件编码工具与环境 10 4 1编码工具几乎任何可以工作的计算机环境上都提供有辅助编码的工具 用得最频繁的要算编辑器 编辑工具的好坏直接影响着编码的效率 从编辑工具发展的历史看 功能越完善 使用也越灵活 从过去的纸带编辑发展到字符终端上的行编辑 以及今天的全屏幕编辑 10 4 1编码工具 近年来 还发展有基于特别语言结构的编辑系统 用于支持结构化编码设计 这种编辑器通常称为面向语法的编辑 系统只能接收语法上是正确的输入 有自动语法检查功能 编辑的结果必定是语法正确的程序 因此 也有人称其为智能编辑器 关于结构编辑器的设计和实现 在软件开发环境一章中有详细讨论 10 4 1编码工具 软件工程的研究对象主要是大型程序设计 一个大型程序系统可能由许多代码块组成 不同的块可能分别在几个不同的文件里 为了得到一个可执行的代码 首先必须将单个块进行部分编辑 然后再将分离编辑的结果连接起来 问题在于这些块都是相互影响和制约的 一个块的源代码改变了 受此块影响的所有其它块都要进行再编辑 再连接 10 4 1编码工具 有许多的编码工具 如UNIX的MAKE工具可以帮助程序员自动完成这些工作 在使用码 过时 的情况下 如何进行动作 是否执行部分编译命令都由MAKE自动完成 这样 当编码过程种改变了一个或若干个模块时 MAKE会自动检索出那些过时了的 需要进行再编码的块 执行有关操作 使其永远保持目标文件的最新版本 10 4 1编码工具 另一方面 像Turbo Visual系列软件 将文件管理 编辑 运行 编

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论