软件构造教程(预习或复习自取二)

 

第一章:软件开发概述

第二章:模块化软件构造

2.1分解与模块化

        2.1.1分解的含义

面对一个较大的问题不能或不知如何直接解决的时候,可以采用分而治之的策略:

  1. 把问题分成两个或多个更小的问题
  2. 分别解决每个小问题;
  3. 然后把各个小问题的解答聚合起来,即可得到原问题的解答。

 分解的核心是将多个问题、难点或关注点分离。

关注点分离是面向方面的程序设计的核心概念。
 

        2.1.2模块化与结构化
模块化
  • 模块化是把问题分解成容易理解、便于控制、便于实现的子问题的一个重要手段,是实现控制复杂性的方式。
  • 模块化通过把一个程序分解成简单独立、互相作用的模块对不同的模块设定不同的功能,来实现大型、复杂的程序。
  • 模块是可组合、可更换的程序单元。良好设计的模块只完成一个特定的或一组相关的子功能。
  • 所有模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。

  • 所有模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。
  • 软件模块是指具有相对独立性的、由数据说明、执行语句等程序对象构成的代码集合。
  • 每个模块都需要单独命名,如:函数、子程序、过程、方法等。通过名字访问指定模块。
  • 一个模块具有输入/输出(接口)、功能、内部数据和程序代码4个组成部分。

模块具有三大特征:

  • 独立性,可以对模块单独进行设计、编码、调试、修改和存储;
  • 互换性,,模块具有标准化的接口,容易实现模块间的互换;
  • 通用性,有利于实现系列产品间的模块的通用,实现跨系列产品间的模块的通用。

模块化设计:就是将产品的某些要素组合在一起,构成一个具有特定功能的、相对独立的子系统,将这个子系统作为通用模块与其他产品要素进行多种组合,产生多种不同功能或相同功能、不同性能的系列产品。
模块化是现代软件开发技术的一个基本原则。

函数是实现软件模块化的一个基本手段。

软件的模块设计,最基本的是算法和数据结构的设计。
 

2.2数据结构与算法(基本掌握数据结构和算法的选择与设计*)

        2.2.1数据结构与算法的关系

数据结构:

  • 是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。
  • 为数据集提供独立于计算机内存的数据组织,并提供被视为一种抽象的工具来访问。
  • 常见的数据结构,如数组、集合、栈、队列、堆、树、图、散列表等。
     

计算机算法:

  • 以一步一步的方式来详细描述计算机如何将输入转化为所要求的输出的过程。
  • 描述算法的方式可以采用自然语言、程序设计语言,也可以两种语言混合使用。
  • 用计算机程序语言实现并在计算机上运行的算法就是程序,它是一个解决实际问题方法的程序语言的指令序列。

数据结构与算法的关系:
        计算机算法与数据结构密切相关,算法依赖于具体的数据结构,数据结构直接关系到算法的选择和效率。

  • ( 1)一种数据结构、一种算法:通常是针对一种特殊的数据结构设计的特殊算法。如,计算树的高度、树节点的层级。
  • (2)一种数据结构、多种算法:如,数组,支持的算法如排序、查找、图类、矩阵类等等。
  • (3)多种数据结构、一种算法:如,折半查找使用数组和二叉树,也可以使用链表。
  • (4)多种数据结构、多种算法:如,数组和二叉树,基本的算法有遍历类、查找类、求最大值等。
        2.2.2选择与设计数据结构
        2.2.3选择与设计算

2.3模块化设计理论初步(理解模块化的原则、内聚和耦合)

        2.3.1模块化原则

Meyer提出了5条标准来评价一种设计方法是否定义了有效的模块系统的能力。
(1)模块可分解性
        如果一种设计方法提供了把问题分解为子问题的系统化机制,它就能降低整个问题的复杂性,从而可以实现-种有效的模块化解决方案。
(2)模块可组装性
        如果一种设计方法能把现有的(可重用的)设计构件组装成新系统,它就能提供一种并非一切都从头开始做的模块化解决方案。
(3)模块可理解性
        如果可以把一个模块作为一种独立单元(无须参考其他模块)来理解,那么,这样的模块是易于构造和易于修改的。
(4)模块连续性
        如果对系统需求的微小修改只导致对个别模块,而不是对整个系统的修改,则修改所引起的副作用将最小。
(5)模块保护性
        如果当一个模块内出现异常情况时,它的影响局限在该模块内部,则由错误引起的副作用将最小。
 

        2.3.2模块的内聚性与耦合性

内聚性

  • 模块中组成元素结合得越紧密,模块的内聚性就越高,模块的独立性也就越高。
  • 理想的内聚性要求模块的功能应明确、单一,即一个模块只做一件事情。

耦合性

  • 耦合的强弱取决于模块间接口的复杂性、调用模块的方式及通过界面传送数据的多少。在软件开发中,应该追求尽可能松散耦合的系统。
  • 应尽量使用数据耦合,减少控制耦合,限制外部环境耦合和公共耦合,杜绝内容耦合,降低接口的复杂度。

  1. 模块的内聚性和耦合性是两个相互对立且又密切相关的概念。
  2. 软件设计的目标是力求增加模块的内聚,尽量减少模块间的耦合。
  3. 在程序结构中,各模块的内聚程度越高,模块间的耦合程度就越低
  4. 增加内聚比减少耦合更重要。

