(1)软件工程定义:
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
(2)软件工程本质特征:
① 软件工程关注于大型程序的构造;
② 软件工程的中心课题是控制复杂性;
③ 软件经常变化;
④ 开发软件的效率非常重要;
⑤ 和谐地合作是开发软件的关键;
⑥ 软件必须有效地支持它的用户;
⑦ 由具有一种文化背景的人替具有另一种文化背景的人创造产品。
(3)消除软件危机的方法:
① 应该对计算机软件有一个正确的认识;
② 应该充分认识到软件开发是一种组织良好、管理严密、各类人员协同
配合、共同完成的工程项目;
③ 应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法;
④ 应该开发和使用更好的软件工具。
(1)结构化范型
① 要点
结构化范型属于传统方法学。传统的软件开发方法大部分采用瀑布模型。这种模型要求每一阶段都以前一阶段形成的文档为基础完成工作。
每一阶段将要完成时,都要求开发人员进行验证或确认。
② 优点
a.把软件生命周期划分成若干相对独立、简单的阶段,便于不同人员分工协作,降低开发的困难程度。
b.开发过程中采用科学的管理技术和良好的技术方法,且在每个阶段结束之前都进行严格的审查,保证了软件的质量,提高了软件的可维护性;
c.大大提高了软件开发的成功率和生产率。
③ 缺点
a.不适用于软件规模庞大、或者对软件的需求是模糊的或会随时间变化而变化的情况。
b.结构化范型技术把数据和操作人为地分离成两个独立的部分,增加了软件开发与维护的难度。
(2)面向对象范型
① 要点
a.把对象作为融合了数据及在数据上的操作行为的统一的软件构件。
b.把所有对象划分成各种对象类。
c.继承性。
d.对象彼此之间仅能通过传递消息互相联系。
② 优点
a.降低了软件产品的复杂性;
b.提高了软件的可理解性;
c.简化了软件的开发和维护工作;
d.提高了软件的可重用性。
③ 缺点
面向对象性能比面向过程低。
(1)软件过程是为了开发出高质量的软件产品所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件过程定义了运用技术方法的顺序、应该交付的文档资料、为保证软件质量和协调软件变化必须采取的管理措施,以及标志完成了相应开发活动的里程碑。
(2)软件过程是软件工程方法学的三个重要组成部分之一。软件工程方法学的三个要素为:方法、工具和过程。
(1)优点
提高了团队生产力,在迭代的开发过程、需求管理、基于组件的体系结构、可视化软件建模、验证软件质量以及控制软件变更等方面、针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导,并确保全体成员共享相同的知识基础、它具有简洁和清晰的过程结构,为开发过程提供了较大的通用性。
(2)缺点RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容,此外,它没有支持多项目的开发结构,在一定程度上降低了在开发组织内大范围实现重用的可能性。
(1)进行可行性研究的目的
可行性研究的目的是,用最小的代价在尽可能短的时间内研究并确定客户提出的问题能否解决。
(2)从下述三个方面研究每种解决方案的可行性
① 技术可行性:使用现有的技术能否实现这个系统。
② 经济可行性:这个系统的经济效益能否超过它的开发成本。
③ 操作可行性:这个系统的操作方式在该客户组织内是否行得通。
(1)问题定义
① 目标:在一个月内建立一个高效率,无差错的航空公司机票预定系统。
② 存在的主要问题:人工不易管理,手续繁琐。
(2)可行性分析
① 经济可行性
a.成本估算
打印机一台(2000元)+开发费(3500元)=5500元
b.效益估算
该系统有很好的社会效益,提高了公司售票效率,方便旅客,售票方便、科学。
② 技术可行性
经过调查分析,得到目前航空公司机票预定系统流程图如图所示。
订票系统流程图
③ 操作的可行性
比较以上两图看出,与人工系统相比,计算机保留了原有的主要工作流程,可以看出计算机系统是人工系统的优化,操作也不复杂,工作人员在短时间经过培训就可熟练掌握。
④ 结论
由于经济、技术、操作三方面的可行性分析都通过,因此开发航空公司机票预定系统是可行的。
(1)电话号码=[校内电话号码|校外电话号码]
(2)校内电话号码=非零数字+3位数字
(3)校外电话号码=[本市号码|外地号码]
(4)本市号码=数字零+8位数字
(5)外地号码=数字零+3位数字+8位数字
(6)非零数字=[1|2|3|4|5|6|7|8|9]
(7)数字零=0
(8)3位数字=3{数字}3
(9)8位数字=非零数字+7位数字
(10)7位数字=7{数字}7
(11)数字=[0|1|2|3|4|5|6|7|8|9]
其中,“[]”意思是“或”,如“[校内电话号码|校外电话号码]”表示从校内电话号码或校外电话号码中选择一个;“{}”表示“重复”,两边的数字表示重复次数的下限和上限;“=”意思是“定义为”;“+”意思是“和”,连接两个分量。
(1)需求分析的原因
为了开发真正满足用户需求的成功的软件产品,必须进行需求分析。
(2)对软件系统的需求
功能需求、性能需求、可靠性和可用性需求、出错处理、接口需求、约束、逆向需求、将来可能提出的要求。
可采用以下四种方法获取真实需求:
(1)访谈;
(2)面向数据流自顶向下求精;
(3)简易的应用规格说明技术;
(4)快速建立软件原型。
图3-3 银行计算机储蓄系统数据流图
(2)E-R模型
如图3-4所示。本题中共有两类实体,分别是“储户”和“储蓄所”,在它们之间存在“存取款”关系。因为一位储户可以在多家储蓄所存取款,一家储蓄所拥有多位储户,所以“存取款”是多对多(M:N)关系。
储户的属性主要有姓名、住址、电话号码和身份证号码,储蓄所的属性主要是名称、地址和电话号码,而数额、类型、到期日期、利率和密码则是关系类型存取款的属性。
图3-4 银行计算机储蓄系E-R图
图3-5 购票系统数据流图
图3-6 购票系统E-R图
从题中描述可知,复印机的状态主要有“闲置”“复印”“缺纸”和“卡纸”。引起状态转换的事件主要是“复印命令”“完成复印命令”“发现缺纸”“装满纸”“发生卡纸故障”和“排除卡纸故障”。故状态转换图,如图3- 9所示。
图3-9 复印机工作状态转换图
非直接耦合:例如在实数的运算中,有两个模块分别完成n个实数的求和、求乘积功能,这两个模块之间没有直接联系,只是在主模块调用中有执行的前后顺序而已。
图6-13 从伪码变成的程序流程图
图6-14 从伪码变成的程序盒图
令P代表交易的总金额,Q代表每股的售价,n代表交易的股数。
(1)判定表如图6-22所示。
图6-22 判定表
图6-23 判定树
图6-24 程序流程图
② 根据该程序流程图,可得该程序流图如图6-25所示。
图6-25 程序流图
(2)计算
环形复杂度V(G)=流图中的区域数=流图中判定结点数+1=5+1=6
(3)分析
该算法问题在于控制最外层循环的变量Z不仅没有经过初始化,并且在该循环内部没有任何有可能改变Z的语句。因此,该段代码中的WHILE循环部分代码要么不会执行,要么可能出现死循环。
(1)① 模块测试是对每个单独的模块,分别用黑盒和白盒测试技术,测试它的功能是否正确,检查模块控制结构中的特定路径并发现最大数量的错误。
② 集成测试是在单元测试的基础上,将所有模块按照设计要求组装成子系统或系统,同时进行测试。
③ 模块测试的特点是主要应用白盒测试,对多个模块的测试可以并发进行;集成测试的特点是在测试过程中可能发生接口问题。
(2)通常发现错误的比值在0.005~0.02之间,即在测试前每1000条指令中大约有5~20个错误。所以在对1000行FORTRAN语句构成的程序进行测试期间将发现的错误个数大约有25~100个。
图7-4 测试用例
(1)根据估算平均无故障时间的公式可得:
1/[K(ET /100000-100/100000)]=0.4
1/[K(ET /100000-300/100000)]=2
计算可得:K=1000,ET=350,即程序中的错误总数为350。
(2)当MTTF=10h时,有 1/[K(350/100000-Ec /100000)]=10
计算可得,Ec=340,按前两个月测试改错的进度估算,还进行2个月的集成测试。
(3)MTTF和测试时间τ之间的函数关系曲线,如图7-6所示。
图7-6 MTTF与测试时间τ的关系
(1)根据公式:B0=B2B1 /bc,可得:B0=20×24/6=80,即刚开始测试时程序中总共有80个错误。
(2)根据估算平均无故障时间的公式可得:1/[K(80/24000-20/24000)]=10,1/[K(80/24000-Ec /24000)]=60。计算可得,K=40、Ec=70,即还需要改正50个错误。根据甲改正进度,还需要3个月。
(4)MTTF与集成测试时间τ之间的函数关系曲线,如图7-7所示。
图7-7 MTTF与测试时间τ的关系
(1)软件的可维护性与软件的可理解性、可测试性、可修改性、 可重用性、可移植性有关。
(2)提高软件产品的可维护性的措施有如下几点:
① 软件中使用的可重用构件越多,软件的可靠性越高,改正性维护需求就越少。
② 在每个阶段结束前的技术审查和管理复审中,应该着重对可维护性进行复审
应该选取(a)和(c)两份文档,理由如下:
(1)“对一个已有的软件做重大修改”意味着对软件功能做较大变更或增加较多新功能,这往往需要修改软件的体系结构。因此,了解原有软件的总体情况是很重要的。程序的规格说明书准确地描述了对软件系统的数据要求、功能需求、性能需求、可靠性和可用性要求、出错处理需求、接口需求、约束、逆向需求及将来可能提出的需求,对了解已有软件的总体情况有很大帮助。在对已有软件做重大修改之前仔细阅读、认真研究这份文档,可以避免许多修改错误。因此,应该选取(a)程序的规格说明。
(2)有经验的软件工程师通过阅读含有适当数量注解的源程序,不难搞清程序的实现算法,没有描述详细设计结果的文档并不会给维护工作带来太大困难。此外,为了修改程序代码,原有程序的清单是必不可少的。因此,应该选取(c)源程序清单。
(1)面向对象方法学是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类解决问题的方法与过程,使描述问题的问题空间与实现解法的解空间在结构上尽可能一致的方法学科。面向对象方法学是同时使用对象、类、继承和消息的方法。
(2)面向对象方法学优点:
① 与人类习惯的思维方法一致。
② 面向对象软件稳定性好。
③ 面向对象软件可重用性好。
④ 较易开发大型软件产品。
⑤ 可维护性好。
仓库管理员通过放在仓库中的终端把零件入库或出库事务报告给订货系统,系统接收到事务信息之后应该处理事务;采购员需要使用订货系统提供的产生报表功能,以获取订货报表。用例图如图9-3所示。
图9-3 订货系统用例图
(1)软件质量是软件与明确地和隐含地定义的需求相一致的程
度。
(2)软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。软件可靠性是程序在给定的时间间隔内按照规格说明书的规定成功地运行的概率。
(1)基线是已经通过了正式复审的规格说明或中间产品,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它。
(2)建立基线的三大原因
① 重视性
重视性是指及时返回并重新生成软件系统给定发布的能力,或是在项目中的早些时候重新生成开发环境的能力。
② 可追踪性
可追踪性建立项目工件之间的前后继承关系,其目的在于确保设计满足要求、代码实施设计以及用正确代码编译可执行文件。
③ 报告报告来源于一个基线内容同另一基线内容的比较。基线比较利于调试并生成发布说明。
(1)CMM的基本思想是,由于软件危机是因对软件过程管理不善而引起的,所以新软件技术的运用并不会自动提高软件的生产率和质量,提高软件生产率和软件质量的关键是改进对软件过程的管理。
(2)对能力成熟度划分的原因
① 对软件过程的改进,是在完成一个又一个小的改进步骤基础上不断进行的渐进过程。
② 这5个成熟度等级定义了一个有序的尺度,用以测量软件机构的软件过程成熟度和评价其软件过程能力,这些等级还帮助软件机构把应做的改进工作排出优先次序。③ 成熟度等级是妥善定义的向成熟软件机构前进途中的平台,每个成熟度等级都为软件过程的继续改进提供了一个台阶。