软件工程(本科)复习重点难点
(完整word版)软件工程复习重点

三大块内容:软件危机与软件工程传统软件开发方法面向对象方法一、软件危机与软件工程:软件、软件危机、软件生存期、软件开发模型、软件管理1、软件:软件是能够完成预定功能和性能的可执行的计算机程序+使程序正常运行所需要的数据+描述软件开发过程及其管理、程序的操作和使用的有关文档。
文档:分开发、管理、用户、维护文档,作用是记录及解决不可视性、通信与交流、管理与维护、用户服务2、软件危机a)表现:软件成本高、难于控制开发进度、软件工作量估计困难、软件质量低、软件修改维护困难b)原因:需求问题(描述不精确、理解不一致)、管理问题、方法和工具问题、软件本身的特点3、软件生存期:a)三个时期:定义时期(软件计划、需求分析)—>开发时期(软件设计、编码实现、测试)—>使用和维护时期(维护)b)六个阶段:软件计划需求分析设计编码测试使用与维护c)生命周期方法特点:顺序性、依赖性,推迟程序的物理实现、质量保证的观点(利于尽早发现错误,如阶段文档、评审)4、软件开发模型a)瀑布模型:文档驱动i.阶段划分、分而治之、控制开发过程的复杂性ii.自顶向下、由抽象到具体,顺序进行优点:规范管理开发过程、文档驱动缺点:初期系统的需求难以完全确定、文档驱动、周期长b)原型模型:i.针对:软件开发初期需求难以确定ii.基本思想:快速建立原型,完善用户需求iii.优点:用户参与、快速iv.缺点:快速弱功能、对开发环境要求高c)螺旋模型(风险驱动)d)增量模型(模块、功能驱动)e)迭代模型f)喷泉模型5、软件管理a)区别于其他工业产品生产管理的特点b)主要内容:开发计划与进度管理、文档管理、人员组织管理、成本管理、质量管理二、传统软件工程方法:a)软件计划i.问题定义ii.可行性研究1.经济可行性2.技术可行性3.法律可行性b)需求分析i.结构化分析SAii.面向数据流的分析方法1.DFD四个组成部分(表示方法、命名)2.DFD作图:需求描述DFD3.层次分解法(保持父图和其子图的平衡)4.数据字典(符号)c)软件设计i.总体设计1.模块独立性:高内聚2.作用域是控制域的子集3.单入单出4.规模、深度、宽度、扇入、扇出适当ii.传统设计方法1.面向数据流的设计方法(数据流图)a)结构化设计SD-对应有SD结构化需求分析、SP结构化实现b)DFD软件结构(层次图)i.变换设计ii.事务设计c)优缺点2.面向数据结构的设计方法a)Jackson方法b)Jackson图i.三种元素间的逻辑关系:顺序、选择、重复ii.可描述两种数据结构:数据结构、程序结构c)思想:数据结构与程序处理过程相互转换d)步骤:I/O DS对应关系Program Structure细化求精e)优缺点:i.数据入手ii.简化数据处理程序的设计iii.模块与独立性原则没有给予应有的重视iv.求提供对复杂系统设计过程的支持3.Parnas方法iii.详细设计1.结构化程序设计SPa)高效率---良结构b)三种基本控制结构、单入单出2.过程设计的工具d)实现/编码i.语言1.功能等价2.描述问题方便性有差异a)例如:OOPL---非OOPLii.程序设计风格e)软件测试i.目标ii.方法1.正确性证明2.静态测试3.动态测试a)黑盒(功能)测试i.等价类划分ii.边界值分析iii.错误推测b)白盒(结构)测试i.语句覆盖ii.判定覆盖iii.条件覆盖iv.判定—条件覆盖v.条件组合覆盖iii.步骤f)软件维护i.四种类型1.校正性2.适应性3.完善性4.预防性ii.提高可维护性的措施三、面向对象方法(Object-oriented Method)a)OOM与CM对比:区别—优点i.思维方式iv. 稳定性ii.可重用性v. 可维护性iii.大型软件b)OOSE方法i.三个阶段、五个模型、E CASE第二章.传统软件工程方法:软件计划具体任务:项目定义、可行性分析、软件计划其中:可行性分析:1、可行性研究实质:可行性研究试一次大大压缩和简化了的系统分析和设计过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计过程。
软工复习重难点攻克

