软件工程介绍_第1页
软件工程介绍_第2页
软件工程介绍_第3页
软件工程介绍_第4页
软件工程介绍_第5页
已阅读5页,还剩267页未读 继续免费阅读

下载本文档

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

文档简介

18十月20232721软件工程介绍第壹讲软件工程学概述18十月20232722本讲主要内容软件危机软件工程软件生命周期软件过程18十月20232723什么软件危机?如何维护数量不断膨胀的已有软件。

“软件危机”是指计算机软件的“开发”和“维护”过程中所遇到的一系列“严重问题”。这些问题决不仅仅是不能正常运行的软件才具有的,实际上,几乎“所有软件”都不同程度地存在这些问题。

“软件危机”包含两方面的问题:如何开发软件,以满足对软件日益增长的需求;18十月20232724软件危机的表象对软件开发成本和进度的估计常常很不准确;用户对“已完成的”软件系统不满意的现象经常发生;软件产品的质量往往靠不住;软件常常是不可维护的;软件通常没有适当的文档资料;软件成本在计算机系统总成本中所占的比例逐年上升;软件开发生产率提高的速度,远远跟不上计算机应用普及深入的趋势。18十月20232725软件危机的根源矛盾发展开发人员与客户认识之间的矛盾IT自身的发展人们对IT认知的提高

(问题定义、可行性研究、需求分析)开发人员能力与开发目标之间的矛盾

(需求分析、总体设计、详细设计)预估与实际工作量之间的矛盾

(总体设计、详细设计、编码、测试)客户认识的提高与软件维护之间的矛盾

(需求变化、功能追加)遗产系统与实施软件之间的矛盾

(抛弃、融合)

18十月20232726软件危机的应对—软件工程软件定义、开发和维护的工程化——软件工程——贯穿软件生命周期的标准化消除?缓解、预防18十月20232727软件工程1968,NATO:“软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。”1993,IEEE:“软件工程是:①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;②研究①中提到的途径。”

——软件工程是一门工程学科

——软件生命周期

——软件工程方法学18十月20232728软件生命周期软件定义问题定义:要解决的问题是什么?可行性研究:能否、值得否解决?需求分析:目标系统必需做什么?(规格说明书)软件开发总体设计:大概怎样实现?详细设计:具体怎样实现?编码: 按详细设计编写程序代码综合测试:集成测试-按设计;验收测试-按需求软件维护单元测试:模块测试—总体需求—关键分析18十月20232729软件过程(如何进行)瀑布模型

为了获得高质量软件所需要完成的一系列任务的框架。who、when、what、how快速原型模型增量模型螺旋模型喷泉模型Rational统一过程敏捷过程与极限编程微软过程18十月202327210瀑布模型阶段间具有顺序性和依赖性

软件工程中应用得最广泛的过程模型。传统软件工程方法学的软件过程,基本上可以用瀑布模型来描述。图1.2推迟实现的观点质量保证的观点18十月202327211实际的瀑布模型阶段性文档优点:开发过程中用户不可见,可能不满足要求。缺点?(特点):图1.3阶段性验证***编写软件的目的18十月202327212快速原型模型软件产品的开发基本上是线性顺序进行的,不带待反馈环?特点:图1.4

原型的用途是获知用户的真正需求,一旦需求确定了,原型将被抛弃。加速软件开发过程,节约软件开发成本。18十月202327213喷泉模型图1.9软件开发过程自下而上周期的各阶段具有相互迭代和无间隙的特性

优点:生命周期不明显(对象迭代、不是过程迭代)特点:

以用户需求为动力,以对象为驱动的模型。18十月202327214软件工程介绍第贰讲可行性研究18十月202327215本讲主要内容可行性研究的目的可行性研究的任务系统流程图数据流图18十月202327216可行性研究的目的问题是否能解决?问题是否值得解决?——谁是主体?公司(决策者)——投入、产出;前景用户——投入、产出;思维理念现有技术能否解决公司是否有这样的技术储备、是否有可借助的外力?当先进,抑或当先烈?***

不可或缺的硬件资源(92,台湾,会计大师系统)问题的解决方式?18十月202327217可行性研究的任务技术可行性分析

使用现有技术能实现这个系统吗?经济可行性分析

这个系统的经济效益能超出开发成本吗???操作可行性分析

系统的操作方式在用户组织机构中行得通吗?18十月202327218系统流程图

系统流程图(SystemFlowDiagram,SFD),是概括地描绘物理系统的传统工具。它的基本思想是用图形符号以黑盒子形式描绘组成系统的每个部件(程序,文档,数据库,人工过程等)。系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程(数据流图)。18十月202327219例子:库存清单系统事务:零件库存量的变化库存清单文件:数据库库存清单程序修改数据库判定临界值,指挥订货定货信息:报警消息报告生成程序:读取定货消息打印定货报告18十月202327220数据流图

数据流图(DataFlowDiagram,DFD),是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。

符号:18十月202327221例子:定货系统—基本系统模型18十月202327222例子:定货系统—数据流图18十月202327223例子:分解“处理事务”18十月202327224数据流图的用途

用于信息交流(用户理解、内部审查评价)

用于分析与设计切记它是逻辑的!18十月202327225*批量方式更新库存清单自动化边界18十月202327226*联机方式更新库存清单?18十月202327227*什么样的物理系统?|||||||||||18十月202327228软件工程介绍第叁讲需求分析—概念理论18十月202327229本讲主要内容需求分析的目的需求分析的任务获取用户需求的方法分析建模与规格说明———————————————————————————————————————————————————需求分析-过程(图示)18十月202327230需求分析的目的

