软件制造工程编程工程.ppt
《软件制造工程编程工程.ppt》由会员分享,可在线阅读,更多相关《软件制造工程编程工程.ppt(128页珍藏版)》请在三一办公上搜索。
1、软件制造工程,第三章 编程工程,主要授课内容,编程工程概要结构化编程面向对象编程编程团队的计划过程编程前的准备过程程序开发规范编程的实现过程,编程工程概要,编程工程就是用程序设计语言把程序设计的结果和过程翻译为在计算机相应环境下可运行的软件产品,把系统工程师按照用户需求设计出来的系统构架变为真正可运行的软件系统的工程。,编程工程概要,编程工程的作业内容详细地划分为制定工作标准,制定编码基准,理解设计书,程序编码,自查,送上级系统工程师审查,修改以及进行单元测试等若干步骤,,结构化编程_结构化开发过程,结构化开发结构化分析结构化设计结构化编程,结构化编程_结构化开发过程,结构化编程_结构化开发过
2、程,1、结构化分析核心是沿数据流程图自顶向下、逐步求精,是最经典的面向数据流的需求分析方法。,使用系统流程图、数据流图、数据字典、E-R图等工具来描述系统的功能需求、数据需求、运行需求和系统扩充需求。该方法广泛应用于银行,证券,商务处理、生产管理等大中型信息管理系统的需求分析过程。,在软件系统开发的初期阶段,首先要对用户的现行业务运行系统进行调查和现状分析,把握用户对新的开发系统的要求和希望,从用户提供的基本信息中,整理出开发系统目的和可能实现的功能范围,设计出新系统的数据流程图(DFD:Data Flow Diagram),显示屏幕关连图和功能概要说明书。,结构化编程_结构化开发过程,结构化
3、编程_结构化开发过程,2、结构化设计以分析阶段获得的系统的数据流图(DFD)和显示屏幕关联图为基础,通过一系列映射,自顶向下,逐步细化,把它们变换为具体的程序概要结构图和屏幕设计式样,把一个个复杂的问题分解细化为由多个功能模块组成的具有层次结构的软件系统。,结构化编程_结构化开发过程,3、结构化程序制造由结构化程序设计和结构化程序编码组成它以软件结构图及其相关设计资料为基础,采用自顶向下,逐步细化的方法,把一个个模块的功能逐步分解,细化为一系列具体的步骤,作出结构化程序设计书,程序员再按照程序设计书和系统设计的相关资料,把一步步的处理说明翻译成一系列用某种程序设计语言编写的程序代码。,结构化编
4、程_分析、设计文档与编程,结构化分析、设计的成果文档 系统功能概要说明书 程序名称一览表业务处理概要图(ER图)公共子程序设计说明书显示屏幕关联 图程序功能结构图屏幕设计式样书 程序设计说明书数据库设计说明书 程序处理追加功能说明书代码设计说明书模块功能的定义说明书输入输出文件设计说明书 输入数据检查说明书各文档与编程的关系?,结构化编程_分析、设计文档与编程,在进行程序编码工作的初期,程序员首先要获取系统功能概要说明书、业务处理概要图(DFD图或者E-R图)、显示屏幕关联图和程序名称一览表理解开发系统的目的、整体要素和各个子系统的处理要求。,结构化编程_分析、设计文档与编程,程序编码的主要依
5、据是程序设计说明书在编写程序代码之前,程序员首先要确认自己所要编制的程序名称,获取该程序的程序设计说明书,理解该程序的程序功能概要和各个模块的详细处理说明,确定该程序所要使用的屏幕和报表的名称,数据库表和输入输出文件的名称,以及调用公共子程序的名称,找出所有相关的设计资料,充分理解程序设计说明书的内容,若有疑问或不明白的地方,要提出问题,与系统设计人员进行交流确认。,结构化编程_分析、设计文档与编程,在正确理解程序设计说明书的基础上,构思出结构化程序的框架,必要时作出程序处理流程图。使用语言编写程序代码时,确认各个数据项目的变量名称。需要调用公共子程序时,要获得公共子程序的代码或者可执行文件,
6、做好输入输出参数的设置和返回值的判断处理。,结构化编程_分析、设计文档与编程,需要获得编码测试基准、共通处理说明书和代码设计说明书、获取相应的例子程序。在正确理解编码测试基准的基础上,进行程序编码和编码完成后的单元测试。,结构化编程_分析、设计文档与编程,在进行组合测试之前,需要获取系统功能概要说明书、数据流图、编码测试基准和共通处理说明书,把握各个子系统的处理流程和各个程序单元之间的接口,确保实现整个系统的设计功能。,作为软件制造工程的一个重要阶段,程序编码是程序设计的继续。,结构化编程_编码,结构化编程_编码,程序代码的质量与软件系统外部设计和内部设计的质量直接相关,同时,程序设计语言的特
7、性和程序员的编码水平,程序代码的可读性,可维护性,可靠性,可测试性都是直接影响程序质量的因素。,结构化程序设计语言的特点是具有很强的过程控制能力和数据结构处理能力,并提供结构化的逻辑构造。目前,常用的结构化语言有C,PASCAL等。它们主要用于教学,系统软件开发,大型应用软件的服务器端的系统控制和数据处理等。,结构化编程_编码,结构化编程_编码,结构化编码采用自顶向下,逐步细化的方法,先全局,后局部,先整体,后细节,先抽象,后具体,逐步求精,编制出来的程序具有清晰的逻辑层次结构,容易阅读、理解、修改和维护,可以提高软件质量,提高软件开发的成功率和生产性。,逐步细化的例子 例1 在一组数中找出其
8、中的最大数解:第一步:1 输入一组数2 找出一个最大数3 输出最大数第二步:2.1 任取一个数,假设它是最大数2.2 将该数与其余各数逐一比较;2.3 若发现有任何大于该一假设的最大数,即取而代之第三步:1.1 输入一个数组;2.1.1 令“最大数”=数组的第一个元素;2.2.1 从第二个元素至最末的一个元素依次做:2.3.1 如果新元素”最大数”则“最大数”=新元素;3.1 输出“最大数”,结构化编程_编码,结构化编码过程中,要遵循以下几个主要的原则:尽可能使用语言提供的基本控制结构,顺序结构、选择结构和重复结构。选用的控制结构只准许有一个入口和一个出口。利用程序内部函数,把程序组织成容易识
9、别的内部函数模块,每个模块只有一个入口或一个出口,一般不超过200行。,结构化编程_编码,结构化编码过程中,要遵循以下几个主要的原则:复杂结构应该用基本控制结构组合或嵌套来实现。尽可能减少GOTO语句的使用,一般限制用到以下两种情况:把控制转移到出错处理。把控制转移到函数模块结束,大量采用GOTO语句实现控制路径,会使程序路径变得复杂而且混乱,但有时完全不用GOTO语句,可能会增加程序实现的复杂度。例如,在查找结束时、文件访问结束时或出现错误情况要从循环中转出时,使用GOTO语句会使程序更加清晰易懂。所以,应该加以限制地使用GOTO语句。,结构化编程_编码,结构化编程_编码,例1,使用C语言编
10、写下面的一个小程序,目的是打印出A,B,C三个数据中的最小数,如P64图3.2给出了程序流程图。程序段1、程序段2 比较,例1 打印A,B,C 三数中最小者程序,【程序1】#include stdio.hint main(int argc,char*argv)int a=5,b=8,c=3;if(a b)goto T110;if(b c)printf(b=%dn,b);goto T130;else goto T120;T110:if(a c)printf(a=%dn,a);goto T130;T120:printf(c=%dn,c);T130:return 0;,上述的【程序段1】中,出现了多
11、个GOTO语句,虽然程序功能是正确的,程序员在程序编码时也算下了工夫,但该程序的结构混乱,不易修改,可读性差。,【程序段2】#include stdio.hint main(int argc,char*argv)int a=5,b=8,c=3;if(a b,【程序段2】的结构清晰,可读性好。修改a,b,c的值,可以测试该程序段的各个分支。,结构化编程_编码,在结构化程序的实现方法中,有两种常用的基本方法,第一是分类(BREAK)处理,第二是匹配(MATCHING)处理。,BREAK方法的引入:问题:根据学生成绩文件,统计各班的平均分,并输出到班级平均成绩文件中?,程序处理过程(PDL代码):读
12、入学生成绩文件的第一个记录;beforeKey=这个纪录的班级编号;sum=这个纪录的成绩;n=1;while(学生成绩文件没有结束)读入下一个学生成绩记录;afterKey=这个纪录的班级编号;if(afterKey=beforeKey)sum+=这个纪录的成绩;n+;else 输出sum/n到班级平均成绩文件;beforeKey=afterkey;sum=这个纪录的成绩;n=1;输出sum/n到班级平均成绩文件;,Break方法处理概要,结构化编程_编码,BREAK方法的前提条件是:在进行BREAK处理之前,输入文件必须是已经按照关键字项目值进行排序(升序或者降序)处理好的。,结构化编程_
13、编码,BREAK方法的处理概要如下,处理流程见P66图3.4:按关键字项目值的升序读入输入文件的记录,把关键字项目的值存入工作变量中。关键字项目的值相同时,进行统计处理(或者其他处理)。,结构化编程_编码,BREAK方法的处理流程说明:关键字项目的值发生了变化(BREAK)的时候,把变化前(BREAK BEFOR)的关键字项目值和统计结果输出到文件中(或者其他处理),用变化后(BREAK AFTER)的关键字项目值替换变化前的关键字项目值。读入输入文件的下一条记录,把关键字项目的值存入变化后的工作变量中。继续进行上述至的处理,直至文件读入结束。,图3.4 BREAK处理流程,汇总处理,学生名称
14、文件,学生成绩文件,学生成绩汇总文件,MACHING方法的引入:问题:读入学生名称文件和学生成绩文件,把相同编号的数据记录结合起来,输出到学生成绩汇总文件中?,程序处理过程(PDL代码):读入学生名称文件的第一个记录;bKey=这个纪录的学号;读入学生成绩文件的第一个记录;tKey=这个纪录的学号;while(学生成绩文件没有结束)if(bKey=tKey)输出bKey记录的学号、姓名和tKey记录的单科成绩和总成绩 到学生成绩汇总文件中;读入下一个学生成绩记录;tKey=这个纪录的学号;else if(bKey tKey)读入下一个学生名称记录;bKey=这个纪录的学号;else 输出错误信
15、息(学号为tKey的学生记录在学生名称文件中没有);读入下一个学生成绩记录;tKey=这个纪录的学号;,MACHING方法处理概要,3.2.2 结构化编码,MATCHING方法的前提条件:在进行MATCHING处理之前,输入文件必须是已经按照关键字项目的值进行排序(升序或者降序)处理好的。,结构化编程_编码,MATCHING方法处理概要说明如下:按关键字项目值的升序读入基础文件的记录,把关键字项目的值存入基础KEY工作变量中。按关键字项目值的升序读入事务文件的记录,把关键字项目的值存入事务KEY工作变量中。基础KEY的值与事务KEY值相等时,把事务文件的数据编辑输出到文件中。读入事务文件的下一
16、条记录,把关键字值存入事务KEY。,结构化编程_编码,基础KEY的值大于事务KEY值的时候,把事务KEY的值写到错误信息文件中。读入事务文件的下一条记录,把关键字值存入事务KEY。基础KEY的值小于事务KEY值的时候,读入基础文件的下一条记录,把关键字值存入基础KEY。继续进行上述至的处理,直至文件读入结束。1:1的匹配处理的情况下,上述处理读入事务文件的同时,还要读入基础文件,MATCHING处理流程,案例某个项目中有这样一个需求:将某些Word文档生生导入到系统的数据库中。这个需要是合理的,该文档是流程中的一个重要附件。重复录入不仅意味着用户需要多输入一遍,而且还增加了录入错误的风险。所以
17、,我很乐意支持这个需求,它将让我们的系统增加一份稳定性和正确性。其中有一个文档是这样的:,在20世纪80年代之前,应用软件的开发一般都采用结构化的程序设计方法,其基本思想是“自顶向下、逐步求精”,即将一个复杂的规模较大的应用软件划分为若干个相对独立的功能模块,然后对各个模块编写代码,最后通过模块间的调用实现软件系统的运行。结构化程序设计极大地提高了软件生产率,是程序设计的基石。,但随着计算机应用的深入和发展,问题规模越来越大,软件复杂性也大幅度提高,使结构化程序设计产生了两个问题:(1)编程人员始终要考虑程序代码执行的顺序及条件,即程序的过程问题,这样他们往往陷于大量而且复杂的分支、循环等控制
18、结构中,当程序的规模增大到一定程度时,程序过程的控制难以准确地实施,加大了程序编制的难度,程序的可靠性就降低了;,但随着计算机应用的深入和发展,问题规模越来越大,软件复杂性也大幅度提高,使结构化程序设计产生了两个问题:(2)程序代码与处理的数据分离,一旦应用需求发生变化,花大量力气编制的程序却几乎不能重用或移植,因此代码可重用性低,不能有效地提高程序的开发效率。针对以上问题,提出了面向对象的程序设计方法。,面向对象的编程_什么是面向对象,面向对象(object-oriented或object-orientation)不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界
19、的关系,以什么观点来研究问题并进行求解,以及如何进行系统构造的软件方法学。,面向对象的编程_什么是面向对象,面向对象方法的基本思想是,从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式。关键:对象 问题域面向对象方法的扩展编程分析、设计,面向对象程序设计是利用人们对事物进行分类的自然倾向,将一些公用的软件模块“类”化,由类引申出具体的对象。克服了面向过程程序设计的缺点,其基本思想是以数据为中心,将数据与程序封装于对象之中,淡化了解决问题的过程和步骤,有效降低了程序开发的逻辑复杂性,使程序易于理解和测试;另一方面,由于对象具有相对独立性和通用性,因
20、而提供了代码复用的可能,提高了程序的开发效率。,传统的软件工程方法与面向对象的软件工程方法,面向对象的编程_面向对象编程,OOP=OOI基本概念对象属性与服务类封装继承消息结构与连接多态,编程团队的计划过程,在编程阶段,小组成员已经经历了程序设计阶段,此时,小组成员对所作的软件项目(或产品)、模块有了一个更清晰的认识和更深刻的理解,有了更多的实际工程数据。这样,在编程阶段就需要利用程序设计阶段获得的实际工程数据来更新或重新制订团队的工程计划,包括小组任务表,日程计划表,质量计划等。使用及时更新的工程计划指导编程团队按质按量地实现软件系统。,编程团队的计划过程,这一部分主要在重新对软件模块规模和
21、时间进行更精确估计的基础上,重新对团队成员的任务进行了分配,并调整了团队的质量计划,制定了工程师个人计划,以及如何跟踪编程团队的工程计划,保证工程计划有效地指导整个编程团队。,编程团队的计划过程,角色重新分配模块规模估计任务分配质量计划制定工程师个人计划工程计划跟踪,编程团队的计划过程_角色重新分配,角色重新分配的流程一般为:首先工程师(或学生)填写和提交INFO表格,此表格上表明了哪些工程师的日程安排是相容的,谁对哪个角色更感兴趣,以及每个工程师的背景和经验;,编程团队的计划过程_角色重新分配,角色重新分配的流程一般为:然后项目经理(或教师)根据前一阶段每个人的表现和个人能力和兴趣,重新对小
22、组成员的角色进行分配。现假定编程团队共有五个人,他们分别是小王、小张、小李、小刘和小赵,他们的角色分配如下图所示。编程团队角色分工之后,小组领导和计划经理领导全体组员进行任务分配,质量/生产经理领导小组重新调整质量计划。,编程团队的计划过程_角色重新分配,编程团队的计划过程_模块规模估计,在分配任务之前,计划经理领导小组重新估计每个模块的规模,程序设计之后,工程师们对软件的每个模块的处理流程和算法有了更准确和深入的认识,这时需要对软件的每个模块的规模做出更准确的估计,作为下一步任务分配的主要依据。以前一章的学生成绩管理系统为例,此系统的四个模块需做规模估计。规模小结表(SUMS),编程团队的计
23、划过程_任务分配,对模块规模重新估计完之后,小组领导和计划经理领导小组把需要做的工作进行列表,估计每一项工作大概需要多少时间,再把这些信息记入任务(TASK)表格,最好记下每个工程师完成每项工作的预计时间。然后,估计要完成工程的话,整个小组每周所需的工作时间,把这些信息记入日程计划(SCHEDULE)表格。完成这一切之后,计算出计划价值PV和每一项工作预计完成时间,填入TASK表格中。,编程团队的计划过程_任务分配,在编程阶段,每个模块都需要经历五个阶段:详细设计检查、代码编写、代码复核、编译和代码检查。所以,每个模块都对应有五个任务。学生成绩管理子系统在编程阶段的任务表、日程计划表,考虑一项
24、“管理和杂物工作”任务,以备不时之需。建议在总工程计划时间里留出5%到10%的余量。这样,无论何时你再遇见未计划的工作,你都可以为这些管理和杂物工作取得获得价值EV了。,编程团队的计划过程_质量计划,在编程阶段,在程序设计的基础上,重新调整质量计划,使其更加适合指导软件开发过程。要制订质量计划,应当从估计编程工程的各个阶段(详细设计检查、代码编写、代码复核、编译和代码检查)可能出现的产品缺陷开始。接着,再制定出每个除去缺陷阶段的成品率目标。最后,要得到一个试行的质量计划,看一看它是否满足要求。如果它不满足的话,就对原计划进行调整,以得到一个新的试行计划。按照下面的步骤进行。,编程团队的计划过程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 制造 工程 编程

链接地址:https://www.31ppt.com/p-6610811.html