软件工程学科知识

1.软件危机概述:
软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题;包含两方面(①如何开发软件,以满足对软件日益增长的需求;②如何维护数量不断膨胀的已有软件);典型表现(①对软件开发成本和进度的估计常常很不准确;②用户对“已完成的”软件系统不满意的现象经常发生;③软件产品的质量往往靠不住;④软件常常是不可维护的;⑤软件通常没有适当的文档资料;⑥软件成本在计算机系统总成本所占比例逐年上升;⑦软件开发生产率提高的速度,远远赶不上计算机应用迅速普及及深入的趋势)。产生原因(①软件不同于硬件,软件缺乏“可见性”,管理和控制软件开发过程相当困难;②软件在运行过程中不会因为使用时间过长而被“用坏”,如果运行中发现了错误,很可能是遇到了一个在开发时期引入、在测试阶段没能检测出的错误;③软件是一个显著特点是·规模庞大,而且程序复杂性将随着程序规模的·增加而呈指数上升–团队协作;④事实上,对用户要求没有完整准确的认识就匆忙着手编写程序是许多软件开发工程失败的主要原因之一;⑤专业人员对软件开发和维护还有不少糊涂观念;⑥忽视软件需求分析的重要性,认为软件开发就是写程序并设计使之运行,轻视软件维护等)。消除途径(①软件=程序+数据+文档;②各类人员协同配合,共同完成;③推广使用已经存在的成功的技术和方法;④使用更好的软件工具)。技术措施(方法和工具)、组织管理措施。

2.软件工程定义:
软件工程是指计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验和证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。关键词(关注大型程序、中心课题为控制复杂性、和谐合作、有效支持它的用户、产品开发人员缺乏应用领域的知识)。

3.软件工程方法学:
软件工程包括技术和管理两方面:①管理:通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定的目标。②方法学:把软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。方法学包括:①传统方法学(传统方法学也称为生命周期方法学或结构化范型;采用结构化技术(结构化分析、设计和实现)来完成开发的各项任务,并使用适当的软件工具和软件工程环境来支持结构化技术的应用);②面向对象方法学(把数据和行为视为同等重要,它是一种以数据为主线,把数据和对数据的操作紧密结合起来的方法。4个要点:①类(把所有对象都划分成类(class))、②对象(把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。)、③继承(按照父类与子类的关系,把若干个相关类组成一个层次结构的系统——继承)、④消息(对象彼此间仅能通过发送消息互相联系——消息))。

4.软件生命周期:
定义时期的任务是: 确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。这个时期的工作通常又称为系统分析,由系统分析员负责完成。开发时期具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。1问题定义“要解决的问题是什么?”2可行性研究“对于上一个阶段所确定的问题有行得通的解决办法吗?”3需求分析“为解决这个问题,目标系统必须做什么?”4总体设计“概括地说,应该怎样实现目标系统”5详细设计“应该怎样具体实现这个系统呢?”6编码和单元测试编码,单元测试7综合测试集成测试和验收测试8软件维护改正性,适应性,完善性,预防性维护时期的主要任务是使软件持久地满足用户的需要(改错、适应环境变化、满足新的需求)。