需求分析:是开发者对用户需求的系统性分析,是软件定义时期的最后一个阶段,结果物是“规格说明书”。“准确”(需要迭代)回答“系统必须做什么?”问题定义——总体“需求”

软件定义:可行性研究——关键“分析”需求-分析--------------------------------------------------低成本、高效概要的需求分析详细的需求分析18十月202327231需求分析的任务用户需求(功能性需求、非功能性需求)获取系统分析建模制作规格说明书18十月202327232用户需求(用户无法独立完成)功能性需求网络需求——网络是软件的载体——网络配置数据需求应用需求可扩展应用需求(符合政府、企业信息化规划)数据结构数据存储数据处理基本应用需求(接口、约束、错误处理、逆向需求)标准规范不做什么18十月202327233用户需求非功能性需求-性能需求响应时间(例:ACS)可靠性(平均失效间隔时间/失效个数)可用性(系统可供使用时间/失效时间)

A=UpTime/(UpTime+DownTime)安全性18十月202327234系统分析对功能性需求的分析——导出系统的逻辑模型网络需求网络模型(逻辑图)—网络逻辑符号数据需求

数据模型(E-R图、数据规范)应用需求

功能模型(数据流图)—离散对非功能性需求的分析——软件质量的预期/影响设计响应时间(上讲-自动化边界划分)可靠性可用性安全性

行为模型(状态转换图)—连续18十月202327235获取需求的方法访谈面向数据流的自顶向下求精简易的应用规格说明技术快速建立软件原形18十月202327236访谈(最原始、最常用)正式(问答式)——行业经验很重要非正式(启发式)——必须酌情控制

情景分析技术:是对用户将来使用目标系统解决某个具体问题的方法和结果进行分析。——举例说明它能在某种程度上演示目标系统的行为,从而便于用户理解,而且还可能进一步揭示出一些分析员目前还不知道的需求。由于情景分析较易为用户所理解,使用这种技术能保证用户在需求分析过程中始终扮演一个积极主动的角色。18十月202327237面向数据流的自顶向下求精分析对象:数据流图用户复查:有无补充修正分析方法:输出端数据数据源元数据(字典)自顶向下:基本系统模型高层数据流图逐步精细化18十月202327238简易的应用规格说明技术-步骤进行初步的访谈,通过用户对基本问题的回答,初步确定待解决的问题的范围和解决方案。开发者和用户分别写出“产品需求”。选定会议的时间和地点,并选举一个负责主持会议的协调人。邀请开发者和用户双方组织的代表出席会议,并在开会前预先把写好的产品需求分发给每位与会者。与“访谈”的区别在于:

“访谈”更偏重于开发人员对用户需求的主观理解,“访谈”中,以开发人员为主导。18十月202327239分析建模与规格说明分析建模(事物的抽象)数据模型(实体-联系图)功能模型(数据流图)行为模型(状态转换图)软件需求规格说明(需求分析阶段的最主要文档)自然语言形式化描述网络模型(网络逻辑图)18十月202327240需求分析过程18十月202327241软件工程介绍第肆讲需求分析—工具方法18十月202327242本讲主要内容网络逻辑图实体-联系图(E-RDiagram)数据规范化(三范式)状态转换图其它图形工具(层次方框图、Warnier图、IPO图)验证软件需求18十月202327243需求分析的概念理论-工具方法18十月202327244网络逻辑图(抽象)18十月202327245网络拓扑图(实际)18十月202327246实体-联系图(E-RDiagram)数据对象(事物的数据抽象)

实体-联系图:概念性的数据模型。包括数据对象、数据对象的属性和数据对象彼此之间的关系。属性(数据对象的性质)1:1\1:N\M:N(E-R)联系(数据对象之间的关系)partof\kindof\instantof\attributeof(Ontology)包含、并列、相交(Set)概念化(Conceptualization)C=<D,R>域空间全函数概念化18十月202327247E-R图例符号:18十月202327248数据规范化(第一范式)姓名所学课程张三软件工程;张三数据库原理姓名所学课程1所学课程2张三软件工程数据库原理

每个属性值都必须是原子值,即仅仅是一个简单值而不含内部结构。姓名所学课程张三软件工程;数据库原理18十月202327249数据规范化(第二范式)

满足第一范式条件,而且每个非关键字属性都由整个关键字决定(而不是由关键字的一部分来决定)。姓名身份证号张名年龄身份证号性别张三23210105199012134211男18十月202327250数据规范化(第三范式)学号姓名0801张三

满足第二范式条件,每个非关键字属性都仅由关键字决定,而且一个非关键字属性不能仅仅是对另一个非关键字属性的进一步描述(即一个非关键字属性值不依赖于另一个非关键字属性值)。学号课程代号08010102学号姓名课程学分0801张三软件工程导论4课程代号课程学分0102软件工程导论418十月202327251状态转换图(行为模型)-过程描述状态——

系统的一种行为模式, 规定了系统对事件的响应方式初态(1)——用表示动作——状态跃迁(离散的)、状态变化(连续的)事件——

引起动作的外界事件的抽象中间态——用表示终态(0,N)——用表示突然大笑恢复平静18十月202327252状态转换图-符号活动表语法:事件名(参数表)/动作表达式事件表达式语法:事件说明[守卫条件]/动作表达式守卫条件:布尔表达式,为真时,状态转换才发生初态终态中间态18十月202327253状态转换图例|电话系统状态状态变量活动表事件表达式守卫条件18十月202327254其它图形工具层次方框图(信息层次结构/功能层次结构)Warnier图(信息层次结构/功能层次结构+逻辑组织)IPO图(InputProcessOutput)18十月202327255层次方框图(层次)18十月202327256Warnier图(层次+逻辑)代表“系统软件”和“应用软件”只能出现一个P1代表“系统软件”中有P1种“操作系统”18十月202327257IPO图18十月202327258改进的

