软件工程-原理、方法与应用【第三版】重点
- 格式:doc
- 大小:1.04 MB
- 文档页数:15
“软件危机”的出现是由于软件的规模越来越大,复杂度不断增加,软件需求量增大。
主要表现在两个方面:(1)软件产品质量低劣,甚至在开发过程中就夭折。
(2)软件生产率低,不能满足需要。
软件工程三要素:方法,工具和过程软件是程序以及开发使用和维护程序所需的所有文档软件生存周期:1.可行性研究和项目开发计划 2.需求分析3.概要设计4.详细设计5.编码6.测试7.维护软件工程过程是指在软件工具的支持下所进行的一系列软件工程活动软件过程模型:瀑布模型,增量模型,螺旋模型,喷泉模型,智能模型1)瀑布模型:以文档作为驱动,适合于需求明确的软件项目开发,简单易用,消除非结构化的特征,降低软件的复杂性,促进软件开发工程化,会导致开发的软件不符合用户的需求而夭折。
2)增量模型:基于瀑布模型的渐增模型和基于原型的快速原型模型,适用于用户需求不明确,设计方案有风险的项目,非整体化开发模型。
3)螺旋模型:加入风险分析+瀑布+增量4)喷泉模型:面向对象技术,支持软件重用,迭代性,无间隙性。
5)智能模型:降低问题复杂性将软件生存周期中所使用的一整套技术的集合成为方法学或范型面向过程:结构化(瀑布模型)原型化功能的分解与抽象自顶向下逐步求精面向对象=对象+类+继承+消息OOA:对象模型(信息)状态模型(动态)处理模型(函数)OOD:概要设计详细设计OOD的5个层次由四类部件构成:5层次,主题层,类与对象层,结构层,属性层,服务层。
4部件:PDC问题域部件,HIC人机交互部件,TMC任务管理部件,DMC数据管理部件。
软件设计就是根据所表示的信息域的软件需求以及功能和性能需求进行数据设计系统结构设计过程设计界面设计构造一个高内聚,低耦合的软件模型概要设计:将软件需求转化为数据结构和软件的系统结构,划分出组成系统的物理元素:程序,数据库,过程,文件,类等详细设计:通过对结构表示进行细化,等到软件详细的数据结构和算法理解,抑郁测试和挑事,因而也有助于提高软件的可靠型模块间关系:层次结构,网状结构模块独立化:耦合性(数据耦合)内聚性(功能型内聚)确定类之间关系:聚合关系,泛化关系实现模型由构件图和配置图组成RUP统一过程横轴为时间轴,纵轴为核心工作流需求工程:1.获取需求2.需求分析与建模3.需求规格说明4.确认需求5.需求管理需求获取方法:1.面谈法2.问卷法3.会议讨论法4.原型法5.面向用例的方法需求分析方法:1。
《系统集成项目管理工程师教材》第 3 版第五章《软件工程》的详细知识点一:软件工程定义1:概念:软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程,目的是提高软件生产率、提高软件质量、降低软件成本:2:组成部分:由方法、工具和过程 3 个部分组成。
其中,方法是完成软件项目的技术手段,支持整个软件生命周期;工具是人们在开发软件活动中智力和体力的扩展与延伸,自动或半自动地支持软件的开发和管理以及各种软件文档的生成;过程贯穿于软件开发的各个环节,是指在软件工具的支持下,软件工程师完成的一系列软件工程活动,管理人员需对软件开发的质量、进度、成本进行评估、管理和控制。
·二:软件需求1:需求的层次①业务需求:反映组织机构或用户对系统、产品高层次的目标要求,从总体上描述为什么要达到某种效应,组织希望达到什么目标,通常来自项目投资人、客户、管理人员等,可确定项目视图和范围。
②用户需求:描述用户的具体目标,或用户要求系统必须能完成的任务和想要达到的结果,构成用户原始需求文档的内容,体现系统给用户带来的业务价值。
③系统需求:从系统的角度说明软件的需求,包括功能需求、非功能需求和约束等。
④功能需求:规定了开发人员必须在系统中实现的软件功能;⑤非功能需求:描述了系统展现给用户的行为和执行的操作等,可细分为软件质量属性和其他非功能需求;约束是对开发人员在软件产品设计和构造上的限制。
2:质量功能部署(QFD)是一种将用户要求转化成软件需求的技术,目的是提升用户满意度。
将软件需求分为常规需求、期望需求和意外需求。
①常规需求是用户认为系统应做到的功能或性能,实现越多用户越满意;②期望需求是用户想当然认为系统应具备的功能或性能,但不能正确描述,若未实现会让用户不满意;③意外需求是用户要求范围外的功能或性能,实现会让用户更高兴,不实现也不影响购买决策。
3:需求获取是开发者与用户之间为了定义新系统而进行的交流,是获得系统必要的特征或用户能接受的、系统必须满足的约束。
软件工程方法与实践第三版答案软件工程方法与实践是一门关于软件开发过程中使用的工程方法和实践的学科。
它涵盖了软件项目管理、需求分析、设计、编码、测试、部署和维护等方面。
本文将按照软件开发过程的不同阶段,介绍软件工程方法与实践第三版的答案。
这些答案是针对书中提出的问题和案例进行的详细解答,旨在帮助读者更好地理解和应用软件工程的方法和实践。
一、需求分析阶段答案在软件开发的需求分析阶段,我们需要明确软件系统的功能和性能要求。
以下是几个常见问题的答案:1. 什么是软件需求?答:软件需求是对软件系统的功能、性能、界面、安全性等方面的要求和规格说明。
2. 需求有哪些分类?答:需求可以分为功能需求和非功能需求。
功能需求描述了软件系统应该如何运行,非功能需求描述了软件系统应该具备的性能、可靠性等特性。
3. 如何收集和管理需求?答:需求可以通过面对面的访谈、问卷调查、原型设计等方式进行收集。
需求管理可以通过需求文档、需求变更控制和需求跟踪等方法进行。
二、设计阶段答案在软件开发的设计阶段,我们需要制定软件系统的结构和组件。
以下是几个常见问题的答案:1. 什么是软件设计?答:软件设计是根据需求分析得出的软件系统的功能和性能要求,制定软件系统的结构和组件的过程。
2. 设计过程中有哪些关键任务?答:设计过程中的关键任务包括制定软件架构、设计模块和组件、定义接口、评估设计质量等。
3. 如何评估设计质量?答:可以使用设计评审、设计规范检查、质量度量等方法来评估设计质量,确保设计满足需求并且易于实现和维护。
三、编码和测试阶段答案在软件开发的编码和测试阶段,我们需要实现和验证软件系统的功能。
以下是几个常见问题的答案:1. 什么是软件编码?答:软件编码是将设计好的软件模块转化为具体的计算机程序代码的过程。
2. 编码过程中需要注意哪些问题?答:编码过程中需要注意代码的可读性、可维护性,采用合适的命名规范和编码风格,并进行代码注释和文档编写,以便他人能够理解和使用代码。
软件工程第三版答案【篇一:软件工程课后答案】>1.1什么是计算机软件?软件的特点是什么?答:计算机软件指计算机系统中的程序及其文档。
软件的特点是:a 软件是一种逻辑实体,而不是有形的系统元件,其开发成本和进度难以准确得估算;b 软件是被开发的或被设计的,没有明显的制造过程,一旦开发成功,只需复制即可,但其维护的工作量大;c 软件的使用没有硬件那样的机械磨损和老化问题。
1.2 简述软件的分类,并举例说明。
答:在《计算机科学技术百科全书》中,将软件分为系统软件、支撑软件和应用软件3类。
a 系统软件:系统软件居于计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发挥作用。
系统软件与具体的应用领域无关。
例如:编译程序、操作系统等。
b 支撑软件:支撑软件是支撑软件的开发和维护的软件。
例如:数据库管理系统、网络软件、软件工具、软件开发环境等。
c 应用软件:应用软件是特定应用领域专用的软件。
例如:工程/科学计算软件、嵌入式软件、产品线软件、web应用软件、人工智能软件。
1.4 什么是软件工程?答:在《计算机科学技术百科全书》中软件工程是应用计算机科学、数学及管理科学等原理,开发软件的工程。
1.5 简述软件工程的基本原则。
答:软件工程原则包括围绕工程设计、工程支持和工程管理提出的以下4条基本原则:第一条:围绕适宜的开发模型;第二条:采用合适的设计方法;第三条:提供高质量的工程支撑;第四条:重视软件工程的管理。
1.6 软件生存周期分哪几个阶段?分别简述各个阶段的任务。
答:软件生存周期有计算机系统工程、需求分析、设计、编码、测试、运行和维护6个阶段。
a计算机系统工程的任务是确定待开发软件的总体要求和范围,以及该软件与其他计算机系统元素之间的关系,进行成本估算,做出进度安排,并进行可行性分析,即从经济、技术、法律等方面分析待开发的软件是否有可行的解决方案,并在若干个可行的解决方案中做出选择。
b需求分析主要解决待开发软件要“做什么”的问题,确定软件的功能、性能、数据、界面等要求,生成软件需求规约。
软件工程(史济民第三版)-原理、方法及应用课后习题软件工程(史济民第三版)-原理、方法及应用课后习题软件工程是一门涉及软件开发和维护的学科,具有原理、方法和应用三个方面的内容。
本章将探讨史济民第三版的软件工程课后习题,包括问题分析、需求规格说明、软件设计、软件测试等方面的内容。
1. 问题分析问题分析是软件工程中的第一步,它涉及对问题的背景、需求和目标进行分析。
在史济民第三版的课后习题中,有许多问题需要进行分析和解决。
例如,习题1要求分析一个给定的场景,找出需求和问题,进而提出解决方案。
对于这类问题,我们可以采用以下的分析步骤:1. 理解问题背景和需求:阅读习题中的场景,了解涉及的业务领域和需求。
2. 识别问题:找出场景中存在的问题和挑战,例如效率低下、错误率高等。
3. 提出解决方案:基于问题的分析,提出改进措施和解决方案,例如引入自动化工具、优化算法等。
2. 需求规格说明需求规格说明是软件工程中的重要环节,它涉及对软件系统需求进行详细描述和规定。
在史济民第三版的习题中,有许多涉及需求规格的问题。
例如,习题2要求对给定的场景进行需求分析,并书写需求规格说明。
在完成这类习题时,我们可以参考以下的格式:1. 概述:对软件系统的背景和目标进行简要描述。
2. 功能需求:详细列出系统需要实现的功能和特点。
3. 非功能需求:描述与系统性能、安全性等相关的需求。
4. 约束:列出系统开发过程中需要遵守的限制条件。
3. 软件设计软件设计是软件工程中的核心环节,它涉及软件系统的整体结构和模块设计。
在史济民第三版的习题中,有许多关于软件设计的问题。
例如,习题3要求设计一个给定场景下的软件系统。
在进行软件设计时,我们可以使用以下的设计方法:1. 模块化设计:将软件系统划分为不同的模块,并设计各个模块的功能和接口。
2. 流程图和数据流图:使用图形化的工具描述软件系统的流程和数据流动。
3. 面向对象设计:基于对象和类的概念进行系统设计,强调封装、继承和多态等特性。
介绍软件工程的基本原理和方法软件工程是一门研究如何通过系统化、规范化、可度量的方法来开发和维护软件的学科。
它涉及到软件开发的各个阶段和活动,包括需求分析、设计、编码、测试、维护等。
软件工程的基本原理和方法为软件开发提供了指导和规范,使得软件开发过程更加规范、高效、可靠。
本文将介绍软件工程的一些基本原理和方法。
1.需求分析需求分析是软件开发的第一步,它的目的是明确用户的需求,为后续的设计和实现提供基础。
在需求分析阶段,软件工程师与用户密切合作,收集用户需求,进而确定软件的功能需求、非功能需求等。
常用的需求分析方法包括面向对象技术、数据流图、数据字典等。
2.设计设计阶段是将需求转化为实际的软件系统的过程。
在设计阶段,软件工程师需要根据需求分析结果进行系统架构设计、模块设计、界面设计等。
常用的设计方法有结构化设计方法、面向对象设计方法等。
3.编码编码阶段是将设计好的软件系统转化为可执行程序的过程。
在编码阶段,软件工程师需要根据设计文档进行程序编写,并保证代码的可读性、可维护性、可扩展性等。
常用的编码方法有结构化编程、面向对象编程等。
4.测试测试阶段是验证软件系统是否满足需求和设计的过程。
在测试阶段,软件工程师需要根据测试计划进行测试用例设计、执行测试,并分析测试结果。
常用的测试方法有黑盒测试、白盒测试、系统测试、性能测试等。
5.维护维护阶段是软件开发的最后一个阶段,它的目的是确保软件系统的正常运行和持续改进。
在维护阶段,软件工程师需要进行故障排除、改进功能等。
常用的维护方法有纠错维护、适应性维护、完善性维护等。
除了以上基本原理和方法,软件工程还涉及到一些重要的概念和技术,如软件度量、软件质量保证、需求变更管理、配置管理、项目管理等。
这些概念和技术在软件开发过程中起到了重要的作用,可以提高软件开发的效率和质量。
总结来说,软件工程的基本原理和方法为软件开发提供了规范和指导,使得软件开发过程更加系统化、规范化、可度量,从而提高软件的质量和可靠性。
软件工程-原理、方法及应用(史济民第三版)(课后习题答案)绪论1.什么是软件危机?为什么会产生软件危机?答:软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题。
(1).软件维护费用急剧上升,直接威胁计算机应用的夸大。
(2).软件生产技术进步缓慢2. 什么是软件生产工程化?工程化生产方法与早期的程序设计方法主要差别在哪里?答:结构化程序设计地出现,使许多产业界认识认识到必须把软件生产从个人化方式改变为工程化。
采用工程的概念、原理、技术和方法开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程,同时这也是工程化生产方法。
3. 分别说明(1)软件开发方法与开发工具;(2)软件技术与软件管理的相互关系。
答:(1)工具和方法,是软件开发技术的两大支柱,它们密切相关。
当一种方法提出来并证明有效后,往往随之研制出相应的工具,来帮助实现和推行这种方法。
新方法在推行初期,总有人不愿接受和采用。
若将新方法融合于工具之中,使人们通过使用工具来了解新方法,就能更快促进新方法的推广。
(2)在工业生产中,即使有先进的技术和设备,管理不善的企业也不能获得良好的效益。
软件在生产中不能按质按时完成计划,管理混乱往往是其中的重要原因。
所以对于一个理想的软件工程环境,应该同时具备技术和管理两个方面。
4.试从你的亲身实践,谈谈软件工具在软件开发中的作用。
答:用C++开发一个软件,是校园一卡通的模块。
首先,要在编辑程序支持下在计算机中输入源程序。
然后编译程序,把源程序翻译成目标程序。
如果发现错误,就重新调入编辑程序对源程序进行修改。
编译通过后,再调用连接程序吧所有通过了编译目标程序连同与之有关的程序连接起来,构成一个能在计算机上运行的可执行软件。
编译程序,编辑程序,连接程序以及支持他们的计算机操作系统,都属于软件工具。
离开这些工具,软件开发就是去了支持,变得十分困难和低效,甚至不能运行。
第1章1. 重要1.软件的定义2.软件危机的6个表现3.软件工程定义4.软件工程3要素5.软件开发方法2. 次重要1.软件的特点2.软件的分类3.产生软件危机的原因4.如何解决软件危机5.软件工程目标6.软件工程原则7.软件工程原理第2章1. 重要1.什么是软件生产周期2.软件生命周期的阶段划分3.什么是软件过程模型4.瀑布模型5.原型模型2. 次重要1.螺旋模型2.喷泉模型3.增量模型4.构件组装模型5.RUP模型第3章1. 重要1.可行性研究的目的2.可行性研究的内容3.效益估算技术的几种计算公式4.绘制系统流程图2. 次重要1.问题定义的目的2.可行性研究的步骤3.成本估计技术有哪些4.软件计划任务书包含的内容第4章1. 重要1.需求的定义(IEEE)2.需求的分类(FURPS+模型)3.需求工程的定义4.需求工程的内容5.两种常见的建模与分析方法6.需求规格说明书的作用7.需求规格说明书的内容2. 次重要1.造成需求问题的根本原因2.需求的层次3.需求工程的分类4.需求过程的两种模型5.需求工程的方法6.需求开发过程7.需求获取技术第5章1. 重要1.结构化系统软件开发方法主要包括的3个重要部分2.结构化分析的核心思想3.Data Flow Diagram的作用4.数据流图的主要图形结构5.绘制分层数据流图6.绘制数据流图的注意事项7.什么是数据字典8.数据字典的定义符号和编写格式9.绘制判定表2. 次重要1.结构化分析过程2.结构化分析常用的描述工具3.数据流的方向的要求4.数据流的表示的约定5.数据流与加工之间的关系6.数据字典中的五类条目7.判定树第6章1. 重要1.面向对象的软件开发过程2.统一建模语言UML的作用3.UML的构成2. 次重要1.面向对象的基本概念2.几种典型的面向对象方法第7章1. 重要1.用例驱动的面向对象分析一般过程2.绘制用例图3.三种分析类4.建立对象模型5.绘制顺序图2. 次重要3.第8章1. 重要1.软件设计的目标2.软件设计的任务3.结构化软件设计内容4.什么是模块和模块化5.什么是模块的独立性6.衡量模块独立性的两个准则2. 次重要1.结构化设计过程2.内聚的种类3.耦合的种类4.几种典型的软件体系结构风格第9章1. 重要1.概要设计的关键点是什么2.什么是变换型数据流3.什么是事务型数据流4.系统结构图的主要成分5.由数据流图推导系统结构图6.详细设计阶段的主要工作7.绘制盒图2. 次重要1.结构化设计过程2.优化系统结构图的启发式规则3.什么是PAD 图4.什么是PDL5.什么是HIPO 图第10章1. 重要1.面向对象设计原则2.单一职责原则含义3.开放−封闭原则含义4.Liskov 替换原则含义5.接口隔离原则含义6.依赖倒置原则含义7.分析类与设计类之间的映射关系8.关系数据库与面向对象概念的对应关系9.对持久类的存储设计10.对关系的存储设计——关联关系的映射11.对关系的存储设计——继承关系的映射12.对关系的存储设计——组合聚合关系的映射2. 次重要1.3方面的具体工作2.设计糟糕的系统的症状3.典型的三层结构设计4.软件系统体系结构模型的作用5.硬件系统体系结构模型的作用6.设计模式的作用和研究意义7.抽象工厂(Abstract Factory)模式8.适配器(Adapter)模式9.策略(Strategy)模式10.外观(Facade pattern)模式第11章1. 重要1.用户界面设计原则2.系统响应时间的两个属性2. 次重要1.交互模型和框架2.人类工程学3.用户界面风格第12章1. 重要1.2. 次重要1.第13章1. 重要1.软件缺陷的定义2.软件测试的定义(IEEE)3.黑盒测试含义4.白盒测试含义5.等价类或等价划分的含义6.划分等价类关键原则7.根据等价类设计测试用例8.代码覆盖的含义9.语句覆盖的要求10.分支覆盖的要求11.条件覆盖的要求12.判定/条件覆盖的要求13.条件组合覆盖的要求14.路径覆盖的要求15.集成测试的策略16.面向对象测试包含哪些测试17.软件调试含义2. 次重要1.软件测试的基本认识2.软件测试基本原则3.静态测试含义4.动态测试含义5.失效性测试含义6.通过性测试含义7.单元测试含义8.集成测试含义9.确认测试含义10.Alpha测试含义11.Beta测试含义12.系统测试含义13.面向对象测试策略14.调试方法第14章1. 重要1.软件维护定义2.软件维护的分类3.软件可维护性定义4.软件可维护性的7种度量5.再工程定义2. 次重要1.软件维护的实施过程2.软件维护的副作用3.逆向工程定义第15章1. 重要1.软件项目管理的主要职能2.软件项目组织分类3.软件开发成本估计方法4.成本估算模型5.软件配置管理的定义6.2. 次重要1.甘特图法2.箭线图3.顺序图第16章1. 重要1.2. 次重要1.XP 技术含义2.净室软件工程方法含义3.AOP 编程含义4.软件复用技术含义。
1.软件的定义软件是能够完成预定功能和性能的可执行的计算机程序,包括是程序正常执行所需的数据,以及有关描述程序操作和使用的文档。
简言之,软件=程序+文档程序是为了解决某个特定问题而用程序设计语言描述的适合计算机处理的语句序列。
文档是软件活动开发的记录。
2.软件的特征(1)软件是一种逻辑实体,不是具体的物理实体(2)软件产品的生产主要是研制(3)软件具有复杂性其开发和运行常受到计算机系统的限制,有些软件甚至依赖于硬件的配置(4)软件成本昂贵,其开发方式目前尚未摆脱手工生产方式(5)软件不存在磨损和老化问题,但存在退化问题(6)软件通常针对特定的应用而设计,需要大量的时间精力3.软件危机软件危机的定义:计算机软件的开发和维护过程中所遇到的一系列严重问题软件危机的表现:(1)对软件开发成本和进度的估算很不准确(2)用户很不满意(3)质量不靠谱(4)没有适当的文档(5)软件成本比重上升(6)供不应求:软件开发生产率跟不上计算机应用迅速深入的趋势软件危机产生的原因:客观原因:软件本身的特点:逻辑部件,规模庞大,维护费用急剧上升,生产技术进步缓慢软件维护费用急剧上升,直接威胁计算机应用的扩大①.软件生产技术进步缓慢,是加剧软件危机的重要原因②. 主观原因:不正确的开发方式:忽视需求分析,错误认为软件开发=程序编写,轻视软件维护1.1 绪论2014年3月25日21:311.2 软件工程学的范畴2014年3月25日21:57中心思想是把软件当作是一种工业产品,要求“要求工程化的原理和方法对软件进行计划、开发和维护”软件工具:帮助开发软件的软件方法与工具相结合,再加上配套的软、硬件支持就形成环境3种编程范式1.遵循“程序=数据结构+算法”的思路,把程序理解为由一组被动的数据和一组能动的过程所构成。
(1)过程式编程范型(2)面向对象编程范型程序=对象+消息(3)基于构件技术的编程范型构件可以理解为标准化(或者规范化)的对象类(4) 3种编程范式的比较过程式编程范型:着眼于程序的过程和基本的控制结构,粒度最小面向对象编程范型:着眼于程序中的对象,粒度比较大基于构件的编程范型:着眼于适合整个领域的类对象,粒度更大1.3 软件工程的发展2014年3月25日22:01一个软件从开始立项起,到废弃不用为止,统称为软件生存周期(life cycle )。
软件工程-原理、方法及应用(史济民第三版)答案绪论1.什么是软件危机?为什么会产生软件危机?答:软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题。
(1).软件维护费用急剧上升,直接威胁计算机应用的夸大。
(2).软件生产技术进步缓慢2. 什么是软件生产工程化?工程化生产方法与早期的程序设计方法主要差别在哪里?答:结构化程序设计地出现,使许多产业界认识认识到必须把软件生产从个人化方式改变为工程化。
采用工程的概念、原理、技术和方法开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程,同时这也是工程化生产方法。
3. 分别说明(1)软件开发方法与开发工具;(2)软件技术与软件管理的相互关系。
答:(1)工具和方法,是软件开发技术的两大支柱,它们密切相关。
当一种方法提出来并证明有效后,往往随之研制出相应的工具,来帮助实现和推行这种方法。
新方法在推行初期,总有人不愿接受和采用。
若将新方法融合于工具之中,使人们通过使用工具来了解新方法,就能更快促进新方法的推广。
(2)在工业生产中,即使有先进的技术和设备,管理不善的企业也不能获得良好的效益。
软件在生产中不能按质按时完成计划,管理混乱往往是其中的重要原因。
所以对于一个理想的软件工程环境,应该同时具备技术和管理两个方面。
4.试从你的亲身实践,谈谈软件工具在软件开发中的作用。
答:用C++开发一个软件,是校园一卡通的模块。
首先,要在编辑程序支持下在计算机中输入源程序。
然后编译程序,把源程序翻译成目标程序。
如果发现错误,就重新调入编辑程序对源程序进行修改。
编译通过后,再调用连接程序吧所有通过了编译目标程序连同与之有关的程序连接起来,构成一个能在计算机上运行的可执行软件。
编译程序,编辑程序,连接程序以及支持他们的计算机操作系统,都属于软件工具。
离开这些工具,软件开发就是去了支持,变得十分困难和低效,甚至不能运行。
软件危机:计算机软件的开发与维护的过程中所遇到的一系列严重问题。
如何消除软件危机:1,应该彻底消除在计算机系统早期发展阶段形成的软件就是程序的错误概念。
2,充分认识到软件不是个体劳动的神秘技巧,而是一种组织良好,管理严密,各类人员协同配合,共同完成的工程项目。
3,在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法。
4,应该开发和使用更好的软件工具。
4,解决软件危机既要有技术和工具,又要有必要的组织管理措施。
软件工程的工作原理:1,用分阶段的生命周期计划严格管理。
2,坚持进行阶段评审。
3,实行严格的产品控制。
4,采用现代程序设计技术。
5,结果应能清楚地审查。
6,开发小组的人员应该少而精。
7,承认不断改进软件工程实践的必要性。
软件工程方法学的三要素:方法,工具,过程。
软件生命周期包含的阶段和任务:1,问题定义,任务,要解决什么问题。
2,可行性研究,任务,研究问题范围,探索这个问题是否值得去解决,是否有可行的解决办法。
3,需求分析,任务,用正式文档准确的记录对目标系统的需求。
4,总体设计,任务,设计程序的体系结构。
5,详细设计,任务,设计出程序的详细规格说明。
6,编码和单元测试,任务,写出正确的容易理解,容易维护的程序模块。
7,总和测试,任务,通过各种类型的测试使软件达到预定的要求。
模型的优缺点,适用场合瀑布模型的优点:可强迫开发人员采用规范的方法;严格的规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
缺点:1,瀑布模型是有文档驱动的。
2,由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发的软件产品不能真正的满足用户的需要。
适用场合:传统软件工程方法学的软件过程基本上可以用瀑布模型来描述。
快速原型模型的优点:1,快速原型模型是不带反馈环的。
2,软件产品的开发基本上是线性顺序进行的。
快速原型模型的缺点:1,客户与开发者对原型理解不同;2,准确的原型设计比较困难;,3,不利于开发人员的创新。
第一章绪论1.软件:是能够完成预定功能和性能的可执行的计算机诚信度。
包括使程序正常执行所需的数据,以及有关描述程序操作和使用的文档。
即:软件 = 程序 + 文档2.软件的特征:软件的开发不同于硬件设计、不同于硬件制造、不同于硬件维修。
3.软件工程方法学:把在软件生命周期全过程中使用的一整套技术方法的集合。
三要素:方法、工具、过程4.软件工程学的畴:软件开发技术(软件开发方法学、软件工具、软件工程环境)、软件工程管理(软件管理学、软件经济学、度量学)。
5.软件工程:是指导计算机软件开发和维护的工程学科。
它采用工程的概念、原理、技术和方法来开发与维护软件,目的是为了实现按照预期的进度和经费完成软件生产计划,同时提高软件的生产率和可靠性。
6.软件的发展:大体经历了程序、软件、软件产品 3个阶段。
7.工具和方法是软件开发技术的2大支柱。
8.3种编程泛型:过程式编程泛型、面向对象编程泛型、基于构件技术的编程泛型9.面向对象程序设计中,数据和操作被封装在一个对象中,对象之间则是通过消息相互联系。
10.构件:标准化/规格化的对象类。
11.3种编程泛型的差异: 粒度由小到大依次是:过程式编程式、面向对象编程式、基于构件的编程泛型。
12.软件工程的分化:1、传统软件工程2、面向对象软件工程3、基于构件的软件工程13.消除软件危机的途径:①正确认识计算机软件;②充分认识到软件开发是一种组织良好、管理严密、各类人员协同工作的工程项目;推广使用在实践中总结出来的开发软件的成功的技术和方法;③开发和使用更好的软件工具。
第二章软件生存周期与软件过程1.软件生存周期:计划、开发、运行3个时期。
需求分析-》软件分析-》软件设计-》编码测试-》软件测试-》运行维护2.需求分析(用户视角):功能需求、性能需求、环境约束、外部接口描述。
3.软件分析(开发人员视角):建立与需求模型一致的,与实现无关的软件分析模型。
4.软件设计:总体设计/概要设计、详细设计(确定软件的数据结构和操作)。
5.软件测试:单元测试、集成测试、系统测试。
6.软件开发方法可区分:形式化方法、非形式化方法。
7.形式化开发模型:转换模型、净室模型8.软件可行性研究:经济可行性、技术可行性、运行可行性、法律可行性。
9.可行性研究的步骤:对当前系统进行调查研究、导出新系统的解决方案、提出推荐方案、编写可行性论证报告。
10.可行性论证报告的容:系统概述、可行性分析、结论意见。
11.软件风险分析包括:风险识别(项目风险、技术风险、商业风险)、风险预测、风险的驾驭和监控。
12.软件计划的7种类型:项目实施计划、质量保证计划、软件测试计划、文档编制计划、用户培训计划、综合支持计划、软件分发计划。
第三章结构化分析与设计1.瀑布模型的生命周期:需求定义与分析-》总体设计-》详细设计-》编码-》测试-》维护2.系统的开发流程(SA和SD流程):结构化分析(工具:DFD,PSPEC)------》分析模型(分层DFD图)+SRS结构化设计(工具:SC图(映射)------》初始设计模型(初始SC图)初始设计模型(初始SC图)(优化)------》最终设计模型(最终SC图)3.SA需求分析的两项基本任务:建立系统分析模型、编写SRS。
4.分析模型组成:功能模型、数据模型、行为模型 3种。
5.抽象和分解是结构化分析的主要指导思想,细化的实质是分解。
分解和细化是软件设计的策略。
6.SD阶段把分析模型中的DFD图转换为最终SC图。
7.传统软件的开发技术:结构化设计、模块设计。
8.软件设计:总体设计/概要设计(初始SC图、最终SC图)、详细设计(用逐步细化的方法,完成模块的说明)。
9.需求分析的步骤:需求获取、需求提炼、需求描述、需求验证。
10.DFD图不能表示程序的控制结构(如选择、循环结构)。
11.加工规格说明通常用结构化语言、判定表、判定树作为描述工具。
12.软件中的数据分为3类:数据项(数据元素)、数据流(多个相关数据项)、数据文件和数据库。
13.数据字典的组成:数据项、数据流、数据存储(文件或数据库)、加工(处理逻辑)、外部项(人、物或其它软件系统)。
14.SD模型是由SA模型映射而来的。
SA模型的数据字典可转换为待开发系统的数据设计数据流图可转换为体系结构设计(SC图)与接口设计加工规格说明可转换为模块部的详细过程设计15.SD模型的组成:从上到下依次是:过程设计、接口设计、体系结构设计、数据设计。
16.结构化分析的基本步骤:自顶向下对系统进行功能分解,画出DFD图;由后向前定义系统的数据和加工;编制DD和PEPES;写出SRS。
17.把不需要分解的加工成为基本加工。
把逐步分解成为“自顶向下,逐步细化”。
18.DFD的优点:便于实现,便于使用。
19.传统的软件设计可细分为:面向数据流设计(SD方法)、面向数据结构设计(Jackson方法)。
20.用数据流图表示逻辑模型,在设计阶段,按照数据流图的不同类型(变换型、事务型)转换为相应的软件结构。
21.结构化设计通常从DFD图到SC图的映射开始。
22.面向数据流的设计方法:从DFD图到SC图的映射的4个步骤:1、复审DFD图,必要时可再次进行修改或细化;2、鉴别DFD图的结构特征:事务?变换?;3、按照规则,把DFD图为初始的SC图;4、改进初始的SC图。
23.变换型结构:由输入、变换中心和输出三部分组成。
事务型结构:具有在多种事务中选择执行某类事物的能力。
24.变换映射的步骤:划分DFD图的边界、建立初始SC图的框架、分解SC图的各个分支。
事务映射的步骤:在DFD图上确定边界、画出SC图框架、分解和细化接受分支和发送分支。
25.优化结构设计的指导规则:对模块分割、合并和变动调用关系的指导规则、保持高扇入/低扇出的原则、作用域/控制域规则。
26.模块设计(详细设计)的主要任务是编写软件的模块设计说明书。
目的是确定模块采用的算法和块数据结构。
27.模块设计的原则:清晰第一的设计风格、结构化的控制结构、逐步细化的实现方法。
28.结构化程序设计原理和逐步细化的实现方法是完成模块设计的基础。
第四章面向对象和UML1.面向对象的基本特征:抽象、封装、集成、多态。
2.面向对象开发的优点:提高软件系统的可复用性、可扩展性、可维护性、面向对象符合人类习惯的思维方式。
3.元素之间的联系有:关联、泛化、依赖、实现、聚集、组合。
4.UML的4个抽象层次:用户模型、模型、元模型、元元模型。
5.UML的2类图:静态图(用例图、类图、对象图、构件图、部署图);动态图(状态图、时序图、协作图、活动图)UML的5种视图:用例视图、逻辑视图、进程视图、构件视图、部署视图。
6.UML的特点:统一标准、面向对象、表达能力强,可视化。
7.UML模型作为测试阶段的依据:单元测试使用类图和类规格说明;集成测试使用构件图和协作图;系统测试使用用例图来验证系统行为。
8.UML中用例图由系统边界、用例、参与者、关联组成。
用例之间存在的关系:扩展关系、包含关系。
包与包之间的关系有:依赖、泛化。
9.根据类/对象之间的具体情况,可分为普通关联,递归关联、多重关联、有序关联、限制关联、或关联、关联类10.消息(类里面的方法加参数):简单消息、同步消息、异步消息。
状态图有:初态、终态、中间态。
11.时序图中的消息可以是信号或操作调用。
12.时序图着重体现交互的时间顺序;协作图着重体现交互对象间的静态。
13.时序图和协作图适合描述单个用例中几个对象的行为;活动图适合表现跨越多用例或多线程的复杂行为。
14.构件图可以用来表现、编译、、执行时构件间的依赖关系。
15.UML用图表示语法,用元模型表示语义,采用模型来描述系统的结构(静态特征)以及行为(动态特征)。
第五章需求工程和需求分析1.软件需求的3个层次:业务需求、用户需求、功能需求。
软件项目中40%~60%的问题源自软件需求阶段。
2.软件需求的6个特性:功能性、可用性、可靠性、性能、可支持性、设计约束。
3.需求分析的步骤:需求获取、需求建模、需求描述(编写SRS)、需求验证。
4.需求分析的主要任务:建立需求模型。
需求分析是迭代过程。
常见模型有:用例图、数据流图、实体联系图、控制流图、状态转换图。
5.需求获取的方法:1、建立联合分析小组 2、用户访谈。
6.获得用例的方法通过问问题:1、系统用户是谁?系统维护时谁?从哪获得信息?给谁?7.需求建模方法:结构化分析建模方法、面向对象分析建模。
8.结构化需求模型由3部分组成:功能模型(数据流图、加工规格说明书)、数据模型(数据字典、ER图)、行为模型(状态转换图、控制流图、控制规格说明书)。
9.面向对象需求模型:用例模型(用例图、用例规约)、补充规约、术语表。
10.面向对象需求建模的步骤:画用例图、写用例规约、描述补充规约、编写术语表、调整优化。
11.用例规约文档的容:简要说明、事件流、特殊需求、前置条件和后置条件。
12.用例规约的检查:功能需求的完备性、模型是否易于理解、是否存在不一致性、避免二义性。
13.软件需求规格说明书SRS的容:引言、信息描述、功能描述、行为描述、质量保证、接口描述、其他描述。
14.需求管理的流程:需求确认、需求跟踪、需求变更。
需求跟踪有两种方式,正向跟踪与逆向跟踪。
需求变更的流程:变更申请、审批、更改、更新确认。
第六章面向对象分析1.建立面向对象分析模型步骤:1、建立类/对象层(抽象出类和对象)、2、建立属性层(设计静态属性和关系)、3、建立服务层(定义动态属性和消息通信)、4、建立结构层(定义层次结构关系)、5、建立主题层2.OOA方法的共同特征:类和类层次的表示、建立对象-关系模型、建立对象-行为模型。
3.面向对象开发的全过程:OOA(分析)、OOD(设计)、OOP(编码)、OOT(测试)。
4.用例模型是面向对象分析最常用的一种模型。
5.分析类的类型:边界类、控制类、实体类。
6.每个参与者与用例之间确定一个边界类,每个用例设置一个控制类,而实体类为现实生活中的对象,类(属性与方法)或用于保存和更新信息的有关对象。
7.边界类包括:用户界面类、系统接口类、设备接口类。
如事务管理器、资源协调器、错误处理器都可为控制类。
8.控制类分离边界类和实体类,可用来建立系统的动态行为模型。
实体类用于保存和更新一些对象的有关信息。
9.为分析类分配职责是OOD的重点。
实体类具有持久性。
10.对象-关系模型的容:分析类的属性、分析类的关联、分析类图、分析类的合并。
(用类图来表示)11.对象行为模型用状态转换图、时序图、协作图、活动图来表示。
12.面向对象分析时:1、确定分析类,2、静态模型建立画类图,3、动态模型建立画时序图和协作图。
13.时序图中的元素有:对象、对象生命线、消息。