软件工程导论之编码设计

合集下载

《软件工程》第8章_程序编码

《软件工程》第8章_程序编码
例如一些目前可用的查询语言提供了自然语言接口,允
许用户给出的描述如“对东北地区和华北地区,使用最 近3年的实际销售额预测明年的销售前景”。绝大部分用 户都喜欢这种接口方式。
(2) 程序生成器:程序生成器代表更为复杂的一类 4GL,它只需很少的语句就能生成完整的第三代语言程 序,甚至是第五代程序语言,目前一般用于MIS系统、 菜单生成等方面。
2.第二代语言 ――汇编语言(Assembly Language)
汇编语言指令是机器指令的符号化,与机器语言有直接
的对应关系,将机器指令对应成为人们易读的助记符, 如ADD、LDA和MOV等。同机器语言一样,汇编语言也 属于低级语言。汇编语言又称符号语言,它把计算机所 能识别的机器指令用符号表示出来,从而比二进制表示 的机器语言更直观,更方便阅读和排错。虽然汇编语言 比机器语言容易理解,容易记忆,但还是有难掌握、容 易出错、维护困难等缺点。不同指令集的处理器系统能 够有自己相应的汇编语言。
第八章 程序编码
【本章引言】
完成系统设计后,进入到系统实现阶段。系统实 现阶段的主要任务是根据系统设计规格说明书的内容 编写程序代码,这个阶段称为程序编码。程序编码就 是把软件设计阶段的成果(主要是详细设计规格说明书) 使用某种计算机程序编程语言转换成计算机能够理解 的形式 ――程序代码的过程。作为软件工程生命周期 的一个阶段,程序编码的实质就是对软件设计的翻 译,翻译过程所使用的计算机程序设计语言及程序员 的编程风格对程序的可靠性、可读性、可测试性、可 维护性等方面都将产生很大的影响,从而最终影响到 计算机软件系统的质量。程序编码阶段的目标是编写 出满足系统功能要求的、正确的代码。
Language)
高级程序设计语言起始于20世纪50年代中期。高

软件工程第6章 软件编码设计

软件工程第6章  软件编码设计

10
(1)理论标准 1)理想的模块化机制、易于阅读和使用的控制结 构及数据结构 模块化、良好的控制结构和数据结构可以降低编码 工作的难度,增强程序的可理解性,提高程序的可测试 性和可维护性,从而减少软件生存周期中的总成本,并 缩短软件开发所需的时间。 2)完善、独立的编译机制
11
(2)实用标准 1)系统用户的要求 由于用户是软件的使用者,因此软件开发者应充分 考虑用户对开发工具的要求。特别是当用户要负责软件 的维护工作时,用户理所应当地会要求采用他们熟悉的 语言进行编程。 2)工程的规模 3)软件的运行环境 4)可以得到的软件开发工具
16
(3)语句的构造及书写 语句是构成程序的基本单位,语句的构造方式和书 写格式对程序的可读性具有非常重要的决定作用。 在一行内只写一条语句,并且采取适当的移行格式, 使程序的逻辑和功能变得更加明确。 程序编写首先应当考虑清晰性,不要刻意追求技巧 性,使程序编写得过于紧凑。
17
(4)输入/输出 由于输入和输出是用户与程序之间传递信息的渠道, 因此输入、输出的方式往往是用户衡量程序好坏的重要 指标。为了使程序的输入、输出能便于用户的使用,在 编写程序时应对输入和输出的设计格外注意。 1)输入 2)输出
23
良好的编码风格,应该以结构程序设计的原则为指 导,使用单输入口和单输出口的控制结构。倡导源程序 代码的文档化,程序内部良好的文档资料,有规律的数 据说明格式,简单清晰的语句构造和输入输出格式等, 都对程序的可读性有很大作用,也在相当大的程度上改 进了程序的可维护性。程序的输入输出应该充分考虑运 行工程学的要求,在满足数据可靠性的前提下,尽量做 到对用户友善。
19
(1)用于提高运行速度的指导原则 ①编写程序之前,先对需要使用的算术表达式和逻 辑表达式进行化简。 ②尽可能多地采用执行时间短的算术运算。 ③尽量避免使用多维数组、指针和其他复杂的数据 类型。 ④尽量采用整型算术表达式和布尔表达式。 ⑤尽可能减少循环体,特别是内循环中语句的个数。 ⑥尽量使同一表达式中的数据类型保持统一。 ⑦应当对所有的输入和输出安排适当的缓冲区,以 减少频繁通信所带来的额外开销。