5.软件过程中的主要模型:
软件过程描述内容(什么人(who)、在什么时候(when)、做什么事(what)怎样(how)做。)
瀑布模型 一直是唯一被广泛采用的生命周期模型,现在它仍然是软件工程中应用得最广泛的过程模型。①阶段间具有顺序性和依赖性:两重含义(①必须等前一阶段的工作完成之后,才能开始后一阶段的工作;②前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。)②推迟实现的观点:瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现。区分逻辑设计和物理设计,尽可能推迟程序的物理实现,是按照瀑布模型开发软件的一条重要指导思想。③质量保证的观点:软件工程的基本目标是优质、高产。为了保证所开发的软件的质量,在瀑布模型的每个阶段都应坚持两个重要做法:a.每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。b.每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。实际的瀑布模型是带“反馈环”的。
快速原型 模型:快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。快速原型模型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户使用它,通过实践来了解目标系统的概貌,实线箭头表示开发过程,虚线箭头表示维护过程。原型系统是软件开发人员与用户沟通强有力的工具。快速原型模型是不带反馈环的,这是这种过程模型的主要优点: 软件产品的开发基本上是线性顺序进行的。原因(① 原型系统已经通过与用户交互而得到验证,据此产生的规格说明文档正确地描述了用户需求,因此,在开发过程的后续阶段不会因为发现了规格说明文档的错误而进行较大的返工。②开发人员通过建立原型系统已经学到了许多东西,因此,在设计和编码阶段发生错误的可能性也比较小,这自然减少了在后续阶段需要改正前面阶段所犯错误的可能性。)快速原型模型的本质是“快速”。原型的用途是获知用户的真正需求,一旦需求确定,原型将被抛弃。
增量模型 也称为渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。瀑布模型和快速原型模型开发软件时,目标是一次性把一个满足所有需求的软件产品提交给用户。增量模型分批地逐步向用户提交产品,整个软件产品被分解成许多个增量构件,开发人员一个构件接一个构件地向用户提交产品。优点(①能在较短时间内向用户提交可完成部分工作的产品。②逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。)使用增量模型的困难之处(①在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。②必须把软件的体系结构设计得便于扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。(软件体系结构的设计尤为重要!)多个构件并行地构建,有可能加快工期。但有可能不能集成到一起!软件风险是任何软件开发项目中都普遍存在的实际问题。在软件开发过程中必须及时识别和分析风险,并采取适当的措施消除和减少风险!
螺旋模型 的基本思想是,使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。优点(①对可选方案和约束条件的强调有利于已有软件的重用;②有助于把软件质量作为软件开发的一个重要目标;③减少了过多测试或测试不足所带来的风险;④维护只是模型的另一个周期,软件维护与软件开发没有本质区别。)注意(①用螺旋模型来开发软件,要求软件开发人员具有丰富的风险评估知识和经验;② 螺旋模型所描述的软件过程主要适用于内部开发的大型软件项目。)
喷泉模型 是典型的面向对象的软件过程模型之一。“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。

6.可行性研究:
可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。不是解决问题,而是确定问题是否值得去解决。可行性研究的任务,至少分为三个方面(①技术可行性:使用现有的技术能实现这个系统吗?②经济可行性:这个系统的经济效益能超过它的开发成本吗?③操作可行性:系统的操作方式在这个用户组织内行得通吗?④必要时,还应该从法律、社会效益等方面研究可行性。)根本任务:对以后的行动方针提出建议。若不值得,要提出项目终止的建议。 若值得,推荐一个较好的解决方案,并制定一个初步的计划。(可行性研究的成本是预期工程总成本的5%-10%)。

7.需求分析:
需求分析是指开发人员在准确理解用户的需求、进行细致的调查分析的基础上,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的形式功能规约的过程。在需求分析阶段结束前,系统分析员应该写出软件需求规格说明书。在分析软件需求和书写软件需求规格说明书的过程中,分析员和用户都起着关键的、必不可少的作用。通常对软件系统有下述几方面的综合要求(①功能需求:系统必须完成的所有功能是什么?②性能需求:通常包括速度(响应时间)、信息量速率、主存容量、磁盘容量、安全性等方面的需求;③可靠性和可用性需求:可靠性需求定量地指定系统的可靠性,可用性与可靠性密切相关,它量化了用户可以使用系统的程度;④出错处理需求:这类需求说明系统对环境错误应该怎样响应。例如,如果它接收到从另一个系统发来的违反协议格式的消息,应该做什么;⑤接口需求:接口需求描述应用系统与它的环境通信的格式。常见的接口需求有:用户接口需求;硬件接口需求;软件接口需求;通信接口需求;⑥约束:设计约束或实现约束描述在设计或实现应用系统时应遵守的限制条件。常见的约束有:精度;工具和语言约束;设计约束;应该使用的标准;应该使用的硬件平台;⑦逆向需求:逆向需求说明软件系统不应该做什么;⑧将来可能提出的要求:在设计过程中对系统将来可能的扩充和修改预做准备。)。
①分析系统的数据要求:(1)建立数据模型(Data models): E-R Diagram(实体联系图)(3.4节);(2)数据结构规范化(Normalization) (3.5节);(3)描绘数据结构(Data structure): Hierarchy(层次方框图)Warnier Diagram( Warnier 图) (3.7节);②导出系统的逻辑模型:数据流图(DFD);实体—联系图(ER);状态转换图;数据字典(DD);主要的处理算法(IPO)③修正系统的开发计划:根据在分析过程中获得的对系统的更深入更具体的了解,可以比较准确地估计系统的成本和进度,修正以前制定的开发计划。

8.总体设计:
总体设计过程两个阶段:系统设计阶段:确定系统的具体实现方案;结构设计阶段:确定软件结构。
设计原理:①模块化:模块----又称构件,是构成程序的基本构件,一般指用一个名字标记的一段程序,结构化程序设计中的函数和子程序都可称为模块。面向对象方法学中的对象是模块,对象中的方法也是模块。模块化设计就是 按适当的原则把软件划分为一个个较小的、相关而又相对独立的模块。模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。C(x) 为定义问题x的复杂程度函数;E(x) 为决定解决问题x所需的工作量(时间)函数;C(P1+P2)>C(P1)+C(P2);E(P1+P2)>E(P1)+E(P2)②抽象:现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象.抽象就是抽出事物的本质特性而暂时不考虑它们的细节,由于人类思维能力的限制,如果每次面临的因素太多,是不可能产生精确思维的。处理复杂系统的唯一有效方法是用层次的方式构造和分析.③逐步求精:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。逐步求精的作用在于:它能帮助软件工程师把精力集中在与当前开发阶段最相关的那些方面,而忽略那些对整体解决方案来说虽然重要,然而目前还不需要考虑的细节,这些细节将留到以后再考虑。程序的体系结构是通过逐步精化处理过程的层次而设计出来的。通过逐步分解对功能的宏观陈述而开发出层次结构,直至最终得出用程序设计语言表达的程序。求精实际上是细化过程。抽象与求精是一对互补的概念。④信息隐藏和局部化: 信息隐藏原理:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。局部化是指把一些关系密切的软件元素物理地放得彼此靠近。局部化是实现信息隐藏的有效措施之一。信息隐藏和局部化的优点: 如果在测试期间和以后的软件维护期间需要修改软件,使用信息隐藏原理作为模块化系统设计的标准就会带来极大好处。⑤模块独立:模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。软件结构的设计:每个模块完成一个相对独立的特定子功能,并且与其它模块间的联系最少、接口简单。模块独立重要性体现在:有效的模块化(即具有独立模块)的软件比较容易开发出来;独立的模块比较容易测试和维护。模块的独立程度可以由两个定性标准度量:内聚和耦合。
耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。在软件设计中应该追求尽可能松散耦合的系统。模块间的耦合程度强烈影响着系统的可理解性、可测试性、可靠性和可维护性。①数据耦合:两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。数据耦合是低耦合。系统中至少必须存在这种耦合。②控制耦合:传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现),则这种耦合称为控制耦合。控制耦合是中等程度的耦合。③特征耦合:当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。④公共环境耦合:当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等。公共环境耦合的复杂程度随耦合的模块个数而变化,当耦合的模块个数增加时复杂程度显著增加。(1) 一个模块往公共环境送数据,另一个模块从公共环境取数据。这是数据耦合的一种形式,是比较松散的耦合。(2) 两个模块都既往公共环境送数据又从里面取数据,这种耦合比较紧密,介于数据耦合和控制耦合之间。⑤内容耦合:最高程度的耦合是内容耦合。两个模块间发生内容耦合的表现形式:一个模块访问另一个模块的内部数据。一个模块不通过正常入口而转到另一个模块的内部。两个模块有一部分程序代码重叠(只可能出现在汇编程序中)。一个模块有多个入口(这意味着一个模块有几种功能)。应该坚决避免使用内容耦合。设计原则:尽量使用数据耦合,少用控制耦合和特征耦合, 限制公共环境耦合的范围,完全不用内容耦合。内聚:内聚衡量一个模块内部各个元素彼此结合的紧密程度。内聚是信息隐藏和局部化概念的自然扩展。理想的内聚模块只做一件事情。内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。内聚分为三大类:低内聚、中内聚和高内聚;设计时应该力求做到高内聚,中等程度的内聚也是可以的。低内聚: 偶然内聚,一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,就叫做偶然内聚。(内聚程度最低)。偶然内聚模块出现修改错误的概率比其他类型的模块高很多。逻辑内聚:一个模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚。时间内聚:一个模块包含的任务必须在同一段时间内执行,就叫时间内聚。中内聚:过程内聚:一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。通信内聚:模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。高内聚:顺序内聚:一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据),则称为顺序内聚。功能内聚:模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。功能内聚是最高程度的内聚。设计高内聚,能够辨认出低内聚的模块;有能力修改设计提高模块的内聚程度并且降低模块间的耦合程度,从而获得较高的模块独立性。模块独立性比较强的模块应是:高内聚低耦合。
①.改进软件结构提高模块独立性:设计出软件的初步结构以后,应该审查分析这个结构,通过模块分解或合并,力求降低耦合提高内聚。②模块规模应该适中:一个模块的规模不应过大,最好能写在一页纸内(通常不超过60行语句)。③.深度、宽度、扇出和扇入都应适当,深度:软件结构中控制的层数。它能粗略标志一个系统的大小和复杂程度。宽度:软件结构内同一个层次上的模块总数的最大值。一般说来,宽度越大系统越复杂。扇出:一个模块直接控制(调用)的模块数目,扇出过大意味着模块过分复杂,需要控制和协调过多的下级模块。扇入:一个模块被多少个上级模块直接调用的数目,在不破坏独立性的前提下,fan-in 大的比较好。④模块的作用域应该在控制域之内:作用域:受该模块内一个判定影响的所有模块的集合。控制域:模块本身以及所有直接或间接从属于它的模块的集合。⑤力争降低模块接口的复杂程度:模块接口复杂是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。⑥设计单入口单出口的模块:单入单出----避免内容耦合。⑦模块功能应该可以预测:模块的功能应该能够预测,但也要防止模块功能过分局限。 相同输入必产生相同输出,这个模块的功能是可预测的。反例:模块中使用全局变量或静态变量,则可能导致不可预测。启发规则多数是经验规律,对改进设计,提高软件质量有重要的参考价值。1. 描绘软件结构的图形工具有哪些? 能用层次图或软件结构图描述一个软件结构①层次图(也叫H图):用来描绘软件的层次结构。表示方法: 矩形框:表示一个模块 ;方框间上下的连线:表示上调用下。通常顶层由一个模块,表示主控模块,调用下属模块完成系统功能。H图的形式与层次方框图(3.7节)相同,但是表现的内容却完全不同。层次方框图描述的数据构成,H图描述模块构成及调用关系。 ②HIPO图:HIPO图是美国IBM公司发明的“层次图加输入/处理/输出图”的英文缩写。在H图(层次图)里除了最顶层的方框之外,每个方框都加了编号----可追踪性与H图的每个方框对应,对每个模块附一张IPO图。每个IPO图中应明确标出对应模块的编号。 ③结构图:是进行软件结构设计的工具。层次图和结构图没有严格表示其调用的顺序;图中只表示了调用关系,至于何时调用、块内有无其他成分则没有表示;层次图通常用来表示软件结构设计文档;结构图通常用以检查设计的正确性和评价模块的独立性。①.改进软件结构提高模块独立性:设计出软件的初步结构以后,应该审查分析这个结构,通过模块分解或合并,力求降低耦合提高内聚。②模块规模应该适中:一个模块的规模不应过大,最好能写在一页纸内(通常不超过60行语句)。③.深度、宽度、扇出和扇入都应适当,深度:软件结构中控制的层数。它能粗略标志一个系统的大小和复杂程度。宽度:软件结构内同一个层次上的模块总数的最大值。一般说来,宽度越大系统越复杂。扇出:一个模块直接控制(调用)的模块数目,扇出过大意味着模块过分复杂,需要控制和协调过多的下级模块。扇入:一个模块被多少个上级模块直接调用的数目,在不破坏独立性的前提下,fan-in 大的比较好。④模块的作用域应该在控制域之内:作用域:受该模块内一个判定影响的所有模块的集合。控制域:模块本身以及所有直接或间接从属于它的模块的集合。⑤力争降低模块接口的复杂程度:模块接口复杂是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。⑥设计单入口单出口的模块:单入单出----避免内容耦合。⑦模块功能应该可以预测:模块的功能应该能够预测,但也要防止模块功能过分局限。 相同输入必产生相同输出,这个模块的功能是可预测的。反例:模块中使用全局变量或静态变量,则可能导致不可预测。启发规则多数是经验规律,对改进设计,提高软件质量有重要的参考价值。1. 描绘软件结构的图形工具有哪些? 能用层次图或软件结构图描述一个软件结构①层次图(也叫H图):用来描绘软件的层次结构。表示方法: 矩形框:表示一个模块 ;方框间上下的连线:表示上调用下。通常顶层由一个模块,表示主控模块,调用下属模块完成系统功能。H图的形式与层次方框图(3.7节)相同,但是表现的内容却完全不同。层次方框图描述的数据构成,H图描述模块构成及调用关系。 ②HIPO图:HIPO图是美国IBM公司发明的“层次图加输入/处理/输出图”的英文缩写。在H图(层次图)里除了最顶层的方框之外,每个方框都加了编号----可追踪性与H图的每个方框对应,对每个模块附一张IPO图。每个IPO图中应明确标出对应模块的编号。 ③结构图:是进行软件结构设计的工具。层次图和结构图没有严格表示其调用的顺序;图中只表示了调用关系,至于何时调用、块内有无其他成分则没有表示;层次图通常用来表示软件结构设计文档;结构图通常用以检查设计的正确性和评价模块的独立性。
描述程序处理过程的工具就是过程设计的工具,利用这些工具指明控制流程、处理功能、数据组织及其实现细节,从而在编码阶段可以直接地将其描述翻译成程序代码。分为3类:①图形(程序流程图、盒图N-S图、PAD图);②表(判定树、判定表);③语言(PDL伪代码)。程序流程图又称为程序框图:它是使用最广泛的描述过程设计的方法。5种基本控制结构:①顺序结构;②选择结构;③先判定型循环结构;④后判定型循环结构;⑤多情况选择结构。①优点:对控制流程的描述直观清晰,易于使用,能随意表达任何程序的逻辑结构。 ②缺点:不易反映逐步求精的过程,往往反映的是最后结果;程序员不受约束地画控制流线,导致在编码阶段造成非结构化的程序结构;不易表示数据结构。盒图:出于要有一种不允许违背结构程序设计精神的图形工具的考虑,Nassi和Shneiderman 于1973年提出了盒图,又称为N-S图。盒图的特点:① 没有箭头,不允许随意转移控制;② 每个矩形框(Case中条件取值例外)都是一个功能域(即一个特定结构的作用域),结构表示明确;③ 局部及全程数据的作用域易见;④ 易表现嵌套关系(embedded structure)以及模块的层次结构。盒图的优点:程序结构清晰易懂;易养成良好的设计风格。盒图的缺点:当嵌套层数增加时,会增加作图的困难且降低清晰性。PAD图:PAD是问题分析图(problem analysis diagram)的英文缩写,用二维树形结构的图来表示程序的控制流。PAD图的优点:PAD图设计的程序必定是结构化程序;结构清晰,层次分明,易读、易懂;容易将PAD自动转换为高级语言源程序;即可用于表示程序逻辑,又可用于描述数据结构;支持逐步求精的设计思想。判定表:判定表能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。判定表由4部分组成:左上部列出所有条件;左下部是所有可能做的动作;右上部是表示各种条件组合的一个矩阵;右下部是与每种条件组合相对应的动作;判定表右半部的每一列实质上是一条规则,规定了与特定的条件组合相对应的动作。 判定树:判定树是判定表的变种,它也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。判定表与判定树的优点:判定表简洁无二义地表示处理规则;判定树是判定表的变种,简单、明了,易于掌握。判定表与判定树的不足: 不能反映重复和顺序的处理特性;当选择条件较多时,其简洁性下降;作判定树时,对分支次序的不同将形成不同的判定树;判定表与判定树并不适用于作为一种通用的设计工具,通常将之用于辅助测试。PDL:PDL又称 Pseudocode,是一种用于描述模块算法设计和处理的语言。PDL的外(部)语法:符合一般程序设计语言常用的语法规则,具有严格的关键字。PDL的内(部)语法:用一些简单句子、短语符号等自然语言描述程序执行的功能。特点:① 有固定的外语法(keyword);内语法用自然语言描述。② 有数据说明;③ 有模块定义与调用机制;PDL的优点:① 可以作为注释插入到源程序中;②书写方便;③易于实现由PDL到源程序代码的自动转换。PDL的缺点:不如图形工具直观、对于复杂的条件组合与应做的动作之间的对应关系时,不如判定表描述清晰。