IPO图18十月202327259IPO图-实例文件名输入处理输出AgricultraPrjectGisRight.asp;PaiShuiZhanGisRight.aspx;QuDaoGisRight.aspx;ShuiLiGis-Right.aspx

用户输入、或页面跳转传递的参数、或其它输入利用GIS左侧的传递的参数与用户输入的查询参数构成总的查询条件,查询各项目所存储的数据库,显示查询结果并反显在GIS地图上调用其它页面时的参数、或提供给用户的查询结果信息、GIS反显输出18十月202327260验证软件需求验证内容(四个方面)验证方法用于需求分析的软件工具18十月202327261验证软件需求的四个方面一致性(需求间不能有矛盾)完整性(完备的,不能遗漏功能和性能)现实性(硬件和软件的环境与技术都是可实现的)有效性(需求的正确性,即确实是用户的意思)问题定义——总体“需求”可行性研究——关键“分析”需求-分析--------------------------------------------------低成本、高效概要的需求分析详细的需求分析18十月202327262验证软件需求的方法一致性的验证方法(人工很难完全做到,形式化太理想)现实性的研究方法(经验判断、仿真模拟)完整性和有效性的验证方法(原型系统)18十月202327263软件工程介绍第伍讲总体设计—概念理论18十月202327264本讲主要内容总体设计的目的总体设计的内容总体设计的过程设计原理—基本的启发规则—经验的18十月202327265总体设计的目的“概括地说,系统应该如何实现?”“概要设计”

“初步设计”18十月202327266总体设计的内容划分出组成系统的物理元素(黑盒级)*系统流程图*设计软件结构物理元素程序模块文件、数据库人工过程(数据录入、报盘)文档程序的模块组成,及模块之间关系数据库结构*数据流图*细化*E-R图*18十月202327267总体设计的过程系统划分阶段(划分组成系统的物理元素)系统设计阶段(确定系统具体的实现方案)结构设计阶段(确定软件结构)审查和复审(设计者-技术审查;使用者-管理复审)18十月202327268系统设计阶段设想供选择的方案(从数据流图出发)选取合理的方案(低/中/高成本)系统流程图组成系统的物理元素清单成本/效益分析实现这个系统的进度计划推荐最佳方案对应18十月202327269结构设计阶段功能分解(数据流图的进一步细化)设计软件结构(功能层次)设计数据库(数据库对象)制定测试计划(测试策略、方案、预期、进度)书写文档(系统说明、实现计划、数据库设计结果)18十月202327270审查和复审设计者-技术审查使用者-管理复审18十月202327271总体设计-过程18十月202327272设计原理&目标模块化(模块适当的划分可以降低问题的复杂程度)抽象(复杂问题、忽略细节-枝杈、抽出本质-主干)逐步求精(自顶向下的细化)信息隐藏和局部化(信息的私有性)————————————————————————————————————————————————————目标:模块独立(以上四条的直接结果)18十月202327273抽象:面向实际问题的逻辑思考————————————————————————————————————————————————————抽出本质-主干、忽略细节-枝杈(1)问题定义:实际业务,可以与软件无关(复杂问题)(2)可行性研究:系统主要部件、关键问题(抽象)(3)需求分析:系统所有部件、所有问题(具体)复杂问题————————————————————————————————————————————————————层次化(高

低)软件过程的每一步都是对软件解法抽象层次的一次精化18十月202327274逐步求精逐步求精是一个逐步细化的过程下一步抽象可以看作对上一步抽象的求精随着逐步求精,抽象逐渐变得具体对业务来讲——底层抽象对软件来讲——具体实现18十月202327275模块化-边界、粒度模块化就是把程序划分成独立命名且可独立访问的模块降低问题复杂度增加接口开销

是否真能够降低?

实际是控制问题。18十月202327276信息隐藏和局部化信息隐藏:模块-信息的私有、实现的隐藏局部化:把关系密切的软件元素物理地放置在一起完成同一功能的变量放置在一个函数内完成同类功能的函数放置在一个包内信息的私有实现的隐藏————————————————————————————————————————————————————有利于测试与维护有利于技术保密有利于技术沉淀有利于开发效率的提高18十月202327277模块独立-提高可重用性耦合:模块间互作用的程度 ①数据耦合;②控制耦合;③特征耦合; ④公共环境耦合;⑤内容耦合内聚:模块内各元素彼此结合的程度 ①功能内聚;②顺序内聚;③通信内聚;④过程内聚;⑤时间内聚;⑥逻辑内聚;⑦偶然内聚

“模块独立”的概念是“模块化”、“抽象”、“信息隐藏和局部化”概念的直接结果。如何衡量?18十月202327278耦合(越松越好)数据耦合:参数传递/相当普遍存在/最松散的耦合控制耦合:控制信息传递/通过模块拆分实现数据耦合特征耦合:数据结构传递/通过模块合并实现数据耦合公共耦合:共享数据环境/处理大量共享数据的方法内容耦合:越界访问数据、代码,及代码重复一个模块访问另一个模块的内部数据一个模块不通过正常入口转入另一个模块的内部两个模块有一部分代码重迭一个模块有多个入口

结论:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共(环境)耦合,完全不能用内容耦合。————————————————————————————————————————————————————X18十月202327279内聚(越紧越好)偶然内聚:模块内一组任务之间关系松散(公共函数)逻辑内聚:模块内一组任务逻辑相同或相似(重载)时间内聚:模块内一组任务必须在同一时段内执行(初始化)过程内聚:模块内处理的元素具有相关性,特定次序执行通信内聚:模块中所有元素都使用同一个输入数据和 (或)产生同一个输出数据顺序内聚:模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据)-参数传递