2.4测试程序(*理解软件测试的概念、测试需求的概念、基本掌握测试用例设计)

软件测试:

  • 使用人工或自动手段来运行或测定某个系统的过程,目的在于检测它是否满足规定的需求或者是否弄清预期结果与实际结果之间的差别。
  • 测试是对程序或系统能否完成特定任务建立信心的过程。软件测试是说明程序是否正确的最基本的一种技术手段。
        2.4.1测试需求
  • 首先,仔细地分析用户需求和设计,梳理含糊不清、模棱两可、相互矛盾的需求,明确、细化和罗列出需求,并且将每个需求表示成可以检测的测试需求。例如,要求运算数的数值范围是0~100。[0,100]、(0,100)、(0,100]、[0,100)。
  • 其次,测试需求要求程序的预期结果和实际运行结果都要明确、合理、可观察并可比较

为测试程序不一定要运行整个程序:

  • 如同采用分解和模块化技术,分而治之地解决一个较大问题的软件开发,分解也同样适用于软件测试。
  • 为了方便、快速地检测一个用户需求或者特定功能是否得到满足,可以针对性地设计测试,或者测试程序的一部分。
  • 一种策略是分析用户需求,把它细化成一个个具体的、独立的、功能单一的测试需求。

        2.4.2测试设计与测试用例

测试设计:测试设计的内容包含设计测试用例,此外还包括决定是否实施所有层次的测试、是否采用测试工具或目动1化测风E架、哪些测试采用哪些工具、如何组织人员进行测试等。


测试用例:是一组输入、运行条件和通过/失败准则。简单地说,测试用例是一组测试数据和预期结果。

对每个测试用例,将程序运行结果与预期结果比较:

  • 若相等,表示待测程序“通过”了测试数据;
  • 若不相等,表示待测程序未通过测试数据,即测试“失败”。

其他情况∶
        没有执行所有的测试用例,比如因某个测试数据导致待测程序没能运行完而退出,或者程序异常退出,或者用户中断程序运行等。

软件工程的一个理论:

  • 测试不能证明程序没有错误,而是说明有错!
  • 可以通过测试发现错误,提高程序正确性。
     


2.5调试程序

当程序不能编译运行,或者测试发现了错误,程序员要理解程序的行为,发现可能的错误并去除它,这个过程称为调试。
调试是软件开发的重要活动,是程序员必须熟练掌握的软件开发技术。
 

         2.5.1缺陷的相关术语

与缺陷相关的概念

  • 缺陷源自人的过失(Mistake)活动产生的不正确结果。过失活动包括误解、遗漏用户需求、设计不合理等。
  • 过失发展的结果,引起故障,其原因是程序中不正确的步骤、过程或数据定义,它们可能导致软件失效(Failure ).
  • 错误(Error)就是导致不正确结果的全部。它展示了某个故障的不正确的内部状态。
  • 可以理解Bug是程序中引起错误的具体位置,因此,debug 就是找出并更改程序中的错误。
     
        2.5.2调试基础

1、科学的调试过程:

  • 调试是根据程序的出错情况,分析、猜测可能出现错误的程序区域,让程序运行,观察程序的变化来发现错误的根源。
  • 调试的基本活动包括隔离、定位和更正错误。

2、定位程序缺陷:找到含有问题的代码,分析可疑代码。

3、更正错误:

第三章:面向对象的软件构造

第四章:数据处理的软件构造

第五章:用户交互的软件构造

第六章:软件重构与交付

第七章:GUI软件构造

第八章:应用数据库

第九章:基于复用的软件构造

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
语法分析器是编译器的核心组件之一,它的主要任务是将输入的源代码转换成抽象语法树,以便于后续的语义分析和代码生成。为了构造一个语法分析器,需要完成以下预习任务: 1. 学习上下文无关文法(CFG) 上下文无关文法是描述编程语言语法的一种形式化语言。了解上下文无关文法的概念和性质,以及如何使用上下文无关文法来描述编程语言的语法,是构造语法分析器的基础。 2. 熟悉自顶向下语法分析算法 自顶向下语法分析算法是一种从语法的起始符号开始,逐步推导出输入符号串的过程。常见的自顶向下语法分析算法有LL算法和递归下降算法。了解这些算法的原理和实现方式,可以帮助构造语法分析器。 3. 了解预测分析表 预测分析表是一种用于自顶向下语法分析的数据结构,它将文法的非终结符和终结符组合在一起,形成一个表格。了解预测分析表的构造方法和使用方式,可以帮助构造语法分析器。 4. 掌握ANTLR工具 ANTLR是一种用于构造语法分析器的工具,它可以根据输入的语法规则自动生成语法分析器。掌握ANTLR工具的使用方法,可以大大提高语法分析器的开发效率。 5. 理解语法错误处理 在构造语法分析器时,需要考虑如何处理语法错误。了解语法错误的种类和如何进行错误处理,可以帮助构造健壮的语法分析器。 总之,构造语法分析器需要深入了解上下文无关文法、自顶向下语法分析算法、预测分析表、ANTLR工具和语法错误处理等知识,并且需要具备一定的编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值