软件工程导论(第7章)

软件工程导论(第7章)

测试的正确定义:“为了发现程序中的错 误而执行程序的过程。”
7.2.2 软件测试准则
1)所有测试都应该能追溯到用户需求;
2)应该远在测试前就制定出测试计划;
3)把Pareto原理应用到软件测试中;Pareto原理 说明测试发现的错误中的80%很可能是由程序 中20%的模块造成的。
4)应该从“小规模”测试开始,并逐步进行“大 规模”测试;
USER32.DLL; GDI32.DLL; KERNEL32.DLL。
Windows消息机制:
1)基于消息的事件驱动 消息可以是由硬件发来的(存于系统队列),
也可以由Windows系统和应用程序发来(存于 程序队列中);
每一个Windows程序在不停的捕捉各种消息, 并进行处理;
每个窗口都必须有一个窗口函数,来负责消息 的判断与处理。
3)重要的执行路径 由于不可能进行穷尽测试,因此选择测试
路径是非常关键的。 4)出错处理通路 5)边界条件
7.3.2 代码审查
审查小组: 1)组长; 2)程序的设计者; 3)程序的编写者; 4)程序的测试者。
7.3.3 计算机测试
由于软件模块不是一个独立的系统,不能独 立运行,要依靠其他模块调用,或需要调用其 他模块。
1.模块测试 模块测试又称单元测试,它把每个模块作为
单独的实体来测试。 2.子系统测试
子系统测试是把经过单元测试的模块放在一 起形成一个子系统来测试。
3.系统测试 系统测试是把经过测试的子系统装配成一个完
整的系统来测试。 4.验收测试
验收测试把软件系统作为单一的实体进行测试 (利用用户的实际数据测试)。 5.平行运行
如PL/1、PASCAL、C、ADA等 3)专用语言 如APL、BLISS、FORTH、LISP、PROLOG等

软件工程导论程序编码

软件工程导论程序编码

根据局部化与信息隐蔽原理, 一个程序对象只能在程序中真正需 要它的那些部分才能访问。 FORTRAN 、 C 提 供 的 是 单 层 局 部 性 , 而PASCAL提供的是所层局部性。单 层局部性有助于块独立编译的实现, 多层局部性有助于提高程序的可读 性,但内外层对象同名有可能引起 差错。
软件工程导论
软件工程导论
4
6.1 程序设计语言
设计语言 质量要求 复杂度 设计风格 结构化 面向对象 本章小结
2019/11/14
6.1.1 程序设计语言分类 6.1.2 程序设计语言的特征属性 6.1.3 选择程序设计语言准则
软件工程导论
5
6.1.1 程序设计语言分类
设计语言 质量要求 复杂度 设计风格 结构化 面向对象 本章小结
遇到的问题,如程序设计语言的特性
和程序设计风格会深刻影响软件的质
量和可维护性。本章将从软件工程这
个更广泛的范围讨论与程序设计语言
及程序编码有关的问题,而不具体介
绍如何编写软 件程工序程 导。论
2
设计语言 质量要Байду номын сангаас 复杂度 设计风格 结构化 面向对象 本章小结
2019/11/14
第六章 程序编码
6.1 程序设计语言 6.2 对源程序的质量要求 6.3 程序复杂度度量 6.4 程序设计风格 6.5 结构化程序设计 6.6 面向对象技术 6.7 本章小结
超高级语言:第四代语言
查询语言:SQL语言。 应用程序生成器 原型语言 图形语言
2019/11/14
软件工程导论
9
6.1.1 程序设计语言分类
设计语言 质量要求 复杂度 设计风格 结构化 面向对象 本章小结

软件工程导论第7章编码和单元测试

软件工程导论第7章编码和单元测试

第7章实现通常把编码和测试统称为实现。

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

作为软件工程过程的一个阶段,编码是对设计的进一步具体化,因此,程序的质量主要取决于软件设计的质量。

但是,所选用的程序设计语言的特点及编码风格也将对程序的可靠性、可读性、可测试性和可维护性产生深远的影响。

无论怎样强调软件测试的重要性和它对软件可靠性的影响都不过分。

