目录

软件工程导论1基本概念

软件工程导论——1基本概念

https://i-blog.csdnimg.cn/blog_migrate/61be4ecb04a4cda3a9c771d0b6fd8a4c.png#pic_center

**软件=程序+数据+文档

(1)程序:按事先设计的功能和性能需求执行的指令序列。

(2)数据:是程序能正常操纵信息的数据结构。

(3)文档:与程序开发、维护和使用有关的文图材料。**

1 软件是开发的,未实现自动化,充满个人行为和个人因素

2 软件生产是简单的拷贝(盗版问题)

3 软件需求在软件开发之初往往不明确

4 软件测试非常困难(穷举测试不可能)

5 软件开发和运行都离不开相关计算机系统环境

6 软件开发时间和工作量难以估计

7 软件不会磨损,但会退化和废弃(由于软件变更)

系统软件:整套服务于其它程序的程序。如:编译器、操作系统等

应用软件:解决特定业务需要的独立应用程序

工程/科学软件:带有“数值计算”算法特征的软件

嵌入式软件 :嵌入式软件就是嵌入在硬件中的操作系统和开发工具软件

产品线软件 :为多个不同用户的使用提供特定功能,如文字处理、电脑绘图等

Web应用软件 :Web应用程序是一种可以通过Web访问的应用程序

人工智能软件:机器人、专家系统、神经网络等

https://i-blog.csdnimg.cn/blog_migrate/38cc114d6a76a98964c6c6276f198588.png

**软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

例如:

项目大大超出预算 、软件运行效率很低 、项目难以管理并且代码难以维护等**

软件是逻辑部件,缺乏可见性

软件维护困难

软件越来越庞大和复杂,需要分工协作

需求分析不充分或存在错误

不注重文档工作

软件难以维护

缺少软件评测手段

( **1)把系统的、规范的、可度量的方法用于软件的开发、运行和维护过程,也就是把工程应用于软件。

(2)研究(1)一中所提到的方法。**

**工具:软件工程支撑环境

方法:怎么做

过程:工作步骤**

https://i-blog.csdnimg.cn/blog_migrate/372360ab0f0ba166865a3c3f3f8c772d.png

第一代软件工程:传统的软件工程

第二代软件工程:对象工程

第三代软件工程:过程工程

第四代软件工程:构件工程

• 正确性:满足需求规格和用户目标的程度

• 可靠性:一定时间内无故障运行的能力

• 有效性:用户完成特定任务和达到特定目标时所具有的正确和完整程度

• 可用性:用户能否用软件完成他的任务,效率如何,主观感受怎样

• 可移植性 :软件不经修改或稍加修改就可以运行于不同软硬件环境的难易程度

**• 健壮性:异常情况下软件能够正常运行的能力

• 易用性:用户使用软件的容易程度**

• 可维护性 :为修改错误、增加功能、提高质量而诊断并修改软件的难易程度

• 可测试性:对软件进行测试的难易程度

• 灵活性:反映软件适应变化的能力,修改或 改进一个已投入运行的软件所需的工作量

• 可重用性:重用软件或构件的难易程度

• 互操作性:本软件与其它系统交换数 据和相互调用服务用以协同运作的难易程度

• 安全性:向合法用户提供服务,阻止非授权使用 服务

① 软件工程关注于较大型软件的构造

② 软件工程的中心课题是控制复杂性(分而治之) (中心课题)区别于软件的特征

分:把一个大的问题分成若干个相互独立的子问题,针对每一个子问题,采用独立的方法去解决。

合:将各个子问题的答案结合起来,形成原问题的解。

③ 软件经常变化(可维护)

④ 开发软件的效率非常重要

⑤ 和谐的合作是开发软件的关键(人员管理)

⑥ 软件必须有效地支持它的用户

⑦ 在软件工程领域中,通常由具有一种文化背景的人替具有另一种文化背景的人创造产品

https://i-blog.csdnimg.cn/blog_migrate/b32e05a0b12d8f9fe69a4e43c00a1fd3.png

  1. 按软件生存周期分阶段制定计划并认真实施
  2. 坚持进行阶段审查
  3. 实行严格的产品控制
  4. 采用现代程序设计技术
  5. 明确责任,结果应能清楚的审查
  6. 开发小组的人员应该少而精
  7. 不断改进软件工程实践
  1. 抽象 :识别和关注与当前目标有关的事物的本质特征,淘汰与当前状况无关的非本质信息。
  2. 分析和设计方法以及表示法 :便于审查、交流、复用
  3. 用户界面原型化 :原型:一个部分开发的产品,使客户和开发人员能够对计划开发的系统的相关方面进行检查。
  4. 软件体系结构:体系结构是系统的一个或多个结构,它包括软件构件、构件的外部可见属性、以及它们之间的相互关系。
  5. 软件过程:软件开发全部过程、活动和任务的结构框架;
  6. 复用:重复使用以前的代码、设计、测试等
  7. 测度:量化的指标
  8. 工具和集成环境

分析和设计之间存在很大的鸿沟。

https://i-blog.csdnimg.cn/blog_migrate/465ab18c4d1128906c7e06825b984717.png#pic_center

https://i-blog.csdnimg.cn/blog_migrate/38b6e7fcdc888a71b9a4662fd9b541e4.png#pic_center

• M代表误解,R代表现实

– M2: 如果我们项目进度落后了,可以加入更多的程序员来 赶进度。

– R2: 软件开发的机制和手工作业不一样。在一个延迟了的 软件项目中加入新的开发人员只会让它延迟更多。

– M3: 如果我们将软件项目外包给第三方,我们就轻松了, 让那个公司去完成它吧。

– R3: 如果组织管理方不懂得如何从内部管理和控制软件项 目,即使将项目外包也无济于事。

– M1: 对目标的一般陈述就足以开始编程,我们可以今后 再补充细节。

– R1: 前期糟糕的项目需求定义,是导致软件失败的主要 原因。

– M2:虽然软件需求不断变更,但是因为软件是弹性的, 因此可以很容易的适应变更

– R2: 项目需求的确在不断变化,但变化所产生的影响是 根据变化提出的时间不同而不同的。

– M3: 唯一可交付的工作成果是一个成功运行的项目程序

– R3: 一个可运行的程序只是软件结构的一部分,它还包含了许多其它因素。

– M4: 软件工程将会让我们去创建大量不必要的文档,并 且总是使我们的进度放慢。软件工程仅仅是文档而已。

– R4: 软件工程并不是创建文档,而是创建质量。更好的 质量减少返工的概率。更少返工会让项目更早交付。所 有的文档都是提高团队沟通和质量所必须的。

重点是软件的特性、软件工程学的研究范畴,以及学习软件工程的意义。掌握软件的概念、特点和软件工程的基本特征;理解为什么学习软件工程、如何学习。主要知识点:

  1. 软件的概念和特点
  2. 软件危机的概念和产生的原因
  3. 软件工程的定义、三要素和发展过程