9.实现:
编码就是把软件设计结果翻译成用某种程序设计语言书写的程序,是对设计的进一步具体化。(程序的质量主要取决于软件设计的质量) 编码是详细设计的自然结果,是将详细设计得到的处理过程描述转换为基于某种程序设计语言的程序。选择适宜的程序设计语言的原因:根据设计去完成编码时,困难最少;可以减少需要的程序测试量;可以得到更容易阅读和更容易维护的程序。编码风格:1.程序内部的文档(标识符、注解、视觉组织);2.数据说明;3,语句构造(尽量避免复杂的条件测试;避免大量使用循环嵌套和条件嵌套);4.输入和输出;5.效率(效率主要指处理机时间和存储器容量两个方面)。
编码就是把软件设计结果翻译成用某种程序设计语言书写的程序,是对设计的进一步具体化。(程序的质量主要取决于软件设计的质量) 编码是详细设计的自然结果,是将详细设计得到的处理过程描述转换为基于某种程序设计语言的程序。选择适宜的程序设计语言的原因:根据设计去完成编码时,困难最少;可以减少需要的程序测试量;可以得到更容易阅读和更容易维护的程序。编码风格:1.程序内部的文档(标识符、注解、视觉组织);2.数据说明;3,语句构造(尽量避免复杂的条件测试;避免大量使用循环嵌套和条件嵌套);4.输入和输出;5.效率(效率主要指处理机时间和存储器容量两个方面)。
黑盒测试(又称功能测试)把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。黑盒测试是在程序接口进行的测试,只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息(例如数据库或文件)的完整性。白盒测试(又称结构测试)是把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。

