大学软件工程总结
2013年7月9日软件工程复习总结
前言
软件工程在我整个大学的课程里是选修课,学的是电子工业出版社的《软件工厂--方法与实践 第2版》
软件工程呢,我觉得是一门很需要实践的学科,光靠这样简单地靠老师讲或者看看书是学不到什么东西的。软件工程涉及到很多内容,其中软件项目管理也包括了。概念性东西很多,一些专业术语和名词在整个软件工程中也频繁地出现了。其中近些年比较火的技术领域,面向服务的软件架构和云计算。云计算这个名词,我想IT界的从业人员并不陌生,已经不是什么新鲜东西,不过近些年确实是被捧得水深火热了,我都想尽快涉足这个领域当中去。因为这就是趋势,云服务、云存储等改变了软件行业的格局,对传统的软件开发商是一个很大的冲击,我想会有越来越多的软件开发商会提供这样的服务。原因很简单,它是一个双赢的模式。不过这也是我浅薄的看法,关于云计算并不是简单就能说清楚的东西,我觉得它是技术上的创新,它能给人类带来很多的好处。
当然,这个世界上没有完全完美的东西,双面性在云计算也有体现,云计算为我们节省了成本,节约了劳动力,那么也会丧失一些就业机会,我也不清楚中国现在的格局是怎样。还有就是,云计算是一个绝对安全的东西么,我们把所有的数据都放在云中,集中在一起真的没问题么。关于隐私问题,现在的我们随时随地都可以被一些云计算公司搜集到信息,在网上可以很轻易找到一个人各种信息,包括很多我们不希望被别人知道的信息。这又如何解决呢。总之,好东西都是需要经过锤炼的,不过我相信云计算肯定是利大于弊的东西,我很期待未来的信息化世界。
软件工程知识点总结
有以下知识点(考试内容,当然不止这些)
1. 软件工程的定义
2. 软件生存周期
3. 软件过程模型
4. 需求分析的定义、获取
5. 常见的软件体系结构(B/S 、C/S 、软件总线中间件)
6. SOA 的定义、特点、和工作模型(松耦合、明确定义的接口)
7. 云计算的定义、优势和应用模型
8. 软件测试的概念、原则、方法和测试策略
9. 软件维护的类型
10.软件项目管理的管理过程和领域
11.成本估算模型、进度计划的方法
12. 风险管理、质量管理的概念
13.CMM(软件能力成熟度模型)
第一章
1. 软件工程的定义:(P3)
软件工程是一门指导软件开发的工程学科,它以计算机理论及其他相关学科的理论为指导,采用工程化的概念、原理、技术和方法进行软件的开发和维护,把经实践证明的科学的管理措施与最先进的技术方法结合起来。软件工程研究的目标是“以较少的投资获取高质量的软件”。
2. 软件生存期(P5)
软件生命周期(SDLD)是指一个从用户需求开始,经过开发、交付使用,在使用中不断地增补修订,直至软件报废的全过程,亦称软件生存期(Life Cycle)。
软件生命周期分为以下阶段:
①可行性研究和项目开发计划。该阶段必须要回答的问题是“要解决的问题是什么”。
②需求分析。该阶段的任务不是具体地解决问题,而是准确地确定“软件系统必须做什么”,确定软件系统必须具备哪些功能。
③概要设计。概要设计就是设计软件的结构,该结构由哪些模块组成,这些模块的层次结构是怎样的,这些模块的调用关系是怎样的,每个模块的功能是什么。同时还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。
④详细设计。即对每个模块完成的功能进行具体描述,要把功能描述变为精确的、结构化的过程描述。
⑤编码。该阶段把每个模块的控制结构转换成计算机可接受的程序代码,即写成以某特定程序设计语言表示的“源程序”。
⑥测试。它是保证软件质量的重要手段,其主要方式是在设计测试用例的基础上检验软件的各个组成部分。测试分为,模块测试、组装测试、确认测试等。
⑦维护。软件维护是软件生存期中时间最长的阶段。已交付的软件投入正式使用后,便进入软件维护阶段,它可以持续几年甚至几十年。
在大部分文献中将生存期划分为5个阶段,即 要求定义、设计、编码、测试及维护。其中 要求定义阶段包括可行性研究和项目开发计划及需求分析,设计阶段包括概要设计和详细设计。
为了描述软件生存期的活动,提出了多种生存期模型,如瀑布模型、循坏模型、螺旋模型、喷泉模型、智能模型等。
3. 目前常见的软件过程模型如下:瀑布模型、增量模型、螺旋模型、喷泉模型、智能模型等。
1) 瀑布模型
优点:在软件工程的第一阶段,瀑布模型得到了广泛的应用,它简单易用,在消除非结构化软件,降低软件的复杂性,促进软件开发工程化方面起了很大的作用。
缺点:由于瀑布模型是一种理想的线性开发模式,它将一个充满回溯的软件开发过程硬性分割为几个阶段,无法解决软件需求不明确或者变动的问题。这些缺点对软件开发带来了严重影响,由于需求不明确,会导致开发的软件不符合用户的需求而夭折。
2) 增量模型(incremental model)
- 增量模型是一种非整体开发的模型。是一种进化式的开发过程。
- 根据增量的方式和形式的不同,分为:
- 基于瀑布模型的渐增模型
- 基于原型的快速原型模型
该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。
增量模型和瀑布模型之间的本质区别是什么?
增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早地产生工作软件。
一般的增量模型如下:
3)螺旋模型
对大型软件,需要多个原型描述系统的生存期,螺旋模型将瀑布模型与原型化模型结合起来,并加入了风险分析。
该模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:
①制定计划:确定目标、方案和限制条件;
②风险分析:评估方案、标识风险和解决风险;
③实施工程:开发确认产品;
④客户评估:计划下一周期工作。
一般的螺旋模型如下图:沿着螺旋线每转一圈,表示开发出一个更完善的新的软件版本。如果开发风险过大,开发机构和客户无法接受,项目有可能就此中止;多数情况下,会沿着螺旋线继续下去,自内向外逐步延伸,最终得到满意的软件产品。
4) 喷泉模型
喷泉模型以面向对象的软件开发方法为基础,以用户需求作为喷泉模型的源泉。如下图:
6. 喷泉模型是对象驱动的过程,对象是所有活动作用的实体,也是项目管理的基本内容。
7. 喷泉模型在实现时,由于活动不同,可分为系统实现和对象实现,这既反映了全系统的开发过程,也反映了对象族的开发和重用过程5)智能模型
智能模型也称为基于知识的软件开发模型,是知识工程与软件工程在开发模型上结合的产物,以瀑布模型与专家系统的综合应用为基础建立的模型,该模型通过应用系统的知识和规则帮组设计者认识一个特定的软件的需求和设计,这些专家系统已成为开发过程的伙伴,并指导开发过程。
从图中可以清楚地看到,智能模型与其他模型不同,它的维护并不在程序一级上进行,这样就把问题的复杂性大大降低了。
智能模型的主要优点有:
① 通过领域的专家系统,可使需求说明更加完整、准确和无二义性。
② 通过软件工程的专家系统,提供一个设计库支持,在开发过程中成为设计的助手。
③ 通过软件工程知识和特定应用领域的知识和规则的应用来提供开发的帮助。
但是,要建立合适于软件设计的专家系统,或建立一个既适合软件工程由适合应用领域的知识库都是非常困难的。目前,在软件开发中正在使用AI技术,并已取得局部进展;例如在CASE工具系统中使用专家系统,又如使用专家系统实现测试自动化。
第二章
1.需求分析的定义
在传统软件工程生命周期中,涉及软件需求的阶段称做需求分析。
2.需求工程的定义
需求工程是一个包括创新和维护系统需求文档所必须的一切活动,是对系统应该提供的服务和所受到的约束进行理解、分析、检验和建立文档的过程。
3. 需求的获取和分析
需求的获取和分析是需求工程的关键和核心步骤,直接影响到后期的开发工作和系统的成败。
·需求获取
在深入实际调查研究,充分理解用户需求的基础上,获取系统需求。获取过程为:
①了解领域知识,工程技术人员需要依靠领域专家,学习和理解相关的专业知识,才能正确抽取用户需求。
②需求收集,与项目相关人员进行沟通,在进一步了解专业领域的基础上,发现系统需求的过程。
·需求分析
需求分析的过程是对收集到的需求进行提炼、分析和审查的过程,最终确定需求,并确保所有项目相关人员对需求取得一致性认识。分析阶段的主要工作包括:
①确定系统范围。确定系统与其他外部实体或其他系统的边界和接口。
②分类排序。对所收集的需求进行重新组织、整理、分类和筛选,并对每类需求进行排序,确定哪些是最重要的需求。
③建立需求分析模型。这是分析阶段的核心工作。需求分析模型是对需求的主要描述手段,是根据不同的分析方法建立的各种视图,例如数据流图(DFD)、实体关系图(E-R)、用例图(Use Case)、类图、状态图、各种交互图等。还可建立辅助的说明,如数据词典。
④建立需求规格说明。软件需求规格说明(Software Requirement Specification,SRS)是将需求的结果按照不同开发方法规定的格式用图形和文档形式描述出来。需求规格说明在整个开发过程中具有很重要的作用,是用户和开发人员之间进行交流和理解系统的手段。用户通过需求规格说明检查是否符合和满足所提出的全部需求。开发者则通过需求规格文档,了解和理解所开发系统的内容,并以此作为软件设计和软件测试的依据。项目管理人员以它为依据,规划软件开发过程、计划,估算软件成本和控制需求的变更过程。
第三章
·软件体系结构设计
仓库模型(The repository model)
也称“容器模型 ”,是一种集中式的模型。在这种结构模型当中,应用系统用一个中央数据仓库来存储各个子系统共享的数据,其它的子系统可以直接访问这些共享数据。当然,每个子系统可能会有自己的数据库。为了共享数据,所有的子系统之间紧密耦合的,并且围绕中央数据仓库,如下图:
仓库模型的主要优点:
①数据由一个子系统产生,并且被另外一些子系统共享;
②共享数据能得到有效的管理,各子