一、软件的定义?
程序是计算机为完成特定任务而执行的指令的有序集合。
面向过程的程序=算法+数据结构
面向对象的程序=对象+消息
面向构件的程序=构件+构架
通常软件可以定义为
软件=知识+程序+数据+文档
二、软件特点与硬件不同,具有哪些特点?
1.抽象性。软件生产没有明显制造过程难以衡量开发进展,也难以控制质量。
2.问题隐蔽性。没有硬件磨损、老化问题。但存在开发早期在分析、设计阶段的错误,修改难度大。
三、软件特点与一般程序不同,具有哪些特点?
软件远比一般程序规模庞大,复杂性更高。
大型软件开发具有技术问题和社会问题(组织机构、体制、管理方式、观念、人的心里因素等)
四、软件的分类?
1.按功能划分,可分为系统软件、支撑软件、应用软件
2.按规模划分,可分为微型、小型、中型、大型、超大型软件
3.按工作方式划分,可分为实时、分时、交互式、批处理软件
4.按服务对象的范围划分,可分为项目软件、产品软件
五、软件发展历程
1.程序设计时代:科研工作者 开发者即使用者
2.程序系统时代:个人创作 软件作坊 用户意图忽略
3.软件工程时代:工程原理、技术、方法
六、什么是软件危机是?表现是?
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
主要有一下表现:
软件开发无计划性
软件需求不充分
软件开发过程无规范
软件产品无评测手段
七、软件危机产生原因: #重要知识点
与软件本身特点有关 #参照软件特点二、三条
与软件开发与维护的方法不正确有关
①对用户需求的获取不正确
②软件开发就是编写程序
③软件开发只需要依靠个别高手解决
④轻视软件维护
其他原因:
软件开发尚未完全摆脱手工艺的开发方式
软件成本相当昂贵,主要依靠大量复杂的、高强度的脑力劳动
软件的开发和运行常常收到计算机系统的限制,对计算机系统有着不同程度的依赖性。
八、如何解决软件危机?
1 、彻底消除“软件就是程序”的错误观念。
2 、充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目,不是个人独立的劳动。
3、推广和使用在实践中总结出来的软件开发的成功技术和方法。
4、开发和使用更好的软件工具
九、什么是软件工程?
1.软件工程是指导计算机软件开发和维护的工程学科。
2.采用工程的概念、原理、技术和方法来开发与维护软件的一门学科。
十 、软件工程定义:
1.1983年,IEEE提出软件工程是开发、运行、维护和修复 软件的系统方法。其中的“软件”被定义为:计算机程序、方法、规则、相关的文档资料,以 及计算机程序运行时所需要的数据。
2.Fairly给出的定义:软件工程学是为了在成本限额以内按时完成开发和修改软件产品 时,所需要的系统生产和维护技术及管理学科。
3.FritZ Baner 则给出了下述定义:软件工程是为了经济地获得可靠的且能在实际机器上有 效运行的软件,而建立和使用的完善的工程化原则。
4.1993年,IEEE给出更全面定义:①把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中;②研究①中提到的途径。
十一、软件工程方法学“三要素”:
软件工程过程:规定完成各项任务工作步骤
软件工程方法:完成软件开发法相任务的技术方法,为软件开发提供“如何开发”的技术。
软件工程工具:计算机辅助软件工程CASE,为软件工程方法提供自动或半自动软件支撑环境。
十二、软件工程基本特征:
1.软件工程关注于大型程序的构造。
2 .软件工程的中心课题是控制复杂性 #主要考虑:如何分解和集成
#为什么要分解:G .Miller, “7士 2 ” 原则
3 .软件经常变化
4 .开发软件的效率非常重要
5 .和谐地合作是开发软件的关键
6 .软件必须有效地支持它的用户
7 .在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品
扩展定义:软件=知识+程序+数据+文档
十三、软件工程基本原理
B.W.Boehm, 1983 年提出:
1.用分阶段的生命周期计划严格管理
2.坚持进行阶段评审
3.实行严格的产品控制基线 # 基线(baseline)控制
4.采用现代程序设计技术
5.结果应能清楚地审查
6.开发小组的人员应该少而精
7.承认不断改进软件工程实践的必要性
十四、软件工程方法学思想
1.传统方法学(生命周期方法学或结构化范型)
①采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务;
②把软件生命周期划分为若干个阶段,按顺序完成每个阶段的任务;
③每个阶段开始和结束都有严格的标准,对任何两个相邻的阶段而言,前一个阶段的结束标准就是后一阶段的开始标准;
④每一个阶段结束之前都必须进行正式严格的技术审查和管理复审
优点:
①分解任务,分工合作,降低整个软件开发工程的困难;
②采用科学的管理技术和良好的技术方法对每个阶段成果都进行严格的审查。保证了软件的质量。
缺点:
把数据和操作人为地分离成两个独立的部分,增加了软件开发与维护的难度。
2、面向对象方法学
①把对象(object )作为融合了数据及在数据上的操作行为的统一的软件构件。
②把所有对象都划分成类(class )。
③按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。
④对象彼此间仅能通过发送消息互相联系。
二者区别
1.传统方法学:强调自顶向下顺序地完成软件开发的各阶段任务。
2.面向对象方法:是主动地多次反复迭代的演化过程
十五、什么是软件生命周期( lifecycle)
指软件孕育、诞生、成长、成熟、衰亡的生存过程
三个时期八个阶段:软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)三个时期组成,每个时期又进一步划分成若干个阶段。
![](https://i-blog.csdnimg.cn/blog_migrate/10e2f92e7259727801dfcb08249180b0.png)
1.软件定义时期
①问题定义阶段回答:
回答:“要解决的问题是什么?”
② 可行性研究阶段
回答:“对于上一个阶段所确定的问题有行得通的解决办法吗?
③需求分析(RequirementAnalysis)
回答“为了解决这个问题,目标系统必须做什么 ?
用正式文档准确地记录对目标系统的需求,这份文档通常称为规格说明书(specification)。
2.软件开发时期
具体设计和实现前一个时期定义的软件,通常分为四个阶段:
① 总体设计(概要设计)
回答:“概括地说,应该怎样实现目标系统? ”
根据需求分析,设计软件的体系结构;定义结构中的组成模块。
② 详细设计(模块设计)
回答:“应该怎样具体地实现这个系统呢? ”
对每个模块要完成的工作进行具体的描述,为源程序编写打下基础。编写设计说明书,提交评审。
二者统称系统设计
③ 程序编写(Coding, Programming ) :把软件设计转换成计算机可以接受的程序代码。
④ 软件测试(Testing) : 按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用,包括单元测试和组装测试。
二者统称系统实现
3.运行维护时期
使软件持久的满足用户的需要。包括:
1.改正性维护:运行中发现了软件中的错误需要修正。
2.适应性维护:为了适应变化了的软件工作环境,需做适当变更。
3.完善性维护:当用户有新的要求时,应该及时改进软件以满足用户的要求。
4.预防性维护: 即修改软件为将来的维护活动预先做准备。
十六、什么是软件生命周期模型?
软件生命周期模型又称:软件开发模型/软件过程模型/软件工程范型。
指软件项目从需求定义直至软件经使用后废弃为止,跨越整个生存周期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。
常见的有:瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型
- 瀑布型
①从上一阶段接受本阶段的工作对象,作为输入;
③利用输入,完成本阶段活动的内容.
④本阶段的工作成果作为输出传入下一阶段。
![](https://i-blog.csdnimg.cn/blog_migrate/2051a03463656e12b6fca1bcd1a2c72a.png)
特点:
1.阶段间具有顺序性和依赖性
2.推迟实现的观点
3.质量保证的观点
优点:
可强迫开发人员采用规范的方法;
严格地规定了每个阶段必须提交的文档;
要求每个阶段的所有产品都必须经过质量保证小组的仔细验证;
缺点:
无法解决软件需求不明确或不准确的问题;可能导致最终开发的产品不能真正满足用户需要。
瀑布模型比较适合开发需求明确的软件。
适用于:
需求是预知的;
软件实现方法是成熟的;
项目周期较短。
2.快速原型模型
① 、什么是“原型”?
原型是快速实现和运行的早期版本,反映最终系统部分重要特性。
![](https://i-blog.csdnimg.cn/blog_migrate/c25385d1089fd83dc303bc3eadbd391a.png)
特点:
①快速原型模型不带反馈环,软件产品的开发基本上是线性顺序进行的。
②快速原型的本质是“快速”。应该尽可能快地建造出原型系统,以加速软件开发过程,节约成本
优点:
通常能反映用户真实需求;
软件产品的开发基本上是线性顺序进行的
3.增量模型
把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。
使用增量模型时,第一个阶段的增量构件往往实现软件的基本需求,提供最核心的功能;后面的增量构件逐渐添加系统的功能。
![](https://i-blog.csdnimg.cn/blog_migrate/84ceb13080340da315be8102c279ef03.png)
优点:
能在较短的时间内,提供可完成部分工作的初步产品给用户;
用户有较为充裕的时间学习和适应新产品。
缺点:
对开发人员技术能力要求较高,要求能从系统整体出发正确划分增量构件,并进行分别开发,最后能很好地集成这些构件。
4.螺旋模型
螺旋模型改进了原型模型,在每个阶段都加入风险分析。
![](https://i-blog.csdnimg.cn/blog_migrate/80541a613d64c04a43e84a8a2785065f.png)
优点:
l强调可选方案和约束条件,有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;
l减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;
l维护是一个周期,与开发并没有本质区别
缺点:
l需要开发人员具有相当丰富的风险评估经验和专门知识;
l进行风险分析的费用可能较大。
适合大型软件开发
5.四种模型对比优缺点
模型 | 优点 | 缺点 |
瀑布模型 | 规范,文档驱动 | 系统可能不满足客户真正的需求 |
快速原型 | 克服了瀑布型的缺点 | |
增量模型 | 开发早期回报明确,易于维护 | 要求开放的软件体系结构 |
螺旋模型 | 风险驱动,适用于大型项目开发 | 风险分析人员需要有经验且经过充分训练 |
6.喷泉模型
是典型的面向对象生命周期模型。“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。为避免使用喷泉模型开发软件时开发过程过分无序,应该把一个线性过程(例如,快速原型模型或图中的中心垂线)作为总目标。
![](https://i-blog.csdnimg.cn/blog_migrate/a67f3a468c33995723058c78380a3b34.png)
喷泉模型的优点:
该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。
多次反复地增加或明确目标系统,而不是本质性的改动,降低错误的可能性。
喷泉模型的缺点:
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,不利于项目的管理。
要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。
喷泉模型适用于:
适用于面向对象的软件开发过程。
该文章仅为商洛学院2022级学生笔记。!!