10.维护:
软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。软件工程的主要目的就是要提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本。基本任务是保证软件在一个相当长的时期能够正常运行。
维护的类型有四种:①改正性维护(在任何大型程序的使用期间,用户必然会发现程序错误,并且把他们遇到的问题报告给维护人员。把诊断和改正错误的过程称为改正性维护。);②适应性维护(适应性维护,就是为了和变化了的环境适当地配合而进行的修改软件的活动,是既必要又经常的维护活动。);③扩充与完善性维护(在使用软件的过程中用户往往提出增加新功能或修改已有功能的建议,还可能提出一般性的改进意见。为了满足这类要求进行的维护就是完善性维护。);④预防性维护(当为了改进未来的可维护性或可靠性,或为了给未来的改进奠定更好的基础而修改软件时,出现了第四项维护活动。这项维护活动通常称为预防性维护。目前这项维护活动相对比较少。)。

11.面相对象
面向对象方法学的要点面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。面向对象方法把对象作为由数据及可以施加在这些数据上的操作所构成的统一体。对象与传统的数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体。必须发消息请求对象主动地执行它的某些操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。面向对象方法具有下述4个要点:(1)面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。(2)把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。(4)对象彼此之间仅能通过传递消息互相联系。对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以唯一地标识它的名字,而且向外界提供一组服务(即公有的操作)。
描述系统数据结构的对象模型描述系统控制结构的动态模型描述系统功能的功能模型使用UML提供的类图来建立对象模型。用UML提供的状态图来描绘对象的状态、触发状态转换的事件以及对象的行为(对事件的响应)。功能模型由一组数据流图组成。建立功能模型有助于软件开发人员更深入地理解问题域,改进和完善自己的设计。UML提供的用例图也是进行需求分析和建立功能模型的强有力工具。在UML中把用用例图建立起来的系统模型称为用例模型。
①主题层(主题是指导读者理解大型、复杂模型的一种机制。也就是说,通过划分主题把一个大型、复杂的对象模型分解成几个不同的概念范畴。主题层,它可以从一个相当高的层次描述总体模型,并对读者的注意力加以指导。);②类与对象层;③结构层;④属性层;⑤服务层。面向对象分析大体上按照下列顺序进行:寻找类与对象,识别结构,识别主题,定义属性,建立动态模型,建立功能模型,定义服务。
①模块化(对象就是模块;把数据结构和操作这些数据的方法紧密地结合在一起;);②抽象(过程抽象;数据抽象:类——通常称为规格说明抽象;参数化抽象,例如C++的“模板”。)③信息隐藏(通过对象的封装性的实现:类分离接口与实现,支持信息隐藏。);④弱耦合(弱耦合:系统中某一部分的变化对其他部分的影响降到最低程度——优秀软件设计的一个重要标准。对象之间的耦合分为两大类: 交互耦合:对象之间的耦合通过消息连接来实现—越松散越好;继承耦合:基类和派生类之间的耦合—越紧密越好。);⑤强内聚(内聚衡量一个模块内各个元素彼此结合的紧密程度。在设计时应该力求做到高内聚;面向对象设计的3种内聚: (1)服务内聚:一个服务应该完成一个且仅完成一个功能 (2)类内聚:一个类应该只有一个用途,它的属性和服务 应该是高内聚的 (3)一般\特殊内聚:设计出的一般-特殊结构,应该符合 多数人的概念);⑥可重用(软件重用是提高软件开发生产率和目标系统质量的重要途径。重用有两方面含义:(1)尽量使用已有的类(2) 如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将来的可重复使用性)。

			 ***谢谢观看,麻烦点赞!***
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值