功能内聚:模块内所有处理元素属于一个整体,完成一个单一的功能————————————————————————————————————————————————————————————————————————————————————————————————————————18十月202327280启发式规则(设计的一般规则)改进软件结构提高模块独立性模块规模应该适中深度、宽度、扇出和扇入都应适当模块的作用域应该在控制域之内力争降低模块接口的复杂程度设计单入口单出口的模块模块功能应该可以预测18十月202327281改进软件结构提高模块独立性-总则

设计出软件的初步结构以后,应该审查分析这个结构,通过模块分解或合并,力求降低耦合、提高内聚。模块独立性:模块拆与并的辩证统一————————————————————————————————————————————————————18十月202327282模块规模应-适当(功能独立、接口简单)

经验表明,一个模块的规模不应过大,最好能写在一页纸内(通常不超过60行语句)。有人从心理学角度研究得知,当一个模块包含的语句数超过30以后,模块的可理解程度迅速下降。过大的模块往往是由于分解不充分,但是进一步分解必须符合问题结构,一般说来,分解后不应该降低模块独立性。过小的模块开销大于有效操作,而且模块数目过多将使系统接口复杂。

因此过小的模块有时不值得单独存在,特别是只有一个模块调用它时,通常可以把它合并到上级模块中去而不必单独存在???18十月202327283深度、宽度、扇出和扇入都应适当深度:软件结构中控制的层数宽度:软件结构内同一个层次上的模块总数的最大值扇出:一个模块直接控制(调用)的模块数目扇入:一个模块被多少个上级模块直接调用结论:设计得很好的软件结构通常“顶层较高扇出”,“中层较少扇出”,“底层高扇入”(底层扇入到公共的实用模块中去)。——功能模块/非业务逻辑模块————————————————————————————————————————————————————18十月202327284模块的作用域应该在控制域之内模块的作用域:受该模块内一个判定影响的所有模块的集合。模块的控制域是这个模块本身(A)以及所有直接(B、C)或间接(D、E、F)从属于它的模块的集合。结论:所有受判定影响的模块应该都从属于做出判定的那个模块,最好局限于做出判定的那个模块本身及它的直属下级模块。————————————————————————————————————————————————————树;非网注:指业务逻辑模块,公共(功能)模块除外18十月202327285力争-降低模块接口的复杂程度模块接口复杂:往往是由于模块分解不合理,更是紧耦合或低内聚的征兆。模块接口不一致:团队开发不存在这种情况;在Web服务组合中可能存在。拆分或合并被调用模块,降低接口复杂性重新划分模块18十月202327286设计单入口单出口的模块-处理内容耦合18十月202327287模块功能应该可以预测模块功能一般都可预测模块功能不可预测的情况:可操作的资源受限操作不可控制的硬件(内部存储器)操作第三方数据操作第三方功能模块模块功能可否预测不但是一个技术问题;更是一个软件修养问题!18十月202327288设计原理与启发规则的关系-思考高耦合、低内聚模块一般都可拆;“拆”比“并”一般都容易。18十月202327289软件工程介绍第陆讲总体设计—工具方法18十月202327290本讲主要内容描绘软件结构的图形工具面向数据流的设计方法18十月202327291描绘软件结构的图形工具层次图(H图)——描述软件的功能层次HIPO图(带IPO的H图)结构图——检查模块独立性———————————————————————————————————————————————————在实际应用中的组合功能层次图(功能分解)IPO(功能细节,亦可有层次)18十月202327292层次图(总体设计)-调用关系/功能层次层次方框图(需求分析)-组成关系18十月202327293HIPO图(模块编号

IPO图表)IPO18十月202327294结构图-(1)信息传递18十月202327295结构图-(2)调用结构判断循环18十月202327296层次图的变化描述信息层次描述功能调用18十月202327297面向数据流的设计方法概念变换流事务流设计过程变换分析-实例事务分析-实例设计优化18十月202327298基本系统模型信息外部世界软件系统信息外部世界定货系统的基本系统模型:P43,图2.518十月202327299变换流

信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。

当数据流图具有这些特征时,这种信息流就叫作变换流。18十月2023272100事务流(特殊类)

数据流图中的数据流是“以事务为中心的”,数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类数据流称为事务流。接收输入数据(事务);分析每个事务以确定它的类型;根据事务类型选取一条活动通路。18十月2023272101设计过程—面向数据流复查基本系统模型18十月2023272102变换分析的案例-需求数字仪表板系统将完成下述功能需求:——究竟做什么?通过模(A)数(D)转换实现传感器和微处理机接口;在发光二极管(LED)面板上显示数据;指示每小时英里数(mph)-速度,行驶的里程(m),每加仑油行驶的英里数(mpg)-油耗等等;指示加速或减速;超速警告:如果车速超过55英里/小时,则发出超速警告铃声。18十月2023272103数字仪表盘系统-基本系统模型信号传感器数字仪表盘系统显示仪表盘18十月2023272104数字仪表盘系统-高层数据流图旋转信号燃料信号加速/减速显示速度显示里程显示报警铃声油耗显示18十月2023272105数字仪表盘系统-精化数据流图18十月2023272106旋转编码器车轮码盘电磁传感器信号线PLCDTU18十月2023272107变换分析-数字仪表盘系统物理分解(系统结构)——系统级IPO逻辑分解(数据通路)——功能级IPO18十月2023272108变换分析-数字仪表盘系统物理分解(系统结构)——系统级IPO信号采集(Input)——传感器信号处理(Process)——PLC(可编程逻辑控制器)信号显示(Output)——仪表盘18十月2023272109数字仪表盘系统-物理分解18十月2023272110变换分析-逻辑分解逻辑分解(数据通路)——功能级IPO加/减速显示里程显示速度显示超速报警油耗显示18十月2023272111数字仪表盘系统-逻辑分解18十月2023272112变换分析的案例18十月2023272113事务分析的案例-负载均衡IPO数据流图层次图18十月2023272114关于设计优化先功能、后性能(最重要)!!!用设计原理、启发规则衡量软件设计,精化软件结构顺序-时间优化——流水线18十月2023272115软件工程介绍第柒讲详细设计—概念理论18十月2023272116本讲主要内容详细设计的目的详细设计的任务详细设计的主要内容18十月2023272117详细设计的目的

