【文档说明】软件技术第章:算法+程序语言+软件工程课件.ppt,共(106)页,911.496 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45090.html
以下为本文档部分文字说明:
软件技术第章:算法+程序语言+软件工程学习内容1概述2算法3程序设计4软件工程1概述什么是计算机软件?操作系统、QQ、360„„计算机系统=硬件+软件程序以及相关的文档的集合。程序文档1文档2文档3可执行部
分不可执行部分什么是文档?文档:记录软件开发活动和阶段性成果,理解软件所必需的阐述性资料。–需求分析文档–软件设计文挡等编写文档目的–促进对软件的开发、管理和维护;–便于各种人员(用户、开发人员)的交流什么是程序?程序
一词源于生活。做任何一件事情,都是有程序的。例如,下面是某一个学校颁奖大会的程序:宣布大会开始校长讲话宣布获奖名单颁奖获奖代表发言宣布大会结束按顺序实施这些步骤就完成了该事情。用计算机完成某事情,就把
事先设计好的计算机处理信息的步骤,用计算机能够识别的指令编写出来,送入计算机。计算机按照指令执行,就能完成指定的工作。算法程序设计语言可以说程序就是用计算机语言表述的算法。为解决一个问题而采取的方法和步骤,就称为算法。什么是算法?一个农夫带着一只狼、一只羊和一
棵白菜,身处河南岸,要把东西全部运到北岸。约束条件是只有一条能容下他和一件物品的小船,只有农夫能撑船。不能单独留下羊和白菜,也不能单独留下羊和狼。例如:农夫过河算法带羊到对岸空手回本岸带菜到对岸带羊回本岸带狼到对岸空手回本岸带羊到对岸带羊到对岸空手回本岸带狼到对岸带羊回本岸带菜到对岸空手回本岸带羊
到对岸或在使用计算机解题前,需要将解题方法转换成一系列具体的在计算机上可执行的步骤,这些步骤能够清楚的反映解题方法一步步“怎么做”的过程,这个过程就是通常所说的算法。算法:解题过程的准确、完整的描述称作解该问题的算法。什么是计算机语言?人们想和计算机交流,用
符号来表达。计算机通过事先约定好的符号与意义的对应关系,把人用符号表达的内容读懂,再按照这些符号的意思去执行。怎样维护交通秩序?音乐是怎样表示的?用来表达这种关系的符号系统就是计算机语言,也叫“程序设计语言”。人与计算
机交流使用的是“程序设计语言”。同人类语言一样,程序设计语言也是由字、词和语法规则构成的一个系统。软件的分类系统软件–操作系统–语言编译和解释系统–网络软件–数据库管理系统(DBMS)–各种服务程序应用软件–业务软件–科技计算软件–个人计算机软件–人工智能软件…软件开发过程?有一
个工程:建一座桥梁。我们会怎么做?了解桥梁的要求、用途—设计—维护开发大型软件:定义—开发—维护2算法算法的表示算法的要素算法的特点算法的复杂度常用算法主要内容算法的表示算法一般可以使用下面几种类型的工具描述算法:1.
自然语言自然语言描述算法通俗易懂,但它有着难以克服的缺陷:(1)易产生歧义性武松打死老虎(2)语句繁琐冗长,很难清楚地表达算法的逻辑流程(3)不便于直接转换成程序例:求1×2×3×4×5。最原始方法:步骤1:先求1×2,得到结果2。步骤2:将步骤1得到的乘积2乘以3,得到结果
6。步骤3:将6再乘以4,得24。步骤4:将24再乘以5,得120。这样的算法虽然正确,但太繁。改进的算法:S1:使t=1S2:使i=2S3:使t×i,乘积仍然放在在变量t中,可表示为t×i→tS4:使i的值+1,即i+1→iS5:如果
i≤5,返回重新执行步骤S3以及其后的S4和S5;否则,算法结束。如果计算100!只需将S5:若i≤5改成i≤100即可。2.专用图形工具常用的有流程图、PAD图和N-S图等流程图描述3.伪代码为了便于转换成某种编程语言,一般采用准程序设计语言作算法描述语言。伪代码描述:BEGIN(算法开始)
1=>t2=>iwhilei<=5[t*i=>ti+1=>i]printtEND(算法结束)算法两要素算法的两要素算法由操作与控制结构两要素组成。1.操作(1)逻辑运算:“与”、“或”、“非”;(2)算术运算:加、减、乘、除;(3)数据比较:大于、小于、等于、不等于;(4)数据传送:输入、输出
、赋值。2.控制结构1)算法的控制结构,决定了各操作的执行次序。用流程图可以形象地表示出算法的控制结构。2)任何复杂的算法都可以用顺序、选择、循环三种控制结构组合而成。我们在构造一个算法的时候,也仅以这三种基本结构作为“建筑单元”,遵
守三种基本结构的规范。基本结构之间可以并列、可以相互包含,但不允许交叉。正因为整个算法都由这三种基本结构构成,所以结构清晰,易于验证,易于纠错。这种方法就是结构化方法。算法的特征有穷性一个算法必须总是在执行有穷
步后结束,且每一步都可在有穷时间内完成;确定性算法中的每一个指令必须有明确的含义,不能有二义性;例:武松打死老虎歧义手举过头顶单手?双手?举多高?可行性(有效性)算法中描述的操作都是可通过已经实现的基本运算、执行有限次实现的;例:a/b若b=0则
无效输入一个算法应有0个或多个输入;输出一个算法应有1个或多个输出。算法的复杂度求解一个问题可能有多种不同的算法,评价算法的标准主要有:–执行算法所耗费的时间,即时间复杂度;–执行算法所耗费的存贮空间,主要是辅
助空间,即空间复杂度。思考:给出一组数12、13、26、27、38、49、55、60、67、86,查找某一个数x是否在这组数中的算法?算法1:顺序查找算法2:二分法查找比较:的时间复杂度?常用算法枚举法是一种比较笨但却很有效的算法,他针对问题所有的可能一一查看是不是符合条件,一种情况他都不想落下,
有宁可错杀一千,不可放过一个的作风。先依据题目的部分条件确定答案的大致范围,在此范围内对所有可能的情况逐一验证,直到全部情况验证完。若某个情况使验证符合题目的条件,则为本题的一个答案;若全部情况验证完后均不符合题
目的条件,则问题无解。1.枚举法例:公鸡每只五元,母鸡每只三元,小鸡三只一元,问百元买百鸡有几种买法?假设公鸡数为x,母鸡数为y,则小鸡数是100-x-y,也就有了下面的方程式:3*x+5*y+(100-x-y)/3=100从方程式中
看出:公鸡最多有33只,最少是没有,即x的范围是0-33;母鸡,即y的范围是0-20;有了公鸡母鸡,小鸡数自然就是100-x-y只。可能的方案一共有34*21种,这些方案中,可能有一种或几种正好符合相等的条件。我们就将上述34*21种方案全部过滤一遍,找出符合百钱买百鸡条件的(也
即上式),只要符合,这就是我们要的输出结果。2.递推法递推法,就是找出和时间先后相联系或和数的大小相联系的步骤,上一步和下一步和数字的增大或减小有一定的联系。我们要么从前向后(或从小到大)推导,也可从后向前(或从大到小)推导。由此得出两种推导方法:顺推法和倒推法。例:猴
子分食桃子一天,一只猴子采得一堆桃子,当天它吃掉一半多一个,第二天又吃了一半多一个„一直到第七天,它就剩一个桃子了。那么那天它共采了多少个桃子呢?找一下天数和桃子数的关系。如果从第1天开始往第7天找,不好找,但如果从第7天到第1天去
找,可得出下面的推导式:第N天桃子数目7s7=16s6=(s7+1)*25s5=(s6+1)*2„1s1=(s2+1)*2算法:S1:使s=1S2:使t=7S3:使(s+1)×2,结果仍然放在变量s中,可表示为(s+1)×2→sS4:使t的值-1,即t-1→tS5:如果t>=1,返回重
新执行步骤S3以及其后的S4和S5;否则,算法结束。3.递归法如果一个过程直接或间接地调用它自身,则称该过程是递归的。递归就象我们讲的那个故事:山上有座庙,庙里有个老和尚,老和尚在讲故事,它讲的故事是:山上有座庙,庙里有个老和尚,老和尚在讲故事„„
也就是直接或间接地调用了其自身。例:求阶乘。算法:S1:如果n=1,返回结果1,结束。s2:保存当前阶数n。S2:n-1→n,递归调用自己,S3:取出当前阶数,计算n*(n-1)!S4:返回计算结果,结束例:有一个n×m的棋盘(2<=n<
=50,2<=m<=50),在棋盘上有一个马,马走的规则为:马走日字且只能向右走。当n,m给出之后,同时给出马起始的位置和终点的位置,找出从起点到终点的所有路径的数目。分析:为了解决这个问题,我们将棋盘的横坐标规定为x,纵坐标规定为y,x的值从1到m,y的值从1到n。棋盘上的每一个
点,可以表示为:(x坐标值,y坐标值),比如(3,5)表示第3列和第5行相交的点。4.回溯法回溯算法:从一条路往前走,能进则进,不能进则退回来,换一条路再试。以一个4×4的棋盘为例:首先将起点(1,1)
作为当前位置,按照象棋马的移动规则,可以移动到(2,3)和(3,2)。假如移动到(2,3),以(2,3)作为新的当前位置,又可以移动到(4,4)、(4,2)和(3,1)。继续移动,假如移动到(4,4)。从当前位置(4,4)回溯到(2,3),(2,
3)再次成为当前位置。从(2,3)开始,换另外一个相邻位置移动,移动到(4,2)„然后是(3,1)。(2,3)的所有相邻位置都已经搜索过。从(2,3)回溯到(1,1),(1,1)再次成为当前位置。从(1,1)开始,还可以移动到(3,2),从(3,2)继续移动,可以移动到(4,4),这时,所
有可能的路径都已经试探完毕,搜索过程结束。12344321SeparatingtheChainUsingOnlyThreeCuts一位拿着由7个金环组成的链子的旅行者必须在一个酒店里住7也,每一夜的租金是金链中的一环,应该
怎样对链子进行最少次数的切割,旅行者才能每天早上支付饭店的一环而不用提前支付住宿费?SolvingtheProblemwithOnlyOneCut说明什么问题?3程序设计基础计算机程序是用计算机程序设计语言按照一定的规范书写出来的一系列动作,表达了程序设计者要求计算
机执行的操作。对于计算机来说,一组机器指令就是程序。一个程序应包括:对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(datastructure)。对操作的描述。即操作步骤,也就是算法(algorithm)。NikiklausWirth提出的公式:数据结构+算法=程序例
:开会的程序:发言+步骤做菜的程序:原料+步骤改进:程序=算法+数据结构+程序设计方法+语言工具和环境这4个方面是一个程序涉及人员所应具备的知识。程序设计语言1.发展的过程程序设计语言分类:机器语言、汇编语言、高级语言机器语言汇编语言高级语言EvolutionofProgra
mmingParadigms(程序设计范型或软件开发范型)计算机能理解的就是0和1。在计算机诞生后的很长一段时间以来,程序员写程序,不过是拿着一卷长长的纸条,然后再拿支笔在纸条上画圈圈„„画完以后,程序员有专门的“秘
书”,负责在纸上有圈圈的地方打个孔,然后将长长的纸卷塞入当时的计算机,计算机就开始“读”程序了。它是如何理解的?无非就是用光束照射纸卷,有孔的地方透光,是1,没孔的不透光,是0,或者是相反。机器语言机器语言是一种CPU指令系统,是该CPU可以识别的一组组由0和1序列组成的指令码。最
初的语言是机器语言,二进制编码,机器可直接执行。例:00000001000000001000数据装入寄存器000000001000100001010数据装入寄存器100000101000000000001寄存器0与1的数据乘00000
001000100001001数据装入寄存器100000100000000000001寄存器0与1的数据加00000010000000001110保存寄存器0里的数难写难读,使用不便,程序开发效率极低。汇编语言用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用“ADD”代表加法
,“MOV”代表数据传递等等。例:load0,a将单元a的数据装入寄存器0load1,b将单元b的数据装入寄存器1mult0,1寄存器0与1的数据乘load1,c将单元c的数据装入寄存器1add0,1寄存器0与1的数据加save0,d将寄存器0里的数存入单元d计
算机无法直接执行汇编语言程序,执行前需要翻译为机器指令。最早是人自己翻译,后来人们开发出“汇编系统”,让计算机去完成这项工作。汇编语言细节太多,程序无结构,缺乏组织手段,写程序仍然很困难。高级语言具有类似文字的表现形式;用类似数学的表达式形式描述基本计算;用变量等概念取代低级的存储概念,
人们摆脱了繁琐的存储安排工作;提供高级流程控制手段和程序组织手段。例:d=a*b+c高级语言程序必须经过翻译变成机器语言程序。翻译有两种做法:编译和解释,相应的翻译工具分别叫做编译器和解释器。汇编语言VS高级语
言DATASEGMENTXXDBXYYDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,XXCMPAL,0JGEBL
GRMOVAL0FFHAL,MOVYY,ALHLTBLGR:JEEQUTMOVAL01HAL,MOVYY,ALHLTEQUT:MOVEYY,ALHLTCODEENDSENDSTARTIfx>0theny=1elsei
fx=0theny=0elsey=-1endifPrintx,y几种高级程序语言FORTRAN(FormulaTranslator)1954BASIC(BeginnerAllpurposeSymbolicInstructionCode)PascalPROLOG(Programmingin
Logic)C语言,70年代初期C++语言,80年代Java语言,2019年5月,EclipseC#,C#3.0云计算时代最具潜力的12种编程语言DART、Ceylon、GO、F#、OPA、Fantom、Zimbu、X10、Haxe、Chapel2.常见
的结构化程序控制程序设计方法面向过程(Process-oriented)的程序设计面向过程的程序设计强调模块化和结构化。采用自顶向下、逐步求精的程序设计方法;使用三种基本控制结构构造程序。遵循这种方法的程序设计就是面向过程的程序设
计。面向过程的程序设计,在数据处理过程中,采用自顶向下、分而治之的方法,将整个程序按功能划分为几个可独立编程的子过程模块,每一子模块完成指定的子任务,并且提供一个清晰、严格的调用界面,主过程通过调用各子
过程完来成全部处理工作。常用软件:C,FORTRAN,PASCAL等。程序分解实例:面向对象(Object-oriented)的程序设计什么是对象?现实世界中,比如书、人、车都是对象。我们怎么区分它们呢?从组成以及他们的动作行为。比如:人组成:一个脑袋,两条腿,两个胳臂„动作
行为:说话,吃饭,跑步,流泪„对象对象是存在的具体实体,具有明确定义的状态和行为。类(Class)“类是具有相同属性和行为的一组对象的集合”在面向对象编程中,程序被看作是相互协作的对象集合,通过消息来实现对象间的通讯。每个对象都是某个类的实例,所有的类构成一个通过继承关系相联系的层
次结构。常用语言:Java、c++、VB.Net等。在结构化程序设计中可以用下面的式子表示程序:程序=数据结构+算法+程序设计语言+语言环境在面向对象程序设计中可以用下面的式子表示程序:程序=对象+对象+„+对象对象=算
法+数据结构+程序设计语言+语言环境面向过程:分析出解决问题所需要的步骤,用函数把这些步骤一步一步实现,使用的时候一个一个依次调用。面向对象:把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在解决问题中的行为。例1:有一台如下流程的演出:
主持人开场—演员1表演—演员2表演—主持人总结。用面向过程的思想来分析,就是先完成主持人开场,再完成演员1的表演,再完成演员2的表演,最后完成主持人的总结。如果用面向对象的思想来分析,就是:这个演出由两大部分组成:主持人、演员。与主持人相关的:开场
、总结。与演员相关的:演员编号、所演的节目。然后这台演出就可以这样策划:需要一个主持人a,需要两个演员b、c。演出的事情可以表示为:a的开场——>b、c的编号和节目——>a的总结。例2:下五子棋面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画
面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。面向对象的设计思路是,整个五子棋可以分为:1、黑白双方,这两方的
行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这
种变化,同时利用第三类对象(规则系统)来对棋局进行判定。可以明显地看出,面向对象是以功能来划分问题,而不是步骤。功能上的统一保证了面向对象设计的可扩展性。比如我要加入悔棋的功能,如果要改动面向过程的设
计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的顺序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。再比如:把五子棋游戏改
为围棋游戏,如果是面向对象的,只需要改写规则对象就可以刻;如果是面向过程的,五子棋的规则分布在程序的每个角落,要改动还不如重写。面向过程方法的特点优点:–这种程序设计方法算法描述准确。–对每一子过程模块容易进行程序正确性证明。缺点:–程序代码可重用
性差。程序中除少数标准库函数外,每设计一个程序时,程序员几乎从零做起。即使重用代码,通常也是通过拷贝或编辑重新生成一份。–维护程序的一致性困难。前一步修改了导致以后步骤的修改。OOP方法的特点OOP以“对象”或“数据”
为中心。由于对象自然地反映了应用领域的模块性,因此具有相对稳定性,可以被用作一个组件去构成更复杂的应用,又由于对象一般封装的是某一实际需求的各种成分,因此,某一对象的改变对整个系统几乎没有影响。引入了“类”的概念。类与
类以层次结构组织,属于某个类的对象除具有该类所描述的特性外,还具有层次结构中该类上层所有类描述的全部性质,OOP中称这种机制为继承。OOP方法的模块性与继承性,保证了新的应用程序设计可在原有对象的数据类型和功能的基础上通过重用、扩展和细化来进行,而不必从头做起或
复制原有代码,这样,大大减少了重新编写新代码的工作量。面向对象的程序设计方法与面向过程的程序设计方法的比较(1)以过程为中心构造应用程序,设计出的程序可重用代码少,且当代码量增加时维护数据和代码的一致性困难。(2)面向对象程序设计方法中,对象所具有
的封装性和继承性使得代码重用成为可能,并大大减少了程序出错的可能性。(3)面向对象方法吸收了结构化程序设计方法的优点,同时引入了新概念、新机制并建立了比传统方法更高层次的抽象。4软件工程软件工程是分析、设计、实现
、与维护软件系统的一组规范,它指导着软件开发人员以工程化的手段规范地开发高质量的软件。软件工程源于软件危机。软件危机--软件危机的表现•成本高–美国空军:1955年软件占总费用(计算机系统)的18%,70年60%,85年达到85%。–美国全球军事指挥控制系统,硬件1亿美元,软件高达7.2亿美
元。•软件和硬件费用比不断增加‐我国某军舰计算机CPU运行850小时,故障120多次,其中软件占70%。软件质量得不到保证–软件越来越多的应用于安全犹关(safetycritical)的系统,对软件质量提出更
高的要求–80年代欧洲亚丽安娜火箭的发射失败,原因是软件错误–美国阿托拉斯火箭的发射失败,原因是软件故障–我国某型号导弹,由于软件问题致使打靶失败进度难以控制–项目延期比比皆是–由于进度问题而取消的软件项目较常见–只有一小部分的项目能够按期
完成维护非常困难–软件维护的多样性–软件维护的复杂性–软件维护的副作用产生软件危机的根源复杂性高–逻辑产品,逻辑复杂性远高于硬件复杂性–软件的复杂性随规模呈指数级上升规模大–应用扩大,代码量,1000万行,仍在不断膨胀影响软件生产率和质量的因素比较
复杂–人员的能力和水平–团队合作缺乏有效、系统原理、原则、方法和工具的指导和辅助SoftwareEngineeringvs.OtherEngineeringFields传统工程Buildingblocks(构件,组件)Roleoftolerances(误差:传统工
程允许误差范围,软件只有正确与不正确之分)Metrics(度量:传统工程度量可通过故障的平均时间,而软件不存在磨损)对软件开发的深层次认识开发一个具有一定规模和复杂性的软件系统与编写一个简单的程序不一样。–正如建设狗窝和高楼大厦大型、复杂软件系统的开发是一项工程,必须按照工程化的方法组织
软件的生产和管理,必须经过分析、设计、实现、测试、维护等一系列软件过程和活动。软件工程的目标软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本
结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。软件工程强调使用生存周期方法学和各种结构分析及结构设计技术。软件工程方法在完成生存周期每个阶段的任务时,应该采用适合该阶段任务特
点的系统化的技术方法──结构分析或结构设计技术。生存周期方法学就指从时间角度对软件开发和维护的复杂问题进行分解,把软件生存的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务,然后逐步完成每个阶段的任务。在每个阶段结束之前都从技
术和管理两个角度进行严格的审查,合格之后才开始下一阶段的工作,这就使软件开发工程的全过程以一种有条不紊的方式进行,保证了软件的质量,特别是提高了软件的可维护性。总之,采用软件工程方法论可以大大提高软件开发的成功率,软件开发的生产率也能明显提高。软件
生命周期某一软件从被提出并着手开始实现,直到软件完成其使命为止的全过程被划分为一些阶段,并称这一全过程为软件生命周期。通常,软件生命周期分三个阶段:软件定义、软件开发、运行维护。(1)可行性研究与计划制定:确定开发目
标和总的要求,给出功能、可靠性等可能方案,制定实施计划。(2)需求分析:对软件需求进行分析并给出详细定义,编写软件规格说明书及初步的用户手册,提交评审。1软件定义---软件要“做什么”(3)系统设计:概要设计和详细设计,给出软件的结构、模块和功能的划分等。编写概要设计、详细设计说明书和测试计划初
稿。(4)详细设计:源程序编码,把软件设计转换成计算机可以接受的程序代码。编写用户手册、操作手册和单元测试计划。(5)编码:(6)测试:设计测试用例,检验软件各个组成部分。编写测试分析报告。2软件开发—软件要“怎么做
”3软件运行和维护(7)软件投入运行,维护(进行扩充和删改)。TraditionalDevelopmentPhase传统开发阶段软件生命周期的开发步骤Analysis分析Amajorgoalofanalysisist
oidentifywhattheproposedsystemshouldaccomplishRequirements(需求)TheneedsofthepotentialusersStatedintermsoftheapplic
ationratherthaninthetechnicalterminologySpecifications(说明书)TechnicaldescriptionsoftherequirementsDesign设计D
esignconcentratesonhowthesystemwillaccomplishthegoalssetinanalysisSystemstructureisestablishedindesignThebest
structureisamodularoneModularity(模块化)Divisionofasoftwareintomanageableunits,eachperformsonlypartoftheoveralltaskModul
ardecompositionMakestheimplementationoflargesystemspossibleAllowschangestobemadeonamodularbasisImplementationand
Testing实现和测试Implementationinvolvestheactualwritingofprograms,creationofdatafiles,anddevelopmentofdatabaseEachmoduleisnormallytestedasitisi
mplementedStubs(桩模块)SimplifiedversionsofmodulesusedtotestacertainmoduleFeature(功能)testandloadtest
Reliabilitygrowthtestandcertificationtest软件DevelopmentModels开发模型RecentTrends趋势Waterfall(瀑布模型)Performsanal
ysis,design,implementation,andtestinginastrictlymannerIncremental(迭代模型)SoftwaresystemisconstructedinincrementsPrototyping(原型
法)Incompleteversionsoftheproposedsystem(prototypes)arebuiltandevaluatedEvolutionaryprototyping(演化式原型)Earlyprototypingandthrowawayprototyping(抛
弃式原型)TestingMethodologyBasedonParetoPrinciple(基于Pareto法则的测试方法)ParetoprincipleTheresultscanoftenbeincreasedmorerapidlybyapplyingef
fortsinaconcentratedareaThusasmallnumberofmoduleswithinalargesoftwaresystemtendtobemoreproblematicthantherestTesting方法Glass
-boxtesting(白盒测试)IdentifyproblematicmodulesBasispathtestingBlack-boxtesting(黑盒测试)Boundary(边界)valueanalysisApplyredundancy(冗余:两个公
司开发同一套系统)Betatesting(初始版本)ExtremeProgramming(XP极限编程)SuitableforateamoflessthanadozenindividualsAdisc
iplineofsoftwaredevelopmentbasedonvaluesofsimplicity(简易),communication(交流),andcourage12practicesComputer-AidedSoftwareEngineering(CAS
E)计算机辅助软件工程ApplicationofcomputertechnologytothesoftwaredevelopmentprocessitselfProjectplanningtoolsProjectmanagementtools(Microso
ftProject2019、2019)DocumentationtoolsPrototypingandsimulationtoolsInterfacedesigntoolsProgrammingtools(e.g.
codegenerator)Documentation文档UserdocumentationManualTutorial(指南)InstallationguideReferencemanualHelppackagesSy
stemdocumentationSourcecodesRecordofspecificationdevelopmentSystemspecifications(说明书)SoftwareOwnership(所有权)andLiability(责任)Copyrightlaws(版权法)Lit
erary(文学)worksvs.softwareLookandfeelofasoftwaresystemLotusvs.MosaicPatents(专利)AlongstandingprincipleRSAalgorithm(一种加密算法)Tradesecretlaw
sLiabilitylimitations(有限责任)DisclaimerLevelofcare作业第5章:P167:7、12、42第6章:P210:2、21第7章:20、30