第五章软件实现(编码测试)5.1编码1。跨越人机鸿沟①精干设计者+精干组织者+好方法,才能突破领域鸿沟取得正确设计。②正确的设计+精干程序员+好的编程语言才能突破人机鸿沟编写出好的计算机程序。2。任务①选好程序员与程序语言,程序员应具备评审设计、熟悉编程与调试的能力;程序语言易于实现设计。②软件蓝图符合程序结构定理,V(G)小,算法简单。③程序质量标准:正确实现设计,可读,高效,可靠,方便。3。编码风格①文体、手段、表达方式:易于理解;代码、数据结构化;语句表达简明直接结构好。②程序效率高,健壮可靠。③人机IO界面友好。④易于复用。4。编码风格简例①给矩阵赋值的简明直接表达方式比较Ⅰ不简明直接的表达Ⅱ简明直接的表达for(i=1;i=n;i++)for(i=1;i=n;i++)for(j=1;j=n;j++)for(j=1;j=n;j++){P[i][1]=1;{P[i][j]=0;P[i][j]=(i/j)*(j/i);P[i][1]=1;}P[i][i]=1;//运行速度慢}//运行速度快②比较数值的可读性与效率表达//Ⅰ直接挑选//Ⅱ提示简化挑选#include“stdio.h”#include“stdio.h”main()main(){scanf(“﹪d,﹪d,﹪d”,&a,&b,&c);{inta,b,c,min;if(ab&&ac)printf(“smallestprintf(“inputintegera,b,c\n”);﹪d”,a)scanf(“﹪d,﹪d,﹪d”,&a,&b,&c);elseif(ba&&bc)printf(“smallif(ab)min=aestis﹪d”,b)elsemin=b;elseprintf(“smallest﹪d”,c);if(minc)min=c;}printf(“smallest﹪d”,min);}//Ⅲ复用挑选main()#include“stdio.h”{inta,b,c,min;intsmallest(inti,intj);scanf(“﹪d,﹪d,﹪d”,&a,&b,&c);{if(ij)return(i)min=smallest(smallest(a,b),c);elsereturn(j);}printf(“﹪d”,min);}5。程序结构定理①结构化程序结构化是工程化对软件结构的推动,要求程序由顺序、分支、循环成分构成,可理解、可测试、可修改、可维护;要求数据结构化规范化。②程序结构定理检验软件设计无病性,然后优化算法(算法简单);保证好形(一个输入多个出口)、适形(一个输入一个出口)、避免病型(无出口)。③病形伪码举例Start//病形PCstart//无病L1:whilePdoA;whilePdoL2:B;A;ifQgotoL1;BuntilQ;elsegotoL2P+-;Q+-;enddo;enddo;stopstop6.无距离跨越设计者编码者集于一身,但必经过程控制、设计文档检验、程序检验,方能通过测试与验收。5.2软件测试1.软件测试与程序测试的区别:找错的范围不同程序测试:找程序执行、语法、数据的错误,仅是编码的问题软件测试:不仅要找程序的错误,还要找文档、数据的错误,是全周期的。S系统分析R需求分析D设计C编码自顶向下U单元测试I集成测试V确认测试ST系统测试自底向上SRDCUIVST2.软件测试的目的:用最小的成本把软件做对,找出错误。3.软件测试的内容:1)静态测试:人工走查,专家评审(占70%的错误)2)动态测试:编写测试用例,执行被测软件3)可靠性测试:稳定性检查,长期性测试4)正确性测试:逻辑判断5)测试的核心内容:设计编写测试用例,执行被测软件4。软件测试原则①认定软件有错,测试标准:软件需求规格说明书,作为客户的最终标准。②80%的新错误都是由20%的旧错误引起的,先改旧错后改新错。③在设计测试用例的时候,有效无效要兼顾。④软件测试的相对性:根据实际的人力物力尽量找到错误。⑤预期结果:输入和输出的对应关系是一一对应的关系。⑥测试用例的设计原则:找出高效的测试数据,或者说用最少的测试数据要找出尽可能多的软件错误。⑦目的:保证低成本、高质量。⑧上下结合的增式组装集成测试、单元组装结合。5。测试方法与测试用例设计从动态的观点有两类方法,白盒法与黑盒法1)白盒法——逻辑的方法,分析的方法,从详细设计开始。①点覆盖(语句):设计测试用例,执行被测程序,使得被测程序的语句都被测试一次。②边覆盖(判定/分支):设计测试用例,执行被测程序,使得被测程序的分支真假都被执行一次。③条件覆盖:设计测试用例,执行被测程序,使得被测程序分支当中的子条件的真和假各都被执行一遍。④条件组合:设计测试用例,执行被测程序,使得分支中的子条件的真假组合尽量多的被覆盖。⑤判定和条件组合覆盖:使分支中的真假和条件中的真假同时被覆盖,考虑到分支逻辑符最简子集。⑥路径覆盖:设计测试用例,执行被测程序,使得被测程序从开始到结束的路径的环域复杂度V(G)个不同的独立路径的基本路径都被覆盖一次。2)黑盒法—功能测试的方法,非分析的方法,从需求分析之后做①等价类划分:找出有效/无效的输入输出子集作为测试用例②边界值分析:找出易出错的边界值(有效/无效)为测试用例③因果图法:组合输入/输出的等价类划分(I为因O为果)④错误推测法:经验方法3)确认测试(即验收测试)①确认与验证的区别:Validation(确认),用户用黑盒法验收是否构造了正确的需求,测试在开发环境下进行,测试在使用环境下进行。Verification(验证),用户验收是否正确实现了需求。②软件配置复查,用户指南等软件配置要正确、齐全、一致。4)例题startstopX1&X3TFX3&X4TFX4&X5TFY=X+1Y=X+2Y=X+3Y=X+4c1c2P4c3c4c5c6IIIIIIP1P2P3三个分支语句IIIIII四个赋值语句基本路径P1P2P3P46个条件C1C2C3C4C5C6①编写覆盖如下PAD图条件的测试用例②设计要点:ⅰ准确确定被测软件的功能或逻辑ⅱ明确测试的目标要求ⅲ遵从测试原则,尤其是符合测试用例编写原则ⅳ采用表格方式编写XYC1C2C3C4C5C6P1P2P3P4IIIIII15FTFTFT---TFFF59TFTFTF---TFFF①编写覆盖此PFC图的条件的测试用例。②注意:取BRO最小集。TstartstopInputA,B,XX=X/AX=X+1(A1)&(B=0)(A=2)OR(X1)printA,B,XFTF5)课堂小测试第六章软件项目管理6.1软件计划特点:无形的、无标准的、一次性的、软件产品开发项目分类:零起点新项目、进化型项目、构件集成项目2.项目规划可重复的日常作业作业operations不可重复一次性的项目projects可重复性任务特点名称①项目与运作区别②软件项目特点分类1.软件项目①成本估计(代码行估计、功能点估计、工作量估计、比例划分法)②可行性分析(经济、技术、操作、风险、法律)③进度安排(比例划分、图PERT、GANTT、TSN、数值CPM)①问题确定日期(工期)最佳进度安排不确定日期(工期)最佳(小)工期最佳安排②粗略的方法(比例划分法)R·S·Pressman计划40%开发20%维护40%细化R·S·Pressman可行性5%编码20%维护40%需求分析10%设计25%IBM比例可行性0.1编码1单元测试1需求0.1组装测试2设计0.5维护20系统分析员(项目经理)指定最佳比例3。进度具体安排③精确方法举例确定工期PERT图/工程网络图法13562400224477111124C(9)A(10)B(3)E(8)G(1)F(2)D(7)4222334{4,11}{5,7}始终{2,0,7}关键路径:经历时间最长的路径决定工期,t1≡t2,1245612作业名(人数)时间箭尾箭头并行123n串行123n实作业:消耗资源的活动虚作业:不消耗资源的活动PERT图步骤:a、由可行性分析定义作业,根据客观安排串并行b、画出PERT图c、求每个结点最早开工(完工)t1,最迟开工(完工)t2头交叉取最大,尾交叉取最小d、求关键路径CP,时间就是工期Te、优化100C(9)A(10)B(3)E(8)G(1)F(2)D(7)4222334{4,11}{5,7}始61111577222444324终求t1t2CPTPERT图练习,结点改变画法1234567891011t0312456A(10)2D(7)2F(2)3G(1)4C(9)4E(8)3B(3)2优化有两种:T确定优化,T不确定最小优化④TSN时标网络图法任务人员(10)画法:CP在中间,非CP在两边,优化移动10025512312518184172262626A5E11D7B10C8F6/58HG5I4例:求t1t2cpT⑤T最小(F作业时间缩短为5),PERT图法MN102531251742162517251712505101520250任务时间A5C8B10D7E11F5G5I4H8TSN(TimeScsaleNetwork)时标网络图⑥CPM(CriticalPathMethod)关键路径法PERT图优点:空间好,缺点:时间不好,CPM克服其缺点步骤:以下图为例13562400224477111124C(9)A(1)B(3)E(8)G(1)F(2)D(7)4222334{4,11}{5,7}始终ⅰ定义变量与作业ⅱ箭杆时间t(i,j)估算,赋值,赋初值ⅲtE(i)i=1..6Early,t1正向累加,头交叉取最大,tL(i)i=1..6Last,t2逆向累加,尾交叉取最小ⅳ求时差,CP上结点tE(i)≡tL(i),S(i)=tL(i)-tE(i)≡0ⅴ求T=?ⅵ优化,非CP路径变动CPM法的步骤:ⅰ定义ⅱt(1,6)=4t(1,3)=2t(1,2)=2t(2,4)=2t(3,5)=3t(4,5)=3t(5,6)=4ⅲtE(1)=0tE(2)=tE(1)+t(1,2)=0+2=2tE(3)=tE(1)+t(1,3)=0+2=2tE(4)=tE(2)+t(2,4)=2+2=4tE(5)=max{tE(3)+t(3,5)=2+3=5,tE(4)+t(4,5)=4+3=7}=7tE(6)=max{tE(1)+t(1,6)=0+4=4,tE(5)+t(5,6)=7+4=11}=11ⅳtL(6)=tE(6)=11tL(5)=tL(6)-t(5,6)=7tL(4)=tL(5)-t(4,5)=7-3=4tL(3)=tL(5)-t(3,5)=7-3=4tL(2)=tL(4)-t(2,4)=4-2=2tL(1)=min{tL(6)-t(1,6)=7,tL(3)-t(1,3)=2,tL(2)-t(1,2)=0}=0ⅴ时差S(i)=tL(1)-tE(1)=0–0=0ⅵ工期T=tL(6)-tL(1)=11-0=11当T的一个作业时间有变动,T发生变化,进度重排。CPM法实例⑦规模估计法abmL物价1800265024002340计划410074005005250财务2000245621002142销售2950360034003458总计13190L=a+4m+b6L代码行长b最大估计长度a最小估计长度m一般估计长度⑧生存周期阶段的比例分配法可行性分析0.18设计0.30编码0.26测试0.26合计1.0物价0.40.70.60.62.3人/月计划0.91.61.41.45.3人/月财务0.50.60.50.52.1人/月销售0.61.10.90.93.5人/月总计2.44.03.43.413.2人/月元/月2100180015001800成本5040720051006120232804。可行性分析问题定义→高层逻辑→成本估计→经济可行性分析成本估计:技术可行性分析操作可行性分析E=L/Pl(千行/人月)风险可行性分析E=aLb法律可行性分析E=/T4L=a+4m+b6①计算公式Fi=Pi(1+r)