目的:得出对目标系统精确的描述,使得编码工作变成对其的翻译。“详细地说,系统应该如何实现?”制约因素:开发周期(外因)软件成本(外因)设计能力(内因)18十月2023272118详细设计的任务

任务:设计出程序“蓝图”,以后程序员将根据这个蓝图写出实际的程序代码。

总体设计:针对的是软件结构,自顶向下、逐步求精,其结果是模块、数据库对象(表)、网络结构。

详细设计:针对的模块(结构化的程序)设计、人机交互界面的设计,其结果是界面、函数、数据库对象(包括其它对象)、高层通信协议及其之间的关系。18十月2023272119详细设计的主要内容结构-程序设计人机-界面设计————————————————————————————————————————————网络(通信)设计数据库设计(详细)18十月2023272120结构-程序设计(非软件结构)结构化程序设计的由来结构化程序设计的定义结构化程序设计的要点18十月2023272121结构化程序设计的由来1965年,E.W.Dijkstra提出取消GOTO语句1966年,Bohm和Jacopini证明:只用3种基本的控制结构就能实现任何单入口单出口的程序。——理论基础1968年,E.W.Dijkstra再次建议从一切高级语言中取消GOTO语句,只使用3种基本控制结构写程序。1972年,IBM公司的Mills进一步提出,程序应该只有一个入口和一个出口,从而补充了结构程序设计的规则。18十月2023272122结构化程序设计的定义经典定义:

结构程序设计是尽可能少用GOTO语句的程序设计方法。最好仅在检测出错误时才使用GOTO语句,而且应该总是使用前向GOTO语句。——补充

如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是“结构化”的。改进定义:18十月2023272123结构化程序设计的要点goto的限制三种控制结构顺序分支(if-then-else,docase)(if-else,

switchcase)循环(dowhile,dountil)(for,while)一个入口、一个出口(防止内容耦合)18十月2023272124goto的限制goto的产生——代码的重用(本段程序中)goto的问题(随着goto数量的增加)不易读不易测不易维护goto的控制不易重用出错处理资源受限——降低程序尺寸,提高程序片断的重用性18十月2023272125三种控制结构顺序选择分支循环多分支判断+gotoelseif循环尾否定判断+goto18十月2023272126人机界面设计(看得见的接口设计)基本问题一般过程评估标准启发规则18十月2023272127人机界面设计-基本问题系统响应时间适中:长-等待(进度条);短-忽略(提示)稳定:偏差大容易引起用户误认系统异常用户帮助设施集成帮助与附加帮助流程向导出错信息处理屏蔽系统出错信息:显示业务出错信息对于危险操作的确认(防患于未然)命令交互命令行参数序列的帮助热键18十月2023272128人机界面设计-一般过程(迭代)初始期迭代期通过未通过18十月2023272129人机界面设计-评估标准(易用性)系统及其界面的规格说明书的长度和复杂程度,预示了用户学习使用该系统所需要的工作量。命令或动作的数量、命令的平均参数个数或动作中单个操作的个数,预示了系统的交互时间和总体效率。设计模型中包含的动作、命令和系统状态的数量,预示了用户学习使用该系统时需要记忆的内容的多少。界面风格、帮助设施和出错处理协议,预示了界面的复杂程度及用户接受该界面的程度。18十月2023272130人机界面设计-启发规则(针对基本问题)一般交互(总则)信息显示数据输入18十月2023272131一般交互-技术为业务服务,人性化服务保持一致性(菜单选择、命令输入、数据显示)提供有意义的反馈(视觉和听觉)危险动作提示确认(删除数据、文件)允许取消绝大多数操作(避免浪费用户时间)减少在两次操作之间必须记忆的信息量提高对话、移动和思考的效率(击键次数、鼠标移动距离)允许用户犯错误(robust)按功能对动作分类,并据此布局屏幕(group/notebook)提供对用户工作内容敏感的帮助设施(业务相关)用简单动词或动词短语作为命令名18十月2023272132信息显示-准确,明显,形象,分类只显示与当前工作内容有关的信息不要用数据淹没用户,以用户易理解的方式表示数据使用一致的标记、标准的缩写和可预知的颜色允许用户保持可视化的语境(开发环境中窗体位置)产生有意义的出错信息使用大小写、缩进和文本分组以帮助理解使用窗口分隔不同类型的信息用模拟方式表示信息,使用户更易提取信息(液位、账本)高效率地使用显示屏18十月2023272133数据输入