软工复习重难点攻克软件工程(Software Engineering)作为一门关注软件开发过程、管理和维护的学科,在计算机相关专业中占据重要地位。
然而,软件工程的学习并非易事,其中包含的一些重难点常常令学生望而却步。
本文将针对软件工程复习中的重难点问题进行探讨,并提供相应的解决方法,以帮助学习者攻克这些难关。
一、软件需求工程软件需求工程是软件开发中的起点,确保正确理解和定义用户需求对于软件开发的成功至关重要。
然而,学习者常常在以下几个方面遇到困难:1.1 需求获取和分析在需求获取和分析阶段,学习者可能会面临难以准确捕获用户需求的问题。
解决方法一可以是加强需求调研技巧的培训,例如访谈、问卷调查和用户观察等,以提升信息获取的质量。
解决方法二是通过小组讨论和案例学习来分享经验和实践,以培养学习者的分析能力。
1.2 需求管理需求管理包括需求验证、需求变更控制和需求跟踪等方面,对于学习者来说,可能需要掌握的概念较多且抽象。
解决方法一是通过案例演练和实例分析的方式加深对需求管理的理解;解决方法二是通过使用需求管理工具和软件来提升学习效果,例如需求管理平台和版本控制系统等。
二、软件设计软件设计是软件开发过程中的核心环节,它直接关系到软件系统的质量和性能。
以下是学习者常遇到的软件设计难点及对应方法:2.1 面向对象设计面向对象设计是目前主流的软件设计方法,但对于学习者来说,理解这一概念并将其应用于实际设计中可能具有一定挑战。
解决方法一是通过多维度的教材和案例来展示面向对象设计的优势和应用;解决方法二是通过开展小组项目和实践训练,帮助学习者从实际问题中掌握面向对象设计的思维方式。
2.2 软件架构设计软件架构设计是软件设计中的关键环节,涉及到系统组织结构、模块划分和关键技术选型等问题。
学习者可能会面临如何有效进行系统架构设计的问题。
解决方法一是进行案例分析,通过剖析成功软件系统的架构设计,帮助学习者掌握设计原则和方法;解决方法二是通过参与开源项目和实际系统开发,锻炼学习者的实践能力和解决实际问题的能力。
大二软件工程知识点总结

大二软件工程知识点总结本文将对大二软件工程中的重点知识点进行总结和归纳,帮助读者全面理解和复习相关内容。
以下是大二软件工程的知识点概述:一、软件生命周期软件生命周期是指从软件开发的开始到结束的整个过程。
包括需求分析、设计、编码、测试、部署和维护等阶段。
每个阶段都有相应的文档和工具支持。
1.需求分析需求分析是软件开发中最重要的一步,它确定了软件系统的需求和功能。
需求分析的过程包括问题定义、需求获取、需求分析与建模等。
2.设计设计是根据需求分析阶段确定的需求来设计软件系统的整体结构和各个模块之间的关系。
常用的设计方法有结构化设计和面向对象设计。
3.编码在编码阶段,程序员会按照设计文档进行编码,将逻辑结构转化为计算机可执行的程序代码。
编码过程需要选择合适的编程语言和开发工具。
4.测试测试是确保软件系统按照需求和设计要求正常运行的重要环节。
测试包括单元测试、集成测试、系统测试和验收测试等。
常用的测试方法有黑盒测试和白盒测试。
5.部署与维护在完成开发和测试后,软件需要部署到目标环境中并进行维护。
部署包括安装、配置和运行等步骤。
维护包括Bug修复、功能增强和性能优化等。
二、软件开发方法论软件开发方法论是指用于管理和组织软件开发过程的一套准则和规范。
常见的软件开发方法论有瀑布模型、迭代模型和敏捷开发等。
1.瀑布模型瀑布模型是软件开发的经典模型,它按照线性顺序依次完成需求分析、设计、编码、测试和部署等阶段。
缺点是无法适应需求变更和快速迭代的需求。
2.迭代模型迭代模型是在瀑布模型的基础上引入迭代和循环的概念,将开发过程划分为多个迭代周期。
每个迭代周期都包含需求分析、设计、编码、测试和部署等阶段。
3.敏捷开发敏捷开发是一种以人为核心、迭代、适应变化的开发方法。
它强调团队合作、快速响应客户需求和频繁交付可用软件。
敏捷开发方法有Scrum、XP和Kanban等。
三、软件工程方法与工具软件工程方法和工具是辅助软件开发的工具和技术。
软件工程导论复习重点总结很全第六版