在开发大型软件系统的漫长过程中,面对着极其错综复杂的问题,人的主观认识不可能完全符合客观现实,与工程密切相关的各类人员之间的通信和配合也不可能完美无缺,因此,在软件生命周期的每个阶段都不可避免地会产生差错。

我们力求在每个阶段结束之前通过严格的技术审查,尽可能早地发现并纠正差错;但是,经验表明审查并不能发现所有差错,此外在编码过程中还不可避免地会引入新的错误。

如果在软件投入生产性运行之前,没有发现并纠正软件中的大部分差错,则这些差错迟早会在生产过程中暴露出来,那时不仅改正这些错误的代价更高,而且往往会造成很恶劣的后果。

测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。

目前软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。

软件测试在软件生命周期中横跨两个阶段。

通常在编写出每个模块之后就对它做必要的测试(称为单元测试),模块的编写者和测试者是同一个人,编码和单元测试属于软件生命周期的同一个阶段。

在这个阶段结束之后,对软件系统还应该进行各种综合测试,这是软件生命周期中的另一个独立的阶段,通常由专门的测试人员承担这项工作。

大量统计资料表明,软件测试的工作量往往占软件开发总工作量的40%以上,在极端情况,测试那种关系人的生命安全的软件所花费的成本,可能相当于软件工程其他开发步骤总成本的3倍到5倍。

因此,必须高度重视软件测试工作,绝不要以为写出程序之后软件开发工作就接近完成了,实际上,大约还有同样多的开发工作量需要完成。

软件工程5软件编码ppt课件

软件工程5软件编码ppt课件

5.C#
C#是微软企业公布旳一种面对对象旳、运营于.NET Framework之上旳高级程序设计语言。C#看起来与 Java惊人旳相同,它也涉及了诸如单一继承、界面等 特征,并具有与Java几乎一样旳语法及编译成中间代 码再运营旳过程。C#与Java旳不同之处于于它与 COM(组件对象模型)是直接集成旳。
第5章 软件编码
掌握:程序设计语言分类、常见程序设计语言 及其特点、程序设计语言旳选择、编码规范、 构造化程序设计旳措施。
5.1 程序设计语 言
5.1.1 程序设计语言分类
1.机器语言 机器语言又称“低档语言”,是以二进制代码表达旳指令集合。 占用内存少、执行效率高 不易为人们了解、记忆和交流 2.汇编语言 汇编语言又称符号语言。,它把计算机能辨认旳机器指令用符号
1. 效率
一般来说,对效率旳追求需要明确下列几点:
(1)效率是一种性能要求,其目旳在需求分析阶段就应 给出。
(2)追求效率应建立在不损害程序可读性或可靠性旳基 础上,要先使程序正确,再提升程序效率;先使程序 清楚,再提升程序效率。
(3)提升程序效率旳根本途径在于选择良好旳设计措施、 良好旳数据构造算法。
2.C++
其优点主要涉及: (1)与C语言兼容,既支持面对对象旳程序设计,也支
持构造化旳程序设计。 (2)修补了C语言中旳某些漏洞 (3)生成旳目旳程序质量高,程序执行效率高。 (4)提供了异常处理机制,简化了程序旳犯错处理。 (5)函数能够重载并能够使用缺省参数。 (6)提供了模板机制。
3.Java
语句A else
语句B
多分支构造如图4-9所示,相应旳语句形式如下: switch (V) {
case V1:语句A1 case V2:语句A2 case Vn:语句An …… default:语句An+1 }

软件工程导论(6)程序编码

软件工程导论(6)程序编码

2019/8/7
软件工程导论
10
6.1.2 程序设计语言的特征属性
设计语言 质量要求 复杂度 设计风格 结构化 面向对象 本章小结
2019/8/7
程序对象的名字说明:
程序对象包括程序中出现 的变量、常量、类型、过程、 函数等。特别是变量、常量说 明。预先说明程序对象名字的 好处是为编译提供了检查源程 序中名字引用的合法性。
通用结构化语言:PL/1(Programming Language One)、PASCAL语言、ADA语言、 C语言。
专用语言:APL语言、FORTH语言、LISP 语言、PROLOG语言、JAVA。
软件工程导论
8
6.1.1 程序设计语言分类
设计语言 质量要求 复杂度 设计风格 结构化 面向对象 本章小结
软件工程导论
11
6.1.2 程序设计语言的特征属性
设计语言 质量要求 复杂度 设计风格 结构化 面向对象 本章小结
2019/8/7
类型说明:
类型说明与名字说明密切相关, 不仅是一种提高程序安全性的措施, 更重要的是提高了实现抽象数据类型 的机制,是程序员无需过多关心抽象 数据类型的物理存储实现机制。
超高级语言:第四代语言
查询语言:SQL语言。 应用程序生成器 原型语言 图形语言
2019/8/7
软件工程导论
9
6.1.1 程序设计语言分类
设计语言 质量要求 复杂度 设计风格 结构化 面向对象 本章小结
高级语言:从语言实现角度划分
系统实现语言:C 静态语言:COBOL、FORTRAN 块结构语言:PASCAL、C 动态语言:LISP、PROLOG、LOG
2019/8/7