-减少输入,非法检测,范例提示,输入切换尽量减少用户的输入动作(ComboBox,SpinButton)保持信息显示和数据输入之间的一致性允许用户自定义输入交互应该是灵活的,可调整成用户最喜欢的输入方式使在当前动作语境中不适用的命令不起作用让用户控制交互流对所有输入动作都提供帮助消除冗余的输入18十月2023272134网络(通信)设计网络的选择LAN/MAN/WAN/InternetLAN(Ethernet/Token/FDDI/ATM/WLAN)传输介质的选择通信协议的选择高层通信协议的设计-面向应用传输格式波特率(bps)时间间隔18十月2023272135数据库设计便于数据管理(存储、处理、使用)遵循范式、降低冗余正确使用数据库对象、屏蔽数据库细节关照系统可扩展性信息安全18十月2023272136设计总结18十月2023272137软件工程介绍第捌讲详细设计—工具方法18十月2023272138本讲主要内容面向(程序处理)过程-设计的工具面向数据结构的设计方法————————————————————————————————————————————————————程序复杂程度的定量度量18十月2023272139过程设计的工具图形程序流程图(传统方法,3个主要缺点)盒图(N-S图)(①不能随意转移控制)问题分析图(PAD)(②支持自顶向下、逐步求精;

③可以描述数据结构)表格判定表(条件与动作的对应表)判定树(判定表更直观的变形)语言过程设计语言(PDL)(接近自然语言描述的伪代码)18十月2023272140程序流程图

程序流程图又称为程序框图,它是历史最悠久、使用最广泛的描述过程设计的方法。它的主要优点是对控制流程的描绘很直观,便于初学者掌握。主要缺点:程序流程图不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。程序流程图用箭头代表控制流,程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。程序流程图不易表示数据结构。18十月2023272141程序流程图-例开始/停止选择(分支)处理控制流18十月2023272142盒图(Nassi-Shneiderman)的基本符号子程序调用18十月2023272143盒图的特点功能域(即一个特定控制结构的作用域)明确不可能任意转移控制—没有箭头很容易表现嵌套关系,也可以表示模块的层次结构很容易确定局部和全程数据的作用域18十月2023272144问题分析图(PAD)的基本符号语句标号定义程序主线18十月2023272145问题分析图(PAD)的特点使用PAD符号设计出来的程序是结构化的PAD所描绘的程序结构十分清晰用PAD表现程序逻辑,易读、易懂、易记容易将PAD转换成高级语言源程序,这种转换可用软件工具自动完成即可用于表示程序逻辑,也可用于描绘数据结构PAD的符号支持自顶向下、逐步求精方法的使用18十月2023272146用PAD自顶向下、逐步求精的例子使用def逐步增加细节程序主线程序第二层主线18十月2023272147判定表—处理多重嵌套所有条件所有可能做的动作条件组合矩阵条件组合对应动作

123456789国内乘客

TTTTFFFF头等舱

TFTFTFTF残疾乘客

FFTTFFTT行李重量W≤30kgTFFFFFFFF免费√

(W-30)×2

(W-30)×3

(W-30)×4

(W-30)×6

√(W-30)×8

(W-30)×12

18十月2023272148判定树—更直观的判定表变形条件组合对应动作18十月2023272149过程设计语言(PDL)

——接近自然语言描述的伪代码特点:关键字的固定语法,提供结构化控制结构、数据说明和模块化;自然语言的自由语法,描述处理数据说明的手段模块定义和调用的技术,提供各种接口描述模式优点:可以作为注释直接插在源程序中间通过普通文本编辑器即可完成PDL的书写和编辑工作可以由PDL自动生成代码缺点:不如图形工具形象直观描述条件组合与动作的对应关系时,不如判定表清晰简单18十月2023272150面向数据结构的设计方法Jackson图——工具“总体设计”:“面向数据流的设计方法”--得到软件结构“详细设计”中:

“面向数据结构的设计方法”是从数据角度切入的

“面向处理过程的设计方法”是从过程角度切入的

它们的最终目标都是得到“程序处理过程的描述”“详细设计”:“面向数据结构的设计方法”--得到程序结构(模块)“后者”是“前者”的进一步细化——————————————————————————————————————————————————————————————————————————————————————————————————————————改进的Jackson图——工具Jackson方法——依赖工具来实现18十月2023272151Jackson图

-三种数据结构(非控制结构)顺序:A由B、C、D3个元素顺序组成选择:根据条件,A是B或C或D中的一个重复:A由B出现N次(N≥0)组成缺点:没有选择条件描述缺点:没有循环终止条件描述18十月2023272152Jackson图-优、缺点优点(脱胎于层次方框图)缺点便于表示层次结构,支持对结构进行自顶向下的分解形象、直观、可读性好既能表示数据结构也能表示程序结构表示选择或重复结构时,选择条件或循环结束条件不能直接在图上表示出来,影响了图的表达能力,也不易直接把图翻译成程序。18十月2023272153改进的Jackson图顺序选择Select可选或B或无选择的特例重复Iteratei-条件编号18十月2023272154Jackson方法五个步骤(1)

确定、并用Jackson图描述输入、输出数据的逻辑结构(2)找出输入和输出数据结构中有对应关系的数据单元(3)

数据结构的Jackson图

程序结构的Jackson图有对应的数据单元程序结构相应层次(画处理框)无对应的数据单元程序结构相应层次(画处理框)输入数据结构(剩余)输出数据结构(剩余)(4)把所有操作和条件分配到程序结构图的适当位置(5)用伪代码表示程序18十月2023272155Jackson方法例子

一个正文文件由若干个记录组成,每个记录是一个字符串。要求统计每个记录中空格字符的个数,以及文件中空格字符的总个数。要求的输出数据格式是,每复制一行输入字符串之后,另起一行印出这个字符串中的空格数,最后印出文件中空格的总个数。18十月2023272156第一步:确定输入、输出的数据结构输入的数据结构输出的数据结构第二步:找出对应关系18十月2023272157第三步:从数据结构导出程序结构图18十月2023272158第四步:(1)列出操作和条件(2)

打开文件(4)

印出字符串(6)

印出空格总数(7)sum:=sum+1(8)totalsum:=totalsum+sum(9)

读入字符串(11)totalsum:=0(13)pointer:=pointer+1I(2)

