《软件工程导论》期末复习总结
适用教材:《软件工程与实践(第3版》,贾铁军、李学相、王学军主编,清华大学出版社
提示:与教材内容不完全匹配,有所取舍。
写在前面: 这份复习总结是笔者根据老师授课内容,结合教材、PPT整理出来的,本意是为了帮助笔者查缺补漏,理解记忆。现将其上传至CSDN博客,希望能对大家有所帮助。另外,内容上可能有遗漏、错误或者错字现象,还请多多包涵,并予以指教!谢绝转载!
第1章 软件工程基础
1.软件是计算机及手机等终端设备运行的程序、数据、文档和服务的集合,包括指令程序、数据、相关文档和完善的售后服务的完整集合。即:软件=程序+数据+文档+服务
其中,程序是按照事先预定功能性能等要求设计和编写的指令序列;数据是使程序正常处理信息的数据结构及信息表示;文档是与程序开发、维护和使用有关的技术资料;服务主要指对各种软件用户的服务,包括提供软件产品使用说明书、推销服务及售后服务技术支持等。
2.软件的主要特点为:①智能性;②抽象性;③人工方式;④复杂性和系统性;⑤泛域性;⑥复制性;⑦非损及更新性。
3.软件按照软件功能划分为:系统软件、支撑软件、应用软件。
4.软件危机是指计算机软件在研发、运行、维护和管理过程中,出现的一系列严重问题的现象。主要问题:①如何开发软件以满足对软件日益增长的需求;②如何维护数量不断增长的已有软件。主要特征表现在7个方面:
①软件运行经常出现功能、性能不满意或出现故障等现象;
②软件产品的质量、可靠性和安全等方面时常达不到标准;
③软件开发管理差,对成本和进度难估计准确;
④系统时常出现无法维护、升级或更新现象;
⑤开发效率低,无法满足应用的迅速发展与实际需要;
⑥研发成本难控制,在总成本中所占比例不断大幅上升;
⑦软件开发没有标准、完整、统一规范的文档资料。
5.软件危机的教训:①需要工程化方式研发软件且必须满足用户对软件日益增长的各种需求;②强化管理和维护不断快速增长的现有软件。
6.软件危机产生的原因:①软件开发规模、复杂度和需求量不断增加及变化;②软件需求分析与设计不完善,致使软件开发、维护和管理或文档出现问题;③没有按照工程化方式运作,开发过程无统一的标准和准则、规范方法;④研发人员与用户或研发人员之间互相的交流沟通不够或文档资料不完备;⑤软件测试调试不规范不细致,提交的软件质量不达标;⑥忽视软件运行过程中的正常维护和管理。
7.解决软件危机的主要措施:①技术方法。运用软件工程的技术、方法和标准规范。②开发工具。选用先进高效的软件工具,同时采取切实可行的实施策略。③组织管理。研发机构需要组织高效、管理制度和标准严格规范、职责明确、质量保证、团结互助、齐心协力,注重文档及服务。
8.软件工程发展的四个阶段:①传统软件工程;②对象工程;③过程工程;④构建工程。
9.软件工程的概念:
按照国标,软件工程是软件开发、运行、维护和引退的系统方法。
按照《计算机科学技术百科全书》,软件工程是应用计算机科学、数学及管理科学等原理,开发软件的过程。它借鉴传统工程的原则、方法,以提高质量、降低成本。其中,计算机科学和数学用于构建模型与算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。即,软件工程=工程原理+技术方法+管理技术。
按照Chatgpt,软件工程是指将工程化的方法应用于软件开发的过程,以提高软件开发的效率、质量和可靠性。
10.软件工程的目标是实现软件的优质高产,其主要内容是软件开发技术和软件工程管理。
11.软件工程三要素:①软件工程方法;②软件工具;③过程与管理。
12.常用的软件工程方法:①面向功能方法;②面向数据方法;③面向对象方法;④面向问题方法;⑤面向方面的开发方法;⑥基于构件的开发方法;⑦可视化方法。
13.软件开发环境,也称软件工程环境,是相关的一组软件工具集合,支持一定的软件开发方法或按照一定的软件开发模型组织而成,是包括方法、工具和管理等多种技术的综合系统。其设计目标是简化软件开发过程,提高软件开发质量和效率。其应具备的4个特点:①适应性;②坚定性;③紧密性;④可移植性。
14.(GB)软件生存周期分为7个阶段:
①开发策划。主要完成问题定义、可行性论证、指定开发计划和项目申报立项,明确“要解决什么问题”。
②需求分析。确定软件须具备的具体功能、性能等,即“必须做什么”及其他指标要求。
③概要设计。主要设计软件的总体结构,结构组成模块,模块层次结构,调用关系及功能,并设计总体数据结构,即“主要怎么做”。
④详细设计。对模块功能、性能、可靠性等进行具体技术描述,并转化为过程描述。即“具体怎么做”。
⑤编写程序。将模块的控制结构转换成程序代码。
⑥运行维护。对交付并投入使用的软件进行各种维护,并记录保存文档。
15.软件工程的基本原理:①开发小组的人员应该优化组合且少而精;②用分阶段的生存周期计划进行严格管理;③坚持进行阶段评审;④实行严格的软件产品控制;⑤采用现代程序设计技术;⑥软件工程的结果应该能清楚地审查;⑦承认不断改进软件工程实践的必要性。
16.软件工程的基本原则:①选取适宜的开发模型;②采用合适的设计方法;③提供高质量的工程支撑;④重视软件工程的管理。
17.常用的软件开发模型:①瀑布模型;②快速原型模型;③增量模型;④螺旋模型;⑤喷泉模型;⑥基于面向对象的模型;⑦智能模型;⑧统一开发模型等。
18.瀑布模型各个阶段:
19.瀑布模型开发软件的3个特点:①开发过程的顺序性;②统筹兼顾,不过早编程;③严格要求保证质量。
20.瀑布模型的缺陷是将充满回溯且相互重叠的软件开发过程硬性地分为多个阶段,随着开发软件规模的增加,造成的危害大增。
21.瀑布模型开发适用于软件需求明确,开发技术成熟,工程管理较严格的场合下使用。
22.快速原型模型适合于先构建成一个原型的应用系统。如操作窗口及界面等,进行客户或潜在用户与系统间的试用交流,用户可通过对原型的评价及改进意见,进一步细化待开发软件的需求,通过逐步调整原型达到客户要求,从而确定客户的具体需求,然后按照需求开发软件。
23.增量模型适用于软件需求不明确、设计方案有一定风险的软件项目。它同瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,规定在开始下一阶段工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,可推迟某些阶段或所有阶段中所有细节,较早地研发出软件。其缺陷在于:①需要软件具备开放式的体系结构;②软件过程的控制易失去整体性。
24.螺旋模型将瀑布模型和快速原型模型结合,强调了其他模型忽视的风险分析,适合于大型复杂系统。其将开发过程划分为制定计划、风险分析、实施工程和客户评估四类活动。
25.喷泉模型主要适合于利用面型对象技术的软件开发项目。其克服了瀑布模型不支持软件重用和多项开发活动集成的局限性,使开发过程具有迭代性和无间隙性。其具有7个特点:①规定软件开发过程分为需求分析、总体设计、详细设计和实现四个步骤;②各阶段相互重叠,软件过程并行;③以分析为基础,在分析阶段消耗的资源最多;④反映了软件过程迭代的自然特性,从高层返回低层无资源消耗;⑤强调增量开发,依据分析一点设计一点的原则,逐步迭代提炼;⑥是对象驱动过程,对象是活动作用的实体,也是项目管理的基本内容;⑦分为系统实现和对象实现,既反映了全系统的开发过程,也反映了对象族的开发和重用过程。
26.智能模型,也称基于知识的软件开发模型,是知识工程与软件工程在开发模型上的结合,以瀑布模型与专家系统的综合应用为基础。主要优点:①利用领域专家系统,可使需求说明更完整、准确和无二义性;②借助软件工程专家系统,提供一个设计库支持,在开发过程中成为设计者的助手;③通过软件工程知识和特定应用领域的知识及规则的应用,对开发提供帮助。
27.软件开发模型的选取需综合考虑:①符合软件本身的性质,包括规模、复杂性等;②满足软件应用系统整体开发进度要求;③尽可能控制并消除软件开发风险;④具有计算机辅助工具快速地支持;⑤与用户和软件开发人员的知识和技能匹配;⑥有利于软件开发的管理与控制。
28.通常情况下,面向过程方法可使用瀑布模型、增量模型和螺旋模型进行开发;面向对象方法可采用快速模型、增量模型、喷泉模型和统一过程进行开发;面向数据方法一般采用瀑布模型和增量模型进行开发。
第2章 可行性分析及开发计划
1.软件问题的定义:在初步调研的基础上,逐步搞清拟研发软件开发的具体问题,并以书面形式对所有问题作出确定性描述的过程。其内容包括:①确定软件或项目名称;②软件项目提出的背景;③软件目标及任务;④软件类型及性质;⑤软件服务范围;⑥基本需求;⑦软件环境;⑧主要技术;⑨基础条件。
2.可行性分析,也称可行性研究,是对拟研发软件项目分析论证可行性和必要性的过程。主要从技术、经济、社会等方面分析其可行性,并根据软件运行环境、软硬件及数据资源与处理要求、研发能力和效益等情况,确定立项开发的必要性,并在确定可行必要后提出初步方案,形成“可行性分析报告”。
可行性分析的特点:预见性、公正性、可靠性、科学性等。
可行性分析的目的:围绕影响软件项目研发的各种因素的可行性进行全面、系统的分析论证。
可行性分析的意义:可行性分析工作是软件项目开发前非常重要的一个关键环节,决定整个软件项目的开发成败,具有非常重要的经济意义和现实意义。
可行性分析的主要任务:决定软件项目是否可行及完成对可行项目的“初步方案”
可行性分析的主要内容:对问题的定义,主要经过调研与初步概要分析,初步确定软件项目的规模和目标,明确项目的约束和限制,并导出软件系统的逻辑模型。然后从此模型出发,确定若干可供选择的主要软件系统初步研发方案。
可行性分析的方面:技术可行性分析、经济可行性分析、社会可行性分析、开发方案可行性分析、运行可行性分析等。
(1)技术可行性分析:是可行性分析中最关键和最难决断的问题。内容包括:对新软件功能的具体指标、运行环境及条件、响应时间、存储速度及容量、安全性和可靠性等要求,对网络通信功能的要求,确定现有资源条件下,技术风险及项目能否实现。
(2)经济可行性分析:也称成本效益分析。主要内容包括:进行软件开发成本的估算,了解软件项目成功取得效益的评估,确定要开发的项目是否值得投资开发。主要任务包括:①市场经济及竞争实力及投资分析;②新软件开发成功后所带来的经济效益分析与预测。
(3)社会可行性分析:设计范围较广,包括法律及道德可行性、安全因素、对经济政策和市场发展趋势的分析、用户组织的管理模式、业务规范、应用操作可行性即产生的后果与隐患等。
(4)运行可行性分析:包括①原业务与新系统流程的相近程度与差异。②业务处理的专业化程度、功能、性能、安全性、可靠性及接口等。③对用户操作方式及具体使用要求。④新软件界面的友好程度及操作的便捷程度。⑤用户的具体实际应用能力及存在的问题。
(5)开发方案可行性分析:最根本的任务是对以后研发技术路线提出建议,对于不可行的开发方案,应建议重审或暂停,对可行的方案,提出修改完善建议并指定一个初步计划。包括①以正常的运作方式,开发软件项目并投入市场的可行性;②需要人力资源、财力资源的预算情况;③软件硬件及研发设备等物品资源的预算情况;④组织保障及时间进度保障分析等。
可行性分析的主要过程:①明确系统规模和目标;②认真研究现行系统;③确定系统逻辑模型;④制定并推荐新系统的技术方案;⑤编写新系统的可行性分析报告;⑥审查论证。
3.软件项目来源的两个基本途径:确定软件项目立项和合同。
4.系统流程图的主要用途:①对软件相关的具体主要物理系统的实际描述和表示。②全面了解系统业务处理过程和进一步分析系统结构的依据。③系统分析员、管理人员、业务操作人员相互交流确认的工具。④可直接在系统流程图上,拟出软件系统可实现处理的主要部分。⑤可利用系统流程图分析业务流程及其合理性。
5.软件开发计划,也称软件项目计划,是指在正式进行软件开发之前,制定的具体指导软件开发的实施计划。
软件开发计划指定的依据:问题定义报告。
制定“软件开发计划”的主要目的:指导组织、实施、协调和控制软件研发与建设的重要文件,主要使项目成员有明确的分工及工作目标,并对拟开发项目的费用、时间、进度、人员组织、硬件设备的配置、软件开发和运行环境的配置等进行说明和计划,是对项目进行运作和管理及解决客户与研发团队间冲突的依据,据此对项目的费用、进度和资源进行管理控制,有助于项目成员之间的交流沟通,也可作为对项目过程控制和工作考核的基准。
软件开发计划的主要内容:①项目概述;②实施计划;③人员组织及分工;④交付产品;⑤其他内容。需主要着重考虑事项:①软件项目的主要问题;②软件开发的主要问题;③工作阶段及任务;④主要资源需求。
第3章 软件需求分析
1.需求分析,主要是搞清软件应用用户的实际具体需求,而不是确定系统怎么样完成工作。其包括功能需求、性能需求、数据需求、安全及可靠性要求、运行环境和将来可能的业务变化及拓展要求等,并建立系统的逻辑模型,写出“软件需求规格说明”等文档。
2.软件需求分为三个层次:业务需求、用户需求、功能需求,此外还包括某些类别的非功能需求。
3.软件需求分析是软件项目立项决定开发后的首要工作,在整个软件研发过程中的重要基础和依据,对整个项目的开发成败和质量影响极大。其特点及难点主要体现在5个方面:①指标确定难;②需求动态性;③交流共识难;④完备一致难;⑤深入完善难。
4.软件需求分析的主要目的是获取用户及项目的具体需求,通过对实际需求的获取、分析、文档化和验证等需求分析过程,为软件的进一步设计和实现提供依据:①需求划分,将软件功能、性能、可靠性等相关需求进行分类,逐一细化;②面向用户及项目获取分析需求;③检查和解决不同需求之间存在的矛盾或不一致问题,尽量达到均衡和优化;④确定软件的边界及范围以及软件与环境的相互作用的方式;⑤对需求文档化并进行最后验证与确认。
5.软件需求分析的基本原则(规范化、科学化、文档化):①功能分解,逐层细化;②表达理解问题的数据域和功能域;③建立模型(业务模型、功能模型、性能模型、接口模型等)。
6.软件需求分析的具体任务:①确定目标系统的具体要求;②建立目标系统的逻辑模型;③编写需求文档,验证确认需求。
(1)确定目标系统的具体要求:包括功能需求、性能需求、环境需求和用户界面需求;另外还有系统的可靠性、安全性、可移植性和可维护性等方面的需求。
①确定功能需求,画出功能结构图,完成新系统的功能点列表。
②获取性能需求。包括软件的效率、可靠性、安全性、适用性、可移植性、可维护性和可扩充性等方面的需求,还应考虑业务发展的扩展及更新维护。
③明确处理关系,列出接口列表。明确与外部应用软件数据交换的内容、格式与接口。
④确定系统运行环境及界面。包括环境需求:软件运行时所需要的硬件的机型、外设;软件的操作系统、开发与维护工具和数据库管理系统等要求。运行环境:服务器及核心计算机与网络资源的配置计划、采购计划、安装调试进度、人员培训计划等。界面需求:界面的风格、用户与软件的交互方式、数据的输入输出格式等。
(2)建立目标系统的逻辑模型:软件系统的逻辑模型分为数据模型、功能模型、行为模型。可用层次的方式对逻辑模型进行细化,并采用相应的图形以及数据字典进行描述。其中,数据模型采用E-R图描述,功能模型常用数据流图来描述,行为模型常用状态转换图来描述系统的各种行为模式不同状态的转换,数据字典用来描述软件使用或产生的所有数据对象。
(3)编写需求文档,验证确认需求:①编写“需求规格说明书”;②编写初步用户使用手册;③编写确认测试计划;④完善开发计划。
7.软件需求分析方法的种类:①功能分解法;②结构化分析法;③信息建模法;④面向对象的分析方法。
(1)功能分解法:功能分解=功能+子功能+功能接口。
(2)结构化分析法:结构化分析=数据流+数据处理+数据存储+端点+处理说明+数据字典。
(3)信息建模法:有序模型:功能模型、信息模型、数据模型、控制模型、决策模型等。工具:E-R图。
(4)面向对象的分析方法:面向对象=对象+结构与连接+继承+封装+消息通信。
分析方法 | 目的 | 优缺点 | 适用范围 |
---|---|---|---|
面向功能分析 | 获取功能模型 | 简单明了 | 系统软件和应用软件 |
面向对象分析 | 获取对象模型 | 复杂抽象 | 系统软件和应用软件 |
面向数据分析 | 获取数据模型 | 抓住本质 | 关系数据库信息系统 |
8.结构化开发方法由结构化分析方法(SA)、结构化设计方法(SD)、结构化程序设计方法(SP)构成。是软件开发方法中最成熟、应用最广泛的方法,主要特点是快速、自然和便捷。其中结构化分析方法(SA)是面向数据流的需求分析方法,其指导思想是“自顶向下、逐步求精”,其基本原则是抽象与分解。
9.对软件进行结构化分析的具体步骤:①构建原系统物理模型;②抽象原系统逻辑模型;③建立新系统逻辑模型;④进一步补充和优化。
10.结构化分析导出的分析模型包括数据模型、功能模型、行为模型,这些模型以数据字典为核心。其中,实体关系图(E-R图)作为数据建模的基础;数据流图(DFD)作为功能建模的基础;状态转换图(STD)作为行为建模的基础。
11.结构化分析建模工具(7种):一般来说,面向过程和面向数据的分析方法,常用的描述工具为:实体关系图、数据流图、状态转换图、数据字典。面向对象的分析方法,主要采用UML语言、用例图、类图、活动图、时序图等。
(1)实体关系图(E-R图):最常用的数据建模方法。主要用于需求分析阶段,表达目标系统中数据之间的联系及组织方式,建立系统的实体数据模型。实体模型由实体、联系和属性三个基本成分组成。
(2)数据流图(DFD):一种图形化的系统模型。运用图形方式描述系统内部的数据流程,表达系统各处理环节的数据联系,是结构化系统分析方法的主要表达工具。
(3)数据字典(DD):存储数据源定义和属性文档,是数据描述的重要组成部分。数据字典有4类条目:数据流、数据项、文件及基本加工。要求:完整性、一致性、可用性。
(4)结构化语言:专门用于描述一个功能单元逻辑要求。三种结构形式:顺序结构、选择结构、循环结构。
(5)判定树:也称判断树、决策树,基本思路与结构化语言完全类似,描述一个功能模块逻辑处理过程。其优点是描述一般组合条件较清晰。其缺点是不易输入计算机。
(6)判定表,也称决策表,由四个部分组成:条件定义、条件取值及组合、结果、取值组合结果。其优点是能够将所有的条件组合充分地表达出来。其缺点是建立过程较为繁杂,表达方式不如结构化语言和判定树简便。
(7)状态转换图(STD):用于需求分析阶段,建立系统的行为模型,以便正确认识数据对象的行为。在状态转换图中,三类状态的表示符号:
12.软件需求分析文档主要包括:系统(子系统)需求规格说明(SSS)、软件需求规格说明(SRS)、接口需求规格说明(IRS)、数据需求说明(DRD)。
(1)系统(子系统)需求规格说明(SSS):对整个系统或子系统需求分析的说明性文档。主要介绍整个软件项目必须提供的系统总体功能和业务结构、软硬降系统的功能、性能、接口、适应性、安全性、操作需求和系统环境及资源需求等。
(2)软件需求规格说明(SRS):主要用于中小规模且不太复杂的应用软件的需求分析。
第4章 软件设计
1.软件设计,也称系统设计,是应用各种软件技术和方法,设计新软件“怎么做”地过程。其总体目标是将需求分析阶段得到的逻辑模型转换为物理模型,设计结果是“软件设计文档”。
软件设计分为两个阶段:总体设计和详细设计。
(1)总体设计:主要确定总体架构、总体设计文档和方案。重点是确定构成系统的模块及其之间的联系。
(2)详细设计:具体细化,确定组成模块与联系、处理过程、数据库及网络、界面设计、软件设计文档。重点是根据总体设计提供的文档,对各模块给出详细的过程性描述及其它具体设计等,完成相关文档及实现方案。
软件设计过程中的信息流:
2.软件总体设计
(1)软件总体设计的任务包括:①软件的总体结构和模块外部设计;②软件处理流程设计;③确定软件的功能并分配;④数据总体结构设计;⑤网络及接口概要设计;⑥运行概要设计;⑦出错处理概要设计;⑧性能可靠性及安全保密概要设计;⑨维护概要设计。
(2)软件总体设计的总原则:由宏观到微观、逐步求精的原则,定性定量分析相结合、分解与协调相结合和模型化方法,并要兼顾系统的通用性、关联性、整体性和层次性。根据系统的总体结构、功能、任务和目标的要求分解系统,使各子系统之间互相协调配合,实现系统的整体优化。
(3)软件总体设计的过程:①软件工程模块化;②抽象和逐步求精;③模块的内聚和耦合**(力求高内聚、低耦合)**;④子系统及模块的划分;⑤信息隐藏。
(4)软件体系结构设计的三要素:①程序构件的层次结构、②构件之间交互的方式、③数据的结构。
(5)子系统及模块的划分应考虑:①高内聚、低耦合;②模块大小适当;③模块的层次结构;④软件层次结构(深度、宽度、少扇入、多扇出)
(6)软件总体设计的方法:①结构化设计方法;②面向数据结构的设计方法;③原型法。
①结构化设计方法(SD):
概念:是一种典型的面向数据流(核心和关键)的设计方法,主要完成软件总体结构设计。分为总体设计和详细设计两个阶段。
总体设计步骤:①从DFD图导出初始的模块结构图;②改进初始的模块结构图。
详细设计任务:对模块图中每个模块的过程进行描述。常用描述方式:流程图、N-S(结构流程)图、PAD(问题分析)图等。
目标:确定设计软件结构的一个系统化的途径。
②面向数据结构的设计方法:Jackson开发方法。基本步骤分为3步:一是建立数据结构,对应结构化方法的需求分析;二是以数据结构为基础,对应的建立程序结构,对应结构化方法的总体设计;三是列出程序中要用到的各种基本操作,对应结构化方法的详细设计。
③原型法:适合于软件规模较大、要求复杂、系统服务不清晰的情况。特别是当性能要求较高时,需要对软件设计原型先做一些试验。其在整个软件开发策略或设计阶段均可使用,目的是为了不断取得反馈并进行改进。
3.模块结构图(SC)是准确描述表达软件结构的图形表示方法,可反映模块之间的层次调用关系和联系。模块结构图常用的组成符号:
一般DFD图可分为两种典型类型:①中心变换型;②事务处理型。对不同结构的DFD图,采用不同的技术将其转换为初始的模块结构图。中心变换型对应倒置的三叉树。事务处理型对应倒置的二叉树。
①中心变换型:基本呈线性形状,特点是明显分为“输入—处理—输出”三部分,对这种类型的DFD图的转换采用变换分析技术。
②事务处理型:常呈辐射状,特点是一个加工(事务中心)将它的输出分离成若干种发散的数据流。
4.软件设计方法可以分为三大类:①面向数据流的设计(也称过程驱动设计);②面向数据结构的设计(也称数据驱动设计);③面向对象设计。
5.软件具有层次性和过程性特征。层次性反映了其整体性质,常用结构图表示。过程性反映了其局部性质,常用框图等表示。
6.软件详细设计:
(1)主要任务:①模块功能及算法设计;②模块内的数据结构设计;③模块接口设计;④数据库、网络、代码、接口、界面等其他设计;⑤模块测试用例设计;⑥编写详细设计文档;⑦详细设计评审。
(2)3个原则:①详细设计是为后续具体编程实现做准备;②处理过程应简明易懂;③选择器恰当的描述工具表述模块算法。
(3)设计方法选择的原则:①过程描述便于理解、复审和维护,可自然转换成代码,并保证代码与详细设计完全一致。详细设计常使用结构化程序设计方法,其是一种设计程序技术,采用自顶向下、逐步求精的设计方法和单入口单出口的控制结构,只用顺序、选择、循环三种基本控制结构就能实现任何单入口/出口程序。
(4)工具:常用工具包括三种:①图形;②表格;③语言。
①图形工具是将过程细节用图形进行表示,如流程图、盒图(N-S)、问题分析图(PAD)等。
- 程序流程图,也称程序框图,常用的算法表达工具。优点:直观清晰,易学习掌握。缺点:不支持逐步求精,是程序员过早考虑程序控制细节,不考虑程序整体结构、流程线转移不受限制、易破坏程序的整体结构、不适于表达数据结构和模块调用关系、描述过于琐碎、不利于理解大型程序。
- 结构流程图,也称盒图,N-S图。优点是不能随意转移控制,有利于培养软件设计人员良好的设计风格。缺点是程序嵌套层次较多时影响可读性且不易修改。
- 问题分析图(PAD),采用二维树形结构的图形符号表示程序的控制结构。优点:程序结构层次清晰,支持自顶向下、逐步求精的设计过程,既可以描述程序的逻辑结构,又能描述系统的数据结构。
②表格工具用于将处理过程细节用表格形式表达,如决策表等。
③语言工具用于将处理过程细节用语言形式表达,如结构化语言、过程设计语言PDL等。
7.数据库设计的任务和步骤:
①需求分析。主要任务是调查、深入分析和确认业务用户数据需求与处理需求。
②概念结构设计。目的是获取数据库的概念数据模型。方法:一是E-R图;二是面向对象的方法。
③逻辑结构设计。主要任务是将概念模型转化为终端可以实现的传统数据模型。
④物理结构设计。主要是根据数据模型及处理要求,选择存储结构和存取方法,以求获得最佳的存取效率。主要包括:数据库文件组织形式、索引文件组织结构、存储介质的分配、存取系统的选择等。
8.数据规范化的目的:①消除数据冗余;②消除多义性;③使关系的概念单一化;④方便操作;⑤使关系模式更灵活。
9.从实用角度看,在大多数场合选用第三范式较为恰当。
10.网络系统的设计方面的8个主要内容:
(1)网络技术的选择:选择网络的体系结构和协议栈。
①局域网技术;②广域网技术。
(2)网络的分层设计:考虑网络系统体系结构具体实际需求。
①客户机/服务器结构(C/S);②浏览器/服务器结构(B/S);③分布式结构;④云计算模式。
(3)网络站点设计:包括网络战点、端站点设计、中继站点设计、网络的互操作性。
(4)地址分配与聚合设计:包括自顶向下地址规划、公有地址,私有地址的结合使用、动态地址分配原则、混合地址分配原则。
(5)远程网接入设计:包括广域网接入设计、分支机构与远程用户接入设计。
(6)网络性能设计:主要指标有分组转发速率、吞吐量、分组丢失率、事务处理速率、响应时间、延迟时间、数据传输速率、信道利用率等。
(7)网络冗余设计:包括设备冗余、软件容错、网络结构和冗余线路。
(8)网络安全性设计:包括系统安全性分析、物理安全设计、网络安全性设计、信息安全设计。
11.用户界面设计:
(1)主要包括:界面对话设计、数据输入界面设计、屏幕显示设计、控制界面设计等。
(2)用户界面设计的需求分析主要任务:①用户特性分析;②界面的功能任务分析;③确定用户界面类型。
(3)3个特性:可使用性、灵活性、界面的复杂性与可靠性。
(4)4项原则:界面的合适性;简便易操作性;便于交互控制;媒体组合恰当。
(5)数据输入界面设计总目标:简化用户的操作,容忍用户偶尔出错并尽可能降低输入出错率。
(6)控制界面设计的目的是让用户可主动控制系统的工作,是用户很容易地访问计算机及网络资源。
12.软件设计的输入是《软件需求规格说明书》,输出是《系统设计说明》和《软件设计说明》。概要设计要覆盖《需求规格说明书》的全部内容,并作为指导详细设计的依据。详细设计要覆盖《软件设计说明》全部内容,作为指导程序设计实现的依据。
13.详细设计阶段文档是“软件设计说明(SDD)”和“软件实现方案”,主要是详细设计说明、软件结构设计及程序运行过程的详细描述。
第6章 软件编程实现
1.软件实现
(1)概念:通过编码、调试、集成和测试,完成软件产品的过程。
(2)主要目的:按照软件需求分析和详细设计的要求,选择合适的技术路线和编程语言及工具,遵照程序设计规范的开发过程和方法,实现目标系统的功能、性能、接口、可靠性和界面等要求。
(3)主要任务:将软件详细设计的结果转换为目标软件。
(4)需解决的主要问题:软件实现的过程、任务、原则及策略,编程语言的特性及选择的原则和编程风格等。
(5)软件实现包括编程和单元测试。
(6)准则:①高可重用性;②高可扩充性;③高可靠性及健壮性。
(7)3种策略:①OOP开发策略;②自顶向下策略;③自底向上策略。
2.软件编程语言
(1)分类:
①从语言层次上,分为面向机器的语言和面向问题的语言;
②从语言适用性上,分为通用语言和专用语言;
③从语言面向上,分为面向过程语言和OOL;
④从应用领域上,分为科学计算、数据处理、实时处理、人工智能等语言;
⑤从语言级别上,分为低级语言和高级语言;
⑥从应用特点上,高级语言可分为基础语言、现代语言和专用语言;
⑦从语言的内在特点上,高级语言可分为系统实现语言(如C)、静态高级语言(如FORTRAN)、块结构高级语言(如PASCAL、ALGOL)、动态高级语言。
(2)选择的考虑因素与准则6个方面:①适合软件应用领域;②软件开发人员熟悉;③利于软件运行环境;④有助于性能实现;⑤算法和计算复杂性简便;⑥数据结构的复杂性低。
(3)标准:
①理想化标准:
- 有利于实现的优质高效;
- 有利于实现功能性能及可靠性;
- 有利于降低软件开发及维护成本。
②实用性标准:
- 程序语言自身特性;
- 软件的应用领域;
- 编程人员的熟悉情况;
- 软件开发方法:语言的发展前景;类库的可扩展性;开发环境。
- 软件开发/运行环境;
- 算法和数据结构的复杂性;
- 软件可移植性要求。
3.软件编程方法:①模块化编程;②结构化编程(SP);③OOP方法。
4.高质量程序的7个特性:①功能齐全,能够达到用户的使用要求;②界面易于操作,使用便捷;③结构简单、容易理解和使用;④性能及可靠性高,运行安全高效,各项指标优良;⑤可重用性强,有利于软件更新;⑥易移植性及兼容性好;⑦易于维护、修改和扩展升级。
5.软件实现文档包括:软件产品规格说明(SPS)、计算机编程手册(CPM)、软件用户手册(SUM)。软件实现管理文档包括:软件产品规格说明(SPS)、软件用户手册评审报告、软件质量保证计划(SQAP)、软件配置管理计划(SCMP)、开发进度月报(DPMR)、项目开发总结报告(PDSR)、软件产品规格说明(SPS)、软件版本说明(SVD)、评审和鉴定记录等。
第7章 编码与测试
1.编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。
2.选择程序设计语言的主要实用标准:①系统用户的要求;②可以使用的编译程序;③可以得到的软件工具;④工程规模;⑤程序员的知识;⑥软件可移植性要求;⑦软件的应用领域。
3.注释决不是可有可无的。其分为序言性注释和功能性注释。
4.程序的效率是指程序的执行速度及程序所需占用内存的存储空间。
5.软件测试的准则:①所有测试都应该能追溯到用户需求;②尽早地和不断地进行软件测试;③pareto原则:测试发现的错误中80%很可能是由程序中20%的模块造成的;④先进行单个程序模块测试,再转向单元测试,逐步进行大规模测试,最后在整个系统中寻找错误;⑤测试用例应由输入数据和预期的输出结果组成,并兼顾合理的输入和不合理的输入数据;⑥穷举测试是不可能的;⑦为达到最佳的测试效果,应由独立的第三方从事测试工作;⑧程序修改后要回归测试;⑨应长期保留测试用例,直至系统废弃。
6.软件测试的策略和方法可分为静态测试方法和动态测试方法。
(1)静态测试方法分为人工测试方法和计算机辅助静态分析方法。其基本特征是对软件进行分析、检查和审阅,不实际运行被测试的软件。
(2)动态测试方法分为白盒测试方法和黑盒测试方法。其是通过运行软件来检验软件的动态行为和运行结果的准确性。两个基本要素:被测试程序、测试数据(测试用例)。
①白盒测试:若知道产品的内部工作过程,可通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。
②黑盒测试:若知道产品应有的功能,可以通过测试来检验每个功能是否能正常使用。
7.测试步骤:(1)模块测试(单元);(2)子系统测试(局部);(3)系统测试(集成);(4)验收测试(用户参与);(5)平行运行(新旧共存)。
8.软件测试不等于程序测试。软件测试应贯穿于软件定义与开发的整个期间。因此,需求分析、概要设计、详细设计以及程序编码等所得到的文档资料,包括需求规格说明、概要设计说明、详细设计规格说明以及源程序,都应是软件测试的对象。
9.模块测试的5个测试重点:①模块接口;②局部数据结构;③重要的执行通路;④出错处理通路;⑤边界条件。
10.集成测试:测试和组装软件的系统化技术,主要目标是发现与接口有关的问题。有两种方法:①非渐增式测试方法;②渐增式测试(普遍采用)。
11.确认测试,也称验收测试,目标是验证软件的有效性。需求分析阶段产生的软件需求规格说明书,准确地描述了用户对软件的合理期望,是软件有效性的标准,也是进行确认测试的基础。确认测试必须有用户积极参与或以用户为主进行,通常使用黑盒测试法。
12.白盒测试技术:
(1)逻辑覆盖,是以程序内部的逻辑结构为基础的设计测试用例的技术,通常包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、点覆盖、边覆盖、路径覆盖。
(2)控制结构测试,包括基本路径测试、条件测试、循环测试。
13.黑盒测试技术:
(1)着重测试软件功能。
(2)力图发现以下类型的错误:①功能不正确或遗漏了功能;②界面错误;③数据结构错误或外部数据库访问错误;④性能错误;⑤初始化和终止错误。
(3)黑盒测试技术:等价划分法、边界值分析法、错误推测法、因果图法。
①等价类划分法:按照覆盖、不相交、代表性划分等价类,分为有效等价类和无效等价类。
用等价类划分法设计测试用例步骤:(a)形成等价类表,每一等价类规定一个唯一的编号;(b)设计一测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复,直到所有的有效等价类均被测试用例覆盖;©设计一新的测试用例,使其只覆盖一个无效等价类,重复,直到所有无效等价类均被覆盖。
②边界值分析法:(a)测试临近边界的合法数据,以及刚超过边界的非法数据;(b)越界测试通常简单地加1或很小的数和减1或很小的数。
③错误推测法:根据经验、直觉和预感来进行测试。
14.调试:在程序实现成功的测试之后,诊断和改正程序中错误的过程。
(1)可以采用3种调试途径:①试探法(逐点跟踪);②回溯法(从出错处向上追溯);③原因排除法(对分查找法、归纳法和演绎法)
15.实现包括编码和测试两个阶段。
第8章 软件项目管理
1.软件项目管理:
(1)概念:对软件项目的整个生存周期过程的管理,按照项目任务要求,合理的利用资源,为保证软件产品质量所做的工作。
(2)目标:是为了使软件项目能够以预定成本按期保质的完成,而对人员、质量、过程、进度和成本等进行分析和管理的过程。
(3)主要职能:①制定计划;②建立机构;③配备人员;④动员指导;⑤监督检验。
(4)主要特点:①目标产品抽象难度量;②项目独特定制化生产;③智力密集技术复杂;④人为因素影响大。
(5)从管理过程看,软件项目管理可分为项目启动、项目计划、组织实施、项目监控、项目验收五个阶段。
(6)九大知识领域:①集成管理;②范围管理;③时间管理;④成本管理;⑤质量管理;⑥人力资源管理;⑦沟通管理;⑧风险管理;⑨采购管理。其中,核心的四大知识领域是范围管理、时间管理、成本管理、质量管理。
2.软件工程中的“五个面向”实施理论:①面向流程分析;②面向数据设计;③面向对象实现;④面向功能测试;⑤面向过程管理。
3.常用的软件规模度量单位有千行代码KLOC、功能点FP和对象点OP;常用的工作度量单位有人年、人月、人日等。
4.常用的两个工作量估算模型:CoCoMo模型、Putnam模型。
5.项目进度安排的基本工作内容:①划分任务;②确定相互依赖性;③分配时间;④确认工作量;⑤定义责任;⑥定义可交付物;⑦定义里程碑;⑧处理好进度与质量之间的关系。
6.软件过程指软件研发和维护实施中的阶段、技术、方法、时间及相关产物(计划、文档、模型、代码、测试用例和手册等)的集合。
7.任务安排计划的表达常用图示方法,如甘特图、网络图等。
(1)甘特图,又称横道图,是活动进度与日历表的对照图。特点:表明项目的计划进度,并能动态反映当前开发进展状况;但不能表达出各任务之间复杂的逻辑关系。
(2)网络图,用网络分析的方法编制的进度计划图,可以描述每个活动及其之间的逻辑关系。计划评审技术PERT和关键路径法CPM都采用网络图表示项目的活动。
8.在项目实施中的关键是对软件项目的过程管理,主要包括软件项目的需求管理、质量管理、配置管理和风险管理等。
9.软件质量是指与软件产品满足各种需求的能力相关特征的总和。主要内容包括:质量计划制定、质量保证、质量控制。
10.软件项目的风险管理是指对软件项目可能出现的风险,进行识别、评估、预防、监控的过程。其目的是通过风险识别、风险分析和风险评价认识项目的风险,并在此基础上利用各种措施、管理方法、技术和手段对其风险进行有效的处理与控制,及时解决风险事件及后果,以最小的成本保证项目总体目标的实现。软件项目的风险管理是按照风险计划对项目进行全过程的管理。
11.软件项目监控包括:范围监控、进度监控、成本监控、质量监控、风险监控等。
思考题
1、软件项目开发首先要做的事是什么?
答:①可行性分析。②可行性分析是软件项目开发初期的一个重要阶段,它通常在需求分析之前进行。在进行可行性分析时,需要评估项目的技术可行性、经济可行性和社会可行性,以确定项目是否值得进行,并为项目的后续开发提供方向。在进行可行性分析时,需要考虑以下几个方面:
(1)技术可行性分析:是可行性分析中最关键和最难决断的问题。内容包括:对新软件功能的具体指标、运行环境及条件、响应时间、存储速度及容量、安全性和可靠性等要求,对网络通信功能的要求,确定现有资源条件下,技术风险及项目能否实现。
(2)经济可行性分析:也称成本效益分析。主要内容包括:进行软件开发成本的估算,了解软件项目成功取得效益的评估,确定要开发的项目是否值得投资开发。主要任务包括:①市场经济及竞争实力及投资分析;②新软件开发成功后所带来的经济效益分析与预测。
(3)社会可行性分析:设计范围较广,包括法律及道德可行性、安全因素、对经济政策和市场发展趋势的分析、用户组织的管理模式、业务规范、应用操作可行性即产生的后果与隐患等。
通过进行可行性分析,可以帮助项目团队确定项目的可行性和潜在风险,决定了整个软件项目是否立项及研发的成败,对于避免研发机构的重大经济损失及信誉危机,减少软件开发的盲目性,立项失误,节省人力、物力、财力等资源,简化提高软件开发后续的需求分析与设计工作效率,减少软件研发重大失误的风险都具有极其重要的经济意义和现实意义。
2、你认为该软件系统应具备的最重要的特性是什么?
答:一般来说,一个好的软件系统应该具备以下几个重要特性:
- 可靠性:软件系统应该在不同的环境和使用场景下都能够保持稳定,并且能够正常运行,不会出现崩溃或错误。
- 可扩展性:软件系统应该具备良好的可扩展性,即在未来可以方便地添加新功能或扩展现有功能,以满足用户的需求。
- 易用性:软件系统应该具备良好的用户体验,让用户能够方便地使用它,而不需要过多的培训和学习。
- 安全性:软件系统应该具备良好的安全性,能够保护用户的隐私和数据不被非法访问或窃取。
- 易维护性:软件系统应该具备良好的易维护性,即能够方便地进行修改和维护,以保持软件系统的稳定性和可靠性。
3、你认为怎样分工是最合理的?
答:软件开发过程中,分工合理是非常重要的,可以提高团队的效率和软件开发的质量。以下是一些可能的分工方式:
- 按照技能分工:将团队成员按照技能和专业领域划分为不同的组别,如前端开发、后端开发、测试、UI设计等。
- 按照功能分工:将团队成员按照软件系统的不同功能模块进行划分,每个人负责开发和维护自己负责的模块。
- 混合式分工:将团队成员按照技能和功能模块的不同组合进行划分,以便更好地协同工作和解决问题。
不同的分工方式适用于不同的软件开发项目,最合理的分工方式应该是根据具体项目的需求和团队成员的技能和经验来确定的。此外,分工时还需要考虑到团队成员的负荷均衡和合理的沟通协调,以确保整个软件开发过程的高效性和质量。
4、目前流行的软件生命周期模型有哪些?分别举例说明?
答:目前流行的软件生命周期模型有以下几种:
- 瀑布模型:瀑布模型是最早的软件开发模型,它将软件开发过程分为问题定义、可行性研究、需求分析、概要设计、详细设计、软件实现、软件测试、运行维护八个阶段,每个阶段都是顺序进行的,并且要完成前一个阶段的工作才能开始下一个阶段的工作。这种模型适用于软件需求明确,开发技术成熟,工程管理严格的场合下使用。
- 快速原型模型:快速原型模型是一种快速开发的模型,它通过构建原型来获取用户的反馈和需求,然后根据反馈和需求进行迭代开发。这种模型适用于需求不明确或者变化频繁的项目。
- 增量模型:增量模型是将需求分为多个增量,每个增量都是一个可用的软件系统,每个增量都会在前一个增量的基础上进行开发和测试。这种模型适用于需求不稳定或者需要快速交付的项目。
- 螺旋模型:螺旋模型是一种风险驱动的模型,它将软件开发过程分为多个迭代,每个迭代都包括制定计划,风险分析,实施工程,客户评估等步骤。这种模型适用于大型、复杂、高风险的项目。
- 敏捷模型:敏捷模型是一种快速迭代的模型,它强调团队合作、用户参与和快速反馈,通过不断迭代开发来逐步完善软件系统。这种模型适用于需求变化频繁、开发周期短、要求快速交付的项目。
- 喷泉模型:喷泉模型是一种面向对象技术的模型,它将软件开发过程规定为需求分析、总体设计、详细设计、实现四个阶段,每个阶段相互重叠,是一个迭代的、逐步提炼的过程。它弥补了瀑布模型不支持软件重用和多项开发活动集成的不足,使开发过程具有迭代性和无间隙性。
以上是目前流行的软件生命周期模型,每个模型都有其优缺点,选择合适的模型需要根据具体的项目需求和开发团队的情况来进行选择。
*5、你认为软件项目开发中最难的是什么?举例说明?
答:在软件项目开发中,最难的问题可能是需求的管理和变更。
一方面,需求往往是不断变化的,而且可能存在矛盾和不清晰的地方。如果团队不能及时发现和处理这些问题,就会导致软件开发进程的延误和质量的下降。例如,有一个电商项目,客户在开发过程中提出了多个变更需求,但是团队没有及时处理,导致开发进度拖延,并且最终交付的软件无法满足客户的实际需求。
另一方面,需求的管理也是一个复杂的过程,需要团队成员之间的密切合作和有效沟通。如果团队成员之间的沟通不畅或者存在误解,就可能会导致需求不清晰或者出现偏差。例如,有一个医疗项目,团队成员之间的沟通不够充分,导致在开发过程中出现了多个需求偏差,最终导致了软件系统的错误和不稳定。
因此,软件项目开发中最难的问题之一是如何有效地管理和变更需求,需要团队成员之间的密切合作和有效沟通,以及对需求变更的快速响应和处理能力。
*6、软件测试的目的是什么?你认为应该怎么进行软件测试?
答:软件测试的目的是为了发现并修复软件中的缺陷,确保软件的质量和可靠性。软件测试应该包括以下几个方面:
-
单元测试:对软件中的每一个独立模块进行测试,确保每个模块都能够正常运行。
-
集成测试:将单元测试过的模块组合在一起进行测试,确保模块之间的交互正常。
-
系统测试:对整个软件系统进行测试,包括功能测试、性能测试、安全测试等,确保整个系统的功能和性能都符合要求。
-
验收测试:由用户或客户进行测试,确保软件满足用户或客户的需求和期望。
在进行软件测试时,应该根据软件的开发阶段和测试目的选择合适的测试方法和工具。测试过程应该尽可能模拟真实的使用场景,包括正常使用和异常情况。同时,测试结果应该及时反馈给开发人员,以便及时修复缺陷。
7、什么是软件危机?软件危机的主要表现是什么?怎样消除软件危机?
答:
(1)软件危机是指计算机软件在研发、运行、维护和管理过程中,出现的一系列严重问题的现象。主要问题:①如何开发软件以满足对软件日益增长的需求;②如何维护数量不断增长的已有软件。
(2)主要特征表现在7个方面:
①软件运行经常出现功能、性能不满意或出现故障等现象;
②软件产品的质量、可靠性和安全等方面时常达不到标准;
③软件开发管理差,对成本和进度难估计准确;
④系统时常出现无法维护、升级或更新现象;
⑤开发效率低,无法满足应用的迅速发展与实际需要;
⑥研发成本难控制,在总成本中所占比例不断大幅上升;
⑦软件开发没有标准、完整、统一规范的文档资料。
(3)解决软件危机的主要措施:①技术方法。运用软件工程的技术、方法和标准规范。②开发工具。选用先进高效的软件工具,同时采取切实可行的实施策略。③组织管理。研发机构需要组织高效、管理制度和标准严格规范、职责明确、质量保证、团结互助、齐心协力,注重文档及服务。
8、什么是项目风险?如何在工程化开发软件中降低项目风险?
答:项目风险是指在软件开发过程中可能出现的不确定性和不良后果。这些风险可能导致项目进度延误、成本超支、质量不佳、客户不满意等问题。在工程化开发软件中,降低项目风险的方法包括:
-
风险评估:在项目启动阶段,对项目的风险进行评估和分析,制定相应的风险管理计划。
-
风险规避:采取措施避免风险的发生,例如选择成熟稳定的技术、合理分配资源、减少复杂度等。
-
风险转移:将风险转移给其他方,例如购买保险、外包部分工作等。
-
风险缓解:采取措施减轻风险的影响,例如制定备选方案、加强沟通协调、增加测试等。
-
风险接受:对风险进行接受并制定应对措施,例如制定应急预案、留出额外的预算等。
通过以上措施,可以有效地降低项目风险,确保软件项目的成功实施。
9、你认为软件开发中人员应该有几种,各自的职责是什么?
答:在软件开发中,人员可以分为以下几种,各自的职责如下:
-
项目经理:负责整个软件开发项目的计划、组织、领导、协调和控制,确保项目按照预算、时间和质量要求完成。
-
软件架构师:负责制定软件系统的整体架构和设计,确保软件系统具有良好的扩展性、可维护性和可重用性。
-
开发人员:负责根据软件架构师的设计,编写和测试软件程序,确保程序的正确性和可靠性。
-
测试人员:负责对软件程序进行测试,发现和修复软件缺陷,确保软件系统的质量和稳定性。
-
配置管理人员:负责管理软件系统的版本控制、配置管理和发布管理,确保软件系统的稳定性和可靠性。
-
文档编写人员:负责编写软件系统的用户手册、技术文档和测试报告等文档,确保软件系统的易用性和可维护性。
以上人员在软件开发过程中需要密切协作,共同完成软件开发项目。
10、你认为对于初学者来说,最合适的软件开发模型是哪个?
答:对于初学者来说,最合适的软件开发模型是敏捷开发模型。敏捷开发模型强调迭代、交互和快速响应变化,注重团队合作和客户参与,强调软件的可用性和用户体验。相比于传统的瀑布模型,敏捷开发模型更加灵活和适应变化,更加适合初学者掌握和实践。在敏捷开发过程中,初学者可以通过不断地与团队成员和客户进行交互和反馈,逐步提高自己的编程技能和项目管理能力。同时,敏捷开发模型也有着完整的开发流程和规范的开发方法,初学者可以根据这些流程和方法来进行实践和学习。
11、软件开发中的成本有哪些?尝试举例说明
答:软件开发中的成本主要包括以下几个方面:
-
人力成本:包括开发人员、测试人员、项目经理等人员的薪资、福利、培训等费用。
-
硬件成本:包括开发、测试、部署所需的服务器、计算机、网络设备等硬件设备的费用。
-
软件成本:包括开发、测试、部署所需的软件工具、开发库、操作系统等软件的费用。
-
测试成本:包括测试人员、测试工具、测试环境等费用。
-
管理成本:包括项目管理、质量管理、配置管理等费用。
12、开发软件的时候如何保证软件质量,请举例说明?
答:保证软件质量是软件开发过程中非常重要的一环,以下是一些方法:
-
软件测试:软件测试是保证软件质量的重要手段,包括单元测试、集成测试、系统测试、验收测试等。
-
代码评审:开发人员之间进行代码评审,可以发现代码中的潜在问题,提高代码质量。
-
设计模式:采用设计模式可以提高软件的可维护性、可扩展性、可读性等。
-
规范化开发:采用统一的编码规范、文档规范、流程规范等,可以提高代码的可读性和可维护性。
-
自动化测试:采用自动化测试可以提高测试效率,减少错误率。
例如,对于一个电商网站,可以采用自动化测试来保证软件质量。通过编写测试脚本,自动化执行测试用例,可以减少测试时间,提高测试效率。同时,可以采用代码评审、规范化开发等方法来提高代码质量。
13、软件需求的重要性有哪些?
答:软件需求是软件开发的十分重要的一步,它的重要性体现在以下几个方面:
-
指导软件开发:软件需求是软件开发的基础,它指导软件开发人员进行开发,明确软件的功能、性能、安全等要求。
-
确认软件范围:软件需求能够明确软件的范围,避免开发人员在开发过程中迷失方向,导致软件开发失败。
-
与客户沟通:软件需求能够与客户进行沟通,明确客户的需求和期望,确保软件开发符合客户要求。
-
评估软件成本:软件需求能够评估软件开发的成本,包括人力、硬件、软件、测试等成本,为软件开发提供经济保障。
-
确保软件质量:软件需求能够确保软件质量,包括功能、性能、安全等方面,避免软件开发过程中出现问题,保证软件质量。
总之,软件需求是软件开发的基础,对软件开发过程和软件质量都有着重要的影响。
14、进行需求分析的时候应该注意哪些环节?
答:进行需求分析时,应该注意以下环节:
-
收集需求:收集相关利益相关者的需求,包括客户、用户、业务分析师等,了解他们的需求、期望和问题。
-
分析需求:对收集到的需求进行分析,确定实际需求和潜在需求,明确需求之间的关系和优先级,将其归纳为需求规格说明书。
-
验证需求:将需求规格说明书交付给利益相关者进行确认,确保需求的准确性、完整性和可行性。
-
确认需求:与利益相关者达成共识,确认需求规格说明书中的所有需求。
-
编写用例:基于需求规格说明书,编写用例,描述系统的功能和行为,以便于理解和测试。
-
确定范围:确定需求的范围,包括功能、性能、界面、安全等方面,以便于后续的开发和测试。
-
优化需求:对需求进行优化,包括消除冗余需求、简化需求、合并需求等,以提高需求的可行性和可实现性。
-
管理变更:对需求变更进行管理,包括评估变更的影响、制定变更计划、实施变更等,以确保变更不会影响项目进程和质量。
15、需求变更指的是什么?如何实施?
答:需求变更指的是在软件开发过程中,客户或其他利益相关者提出的修改原有需求或添加新需求的请求。需求变更是常见的情况,因为在软件开发过程中,客户或其他利益相关者对需求的理解可能会发生变化,导致需求的变更。
需求变更的实施需要遵循以下步骤:
-
评估变更:对需求变更进行评估,包括对变更影响的分析和评估变更的可行性和优先级。
-
反馈变更:将评估结果反馈给客户或其他利益相关者,告知变更是否被接受,如果被接受则记录变更请求。
-
更新需求规格:在需求规格中记录变更,包括变更的原因、影响、优先级等信息。
-
更新计划:根据变更的影响和优先级,更新项目计划和进度。
-
实施变更:在开发过程中,根据变更的要求进行相应的修改和测试,确保变更得到有效实施。
需要注意的是,需求变更应该在合适的时间进行,避免对进度和成本造成过大的影响。此外,需求变更的管理需要有一个明确的流程和规范,确保变更的实施能够顺利进行。
16、用户在工程化开发软件的过程中,参加了哪些阶段?为什么要参加这些阶段?
答:用户在工程化开发软件的过程中,应该参加以下几个阶段:
-
需求分析阶段:用户应该参与需求分析阶段,提供对系统的需求、期望和问题,确保需求的准确性、完整性和可行性。
-
原型设计阶段:用户应该参与原型设计阶段,对原型进行评估和反馈,确保原型符合需求和期望。
-
测试阶段:用户应该参与测试阶段,对系统进行测试,发现和反馈系统中的问题和缺陷。
-
部署和维护阶段:用户应该参与部署和维护阶段,提供反馈和建议,确保系统的稳定性和可靠性。
用户参与这些阶段的原因是:
- 确保系统符合用户的需求和期望。
- 确保系统的可用性和易用性。
- 发现和解决系统中的问题和缺陷。
- 提供反馈和建议,改进系统的质量和性能。
步 骤 | 任务及说明 | 参与者 | 生成文档或程序 |
---|---|---|---|
可行性分析 | 对项目的技术、功能需求及市场,进行调研和初步分析,确定是否需要启动项目 | 部门主管 核心技术人员 | 可行性分析报告 技术调研报告 |
启动项目 | 正式启动项目,由部门主管制定合同,项目经理制定初步计划,初步计划包括设计和开发时间的初步估计 | 部门主管 核心技术人员 | 项目计划书 项目合同 |
需求分析 | 对项目详细需求分析,编写需求文档,对B/S 结构的系统应制作静态演示页面。需求分析文档和静态演示页面需要通过部门主管审批才能进行下一步骤 | 项目经理 项目小组核心成员 | 需求分析说明书 静态演示页面 项目计划修订版本 |
概要设计 | 根据需求分析进行概要设计。编写目的是说明对系统的设计考虑,包括程序系统流程、组织结构、模块划分、功能分配、接口设计。运行设计、数据结构设计和出错处理设计等,为详细设计提供基础。概要设计经过评审后,项目经理通过部门主管一起指定项目小组成员。 | 项目经理 项目小组核心成员 | 概要设计说明书 |
详细设计 | 详细设计编制目的是说明一个软件各个层次中的每一个程序(每个模块或子程序)的设计方案,如果一个软件系统比较简单,层次很少,可以不单独编写,有关内容可并入概要设计说明书。 | 项目经理 项目小组成员 | 详细设计文档 项目计划确定版本 |
编码实现 | 根据详细设计编程实现,同时有美工对操作界面进行美化 | 项目经理、程序设计员、美工 | 软件版本说明 软件产品规格说明 |
调试 | 项目经理提交测试申请,由测试部门对项目进行测试,项目小组配合测试部门修改软件中的错误 | 项目经理 程序开发人员 测试部门 | 测试申请 测试计划 测试报告 |
项目验收 | 项目验收归档 | 部门主管、项目经理 | 项目所有文档和程序 |