第1章软件工程学概述1.1 软件危机1.1.1 软件危机旳简介软件危机(软件萧条、软件困扰): 是指在计算机软件旳开发和维护过程中所碰到旳一系列严重问题。
软件危机包括下述两方面旳问题:怎样开发软件, 满足对软件日益增长旳需求;怎样维护数量不停膨胀旳已经有软件。
软件危机旳经典体现:(1)对软件开发成本和进度旳估计常常很不精确;(2)顾客对“已完毕旳”软件系统不满意旳现象常常发生;(3)软件产品旳质量往往靠不住;(4)软件常常是不可维护旳;(5)软件一般没有合适旳文档资料;(6)软件成本在计算机系统总成本中所占旳比例逐年上升;(7)软件开发生产率提高旳速度, 远远跟不上计算机应用迅速普及深入旳趋势。
1.1.2 产生软件危机旳原因(1)与软件自身旳特点有关(2)与软件开发与维护旳措施不对旳有关1.1.3 消除软件危机旳途径对计算机软件有对旳旳认识。
认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完毕旳工程项目。
应当推广使用在实践中总结出来旳开发软件旳成功技术和措施, 并继续研究探索。
应当开发和使用更好旳软件工具。
总之, 为了处理软件危机, 既要有技术措施(措施和工具), 又要有必要旳组织管理措施。
1.21.2.1 软件工程旳简介软件工程: 是指导计算机软件开发和维护旳一门工程学科。
采用工程旳概念、原理、技术和措施来开发与维护软件, 把通过时间考验而证明对旳旳管理技术和目前可以得到旳最佳旳技术措施结合起来, 以经济地开发出高质量旳软件并有效地维护它, 这就是软件工程。
(期中考)软件工程旳本质特性:软件工程关注于大型程序旳构造软件工程旳中心课题是控制复杂性软件常常变化开发软件旳效率非常重要友好地合作是开发软件旳关键软件必须有效地支持它旳顾客在软件工程领域中是由具有一种文化背景旳人替具有另一种文化背景旳人发明产品1.2.2 软件工程旳基本原理用分阶段旳生命周期计划严格管理坚持进行阶段评审实行严格旳产品控制采用现代程序设计技术成果应能清晰地审查开发小组旳人员应当少而精承认不停改善软件工程实践旳必要性1.2.3 软件工程措施学软件工程包括技术和管理两方面旳内容。
软件工程重点难点

软件工程重点难点软件工程是一个跨学科、综合性强的学科,它的发展既受到技术因素的制约,也受到人文因素的影响。
在软件工程的学习和实践过程中,存在一些重点难点需要我们克服和解决。
本文将围绕软件工程的重点难点展开论述,探讨它们的原因和解决方法。
一、需求分析与设计需求分析是软件工程过程中至关重要的一环,它涉及到对用户需求进行准确、完整的理解和把握。
然而,在实际操作中,需求分析常常面临以下难点:1.1 沟通和理解:软件工程师需要与用户进行充分的沟通,但是用户常常表达不清晰、需求变更频繁,或者存在需求隐含等情况,使得需求难以准确捕捉。
此时,可以采用面谈、问卷调查等方式来提高沟通效率和准确度。
1.2 需求分级和权衡:在需求分析阶段,软件工程师需要根据用户优先级、系统约束等因素,将需求进行分级和权衡。
然而,不同用户对需求的优先级可能存在差异,需求之间也存在相互制约的关系,这就对软件工程师的分析能力和技巧提出了要求。
1.3 需求变更管理:需求变更是软件工程过程中常见且难以避免的情况。
如何灵活应对需求变更,同时保证软件系统的稳定性和可靠性,是软件工程师需要面对的重要难题。
可以引入敏捷开发方法,采用迭代开发方式,及时响应和适应需求变更,保持项目的可控性和灵活性。
二、软件质量保证与测试软件质量保证是软件工程过程中的关键环节之一。
它涉及到对软件进行全面、系统的测试,以确保软件系统的质量和稳定性。
然而,软件质量保证与测试中常遇到以下难点:2.1 测试用例设计:测试用例的设计是软件测试过程中的重要环节。
测试用例的设计要全面覆盖功能、性能、安全等方面,并考虑到不同的测试需求和约束条件。
但是,测试用例设计的复杂性常常导致测试覆盖度不高,测试效果不理想。
因此,软件工程师需要不断学习和积累测试用例设计的方法和技巧。
2.2 自动化测试:随着软件规模的增大和复杂度的提高,传统的手工测试方式已经无法满足软件开发的需求。
自动化测试可以提高测试效率和质量,但其引入和实施也面临一定的难题,如自动化测试脚本的编写和维护等。
(专升本)自考《软件工程》备考知识点汇总

