软件工程北京邮电大学信息安全中心2010年春季构件级设计与实现软件工程2010年春季主要内容程序编码基本概念:•什么是程序编码?•程序编码的要求•程序编码的任务和步骤程序编码:•程序设计语言性能的讨论•程序设计语言的分类与选择•结构化程序设计原则•程序编码风格•程序效率过程设计:图形工具1.程序流程图2.盒图(N-S图)3.问题分析图(PAD)表格工具4.判定表语言工具5.过程设计语言(PDL)软件工程2010年春季常用方法图形工具1.程序流程图2.盒图(N-S图)3.问题分析图(PAD)表格工具4.判定表语言工具5.过程设计语言(PDL)(伪码)构件级设计构件级设计软件工程2010年春季控制结构1.顺序型(图1)2.选择型(图2)3.循环型先判断后循环(图3.1)先循环后判断(图3.2)(图3.2)(图3.1)(图2)(图1)1程序流程图(PFD-ProgramFlowDiagram)软件工程2010年春季例:例:托运货物运费计算托运货物运费计算设货物重量x,客户信息y,x、y输入后,计算运费生成公式:0x≤5条件15x≤15条件215x≤50条件3X50条件4公式2公式1公式3公式4记帐输出软件工程2010年春季输入x输入y公式4公式2公式3begin条件1条件2条件3公式1记帐输出end次数3stop例例PFDPFD图图软件工程2010年春季22盒图盒图(N(N--SS图图))用方框图代替传统的流程图描述五种基本控制结构的图形构件(1)顺序型ABC(2)选择型(If–then–else)If–then–elseIf–thenABF条件TAFT条件then–部分then–部分else–部分(3)多分支选择型(CASE型)A1值1A2An........条件值2值n软件工程2010年春季(4)WHILE重复型S(循环体)DO-WHILEPS(循环体)REPEATUNTILP(先测试循环)(后测试循环)循环条件(5)UNTIL重复型软件工程2010年春季例例::移出项的移出项的NN--SS图图L:记帐输出Do-unti次数3stopNN--SS图小结:图小结:(1)每个构件具有明确的功能域;(2)控制转移必须遵守结构化设计要求;(3)易于确定局部数据和(或)全局数据的数据域;(4)易于表达嵌套关系和模块的层次结构软件工程2010年春季3问题分析图(PAD)(ProblemAnalysisDiagram)基本控制结构:(1)顺序结构(2)选择结构ABCABTF条件(3)(3)重复结构重复结构WHILECSUNTILCS(先测试循环)(后测试循环)等价的PASCAL语言:REPEATCUNTILS等价的PASCAL语言:WHILECDOS(4)(4)多分支选择型多分支选择型(CASE(CASE型型))A1值1值2值nA2An......条件软件工程2010年春季输入x输入y条件2公式2NAMEA条件3公式3NAMEA公式4NAMEA条件1公式1While次数≤3记帐输出NAMEAWhile次数≤3记帐输出def命名NAMEA的展开:例PAD红圈命名NAMEA软件工程2010年春季3)昀左端的纵线是程序主干线,对应程序的第一层结构;每增加一层PAD图向右扩展一条纵线故程序的纵线数=程序层次数。1)结构清晰,结构化程度高;2)易于阅读;4)程序执行:从PAD图昀左主干线上端结点开始自上而下、自左向右依次执行,程序终止于昀左主干线。问题分析图的特点软件工程2010年春季1234条件1TFFF条件2TFF条件3TF输入x√√√√输入y√√√√公式1√公式2√公式3√公式4√NameA√√√√基本条件基本动作条件组合条件对应动作例判定表软件工程2010年春季/*计算运费*/count();{输入x;输入y;if条件1{公式1;callsub;}elseif条件2{公式2;callsub;}elseif条件3{公式3;callsub;}else{公式4;callsub;}}sub();{for(I=1,3)do{记帐;输出;}}例PDL软件工程2010年春季基本概念程序编码是将“设计”变换成程序设计语言的过程,是软件设计的延伸设计编码测试信息描述功能描述行为描述其它需求数据设计总体结构设计过程设计程序模块集成并确认软件软件工程2010年春季基本概念程序编码的要求(对源程序的要求)正确性(语法、功能)良好的结构性良好的程序设计风格软件维护修改软件错误增强软件功能人员流动软件工程2010年春季基本概念程序编码的任务和步骤确定开发环境操作系统的型号、版本编程语言及编译环境版本控制工具制定开发规范编写代码1.确定开发环境2.制定开发规范3.编写代码软件工程2010年春季程序编码程序设计语言的性能和程序的编码风格,在很大程度上影响着软件的质量和维护性能。程序设计语言的分类与选择结构化程序设计程序编码风格软件工程2010年春季程序设计语言的分类按语言发展历程分类--从属于机器的语言--第一代语言机器指令,存储器空间由程序员安排汇编语言--第二代语言符号指令,存储器空间由机器安排MASM,MCS51系列,DSP系列专用汇编等高级程序设计语言--第三代语言用途广泛,具有大量的软件库FORTRAN,COBOL,BASIC,C,C++,Java第四代语言(4GL)更高一级抽象层次,不需考虑算法的细节软件工程2010年春季程序设计语言的分类从软件工程的角度--基础语言:FORTRAN,昀早的高级语言COBOL,广泛应用于商业处理应用BASIC,简单易懂,初学者的入门语言结构化语言:Pascal,第一个体现结构化程序概念的高级语言C语言,昀初是UNIX的主要语言,结构化,高效率Ada语言,军用的通用语言面向对象语言:C++语言,C语言进化来的,既可以进行过程化设计,也可以进行面向对象程序设计Java语言,面向对象、跨平台、分布式应用软件工程2010年春季程序设计语言的选择一般而言,衡量某种程序语言是否适合于特定的项目,应考虑下面一些因素:应用领域算法和计算复杂性软件运行环境用户需求中关于性能方面的需要数据结构的复杂性软件开发人员的知识水平可用的编译系统软件工程2010年春季程序设计语言的选择(续)适用各类应用领域的语言(表7.2)C、PL/1COBOL、C++、Java、电子表格商业LISP、Prolog人工智能Ada、ModulaC、C++、Java系统BASICFORTRAN、C、C++、Java科学计算其他语言主要语言应用领域软件工程2010年春季程序设计支撑环境现在编程过程大多在一组CASE工具的支持下进行,这组工具辅助完成编辑、编译、调试、项目管理等一系列任务,这组工具有机集成在一起形成程序设计支撑环境。软件工程2010年春季程序设计支撑环境应该具备的特性:通用性:适用于不同的语言、不同的应用领域和开发方法;适应性:通过开关设置,能配制出不同需要的程序设计支撑环境实例;开放性:能方便地增加新工具;支持复用:能支持可复用模块的存储、索引和查找;自控性:保证自身操作的正确与协调;自带数据库:提供数据库机制,存储、管理已开发的软件产品;保证质量:有助于提高所开发软件的质量;吸引用户:用户愿意使用;具有市场竞争力:能真正提高软件生产力。程序设计支撑环境软件工程2010年春季结构化程序设计的原则使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑选用的控制结构或由多条语句组成的程序块只准许有一个入口和一个出口复杂结构应该用基本控制结构进行组合嵌套来实现严格控制GOTO语句的使用,除非可以改善程序的可读性软件工程2010年春季编码风格编码风格在很大程度上影响着程序的易读性、易测试性和易维护性,鉴于软件的绝大部分成本消耗在测试和维护阶段,提倡好的编码风格,努力提高易测试性和易维护性极其重要。好的编码风格是在不影响性能的前提下,有效地编排和组织程序,以提高易读性和易维护性。软件工程2010年春季编码风格根据注释风格将编码风格分为:随意型(基本无注释)注释型(采用大量的注释)基于代码的自注释型包括命名自注释和空间结构自注释辅以必要的代码外注释软件工程2010年春季编码风格编码风格包括以下四个方面:代码文件数据、函数等的说明语句结构输入和输出(I/O)软件工程2010年春季编码风格代码文件代码文件适当的注解序言性注解:在程序开始处说明每个模块的用途、功能;说明模块的接口:调用形式、参数描述及从属模块的清单;数据描述:重要数据的名称、用途、限制、约束及其他信息;开发历史:设计者、审阅者姓名及日期,修改说明及日期。功能性注解:在程序体内描述某段程序的用途,或某个变量的含义。良好的程序视觉组织适当的空格,空行和缩进恰当的标识符;**************************************************************;*MODULE;*NAMESTARTUP.A5X;**************************************************************;*;*ORIGINALVERSIONBY:MarkkuHolttinen;*LASTREVISEDBY:;*;**************************************************************;*;*Thisisstartupprocedure.Itwillinitialize;*HW,autoinitializedctables;*;*ThisversionisforChinaCEMtesting.;*Unusedinterruptsaremappedintodummyinterruptroutine.;*;**************************************************************;******COPYRIGHT*(C)*2004*BY*NOKIA*NETWORKS*OY*FINLAND*****1.注释是对代码的“提示”,不必过多;2.边写代码边注释,修改代码同时修改相应的注释;3.注释应当准确、易懂,防止注释有二义性;1.标识符应当直观且可以拼读,可望文知意2.标识符的长度应当符合“min-length&&max-information”原则。3.命名规则尽量与所采用的操作系统或开发工具的风格保持一致4.变量的名字应当使用“名词”或者“形容词+名词”。5.程序中不要出现标识符完全相同的局部变量和全局变量;6.全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组);7.程序中不要出现标识符完全相同的局部变量和全局变量8.尽量避免名字中出现数字编号软件工程2010年春季编码风格数据说明数据说明的简单原则:变量,尤其是全局变量要有一个有意义的名字数据说明的次序应该标准化;当多个变量同时被说明时,应当按字母顺序排列这些变量;若设计时使用了一个复杂的数据结构,则应该用注解说明用程序设计语言实现它的特点和方法。函数或过程说明函数或过程说明的原则:函数或过程一般采用具有动作性的名字;如,SetValue()等;软件工程2010年春季编码风格语句结构语句结构要保持尽可能的简单,应遵循以下原则:程序要清晰直观,不要过于巧妙;用一定的原则指导控制结构的使用;(1)不用空THEN语句;(2)避免THEN--IF结构形式;(3)不要嵌套太深;(4)避免不必要的转移;(5)有原则地使用GOTO;(6)采用标准的结构形式弥补语言的不足。使用括号清晰地表示逻辑表达式和算术表达式;利用加空白或易读的符号来清晰地表示语句的内容;心理换位“如果这个程序不是我写的,我能看懂它吗?”软件工程2010年春季编码风格程序交互部分程序交互部分的设计指导原则:对所有输入数据要进行检验,