软件工程导论编码(共24张PPT)

软件工程导论编码(共24张PPT)
有良好的风格。
– 源程序文档化 – 数据说明 – 语句结构 – 输入/输出方法
4
第四页,共24页。
(1)源程序文档化
– 标识符的命名 – 安排注释 – 程序的视觉组织
5
第五页,共24页。
★ 符号名的命名
• 符号名即标识符,包括模块名、变量名、常量名、标 号名、子程序名、 、数据区名以及缓冲区名等。
意追求技巧性,使程序编写得过于紧凑。
例如:A[I] = A[I]+A[T]; A[T] = A[I]-A[T]; A[I] = A[I]-A[T];
WORK = A[T]; A[T] = A[I];
A[I] = WORK;
13
第十三页,共24页。
▪ 例如:
int i,j; for ( i = 1; i <= n; i++ )
√ 写程序之前先简化算术的和逻辑的表达式; √ 仔细研究嵌套的循环,以确定是否有语句可以从内层往外移;
√ 尽量避免使用多维数组;
√ 尽量避免使用指针和复杂的表;
√ 使用执行时间短的算术运算;
√ 不要混合使用不同的数据类型;
√ 尽量使用整数运算和布尔表达式。
在效率是决定性因素的应用领域,尽量使用有良好优化特 性的编译程序,以自动生成高效目标代码。
for ( j = 1; j <= n; j++ ) V[i][j] = ( i/j ) * ( j/i )
n for ( i=1; i <= n; i++ )
for ( j=1; j <= n; j++ )
if ( i == j )
V[i][j] = 1;
else
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*输出
/*p1不 /*p1后移 /*找到了 /*若p1为 /*否则将 /*输出删
getchar(); /*接收回车*/ p=Query(head,name); if(p==NULL) printf("Cannot Find %s\n",name); /*找不到结点*/ else {printf("Delete %s, Y/N?\n",name); ch=getchar(); system("pause"); if(ch=='y'||ch=='Y') while(p!=NULL) {head=Delete(head,name); /*删除所有与输入相同的记录*/ p=Query(head,name); } } return(head); } ·测试要求:运行正常。 M5查询模块 ·功能: 查询功能 ·性能: ·输入项:查询书名 ·输出项:相应书籍信息 ·算法: Book *Query(Book *head,char *name) { Book *p; p=head; while(strcmp(name,p->Name)!=0&&p->next!=NULL) p=p->next; if(strcmp(name,p->Name)==0) /*找到了,返回结点地址*/ return(p); else /*找不到返回空指针*/ return(NULL); } void Query_a_record(Book *head) { char name[20]; Book *p; scanf("%s",name); p=Query(head,name); if(p!=NULL) /*找到了*/
{ printf("Find successfully\n%s total:%d left:%d borrow:%d\n", p->Name,p->all,p->left,p->borrow); } else printf("Can't find the records of %s\n",name); /*找不到*/ } ·测试要求:运行正常。 M6显示功能 ·功能: 显示所有信息 ·性能: ·输入项:相应的菜单序号 ·输出项:所有书籍信息 ·算法: void Display(Book *head) { Book *p; int i; p=head; printf("Num BookName Total Left Borrow\n"); for(i=1;p!=NULL;i++) { printf("%-5d%-14s%-10d%-10d%-5d\n", i,p->Name,p->all,p->left,p->borrow); p=p->next; if(i%10==0) {system("pause"); /*按回车翻页显示*/ printf("Num BookName total left borrow\n"); } } ·测试要求:运行正常。 M7借出模块 ·功能:借出书籍 ·性能: ·输入项:所借书名 数量 ·输出项:成功信息 ·算法: Book *Borrow_a_Book(Book *head) { char name[20],ch;
p1=head; while(strcmp(p1->Name,name)!=0&&p1->next!=NULL) /*p1不是 要找的结点,且后面还有结点*/ {p1=p1->next;} /*p1后移一个结 点*/ if(strcmp(p1->Name,name)==0) /*找到了 */ p1->borrow=p1->borrow-sum; p1->left=p1->left+sum; return(head); } ·测试要求:运行正常。 M9读入模块 ·功能:从文件读入信息 ·性能: ·输入项:文件名 ·输出项:成功提示 ·算法: Book *AddfromText(Book *head,char *filename) { FILE *fp; int n,i; if((fp=fopen(filename,"r"))==NULL) {printf("Cannot find file:%s\n",filename); /*打不开所指定 文件*/ return(head);} fscanf(fp,"%d",&n); /*待插入记录个数*/ for(i=0;i<n;i++) {Book *p; p=(Book *)malloc(LEN); fgetc(fp); /*读取换行符*/ fscanf(fp,"%s%d%d%d",p->Name,&p->all,&p->left,&p->borrow); head=Insert(head,p); /*插入结点*/ } printf("Add from %s successfully\n",filename); fclose(fp); return(head); }
软件工程导论 题目:图书管理系统 文档名称:编码设计
班级:科技0801 项目Байду номын сангаас长:唐子龙 项目成员: 唐子龙(05082019) 朱磊(05082025) 赵欣(05082023) 刘华琛(05082004) 编码设计
1.根本任务
依据软件工程的基本原理,详细设计阶段的根本任务是确定应该怎样具 体实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出 对目标系统的精确描述,具体来说就是把经过总体设计得到的各个模块 详细的加以描述。 2、总体设计 需求概述 录入功能: 输入相关数据 浏览功能: 以列表方式列出所有记录信息 信息查询功能: 根据书名匹配查询,并将查询结果列出 借出归还功能: 根据借出与归还的书籍信息修改相应数据 插入与删除功能:插入一条新的图书信息,删除某图书的信息 与读入功能:将输入文件进行备份和从指定文件读入数据 设置访问权限功能:只有输入正确密码才可以进行操作 否则无权操作 系统结构图
} ·测试要求:运行正常。 M3插入模块 ·功能:插入新信息 ·性能: ·输入项:书名 数量 ·输出项:成功提示 ·算法: Book *Insert(Book *head,Book *s) /*插入 结点的函数*/ { Book *p0,*p1,*p2; p1=head;p0=s; /*使p1指向第 一个结点,p0指向要插入的结点*/ if(head==NULL) /*原来的链表 是空表*/ {head=p0;p0->next=NULL;} /*使p0作为首 结点*/ while(strcmp(p0->Name,p1->Name)>0&&(p1->next!=NULL)) {p2=p1; p1=p1->next; } if(strcmp(p0->Name,p1->Name)<=0) {p0->next=p1; if(head==p1) head=p0; else p2->next=p0; } else {p1->next=p0; p0->next=NULL; } return(head); } Book *Insert_a_record(Book *head) { Book *newrecord; newrecord=(Book *)malloc(LEN); /*动态分配存 储空间*/ scanf("%s%d",newrecord->Name,&newrecord->all); newrecord->borrow=0;
3、程序描述 M1身份验证
·功能:验证身份 ·性能: ·输入项:预设密码 ·输出项:欢迎语句 ·算法: int keyword=111,a; printf("Please input keyword:"); scanf("%d",&a); if(a!=keyword) exit(0); else printf("Welcome!"); ·测试要求:运行正常。 M2主菜单模块 ·功能:选择功能 ·性能: ·输入项:数字0-9 ·输出项:对应功能项 ·算法: int Display_MainMenu() /*显示菜单的函数*/ {char x; do{ system("cls"); printf("************************\n"); printf("1.Create BookList\n"); printf("2.Display All Books\n"); printf("3.Insert a BookInformation\n"); printf("4.Delete a Book\n"); printf("5.Borrow a Book\n"); printf("6.Return a Book\n"); printf("7.Query\n"); printf("8.Add Records From a File\n"); printf("9.Write to a File\n"); printf("0.Goodbye\n"); printf("************************\n"); printf("Please choose from 0-9:"); printf("\n"); x=getchar(); }while(x<'0'||x>'9'); return(x-'0');
相关文档
最新文档