第一篇:软件工程方法学的学习总结
软件工程方法学学习总结
• 软件工程方法学是研究软件设计方法论及工程开发技术的一门学科,主要研究的是:模型、方法、过程、工具、理念/原则、文档,甚至相应的开发语言。随着软件工程的发展,形成了不同的软件工程方法:结构化、面向对象、敏捷方法。在某个开发项目中,如何选择、应用哪种软件开发方法,用哪种方法更好,就成研究软件工程方法学的基本动机。
• 定义(2)把在软件生命周期全过程中使用的一整套技术的集合,称为软件工程方法学。软件工程方法学包括三个要素:方法、工具和过程。• 软件工程方法的分类
1.按不同的分类准则,会有不同的分类方法
a)注意,这一分类体系中并不是非此即彼,有可能有重复、冲突 2.按开发理念来分:
a)结构化方法;面向对象方法
3.按有无使用数学工具协助分析、设计、验证、实现来分
a)形式化方法:从规范出发的开发、函数式编程、净室方法 b)非形式化方法:目前大多数软件工程方法 4.按是否有大量文档工作和设计规范要遵守来分
5.重量级的方法:传统结构化方法、面向对象方法b)轻量级的方法:敏捷方法(极限编程,快速原型法…),目前,并没有一个很规范的分类体系。• 其相关知识体系: 结构化方法: 基本的结构化方法;复杂的结构化方法IDEF体系、Jackson方法 2 面向对象方法:基本的面向对象方法;RUP 3 极限编程方法(XP)4 快速原型软件开发方法 5 测试驱动的软件开发方法 6 形式化方法: 7 基于规范的开发方法/函数式编程开发方法 8 净室(clean room)/零缺陷软件开发方法面向方面编程的软件开发(AOP)10 产生式编程、开发(GP)11 SOA: 面向服务的体系结构 MDA/MDSD: 模型驱动体系结构/软件开发 • 结构化软件分析设计方法的概述
1.它是第一个成型的、完整的软件工程方法
2.它是随着函数和结构化语言(不要goto语句)的出现来诞生的 3.它第一次引入了模型图的使用(程序流程图)4.基本流程
a)项目调研
b)需求调查与分析 c)系统设计 d)系统实现 e)系统测试 f)系统维护
5.根据这些基本步骤的不同排列,可以有瀑布型、迭代型、螺旋型等等不同软件开发模型 • 对结构化方法和面向对象方法的对比和讨论
结构化方法的特点
1.结构化思想的开发本质是:基于分解 2.简单
3.把一个复杂过程用多个单个小过程来实现
4.用数据流图,可以完成整个分解过程(其它的内容都可以从数据流图派生出来)5.结果的唯一性
6.同一个问题,不同的人分解出来的结果基本是一样的。
7.也即,用结构化方法,基本上是有标准答案的(差主要在于细不细)适用范围:(1)较适合初学者学习(2)一个连续的处理过程 面向对象的特点 1.基于映射:
a)把现实世界的工作过程或系统,用代码系统中的相对应的元素模拟出来,就完成了软件的设计和开发 i.事物→对象
ii.事物的特征→对象的属性 iii.事物的行为→对象的方法
iv.事物之间的信息交换与协同→类方法调用
… 2.复杂:
a)由于现实事物的复杂性,为了要更好地完成上面的模拟/映射,需要从多个角度描述系统或过程
b)静态关系:多态、继承、聚合、状态转换 c)动态关系:用例、活动、序列、协作 d)这仅仅是UML1.5之前的
e)UML2.0又增加了:时序、结构 3.结果的唯一性
a)同一个问题,有经验的人和没有经验的人,进行面向对象设计时,结果可能会判别很大
适用范围:(1)设计复杂系统;(2)设计高质量系统(3)设计与现实世界对应程度比较大的系统
未来的发展趋势
面向对象仍将是主流,但结构化方法并不会,相反在某些领域还会有进一步应用,如:(1)网页/网站;(2)工作流系统;(3)SOA • 深入全面的面向对象分析设计方法
1.首先要搞清楚:软件工程的分析和设计阶段是要干什么的?需求->方案
a)了解用户的需求:需求调查
b)把需求描述清楚、规范:用模型图来描述需求
c)在需求分析的过程中,从规范的需求描述开始,描述及定义以下内容,完成需求分析(1)业务中要处理的数据(2)业务数据的处理过程 d)从这个需求分析出发,完成概要设计和详细设计 i.概要设计是什么?完成软件组成单元的划分
ii.详细设计是什么?单元接口设计(输入输出设计)、业务处理流程设计、数据库设计、界面设计
2.需求调查
结果: 系统化、条目化的软件需求文档 3.需求定义
a)用标准化的软件设计模型来描述已经获得的需求,结果:用例图 4.需求分析
a)就是要从需求定义(用例图)中提取出这些内容,进行软件概要设计和详细设计
(1)处理过程设计:模块内部流程设计(2)数据库设计(3)界面设计 5.概要设计
构造软件的大模块(在OO方法中,模块就是“类”)6.详细设计
(1)处理过程设计:模块内部流程设计(2)数据库设计(3)界面设计
• 面向对象需求分析要完成的任务
1.描述出软件的大致结构和功能分工
以便划分类,确实类的属性和方法;最终结果用类图来表达。2.描述出类的相互调用关系
3.描述出每项系统工作的工作过程
以便设计每个模块的输入输出;最终结果用交互图和活动图来表达。4.描述类的内部运作规律
最终结果用状态图来表达
5.在整个OO分析设计中,最重要的是类图 • 面向对象分析设计方法
– 从用例图出发,进行需求分析,结构化方法是从数据流图出发,而OO是从用例图出发(请对比一下)
– 第一,就是细化用例图
1.用例是描述外部用户使用本软件系统的应用场景。就是一个单个的使用功能
2.一个用例可能进一步分解成更小的应用场景的序列来实现
3.用有层次的用例图,来描述需求
用例图
活动图
4.其次用序列图(也叫顺序图)(见下页例)b)序列图是对活动图的进一步深化 c)将活动图中初步获得的对象列出
d)对活动图中,描述每一个工作步骤中,需要哪个对象向哪个对象发出消息 e)添加消息中的数据
f)将序列图生成协作图, 协作图不用自己去画(见后页)以上这些,都是需求描述,通过这些描述理解并表达需求 我们是以活动图为基础来绘制顺序图的
协作图
我们用用例图、活动图、顺序图、协作图描述了需求中的业务处理过程,从这个需求描述,如何获得我们最需要的类图呢?
– 获得类图,可以用常识或经验来设计,(1通过经验和常识来确定类、添加类的属性和方 法(2这其实也是常用的、高效快速的方法,我们不是说这种不对。
– 但我们这里介绍的是规范、标准的做法。因为,但对复杂的系统、不熟悉的系统来说,未必全部能从常识来。
第二篇:软件工程学习总结
软件工程学习总结
通过一个学期系统的学习软件工程这门课,结合与小组成员一起开发设备管理系统的经验,让我对软件的开发有了更深的了解,学习到每一个软件的开发都不仅仅是写代码,还有更加复杂的系统性的开发流程。
要开发一个软件,就拿设备管理系统来说,我们不能一上手就开始写代码,这样会浪费大量的人力物力财力还得不到理想的结果,首先我们应该先做好市场及需求方面的调查,了解用户需求有助于我们开发更加实用高效的软件,做好市场调研可以让我们对成本、利润、市场情况等有深层了解,让我们做出最优决策。
调查结束后,我们要写出详细的报告,包括项目开发计划书、软件需求规格说明书等,有了这些调查结果,我们才可以系统的,条理的来编写我们的软件。从前我们写代码都非常的盲目,杂乱无章,想到哪写到哪,浪费了大量的时间,写的代码结构也很松散,错误率高。学习软件工程后,我们学习了多种软件开发模型,学会了模块化的开发方法,小组成员每人完成不同的模块,最后综合起来,这样能够节省大量的时间,缩短开发时间,使代码结构更加紧凑,易于管理维护。如果说代码是一种工具的话,那么软件工程就是使用工具的经验指导,他能指导我们更好的使用这个工具,发挥它最大的潜能,帮助我们完成项目,不管使用什么程序语言,软件工程教给我们的开发方法都无条件适用,我们需要认真学习理解这门课程,它将伴随我们在程序开发的路上走下去。
第三篇:软件工程学习总结和体会2015
西安交通大学
2015级研究生课程专题作业
软 件
工 程 心 得专 业: 班 级: 学 号: 姓 名: 电 话:
二○一五年十月
体 会
一、软件生命周期各阶段任务目的和主要方法
在分阶段总结之前,首先要明确以下三个问题:
1、什么是软件生存周期?
软件生存周期是指从软件定义、开发、使用、维护到淘汰的全过程。主要包括:
(1)问题定义;(2)可行性研究;(3)需求分析;(4)概要设计;(5)详细设计;(6)编码;(7)测试;
(8)软件维护。
2、软件生存周期为什么划分成阶段?
(1)任何一个阶段的具体任务不仅独立,而且简单,便于不同人员分工协作,从而降低整个软件开发工作的困难程度。
(2)可以降低每个阶段任务的复杂程度,简化不同阶段的联系,有利于工程的组织管理,也便于采用良好的技术方法。
(3)使软件开发的全过程以一种有条不紊的方式进行,保证软件的质量,特别是提高了软件的可维护性。
3、应该怎样来划分阶段?
(1)每一个阶段的任务尽可能独立;(2)同一阶段内的任务性质尽可能相同;
(3)每一个阶段任务的开始和结束有严格的标准。
下面分别对各阶段进行讨论:
1、问题定义
目的是将用户提出的要求具体化、定量化,任务是确定研制系统的范围,明确研制的边界。
方法步骤:
(1)通过调查研究,了解系统要求;
(2)需求方与开发方讨论确定系统的功能、性能、可靠性、安全保密性等方面的要求,以及费用、进度等方面的要求。
2、可行性研究
可行性研究说明该软件开发项目的实现在技术上、经济上和社会条件上的可行性,评述为合理地达到开发目的可能选择的各种方案,目标是用最小的代价在尽可能短的时间内确定问题是否能够解决。
可行性研究的方法是首先需要进一步分析和澄清问题定义;然后分析员导出系统的逻辑模型;最后对未来的行动方针提出建议。
在导出逻辑模型的过程中,具体要根据以下四个方面分析可行性:
(1)经济可行性:进行成本效益分析,评估项目的开发成本,估算开发成本是否会超过项目预期的全部利润.分析系统开发对其它产品或利润的影响。
(2)技术可行性:根据客户提出的系统功能,性能及实现系统的各项约束条件,从技术的角度研究实现系统的可行性。(3)法律可行性:研究在系统开发过程中可能涉及的各种合同,侵权,责任以及各种于法律相抵触的问题。
(4)开发方案的选择性:提出并评价实现系统的各种看法方案.从中选出一种用于软件项目开发。
3、需求分析
需求分析是为了有效解决用户的需要而进行的一项工程活动,要考虑的问题是功能需求、数据需求、性能需求和接口需求,开发者承担分析任务,核心是用户。
软件项目的失败大半源于需求分析没有做好,软件开发人员首先应该明确用户的意图和要求,正确获取用户的需求,然后形成一个软件需求规格说明,它是软件开发的重要基础。
需求分析的方法:
(1)需求获取:获取客户需求,客户泛指某个人或机构部门等,一般方法是调查,包括访谈座谈、问卷、跟班和收集资料,需求规约可表达用户的软件价值。
(2)需求分析与规格说明:建立需求模型,它是用户需求的图解,一些常用的模型有:业务树图、用例图、活动图。分别用于结构化需求建模、系统业务举例和反映系统工作流程。
(3)需求验证:要验证的主要内容有:有效性验证、一致性验证、完整性验证、现实性验证和可检验性验证。
需求建模的方法:
(1)关联模型
(2)面向对象模型(3)原型方法
4、系统设计
此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等,一般分为概要设计和详细设计,好的软件设计将为软件程序编写打下良好的基础。
概要设计是对需求规格说明书中提供的软件系统逻辑模型进行进一步的分解,从而建立软件系统的总体结构和各个子系统间及各个模块间的关系,定义各子系统接口界面和各模块的功能描述,并根据设计结果产生概 要设计文档。
概要设计在早期有模块化方法、功能分解方法;在60年代后期提出了面向数据流和面向数据结构的设计方法;近年来又提出面向对象的设计方法等。
详细设计过程根据概要设计形成的结果对各个模块的内部实现进行规划设计,并根据设计结果产生详细设计文档。
详细设计主要方法是通过采用结构化和面向对象的方法从视图、控制、模型三层模型上细化概要设计的各个模块,并完成伪代码为编码阶段做准备。
5、编码和测试
编码是将软件设计的结果转换成计算机可执行的程序代码。主要方法是依据详细设计文档实现设计中的算法、功能、接口、数据结构,采用结构化和面向对象化的方法编写代码。
编码过程中要制定统一,符合标准的编写规范,以保证程序的可读性,易维护性,提高程序的运行效率。
软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、组装测试以及系统测试三个阶段进行。
测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随 意性。
6、软件维护
软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。
软件的维护包括纠错性维护和改进性维护两个方面。
二、课程主要收获
《软件工程》课程强调概念和知识的理解和掌握,侧重软件项目的分析、设计、实现和维护的基本技能。比较注意“点”和“面”的结合,是一门理论性和实践性都较强的学科。作为一名已经在IT领域工作十年之后又重返校园的大龄学生,虽然已经不是第一次学习这门课程了,去年也刚在单位取得了信息系统项目管理高级工程师资格,从另一个侧面对软件开发过程有了更深层次的理解。不过温故而知新,这次仍然选修这门课,我还是得到了一些新的启示。最大的收获就是在我看来,软件工程与其说是一门课程,不如说是一门思想,是一个如何去分析和处理问题的过程,应该说其范畴已经远远不止局限于该门课程,它已经成为了一个综合的能够解决问题的思想集合。
此外,通过对软件开发过程的重学习,并结合之前在软件开发管理工作中的经验,我对自己在软件开发主要阶段管理工作中的不足有了更进一步的认识,总结了相应的管理要点,具体阐述如下:
1、概要设计
主要任务:系统应该怎样做,或概括地说,系统应该如何实现。本阶段特点:将用户的具体要求转为抽象的计算机软件设计。管理要点:
通过分析对比,从多种可能的实现方案和软件结构中选出最佳方案及最合理的,即: 设想供选择的方案→推荐最佳方案→选取合理的方案功能分解→ 软件设计结构 → 数据库设计 3 确定测试要求并确定测试计划
作为项目管理者必须从概要设计开始就应该从全局角度开始把握整个系统的进展,并必须从此阶段开始,时刻从全局观的问题来发现问题,解决问题。
2、详细设计
主要任务:系统应该怎样具体地做,或概括地说,系统应该如何具体地去实现所有的要求。
本阶段特点:将抽象的计算机软件设计转为形象的,具体的,面向用户的计算机界面设计。
管理要点:
本阶段尚未涉及具体编写程序,而是要设计出程序的“蓝图”,所以详细设计的结果基本上决定了最终的程序代码的质量。逻辑是否正确性能是否满足要求是否容易阅读和理解 作为项目管理者在详细设计阶段,应始终不忘从一名用户的使用角度出发,审视每一个界面的详细设计,以保证设计出来的界面以及程序能够满足一般用户希望将来的系统能够通俗易懂,简单实用的要求。
3、编码
主要任务:用某种程序设计语言书写计算机能够识别的程序。
本阶段特点:将详细设计书的内容“翻译”成计算机语言,直接关系到整个项目的质量。
管理要点:
本阶段的编码是设计的自然结果,因此,程序的质量主要取决于软件设计的质量。但是,程序设计语言的特性和编码途径也对程序的以下特性产生深远的影响: 程序的可靠性 2 程序的可读性 3 程序的可测试性 4 程序的可维护性
作为项目管理者在编码阶段,必须从把握进度与质量这两个基本方面来有效地实施对项目的管理。首先应该根据项目进度计划来合理地安排每一名作业成员的作业日程,并且随时监督每一作业的进展情况,还需要针对项目的最新变更及时对计划进行调整,以保证项目的按时完成。同时,在项目的进展过程中还需要通过小组讨论,检查评审等形式洞察每项作业的质量,以保证项目的保质保量完成。可以说,本阶段是一名项目管理者在项目开发过程中极为忙碌也异常重要的阶段。
4、测试
主要任务:通过单元测试和综合测试来保证软件工程的高质量。
本阶段特点:尽可能早地发现并纠正差错,往往占到软件开发总工作量的40%以上,是保证软件质量的关键。
管理要点:
软件测试在软件生命周期中横跨两个阶段。通常在编写出每个模块之后就对其作必要的测试(称之为单元测试),模块的编写者和测试者是同一人,编码和单元测试属于软件生命周期的同一个阶段。在此阶段结束之后,对软件系统还应该进行各种综合测试,这是软件生命周期的另一个独立阶段,通常由专门的测试人员来承担这项工作。
作为项目管理者在编码阶段,必须高度重视软件测试工作,甚至可以说应该把测试看作与编写程序同等重要的任务来对待。在要求每一名开发人员完成自己分内的单元测试,并且监督测试人员认真进行各项综合测试的同时,应该把自己完全当成一名本软件工程的用户,从用户的角度以一种高度负责,甚至近乎苛刻的严格态度来对软件进行彻底的测试。在本阶段通过严把质量关来确保软件工程的质量。
所以说,尤其在软件进入具体开发阶段后,能否遵循要点进行管理是很重要的。
总之,实际工作当中软件项目为什么会失败?为什么交付日期会一拖再拖?我觉得项目失败只有一个原因:就是项目经理不合格。除非这个项目经理在项目开始阶段就已经提出来了这个项目会失败,或者是完全属于项目之外不可抗拒的原因导致失败。也许还会有一些我的同行跳出来说不服,那么请继续:
难道是新增需求的原因导致失败?客户会让你新增100个需求而要你二天交货吗?必然是分析设计阶段没有充分考虑好可扩展性和新增需求导致现在不可控制而失败的!
难道是程序员人力不足导致?人都没有到位,怎么会失败,多少人做多少人的事,多少人做多少人的计划,不会有失败。
难道是程序员技能不够?项目经理是如何面试的?怎么在项目失败了才发现是程序员技能不够?有问题早提出来嘛。
难道测试人员没有做好?少来了,测试人员只是加了一道保障证明。程序很多流程都通过不了,程序还属于开发调试阶段,与测试人员有什么关系?
我曾经在单位参加一些项目,发现有这样一个概念很多项目经理都没有搞清楚:什么叫开发阶段?我认为开发阶段最多只能包括单元测试这一部分。综合测试绝对不能属于开发阶段了,也就是说不能到了最后交付阶段还有程序流程走不通,程序随便正常操作都会失败。程序随便正常操作都出现好多bug属于开发还没有完成,绝对还没有过单元测试阶段,离综合测试和验收阶段还早着呢。说白了,还属于代码审查阶段。
不懂程序设计的项目经理,往往不注重code开发人员,其实这是一个严重的错误。软件的质量来源于什么?由谁来保证?有的项目经理说是由测试人员来保证,就算测试人员的测试用例写得很详细,把需求中的每一个功能点都测试到了,那最后就没有问题了吗?当然不是,很多逻辑上的东西要程序员来保证不出问题的,而测试人员只是起一个验证的作用,问题不应该由测试人员来发现,而应该由开发人员来发现。也就是说,我们尽量不要让测试人员来发现问题。如果第一次测试有至少25%以上的用例通不过,那说明质量控制出了问题。这样的版本根本就不应该拿出来进行测试。由此可见,软件的质量是由程序员来保证的,而不是测试人员。
总的说来,一个项目的成败与否,与项目的各个阶段皆有关系:需求都不清楚,开发起来肯定是南辕北辙;分析设计不够好,会让程序员难以维护,随着新增需求的增多,会导致整个系统混乱不可控制;编码不好,整个系统不稳定是必然的,Bug也是抓不尽的;测试不做好,系统是没有保证的,少了哪个环节都不行。
所以做软件项目开发过程管理工作,我认为重点要放在项目计划、进度控制、质量控制、风险预测这四个方面。不要说项目的失败是因为新需求引起的,一个没有新增需求和风险的项目是不存在的,承认这一点之后,我们就不会有很多怨言了。
以下针对这四个方面进行详述:
项目计划:没有项目计划,那失败还有什么话好说?大家都知道凡事预则立,不预则废。项目计划一定要包括这几方面的内容:各阶段里程碑时间点,各个里程碑的输出结果,风险预测,意外应对。计划时间一定要提前于交货时间,并注意风险意外是否留下足够的应对时间和处理方案。
进度监控:对每个阶段把握好,每个阶段要完成的任务一定要完成,如果完不成,是什么原因导致的?我们的应对策略是什么?我们要信任别人,但是不要忘记锁门。同样的,别人说完成了,你不能就认为别人完成了,要看到结果才能证明完成了。有的项目经理说,我也进度监控啦,他说完成了就完成了,谁想到没有完成?到底是程序员不诚实还是项目没有管理好?你没有锁好门,能怨别人偷你东西吗?还有一种情况就是不懂如何锁门,根本就不知道这一阶段的输出结果是什么?当然进度监控就是一句空话了。
质量监控:也应该是分阶段进行的,每一个阶段的质量监控内容有所不同。
需求分析阶段的质量监控就是完整而又正确的理解用户需求,需求是否清楚可懂,写用例的测试人员是否明白需求?
分析设计阶段的质量监控就是设计是否完全满足需求?这个设计方案是否满足以后新功能的扩展?以及是否有考虑到新功能的意外和设备环境,运行平台的变化?
编码阶段的质量监控就是变量命名是否规范?代码是否可读?是否有详细的注释?是否有重复代码?要知道重复代码是必然会造成系统不稳定,bug成群的。可变部分的代码和不可变部分的代码是否分离。要知道上面讲的每一部分如果没有做好,都会导致后期的产品出现大量问题。代码阶段还有一个重要的工作就是做code review代码公开评审,你自己发现不了的问题别人也许就看得见。
单元测试阶段的质量监控任务就是单元测试代码是否测试通过?代码覆盖是否完全?单元测试报告提交情况如何?单元测试用例有没有做好? 综合测试阶段质量监控任务当然就是看用例是否完全?是否全部真正执行?测试报告有没有写好?
回归测试当然得看以前测试的Bug是否还在,如果还在,当然是无条件打回去重新开发。
测试阶段最主要的监控就是看用例是否真正执行,是否有安全性测试?破坏性测试?异常测试,压力测试?
以上的每个阶段最好完成了才进行下一阶段,否则会造成混乱出现问题的,造成想并行进行节约时间却反而浪费了时间。
以上就是我重学《软件工程》并结合实际工作经验所得到的启示,不妥之处请刘老师批评指正!
第四篇:软件工程总结
软件工程课程总结
摘要:
计算机是20世纪最重大的科学技巧成就之一,使当代社会的经济、军事、科研、教育、服务等方面在概念和技巧上发生了性的变化,对人类社会的进步已经并还将产生极为深刻的影响。目前,计算机是世界各发达国度剧烈竞争的科学技巧领域之一。
电子计算机早期功效主要是计算,后来已远远超越单纯计算的功效,还可模拟、思维、进行自适应反馈处理等等,把它叫做“电脑”更为合实际。由于电子计算机功效的飞跃性发展,应用于生产和生活的各个方面,直接和显著地提高了生产、工作和生活的效率、节奏和水平,在软科学研究和应用中它也起着关键作用,因此它已被公认是现代技巧的神经中枢,是未来信息社会的心脏和录魂。计算机学科分为四个领域,分别是计算机科学,计算机工程,软件工程和信息系统。
正文:
软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。包括项目管理,分析,设计,程序的编写,测试和质量控制。它涉及到程序设计语言、数据库、软件开发工具、系统开发平台、标准、设计模式等方面。
学了《软件工程》这门课程和一些有关资料后,感觉一些东西都曾经接触过,但在实际工作中有些理论要完全遵循可能还有些障碍,软件工程只是提供了理论上的一些结论,但对项目的具体可操作性的规范的制定方面却做的很少,《软件工程》发展了几十年,光是开发模型就达到了10多种,对不同的项目采用合适的开发模式,有些项目在不同的开发阶段可能还要转换开发模式,把它们灵活的应用到实际中还是很困难的。
软件技术是信息技术产业的核心之一,软件技术的发展是与信息技术产业的发展互相促进的。当今世界,信息技术正处于新一轮重大技术突破的前夜。预计今后 20~30 年是信息科学技术的变革突破期,可能导致 21 世纪下半叶一场新的信息技术革命。近年来,从 IT 界到一些国家首脑,都高度关注以物联网为标志的新一轮信息技术的发展态势,认为这是继 20 世纪 80 年代 PC 机、90 年代互联网、移动通信网之后,将引发 IT 业突破性发展的第三次 IT 产业化浪潮。每一次重大的技术变革都会引起企业间、产业间甚至国家间竞争格局的重大变化,也促进了软件技术与软件产业的重大变革与发展。
近年来,信息技术、软件技术、软件系统与软件产业的发展备受关注,已有不少论述、分析与判断。近10 年内网络技术经历宽带化、移动化和三网融合将走向基于 Ipv6 的下一代互联网,2010 年 1 月,国家 863 计划信息技术领域办公室和国家 863 计划信息技术领域专家组,在上海举办“信息-物理融合系统 CPS发展战略论坛”,提出“信息-物理融合系统 CPS 是一个综合计算、网络和物理环境的多维复杂系统,是信息和物理世界的深度的融合交互,可实现大型工程系统的实时感知、动态控制和信息服务,使系统更加可靠、高效与实时协同,使得人类物理现实和虚拟逻辑逐步融合,具有重要而广泛的应用前景。业界关于软件工程的代表性观点创立与使用健全的工程原则,以便经济地获得可靠且高效率的软件。应用系统化,遵从原则,可被计量的方法来发展、操作及维护软件;也就是把工程应用到软件上。与开发、管理及更新软件产品有关的理论、方法及工具。一种知识或学科,目标是生产品质良好、准时交货、符合预算,满足用户所需的软件。实际应用科学知识在设计、建构电脑程序,与相伴而来所产生的文件,以及后续的操作和维护上。
6使用与系统化生产和维护软件产品有关之技术与管理的知识,使软件开发与修改可在有限的时间与费用下进行。
7建造由工程师团队所开发之大型软件系统有关的知识学科。对软件分析、设计、实施及维护的一种系统化方法。系统化地应用工具和技术于开发以计算机为主的应用。
10软件工程是关于设计和开发优质软件。
《软件工程》是一门综合性和实践性很强的核心课程,它属于是一门交叉学科,包含有:软件开发技术(软件开发方法学、软件开发过程、软件工具和软件工程环境)、软件工程管理(软件管理学、软件经济学、软件心理学)。主要内容包括软件工程概述、可行性分析、需求分析、概要设计、详细设计、面向对象分析与设计、编码、软件测试、项目计划与管理。
本课程是面向准备从事软件开发的毕业生而开设的一门专业课程。针对计算机教学中软件工程这一薄弱环结,结合目前软件开发商对人才的要求,对计算机专业的毕业生进行软件工程强化培训,目的是使毕业生能够了解和掌握软件工程的基本理论和方法,并在实际软件开发中运用这些方法。
我理解,软件工程是按照工程学的管理方式,有组织、有计划的,在一定的质量基础、时间限度和成本范围内,实现功能明确的软件系统。而且,软件工程在企业范围内运行,一定需要企业资源的支持,要与企业的经营、决策、管理体系联系在一起,才能够被踏踏实实的落实下来。
软件工程项目是一个需要一步一步的计算,分析思考而来的,需要不断思考,研究不断进步,软件业作为一个服务业,要想得到发展,首先必须形成一个对软件服务有迫切需要的市场。其次,这个市场中的消费者必须具备足够的购买力。软件的消费群体简单一点,可以分为个体消费和企业消费。中国的企业群体,数量庞大,但是质量不高。上规模的企业极少。国内目前能够形成比较大规模的独立市场的,肯定是小规模的软件系统。
随着信息化时代的到来其地位越来越受到人们的重视,软件工程从一个学科,或是某一个研究方向来说,人员仅仅是过程,方法的执行者,所以人员素质往往被忽略,软件工程是一门实践性很强的学科,所以在实际的软件研究过程中,人员的素质占有很重要的地位。要有出色的软件问世,研发人员的素质至关重要!
作为软件工程的学习者应该不断创新,不断尝试、实践,不断研究和学习,中国的软件工程技术依旧滞后于国外一些软件工程技术,作为新一代的学习者应该担当起振兴起中国软件事业,使中国科技得到高速发展!
现在已经是信息化时代,信息化潮流不断涌现,想要掌握主动权就是掌握信息化的发展方向,这就需要我们不断学习,时间,研究,学习国外的先进技术,转变自己的技术,然后融合,创新。
软件技术不是一成不变的,是随着社会的进步的不断进步,不需要不断的创新,不断的改善的,需要我们不断的学习,不断的研究,不断进步。
第五篇:软件工程总结
1.Software is a product and can be manufactured using the same technologies used for other engineering artifacts Answer: b 2.WebApps are a mixture of print publishing and software development, making their development outside the realm of software engineering practice.Answer: b 3.Software engineering umbrella activities are only applied during the initial phases of software development projects.Answer: b 4.Planning ahead for software reuse reduces the cost and increases the value of the systems into which they are incorporated.Answer: a 5.The essence of software engineering practice might be described as understand the problem, plan a solution, carry out the plan, and examine the result for accuracy.Answer: a 6.In agile process models the only deliverable work product is the working program.Answer: b 7.A most software development projects are initiated to try to meet some business need.Answer: a 8.In general software only succeeds if its behavior is consistent with the objectives of its designers.Answer: b 9.Software processes can be constructed out of pre-existing software patterns to best meet the needs of a software project.Answer: a 10.Process technology tools allow software organizations to compress schedules by skipping unimportant activities.Answer: b 11.It is generally accepted that one cannot have weak software processes and create high quality end products.Answer: a 1.Requirements engineering is a generic process that does not vary from one software project to another.Answer: a 2.A stakeholder is anyone who will purchase the completed software system under development.Answer: b 3.It is relatively common for different customers to propose conflicting requirements, each arguing that his or her version is the right one.Answer: a 4.Developers and customers create use-cases to help the software team understand how different classes of end-users will use functions.Answer: a 5.Use-case actors are always people, never system devices.Answer: b 6.Analysis patterns facilitate the transformation of the analysis model into a design model by suggesting reliable solutions to common problems.Answer: a 7.In win-win negotiation, the customer’s needs are met even though the developer’s need may not be.Answer: b 8.In requirements validation the requirements model is reviewed to ensure its technical feasibility.Answer: b
1.Object-oriented domain analysis is concerned with the identification and specification of reusable capabilities within an application domain.Answer: a 2.In structured analysis models focus on the structure of the classes defined for a system along with their interactions.Answer: b 3.Creation and refinement of use cases if an important part of scenario-based modeling.Answer: a 4.It is important to consider alternative actor interactions when creating a preliminary use case.Answer: b 5.Brainstorming is one technique that may be used to derive a complete set of use case exceptions.Answer: a 6.In many cases there is no need to create a graphical representation of a usage scenario.Answer: a 7.One or more attributes of a data object must be defined as a key to allow the location of an instance of the data object.Answer: a 8.Attributes are chosen for an object by examining the problem statement and identifying the entities that appear to be related.Answer: b 9.An analysis package involves the categorization of analysis model elements into useful groupings.Answer: a 10.The data flow diagram must be augmented by min-spec that can serve as a guide the design of the software component that will implement the process.Answer: a 11.The UML sequence diagram show the order in which system events are processed.Answer: b 12.Analysis patterns are discovered, they are not explicitly created.Answer: a 13.It is not possible to justify the time required for WebApp requirements analysis.Answer: b 14.UML activity diagrams can be used to represent the user observable functionality delivered by the WebApp as well as the operations contained in each analysis class.Answer: a 15.Configuration analysis focuses on the architecture of the user’s web browsing environment.Answer: b 16.Content objects are extracted from use cases by examining the scenario description for direct or indirect content references.Answer: a 1.With thorough testing it is possible to remove all defects from a program prior to delivery to the customer.Answer: b 2.Program flow graphs are identical to program flowcharts.Answer: b 3.The cyclomatic complexity of a program can be computed directly from a PDL representation of an algorithm without drawing a program flow graph.Answer: a 4.Graph-based testing methods can only be used for object-oriented systems Answer: b 5.Equivalence testing divides the input domain into classes of data from which test cases can be derived to reduce the total number of test cases that must be developed.Answer: a 6.Boundary value analysis can only be used to do white-box testing.Answer: b 7.Orthogonal array testing enables the test designer to maximize the coverage of the test cases devised for relatively small input domains.Answer: a 8.Client/server architectures cannot be properly tested because network load is highly variable.Answer: b 1.The best representation of system architecture is an operational software prototype.Answer: b 2.The architectural representations can be an enabler for communication among project stakeholders.Answer: a 3.An architectural description is often documented using an architecture template.Answer: b 4.An architectural genre will often dictate the architectural approach that may used for the structure to be built.Answer: a 5.Before an architectural pattern can be chosen for use in a specific system it must have a code implementation to facilitate its reuse.Answer: b 6.Once selected, archetypes always need to be refined further as architectural design proceeds.Answer: a 7.Quantitative methods for assessing the quality of proposed architectural designs are readily available.Answer: b
Chapter 10 Self-Check Quiz
1.In the most general sense a component is a modular building block for computer software.a.True b.False
Answer: a(Section 10.1)
2.In the context of object-oriented software engineering a component contains
a.attributes and operations b.instances of each class c.roles for each actor(device or user)d.set of collaborating classes
Answer: d(Section 10.1.1)
3.In traditional software engineering modules must serve in which of the following roles?
a.Control component b.Infrastructure component c.Problem domain component d.All of the above
Answer: d(Section 10.1.2)
4.Software engineers always need to cerate components from scratch in order to meet customer expectations fully.a.True b.False
Answer: b(Section 10.1.3)
5.Which of the following is not one of the four principles used to guide component-level design?
a.Dependency Inversion Principle b.Interface Segregation Principle c.Open-Closed Principle d.Parsimonious Complexity Principle
Answer: d(Section 10.2.1)
6.The use of stereotypes can help identify the nature of components at the detailed design level.a.True b.False
Answer: a(Section 10.2.2)
7.Classes and components that exhibit functional, layer, or communicational cohesion are relatively easy to implement, test, and maintain.a.True b.False
Answer: a(Section 10.2.3)
8.Software coupling is a sign of poor architectural design and can always be avoided in every system.a.True b.False
Answer: b(Section 10.2.4)
9.WebApp content design at the component level focuses on content objects and the manner in which they interact.a.True b.False
Answer: b(Section 10.4.1)
10.A WebApp functional architecture describes the key functional components and how they interact with each other.a.True b.False
Answer: a(Section 10.4.2)
11.Which of these is a graphical notation for depicting procedural detail?
a.box diagram b.decision table c.ER diagram d.flowchart
Answer: d(Section 10.5.1)
12.A decision table should be used
a.to document all conditional statements b.to guide the development of the project management plan c.only when building an expert system d.when a complex set of conditions and actions appears in a component
Answer: d(Section 10.5.2)
13.A program design language(PDL)is often a
a.combination of programming constructs and narrative text b.legitimate programming language in its own right c.machine readable software development language d.useful way to represent software architecture
Answer: a(Section 10.5.3)
14.In component-based software engineering, the development team examines the requirements to see which are amenable to composition, rather than construction, before beginning detailed design tasks.a.True b.False
Answer: a(Section 10.6)
15.Which of the following is not one of the major activities of domain engineering?
a.analysis b.construction c.dissemination d.validation
Answer: d(Section 10.6.1)
16.Which of the following factors would not be considered during component qualification?
a.application programming interface(API)b.development and integration tools required c.exception handling d.testing equipment required
Answer: d(Section 10.6.2)
17.Which is the following is a technique used for component wrapping?
a.black-box wrapping b.clear-box wrapping c.gray-box wrapping d.white-box wrapping
Answer: b(Section 10.6.2)
18.Which of the following is not one of the issues that form a basis for design for reuse?
a.object-oriented programming b.program templates c.standard data d.standard interface protocols
Answer: a(Section 10.6.3)
19.In a reuse environment, library queries are often characterized using the ________ element of the 3C Model.a.concept b.content c.context d.all of the above
Answer: c(Section 10.6.4)
1.The importance of software design can be summarized in a single word a.b.c.d.Answer: d(Section 8.1)
2.Which of the following is not a characteristic common to all design methods?
a.configuration management b.functional component representation c.quality assessment guidelines d.refinement heuristics
Answer: a(Section 8.2.2)
3.Which of the following can be used to represent the architectural design of a piece of software?
a.Dynamic models b.Functional models c.Structural models d.All of the above
Answer: d(Section 8.3.2)
4.Design patterns are not applicable to the design of object-oriented software?
a.True b.False
Answer: b(Section 8.3.3)
5.Since modularity is an important design goal it is not possible to have too many modules in a proposed design.a.True b.False
Answer: b(Section 8.3.5)
6.Information hiding makes program maintenance easier by hiding data and procedure from unaffected parts of the program.accuracy complexity efficiency quality
a.True b.False
Answer: a(Section 8.3.6)
7.Cohesion is a qualitative indication of the degree to which a module
a.can be written more compactly.b.focuses on just one thing.c.is able to complete its function in a timely manner.d.is connected to other modules and the outside world.Answer: b(Section 8.3.7)
8.Coupling is a qualitative indication of the degree to which a module
a.can be written more compactly.b.focuses on just one thing.c.is able to complete its function in a timely manner.d.is connected to other modules and the outside world.Answer: d(Section 8.3.7)
9.When using structured design methodologies the process of stepwise refinement is unnecessary.a.True b.False
Answer: b(Section 8.3.8)
10.Software designs are refactored to allow the creation of software that is easier to integrate, easier to test, and easier to maintain.a.True b.False
Answer: a(Section 8.3.10)
11.Which of the following is not one of the five design class types
a.Business domain classes b.Entity classes c.Process classes d.User interface classes
Answer: b(Section 8.3.13)
12.Which design model elements are used to depict a model of information represented from the user’s view?
a.Architectural design elements b.Component-level design elements c.Data design elements d.Interface design elements
Answer: c(Section 8.4.1)
13.Which design is equivalent to the floor plan of a house?
a.Architectural design b.Component-level design c.Data design d.Interface design
Answer: a(Section 8.4.2)
14.Which design model is equivalent to the detailed drawings of the access points and external utilities for a house?
a.Architectural design b.Component-level design c.Data design d.Interface design
Answer: d(Section 8.4.3)
15.Which design model is equivalent to a set of detailed drawings for each room in a house?
a.Architectural design b.Component-level design c.Data design d.Interface design
Answer: b(Section 8.4.4)
16.The deployment design elements specify the build order for the software components.a.True b.False
Answer: b(Section 8.4.5)