字符串结束S(3)

字符是空格(1)

停止 (3)

关闭文件(5)

印出空格数目(10)sum:=0 (12)pointer:=1I(1)

文件结束 18十月2023272159第四步:(2)操作和条件的放置打开文件读入字符串totalsum:=0停止关闭文件印出空格总数印出字符串sum:=0pointer:=1印出空格数目totalsum:=totalsum+sum读入字符串sum:=sum+1pointer:=pointer+1文件结束字符串结束字符是空格18十月2023272160第五步:伪代码(1)(1)统计空格seq //顺序开始 (2)打开文件(2)读入字符串(2)totalsum:=0 //初始化空格总数变量 (2)程序体iteruntil文件结束

//外循环开始(3)处理字符串seq(4)印字符串seq (5)印出字符串 (4)印字符串end (4)sum:=0; //初始化每串空格数变量 (4)pointer:=1; //初始化字符串指针18十月2023272161第五步:伪代码(2)

(4)分析字符串iteruntil字符串结束 //内循环开始

(5)分析字符select字符是空格 //选择结构

(6)处理空格seq

(7)sum:=sum+1;pointer:=pointer+1

(6)处理空格end

(6)分析字符or字符不是空格

(6)处理非空格seq

(7)pointer:=pointer+1

(6)处理非空格end

(5)分析字符end //内选择结束

(4)分析字符串end //循环结束18十月2023272162第五步:伪代码(3)

(4)印空格数seq

(5)印出空格数目

(4)印空格数end

(4)totalsum:=totalsum+sum

(4)读入字符串

(3)处理字符串end

(2)程序体end

//外循环结束

(2)印总数seq;(3)印出空格总数;(2)印总数end

(2)关闭文件;(2)停止

(1)统计空格end //顺序结束18十月2023272163程序复杂程度的定量度量McCabe方法主要用途:比较不同的设计或不同的算法的优劣(控制)流图(退化的程序流程图)计算环形复杂度的方法环形复杂度的用途Halstead方法18十月2023272164McCabe方法—(控制)流图

程序流程图(过程角度)流图判定结点判定处理终结18十月2023272165McCabe方法—(控制)流图

程序结构图(数据角度)PDL

流图Edge(11)Vertex(9)Region(4)关键字/固定语法处理/自由语法18十月2023272166计算环形复杂度的方法与用途流图中的区域数等于环形复杂度(总则)

研究结论:环形复杂度越高,程序开发越困难,并且越容易出问题。模块规模以V(G)≤10

为宜。流图G的环形复杂度V(G)=E-N+2(程序结构图)E(Edge)是流图中的边数N(Node)是结点数流图G的环形复杂度V(G)=P+1(程序流程图)P是流图中判定结点的数目欧拉公式

v-e+r=218十月2023272167HalStead方法

研究结果:H与N非常接近;对于300-1200条语句范围内的程序,预测错误数与实际错误数的误差在8%以内。N=N1+N2(定义)N1为程序中“运算符”出现的总次数N2为程序中“操作数”出现的总次数N为程序的长度H=n1log2n1+n2log2n2(详细设计完成后)n1为程序使用的不同运算符(包括关键字)E=Nlog2(n1+n2)/3000(错误个数预测)H为程序的预测长度n2为程序使用的不同操作数(包括变量和常量)18十月2023272168详细设计概念理论与工具方法结构概念理论工具方法规则18十月2023272169软件工程介绍第玖讲实现—编码18十月2023272170实现

通常把编码和测试统称为实现。“现在开始,具体实现”18十月2023272171本讲主要内容编码程序设计语言(开发环境)的选择编码风格(风范)编码技巧(经验)18十月2023272172编码

编码:把软件设计结果翻译成用某种程序设计语言书写的程序。

软件设计结果:详细设计说明书。18十月2023272173程序设计语言的选择-开发平台的选择操作系统开发平台-开发环境涉及:网络通信数据库开发工具、及相关的辅助工具测试工具管理工具(版本控制、进度管理)18十月2023272174程序设计语言的选择用户的要求(用户负责维护)(基本没有意义)*功能性选择(具备实现系统的功能)(最根本)系统特性(数据库、科学计算、自动控制;Web)公司的技术储备(程序员的知识)遗产系统(集成、融合)可扩展性(为后续工作打基础)执行效率对于大系统,一般采用“组合拳”(B/S+C/S;DB)核心技术的保护(Lib、DLL)开发平台型的程序设计语言的选择(汇编、C、Java)非功能性选择18十月2023272175编程风格—基础欧美(programstyle)日本(コーディング規約書)匈牙利命名法

单词缩写,大写开头变量名=属性+类型+变量描述(giCount)函数名=返回值类型+函数功能描述(fRtnSum)———————————————————————————————————————————————————控件名=控件类型+控件功能描述(cmdExit)CharlesSimonyi18十月2023272176编程风格—规则命名(英文缩写要表意、一致,千万不要用汉语拼音)

变量、函数、控件注释(最好用英语;如果客户负责维护,可以用汉语)

宏、数据结构、变量;行、程序块、函数、模块 (注释位置:41-79)布局(美观、清晰)

缩进(IBM2、MS4

)、折行;嵌入SQL例子18十月2023272177编程技巧(1)条件编译(编译不同版本,如:Test/Release等等)#if、#elif、#else、#endif#if表达式

语句段#endif#ifdef、#ifndef#ifdef宏替换名

