1 什么是软件
软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。
程序:按事先设计的功能和性能需求执行的指令序列)
数据:程序能正常操纵信息的数据结构—>软件的核心
文档:与程序开发、维护和使用有关的图文资料
Ps:(生命型模型)
软件是程序以及开发、使用和维护程序所需要的所有文档。软件=程序+文档+数据
2 软件可以有哪些分类?
按功能划分:系统软件,应用程序,支撑软件
系统软件:能与计算机硬件紧密配合在一起,使计算机系统各个部件、相关的软件和数据协调、高效率地工作的软件。
应用软件:是在特定的领域内开发,为特定目的服务的一类软件。
支撑软件:支撑各种软件的开发与维护的软件,又称为软件开发环境。
按规模划分(按开发软件所需的人力、时间以及完成的源代码行数):微型,小型,中型,大型,甚大型,极大型
按开发划分:软件项目开发,软件产品开发
软件项目开发:也称定制软件,是受某个特定客户(或少数客户)的委托,由一个或多个软件开发机构根据合同的约定进行开发。
软件产品开发:可以被广大用户直接使用的软件系统。
3 软件的特点有哪些?本质特性有哪几个?
特点:
(1)软件是一种逻辑实体。
(2)软件的开发,是人的智力的高度发挥,而不是传统意义上的硬件制造。
(3)软件维护与硬件的维修有着本质的差别。
(4)软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。
(5)软件的开发至今尚未完全摆脱手工艺的开发方式,使软件的开发效率受到很大限制。
(6)软件的开发是一个复杂的过程。
(7)软件的成本非常高昂。
(8)相当多的软件工作涉及到社会因素
本质特性:复杂性,一致性,可变性,不可见性。
4 软件危机的现象是什么,为什么会发生软件危机。软件危机现在还存在吗?
定义:计算机软件的开发和维护过程所遇到的一系列严重问题。
表现:
(1)对软件开发成本和进度的估算很不准确
(2)用户很不满意
(3)质量很不可靠
(4)没有适当的文档难于维护
(5)软件成本比重上升
(6)供不应求:软件开发生产率跟不上计算机应用迅速深入的趋势
原因:
客观:软件本身独有的特点确实给开发和维护带来了困难Ps:逻辑部件、规模庞大、维护数量不断膨胀(软件维护通常意味着改正或修改原来的设计)
主观:与软件开发和维护的许多错误认识和做法的形成有关
Ps:忽视需求分析、认为软件开发=程序编写、轻视软件维护
仍然存在
5 解决软件危机的途径是什么?
组织管理
用现代工程的概念,原理,技术和方法进行计算机软件的开发,管理和维护
(编写程序所需的工作量只占软件开发全部工作量的10%~20%)
做好软件定义时期的工作
技术措施
软件开发技术与方法(例如面向对象技术等)
软件工具(例如配置管理工具、测试工具等)
6 软件工程包含的内容有哪些?
定义:
1983年美国《IEEE软件工程标准术语》对软件工程下的定义为:软件工程是开发、运行、维护和修复软件的系统方法。
1993年IEEE进一步给出了一个更全面更具体的定义:
“软件工程是:
①把系统的、规范的、可度量的方法应用于软件开发、运行和维护,也就是工程化应用于软件;
②研究①中提到的途径、方法。”
内容:
一个过程
- 方法使用的顺序
- 要求交付的文档资料
- 为保证质量和适应变化所需要的管理
- 软件开发各个阶段完成的里程碑
一组方法(如何做)
一系列工具
软件工具为软件工程方法提供了自动的或半自动的软件支撑环境
Ps:软件过程提供稳定性,控制和组织。期望像流水线一样生产软件。
7 软件工程的基本原理有哪些,请枚举若干。
- 用分阶段的生命周期计划严格管理
- 坚持进行阶段评审
- 实行严格的产品控制
- 采用现代程序设计技术
- 结果应该可以清楚地审查
- 开发小组的人员应该少而精(1+1 <2)
- 承认不断改进软件工程实践的必要性
8 如何评价软件质量?
通过以下四个方面进行评估
可靠性:正确性和健壮
正确性和对异常值边界值的处理能力
可维护性
可读性,可修改性,可测试性,完整性
可理解性
简单性,清晰性,可用性
效率
9 瀑布模型包含哪些开发阶段?
瀑布模型特点
- 阶段间具有顺序性和依赖性。
- 推迟程序的物理实现。
- 质量保证:每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误。
- 易于组织,易于管理:因为你可以预先完成所有计划。
- 是一种严格线性的、按阶段顺序的、逐步细化的过程模型(开发模式)。
10. 瀑布模型的优缺点是什么,什么样的开发试用瀑布模型。
优点:
a.强调开发的阶段性:阶段间具有顺序性和依赖性
b.强调早期计划及需求调查:推迟实现的观点
c.强调评审,强调产品测试:质量保证的观点
缺点:
a.依赖于早期进行的唯一一次需求调查,不能适应需求的变化;
b.由于是单一流程,开发中的经验教训不能反馈应用于本产品的
过程;
c.风险往往迟至后期的开发阶段才显露,因而失去及早纠正的机会。
d.文档驱动的,这对于非专业的用户来说是难以阅读和理解的。
瀑布模型是最早存在的开发模型。
适用于:
- 当需求很确定,有一个稳定的产品定义和很容易被理解的技术解决方案时,纯瀑布模型特别合适。
- 当你对一个定义得很好的版本进行维护或将一个产品移植到一个新的平台上,瀑布模型也特别合适。
- 对于那些容易理解但很复杂的项目,采用纯瀑布模型比较合适,因为可以用顺序方法处理问题。
- 在质量需求高于成本需求和进度需求的时候,它尤为出色。
- 当开发队伍的技术力量比较弱或者缺乏经验时,瀑布模型更为适合。
总结:
- 项目周期内需求极少变动的项目
- 稳定低风险项目,规模小实现简单易受控的项目
- 合同式的合作方式,严格按照说明执行
11 快速原型的定义,特点,解决什么问题?(什么情况使用该模型)
定义:经过简单、快速的分析,快速实现一个原型,用户与开发人员在试用原型过程中加强通信与反馈,通过反复评价和改进原型,减少误解,弥补漏洞,适应变化,最终提高软件质量。
特点:原型被建造仅是为了定义需求,之后就被抛弃(或至少部分被抛弃)
优点:
- 从实践中学习
- 改善通信
- 改善用户参与
- 使部分已知需求清晰化
- 展示描述的一致性和完整性
- 提高系统的实用性,可维护性
- 节省开发投入,缩短整个软件开发周期
缺点:
- 用户有时误解了原型的角色,例如他们可能误解原型应该和真实系统一样可靠。
- 缺少项目标准,进化原型方法有点像编码修正。
- 缺少控制,由于用户可能不断提出新要求,因而原型迭代的周期很难控制。
- 额外的花费:研究结果表明构造一个原型可能需要10%额外花费。
- 为了尽快实现原型,采用了不合适的技术,运行效率可能会受影响。
- 原型法要求开发者与用户密切接触,有时这是不可能的。例如外包软件。
适用于
- 不能预先确切定义需求的软件系统的开发
- 进行产品移植或升级或对已有产品原型进行客户化工作
- 项目招投标时,可以以原型模型作为软件的开发模型
- 简单而熟悉的行业或领域
12 增量模型的定义,特点,解决什么问题?(什么情况使用该模型)
定义:把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。
特点:
- 侧重于每个增量都提交一个可以运行的产品
- 任务或功能模块驱动,可以分阶段提交产品
- 增量模型是一种非整体开发的模型。 该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。
优缺点:
开发基本策略:分而治之
适用于:
- 进行已有产品升级或新版本开发
- 完成期限严格要求的产品
- 软件需求不明确、设计方案有一定风险的软件项目
13 敏捷模型解决什么问题?
解决瀑布模型这样的重型软件开发方法存在的问题,用一种轻量的、敏捷的方法来改善甚至是替代它。瀑布模型的典型问题就是周期长、发布烦、变更难,敏捷开发就是快速迭代、持续集成、拥抱变化。
14 极限编程(XP)有哪些关键字?
用户故事、简单设计、测试驱动开发 (TDD)、持续集成、重构、结对编程
15 什么是用户故事。
用户故事在软件开发过程中被作为描述需求的一种表达形式。
用户故事通常的表达格式为:
作为一个<用户角色>, 我想要<完成活动>, 以便于<实现价值>。
eg:腾讯课堂的用户故事:学生登陆->查找需要学习的课程->进入课堂->听课
16 Scrum开发模型有哪些关键字?
三个角色,六个时间箱,四个工作
17.补充
程序语言分为三类:
机器语言、汇编语言、高级语言
软件产品与物质产品有很大的区别,软件产品是一种(逻辑)产品。
软件质量:
应用最广泛的两种软件工程方法学
结构化程序设计方法和面向对象的程序设计方法
软件设计经历的三个时期
第一个时期:软件定义时期
(1)问题定义
这是软件生存期的第一个阶段,主要任务是弄清用户要计算机解决的问题是什么。
(2)可行性研究
任务是为前一阶段提出的问题寻求一种至数种在技术上可行、且在经济上有较高效益的解决方案。
第二个时期:软件开发时期
(1)需求分析
弄清用户对软件系统的全部需求,主要是确定目标系统必须具备哪些功能。
(2)总体设计
设计软件的结构,即确定程序由哪些模块组成以及模块间的关系。
(3)详细设计:
针对单个模块的设计。
(4)编码
按照选定的语言,把模块的过程性描述翻译为源程序。
(5)测试
通过各种类型的测试(及相应的调试)使软件达到预定的要求。
第三个时期:软件运行时期
(1)软件安装运行
(2)维护
部分选择、判断题:
部分相关选择判断题