(专升本)自考《软件工程》备考知识点汇总自考《软件工程》备考知识点汇总软件工程作为一门重要的学科,涵盖广泛的知识点。
对于计划参加自考《软件工程》考试的考生来说,了解并掌握备考知识点是非常重要的。
本文将结合《软件工程》课程大纲,对备考知识点进行汇总与总结,帮助考生有效备考。
一、软件工程概述软件工程的基本概念和原理、软件生命周期、软件过程模型、软件工程发展历程等。
1.1 软件工程的定义和目标软件工程是一门将系统化、规范化和可量化的方法应用于软件的开发、运维和维护的学科。
其目标是提高软件的质量、效率和可靠性。
1.2 软件生命周期软件生命周期包括需求分析、设计、编码、测试、交付、运维等阶段。
每个阶段都具有相应的活动和产出物。
1.3 软件过程模型常见的软件过程模型包括瀑布模型、迭代模型、增量模型、螺旋模型、敏捷开发等。
每种模型都有自己的优缺点,适用于不同的项目和团队。
1.4 软件工程发展历程软件工程的发展经历了不同的阶段,从软件危机到软件工程的产生和发展,包括软件工程的兴起、规范化和认证等。
二、需求分析与设计软件需求分析和设计是软件工程中至关重要的环节,涉及到对用户需求的理解和转化。
2.1 需求分析方法需求分析方法包括面向对象的方法、结构化分析方法、数据流图等,可以帮助开发人员理解用户需求并建立准确的需求规格说明书。
2.2 需求规格说明书需求规格说明书是对软件需求的详细描述和定义,包括功能需求、非功能需求、用户需求等,为软件设计和开发提供依据。
2.3 软件设计原则常见的软件设计原则包括单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则等。
良好的设计原则可以提高软件的可维护性和扩展性。
三、软件开发与编码规范软件开发和编码规范是保证软件质量和可维护性的重要环节,包括选择开发语言、代码风格约定等。
3.1 软件开发过程软件开发过程包括需求分析、设计、编码、测试和部署等阶段,每个阶段都需要遵循相应的规范和流程。
软工解析重难点
软工解析重难点软件工程(Software Engineering)是研究和应用如何以系统性的、规范化的、可定量的方法构建和维护软件的工程学科。
在软件开发的过程中,存在一些重要且难以解决的问题,本文将对软工解析的重难点进行探讨。
一、需求分析与设计需求分析是软件开发的第一步,也是最为关键的一步。
在需求分析阶段,开发团队需要与用户充分沟通,了解用户的需求和期望。
然而,用户的需求常常模糊不清,不够明确,这给需求分析带来了很大的挑战。
为了解决这一问题,可以采用需求调研和用户访谈的方式,通过多种途径搜集用户需求,并与用户进行反复确认,以确保需求能够准确表达。
另外,在设计阶段,软件架构的选择也是一个重要的决策。
不同的架构模式适用于不同的场景,如分层架构、客户端-服务器架构、微服务架构等。
在选择架构的过程中,需要考虑到系统性能、可扩展性、可维护性等因素。
二、代码实现与测试代码实现是软件开发的核心环节,也是最为繁琐的一部分。
在实现过程中,常常会遇到诸如代码复杂、重复代码过多等问题,导致代码可读性差、难以维护。
为了解决这些问题,可以采用合理的代码组织结构和设计模式,减少代码的耦合性,提高代码的复用性。
同时,在代码实现完成后,必须进行充分的测试。
软件测试的目的是发现潜在的错误和缺陷,并对其进行修复。
然而,由于软件系统的复杂性,测试工作常常繁琐且耗时,测试用例的设计与覆盖率成为挑战。
为了提高测试效率和覆盖率,可以采用自动化测试工具,并结合测试技术,如黑盒测试、白盒测试、边界值分析等方法。
三、项目管理与团队协作在软件开发过程中,项目管理和团队协作是确保项目高效推进的关键因素之一。
项目管理涉及到进度管理、资源分配、风险管理等方面,需要进行合理的计划和组织。
团队协作则需要保证良好的沟通和协调机制,以确保团队成员之间的合作效率和工作质量。
然而,在实际项目中,项目管理和团队协作常常面临挑战。
进度延误、资源冲突、需求变更等问题都可能导致项目无法按时交付。
软件工程期末复习重点
1.软件危机的介绍在计算机软件的开发和维护过程中所遇到的一系列严重问题。
2.产生软件危机的原因与软件本身特点有关:软件开发与维护的方法不正确有关:3.消除软件危机的途径4.软件生命周期由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。
5.软件定义时期的任务是:确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。
这个时期的工作通常又称为系统分析,由系统分析员负责完成。
软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。
6.开发时期具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。
其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
7.维护时期的主要任务是使软件持久地满足用户的需要。
8.软件生命周期每个阶段的基本任务:问题定义、可行性研究,需求分析,总体设计,详细设计,编码和单元测试,综合测试。
9.常用软件模型区别原理:(1)瀑布模型:按照传统的瀑布模型开发软件,有下述的几个特点。
a)阶段间具有顺序性和依赖性:两重含义:段的输出文档正确,后一阶段的工作才能获得正确的结果。
①必须等前一阶段的工作完成之后,才能开始后一阶段的工作;②前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶b) 推迟实现的观点瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,分析与设计阶段的基本任务规定,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现。
c)质量保证的观点:软件工程的基本目标是优质、高产。
为了保证所开发的软件的质量,在瀑布模型的每个阶段都应坚持两个重要做法。
每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。
每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。
软件工程与开发专升本重难点解析
软件工程与开发专升本重难点解析软件工程与开发专升本是一门涉及计算机科学与软件开发的学科,对于从事软件开发或相关工作的人来说,这门课程是非常重要的。
然而,由于其复杂性和抽象性,很多学生在学习过程中会遇到一些困难。
本文将对软件工程与开发专升本的重难点进行解析,并提供一些解决方法。
一、需求分析与规格化在软件开发过程中,需求分析与规格化是非常关键的步骤。
这个阶段的目标是明确用户的需求,并将其转化为详细的软件规格说明。
然而,由于需求往往具有模糊性和多样性,学生在进行需求分析时容易陷入困惑。
解决方法:1. 学习系统分析与设计的基本概念和方法,掌握如UML建模工具的使用。
通过对实际需求案例的分析和建模实践,提高自己的分析与建模能力。
2. 夯实基础知识,掌握需求获取的常用方法,如面谈、问卷调查、观察等,有效地搜集用户需求,避免遗漏和错误。
二、软件设计与架构软件设计与架构是将需求转化为实际的软件系统的过程。
这一阶段需要学生具备良好的系统思维和设计能力,但是在实际操作中常常会遇到困惑。
解决方法:1. 学习常用的软件设计模式和架构模式,如MVC、观察者模式等。
了解它们的原理和适用场景,能够准确地选取并应用到具体的软件设计中。
2. 大量的实践是提高软件设计能力的有效途径。
尝试参与一些实际项目,锻炼自己的设计与架构能力,通过不断的实战积累经验。
三、编码与调试编码与调试是软件工程的重要环节,也是许多学生遇到困难的地方。
在编码过程中,学生可能会面临语法错误、逻辑错误等各种问题。
同时,在调试阶段,找出错误并解决它们也是一项具有挑战性的任务。
解决方法:1. 提高自己的编程实力,熟练掌握常见编程语言的语法和特性。
可以通过参加编程竞赛、刷题等方式提升自己的编码能力。
2. 学习调试工具和技术,如断点调试、日志分析等。
通过对代码的仔细分析和调试,找出错误的根源并解决问题。
3. 多与同学和老师进行交流,并能够善于借鉴和学习他人的经验。
经常参与团队合作项目,学习和他人共同编写和调试代码,提升自己的合作能力和调试技巧。
软工重难点解析
软工重难点解析软件工程(Software Engineering)是一门涵盖软件开发全过程的学科,它着重于系统化地开发、运行和维护软件。
然而,在软件工程过程中,存在着一些重难点需要我们认真分析和解决,以确保项目的成功实施。
本文将深入剖析软件工程的重难点,并探讨解决这些难题的方法和策略。
一、需求分析与管理软件项目的需求分析和管理是软件工程的重要环节。
需求分析阶段面临着大量的复杂需求问题,如需求的不明确、需求的变更以及需求的矛盾等。
这给软件开发带来了很大的挑战。
解决这一难点的方法之一是建立良好的需求管理机制。
通过明确的需求分析流程、清晰的需求文档以及有效的需求变更控制,可以实现对需求的准确把控,以及对需求变化的及时响应。
二、软件设计难题软件设计是软件工程的核心环节,良好的软件设计能够确保软件系统具备良好的可维护性、可扩展性和可复用性。
然而,在软件设计过程中,存在着一些常见的难题,如设计精确度不高、模块划分不合理等。
为解决设计难题,软件工程师可以采用以下方法。
首先,借助于现有的设计模式和最佳实践,提高设计精确度和模块划分的合理性。
其次,加强团队内部的协作和沟通,通过设计评审等方式共同完善设计方案。
三、软件测试与调试困难软件测试与调试是确保软件质量的重要环节,但也是软件工程中的难点之一。
软件系统庞大而复杂,测试所有可能情况几乎是不可能的,而且在测试过程中可能会出现意料之外的问题。
为解决测试与调试困难,可以采用以下策略。
首先,合理规划测试用例,覆盖软件的关键功能和各种边界情况。
其次,引入自动化测试工具,提高测试效率和准确性。
此外,加强日志记录和错误追踪可以帮助快速定位和解决问题。
四、软件项目管理挑战软件项目管理是软件开发过程中至关重要的环节。
项目管理涉及到进度控制、资源分配、沟通协调等诸多方面,如何管理好这些方面的挑战是软件项目成功的关键。
为应对软件项目管理挑战,项目管理者可以采用以下策略。
首先,制定合理的项目计划和进度安排,确保项目按时交付。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件工程(本科)复习重点难点重点要求是以软件工程课程的教学大纲为依据,目的在于使学生理清思路,分清主次。
为本课程的期末复习提供参考。
一、各章重点、难点和复习要求说明第一章软件工程概述1.重点掌握的内容:软件和软件工程的基本概念软件:软件定义由以下三部分组成:(1)在运行中能提供所希望的功能和性能的指令集(即程序);(2)使程序能够正确运行的数据结构;(3)描述程序研制过程、方法所用的文挡。
软件是一种产品,同时又是开发和运行产品的载体。
作为一种产品,它表达了由计算机硬件体现的计算潜能。
作为开发运行产品的载体,软件是计算机工作的基础、信息通信的基础,也是创建和控制其他程序的基础。
软件的特点: ①软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。
②软件是通过人们的智力活动,把知识与技术转化成信息的一种产品,是在研制、开发中被创造出来的。
③在软件的运行和使用期间,没有硬件那样的机械磨损、老化问题。
④软件的开发和运行经常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。
⑤软件的开发至今尚未完全摆脱手工的开发方式。
⑥软件的开发费用越来越高,成本相当昂贵。
软件工程:是指导计算机软件开发和维护的工程学科。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。
软件工程准则可以概括为七条基本原理:(1)用分阶段的生存周期计划严格管理;(2)坚持进行阶段评审;(3)实行严格的产品控制;(4)采用现代程序设计技术;(5)结果应能清楚地审查结果;(6)开发小组的人员应该少而精(7)承认不断改进软件工程实践的必要性。
详细阐述见书中1.2.2节。
软件危机:指的是软件开发和维护过程中遇到的一系列严重问题。
软件工程的基本内容:软件工程学的内容可包括理论、结构、方法、工具、环境、管理、规范等。
第二章软件过程1.重点掌握的内容:软件生存周期及软件开发的各种模型;软件生存周期:一个软件从定义到开发、使用和维护,直到最终被弃用,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生存周期。
软件生存周期一般可分为以下阶段:·问题定义·需求分析与可行性研究·设计·编码·测试·运行与维护软件开发模型:软件开发模型是跨越整个软件生存周期的系统开发、运作、维护所实施的全部工作和任务的结构框架。
瀑布模型即生存周期模型,由B.M.Boehm提出,是软件工程的基础模型。
其核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作。
采用结构化的分析与设计方法,将逻辑实现与物理实现分开。
此外,还有螺旋模型、第四代技术模型、原型模型、构件组装模型、混合模型等软件开发模型。
第三章需求分析1. 重点掌握的内容:需求分析的方法和面向数据流的分析方法;。
需求分析的方法:需求分析方法由对软件的数据域和功能域的系统分析过程及其表示方法组成,它定义了表示系统逻辑视图和物理视图的方式,大多数的需求分析方法是由数据驱动的,也就是说,这些方法提供了一种表示数据域的机制,分析员根据这种表示,确定软件功能及其他特性,最终建立一个待开发软件的抽象模型,即目标系统的逻辑模型。
面向数据流的需求分析方法:结构化分析方法是面向数据流进行需求分析的方法。
结构化分析方法使用数据流图DFD与数据字典DD来描述,面向数据流问题的需求分析适合于数据处理类型软件的需求描述。
其核心思想是分解化简问题,将物理与逻辑表示分开,对系统进行数据与逻辑的抽象。
具体来说,结构化分析方法就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止。
重点掌握结合实例画数据流图和定义数据字典。
系统流程图:系统流程图是描绘物理系统的传统工具。
它的基本思想是用图形符号以黑盒子形式描绘系统里面的每个部件(程序,文件,数据库,表格,人工过程等等)。
系统流程图表达的是部件的信息流程,而不表示对信息进行加工处理的控制过程。
详见 2.3节。
系统流程图的功能:1.制作系统流程图的过程是系统分析员全面了解系统业务处理概况的过程,它是系统分析员作进一步分析的依据。
2.系统流程图是系统分析员、管理人员、业务操作人员相互交流的工具。
3.系统分析员可直接利用系统流程图画出可以实现计算机处理的部分。
4.可利用系统流程图来分析业务流程的合理性。
2.一般掌握的内容:需求分析的任务和原则。
.需求分析的任务:它的基本任务是准确地回答“系统必须做什么?”这个问题。
需求分析所要做的工作是深入描述软件的功能和性能,确定软件设计的限制和软件同其它系统元素的接口细节,定义软件的其它有效性需求。
需求分析的任务不是确定系统如何完成它的工作,而是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。
其实现步骤如下图所示:模型化抽象化理解需求怎么做做什么具体化实例化表达需求一般说来,需求分析阶段的任务包括下述几方面:①确定对系统的综合需求对系统的综合需求主要有:系统功能需求、系统性能需求、运行需求、将来可能提出的需求。
②分析系统的数据需求③导出系统的逻辑模型就是在理解当前系统“怎样做”的基础上,抽取其“做什么”的本质,明确目标系统要“做什么”,可以导出系统的详细的逻辑模型。
具体做法是:首先确定目标系统与当前系统的逻辑差别;然后将变化部分看作是新的处理步骤,对功能图(一般为数据流图)及对象图进行调整;最后由外及里对变化的部分进行分析,推断其结构,获得目标系统的逻辑模型。
通常用数据流图、数据字典和主要的处理算法描述这个逻辑模型。
④修正系统开发计划在经过需求分析阶段的工作,分析员对目标系统有了更深入更具体的认识,因此可以对系统的成本和进度做出更准确的估计,在此基础上应该对开发计划进行修正。
⑤开发原型系统使用原型系统的主要目的是,使用户通过实践获得关于未来的系统将怎样为他们工作的更直接更具体的概念,从而可以更准确地提出和确定他们的要求。
需求分析的步骤:1.调查研究;2.分析与综合;3.书写文档;4.需求分析评审需求分析的原则:其基本原则可概括为: (1)必须能够表达和理解问题的数据域和功能域;(2)按自顶向下、逐层分解问题;(3)要给出系统的逻辑视图和物理视图;2.可行性研究的任务和步骤,成本效益分析可行性研究的任务:是用最小的代价在尽可能短的时间内确定问题是否能够解决。
一般说来,应从经济可行性、技术可行性、运行可行性、法律可行性和开发方案等方面研究可行性。
可行性研究的步骤:可行性研究的步骤分为九个步骤。
成本效益分析:成本/效益分析的目的是要从经济角度分析开发一个特定的新系统是否可行,从而帮助使用部门负责人正确地做出是否投资于这项开发工程的决定。
几种度量效益的方法:1.货币的时间价值;2.投资回收期;3.纯收入。
第四章结构化设计1. 重点掌握的内容:结构化设计的过程和方法概要设计任务:①系统分析员审查软件计划、软件需求分析提供的文档,提出最佳推荐方案,用系统流程图,组成系统物理元素清单,成本效益分析,系统的进度计划,供专家审定,审定后进入设计。
②确定模块结构,划分功能模块,将软件功能需求分配给所划分的最小单元模块。
确定模块间的联系,确定数据结构、文件结构、数据库模式,确定测试方法与策略。
③编写概要设计说明书,用户手册,测试计划,选用相关的软件工具来描述软件结构,结构图是经常使用的软件描述工具。
选择分解功能与划分模块的设计原则,例如模块划分独立性原则,信息隐蔽原则等。
概要设计过程:概要设计要先进行系统设计,复审系统计划与需求分析,确定系统具体的实施方案;然后进行结构设计,确定软件结构。
软件设计的概念与原则:①将软件划分成若干独立成分的依据。
②如何表示不同的成分内的功能细节和数据结构。
③如何统一衡量软件设计的技术质量。
其中有几个概念:1.模块化:就是把程序划分成若干个模块,每个模块具有一个子功能,把这些模块集总起来组成一个整体,可以完成指定的功能,实现问题的要求。
2. 抽象:就是抽出事物的本质特性而暂时不考虑它们的细节。
3. 信息隐蔽: 模块中所包括的信息不允许其它不需要这些信息的模块调用。
4. 信息局部化:是指把一些关系密切的软件元素物理地放得彼此靠近。
5. 模块独立性:是软件系统中每个模块只涉及软件要求的具体子功能,而和软件系统中其他的模块接口是简单的。
模块独立的概念是模块化、抽象、信息隐蔽和局部化概念的直接结果。
6. 耦合:是对一个软件结构内各个模块之间互连程度的度量。
耦合强弱取决于模块间接口的复杂程度,调用模块的方式,以及通过接口的信息。
7. 内聚:标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。
概要设计的方法:面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。
面向数据流的设计要解决的任务,就是上述需求分析的基础上,将DFD图映射为软件系统的结构。
换句话说,这类设计方法允许把用DFD图表示的系统逻辑模型方便地转换成对于软件结构的初始设计描述。
理解基本概念:信息流(包括变换流和事务流)、抽象与逐步求精;模块化与信息隐藏;软件总体结构、数据结构与软件过程。
面向数据结构的分析设计方法:①Jackson系统开发方法(JSD): Jackson系统开发方法(JSD,Jackson System Development)是一种典型的面向数据结构的分析设计方法,它是以信息驱动的,是将信息转换成软件的程序结构。
② Warnier方法:Warnier程序设计方法是由法国人J.D.Warnier提出的另一种面向数据结构的设计方法,又称为逻辑构造程序的方法,简称LCP (Logical Construction of Programs)方法。
Warnier方法的原理和Jackson方法类似,也是从数据结构出发设计程序,但是这种方法的逻辑更严格。
2. 一般掌握的内容:概要设计的文档与评审学会撰写概要设计的文档并能评审出概要设计文档是否符合要求。
概要设计说明书的主要内容及结构详见4.5节。
详细设计1. 重点掌握的内容:详细设计的任务和方法详细设计的任务:详细设计就是要在概要设计的结果的基础上,考虑“怎样实现”这个软件系统,直到对系统中的每个模块给出足够详细的过程性描述。
主要任务如下:①为每个模块确定采用的算法,选择某种适当的工具表达算法的过程,写出模块的详细过程性描述;②确定每一模块使用的数据结构;③确定模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其它模块的接口,以及模块输入数据、输出数据及局部数据的全部细节。
④要为每一个模块设计出一组测试用例,以便在编码阶段对模块代码(即程序)进行预定的测试,模块的测试用例是软件测试计划的重要组成部分,通常应包括输入数据,期望输出等内容。