语句段#endif18十月2023272178编程技巧(2)LogFile(记录可能出错现场,如:与他人程序交互等)四个重要的宏__TIME__ (时间)__FILE__ (文件名)__LINE__ (源代码行)__DATE__ (日期)+出错现场信息——————————————————————————————————————写入LogFile(sprintf/fprintf)18十月2023272179编程技巧(3)对外来数据(控制符)进行合法性检查(防止自己程序出错)读取并使用他人程序存入数据库中的数据读取并使用与他人程序通信的数据外来数据:

与无法控制的对象之间的交互!18十月2023272180编程技巧(4)宏定义代替常数if(iLen>18)

语句段#defineMAX_LENGTH

18if(iLen>MAX_LENGTH)

语句段.c.c.h18十月2023272181编程技巧(5)避免复杂控制结构,尤其深层嵌套深刻理解各种控制结构语句,通过控制结构语句的选择,或合并降低嵌套层数if-elsefor/whileSwitch-caseif(a>0){

if(b>0)X

elseY}elseZif((a>0)and(b>0))Xelseif((a>0)and(b≤0))YelseZ但是,嵌套层数的降低可能引发程序可读性的减低18十月2023272182编程技巧(6)准确使用数据结构(链表代替变长数组)表队列(FIFO的线性表)串(单字符的线性表)链表(动态的线性表)树(分支、分层)图(顶点、边)多维数组/稀疏矩阵文件栈(LIFO的线性表)18十月2023272183编程技巧(7)合理使用存储器:资源占用与可读性(PDA)局部变量(动态)栈(系统维护)全局变量(静态)静态局部变量堆(程序员维护)——内存申请-使用后-要释放——————————————————————————————————————18十月2023272184编程技巧(8)多任务的理解Process(Socket/Pipe)ThreadSemaphoreSleepQThread1(){SendMessage}Thread2(){while(True){GetMessageProcessMessage

}}Sleep死循环的处理18十月2023272185编程技巧(9)深刻理解操作系统(Windows/PM)HandleID标题条(对窗口-唯一)(对操作系统-唯一)控制菜单框变最小框关闭框滚动框滚动条恢复框18十月2023272186编程技巧(10)哑巴程序(dummy)、尤其commondummy定义(计划完成/未调适的程序代码)函数是公共的函数是他人的函数是自己的用途(主要用于团队开发,提高开发效率)结构(强制赋值——输入、输出都是常数)18十月2023272187软件工程介绍第拾讲实现—测试18十月2023272188本讲主要内容软件测试基础(概述)测试种类(单元测试;综合测试(集成测试/确认测试))测试方法(白盒测试技术/黑盒测试技术)调试(测出问题后的修改)——————————————————————————软件可靠性(介绍)软件测试的目标软件测试的准则软件测试的方法软件测试的步骤测试阶段的信息流——————————————————————————18十月2023272189软件测试的目标最大限度地发现隐藏在程序中的错误!!!程序是否存在技术上的错误功能性满足非功能性满足(效率、鲁棒性等)——————————————————————————程序是否满足设计要求、用户要求(业务)18十月2023272190软件测试的准则追溯到用户需求(发现不满足用户需求的错误)制定测试计划(需求后)和测试方案(设计后)小规模(单个模块)大规模(模块簇、子系统、系统)第三方测试(专业测试,开发/测试配对)80%的错误由20%的程序引起(Pareto法则)充分覆盖程序逻辑18十月2023272191软件测试的方法黑盒测试—功能白盒测试—结构18十月2023272192软件测试的步骤模块测试

(单元测试)—针对-编码和详细设计说明书子系统测试(接口测试)—针对-模块接口系统测试

(集成测试)—针对-需求说明书中的功能验收测试

(确认测试)—针对-用户实际需求平行运行(新/旧;系统/手工)—试运行——————————————————————————测试是软件生命周期中的一次较大迭代子系统的定位:系统子部分;大粒度模块18十月2023272193测试阶段的信息流-测试流程软件配置:①需求说明书;②设计说明书;③源程序清单测试配置:测试计划设计测试方案:①检验功能;②测试数据;③预期结果18十月2023272194软件测试的种类单元测试(模块测试)—针对详细设计(程序结构/功能)综合测试集成测试(系统测试)—针对总体设计(软件结构)确认测试(验收测试)—用户需求(软件功能)18十月2023272195Commonsub13sub12sub11sub2sub1main单元测试-使用白盒测试技术测试重点模块接口(参数、返回、全局变量)局部数据结构(局部变量的说明、初始化、默认值)重要的执行通路(包括出错处理通路)边界条件(数组上限、循环次数、缓冲区尺寸)代码审查(人工测试)—是否符合设计上机测试—需要测试环境主程序(main)子程序(sub)公共程序(common)dummy-测试环境的最小代价主控(m_d)存根(s_d)18十月2023272196集成测试(组装模块)-渐增式测试基本策略自底向上集成策略比较回归测试自顶向下集成18十月2023272197自顶向下集成始于主控制模块(main),其它均为存根程序(s_d)选择组装策略—深度优先、广度优先边组装边测试由组装特点决定是否使用回归测试有数据交互(传参、通信、共有变量),使用否则,不使用mains_d1s_d2s_d11s_d12s_d13sub1sub11sub12sub13sub218十月2023272198自底向上集成将原子模块(叶子)按特定功能组装成簇写一个主控程序(m_d)协调测试数据的输入和输出对簇进行测试组装更大粒度的簇m_d1sub11sub12sub13sub1sub2m_dmaindummy-

无论主控(m_d),还是存根(s_d),其目的: 隔离错误分清责任18十月2023272199策略比较自底向上集成策略自顶向下集成策略不需要主控程序(m_d)需要存根程序(s_d)需要主控程序(m_d)不需要存根程序(s_d)综合策略—主要根据逻辑结构——————————————————————————数据依赖开发步调可能从某一局部(核

温馨提示

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

评论

0/150

提交评论