当前课程知识点:软件工程 >  第1章 初识软件工程  >  1.4 软件工程的基本概念 >  讲授视频

返回《软件工程》慕课在线视频课程列表

讲授视频在线视频

下一节:讲授视频

返回《软件工程》慕课在线视频列表

讲授视频课程教案、知识点、字幕

在前面的课程中

我们介绍了软件的本质特性

软件开发面临的问题

以及软件工程的发展历史

在这一讲

我们将要讲解什么是软件工程

首先我们来看一下什么是工程

工程是与建造活动密切相关的

随着人类文明的不断发展

人们开始建造出各种各样

更大更复杂的“人造系统”

像高楼大厦 轮船 铁路

飞机等等

所谓的“工程”就是应用有关的

科学知识和技术手段

通过有组织的群体协作活动

建造具有预期使用价值的

人造产品的过程

不管是建造高楼大厦 跨海大桥

还是生产轮船和飞机

工程活动一般都具有

以下共同的特征

是大规模的设计和建造

涉及到复杂的问题和目标分解

需要团队的协作和过程的控制

顾名思义

软件工程就是把工程化的方法

应用到软件之中

也就是说

将系统性的 规范化的

可定量的方法

应用于软件的开发

运行和维护

并且对这种方法进行研究

软件工程最终实现的目标

是要创造出“足够好的软件”

那么什么是足够好的软件

开发的成本要低

能够按时交付产品

实现客户要求的功能

具有良好性能

可靠性和可扩展性等

软件维护的费用低

软件开发是一个复杂的过程

需要注重过程质量的控制

而先进的方法和工具

可以有助于开发高质量的产品

因此

过程 方法和工具

是软件工程的三个基本要素

软件过程是一系列开发活动

这些活动将用户的需求

转化为用户满意的产品

通过对开发过程中

各个活动环节质量的有效控制

来保证最终产品的质量

软件开发过程

一般包括一系列基本的开发活动

首先要研究和定义用户的问题

确定和分析用户的实际需求

设计整个系统的总体结构

编程实现系统的各个部分

最后

将各个部分集成起来进行测试

最终交付出用户满意的产品

除此之外

还应该包括一些

开发过程管理等支持性的活动

在软件开发过程中

先进的开发方法和技术手段

是非常重要的

可以提高开发效率

有助于构建出高质量的产品

软件开发方法的发展

经历了面向过程

面向对象 面向构件

和面向服务等不同阶段

应该说

代码封装的力度从函数到类

再到粒度更大的构件

以及在应用表现层次上的服务

软件的复用程度逐步提升

开发效率也越来越高

古人云

工欲善其事 必先利其器

工匠想要做好自己的工作

一定要先让工具锋利

软件开发也不例外

软件开发工具为软件工程方法

提供了自动的

或半自动的软件支撑环境

现在开源的工具非常多

贯穿于整个开发过程

软件建模工具可以支持建立

系统的需求和设计模型

软件构造工具

包括程序编辑器 编译器

解释器和调试器

相信大家已经用过

不同编程语言的构造工具

软件测试工具

可以帮助人们分析代码质量

执行软件测试和评价产品的质量

在软件维护阶段

一些代码分析工具

和重构工具

可以帮助人们理解和维护代码

除此之外

还有一些软件工程管理工具

帮助人们有效管理开发过程

控制代码的更改

支持团队进行协作开发

软件工程几十年的发展

已经积累了许多开发方法

但是仅有好的战术还是不够

还需要在实践中

运用良好的开发策略

软件复用 分而治之

逐步演进和优化折中

是软件开发的四个基本策略

构造一个新的系统

不必都从零开始

直接复用已有的构件

可以提高开发效率和产品质量

降低维护成本

软件复用也不仅仅是代码的复用

还包括对系统类库 模板

设计模式 组件和框架等的复用

这些内容

都将在这门课的后续单元

进行讲解

分而治之

是人们处理复杂性的

一个基本策略

简单地说

就是将一个复杂的问题

分解成若干个简单的问题

然后逐个进行解决

我们在前面

提到过一个抢票的微信应用

这个系统在前端 后端

数据存储等不同层次

都划分成若干功能模块

这些更好的模块

可以分配给不同的开发人员

进行并行开发

最后再组装成一个完整的系统

前面我们讲过

微信软件的一个演化过程

它从一个简单的文字通讯工具

逐渐演变成

一个支持人们现代生活的

服务平台

应该说

软件也像是一个活着的植物

它的生长

是一个逐步有序的过程

软件开发

应该遵循软件的客观规律

通过不断的迭代式的增量开发

最终发展成符合客户价值的产品

软件工程师

应当把优化当成一种责任

不断改进和提升软件质量

但是优化

是一个多目标的最优决策

在不可能使所有目标

都得达到最优的时候

需要进行折中

来实现整体的最优

例如

在编写C程序代码时

对文件的访问

是影响程序速度的一个重要因素

那么如何提高文件的访问速度呢

一个常见的方法

是使用内存缓冲区

这个表

列出了在不同的缓冲区大小

系统资源的消耗情况

显然缓冲区越大

设备的硬件的成本就越高

在这个表中

我们可以看到

缓冲区达到4096字节之后

继续加大缓存

对系统性能的提升

起到的作用不大

因此

我们可以选择2048

或4096这样的缓存方案

这样可以达到

一个成本和性能的

一个整体更优的结果

Wasserman规范给出了

对软件工程发展

有重大影响的若干技术

抽象

是一种降低复杂性的处理方法

软件建模方法

可以帮助工程师理解和刻画

系统的分析和设计结果

便于开发人员

进行沟通和交流

用户界面原型化

可以克服需求难以确定的困难

软件体系结构

对产品质量是至关重要的

软件过程复用和度量

都是工程方法的组成部分

工具和集成环境

对于提高软件开发效率

是必不可少的

上述这些技术

在软件工程中都是非常重要的

我们将在后续的课程学习中

会逐步加以深入了解

软件工程课程列表:

第1章 初识软件工程

-1.1 软件无处不在

--讲课视频

-1.2 软件的本质特性

--讲授视频

-1.3 软件工程的产生与发展

--讲授视频

-1.4 软件工程的基本概念

--讲授视频

-1.5 软件质量实现

--讲授视频

-1.6 业界人士谈软件工程

--海芯科技创始人施侃乐访谈

-测验题--作业

-讨论题

--讨论题

-作业题

--第一张 作业题

第2章 编写高质量代码

-2.1 编程过程与规范

--讲课视频

-2.2 良好的编程实践

--讲课视频

-2.3 Python集成开发环境

--讲课视频

-2.4 代码静态检查

--讲课视频

-2.5 代码性能分析

--讲课视频

-2.6 结对编程实践

--讲课视频

-2.7 刘贺谈软件工程

--讲课视频

--讨论

-测验题--作业

-作业题

--第二章 作业题

第3章 单元测试

-3.1 单元测试概述

--讲课视频

-3.2 黑盒测试方法

--黑盒测试方法

-3.3 白盒测试方法

--基本概念

--代码覆盖标准

--基本路径测试

-3.4 单元测试工具

--单元测试工具

--html

-测验题--作业

-作业题

--第三章 作业题

--作业题附件

第4章 软件开发过程

-4.1 软件过程

--讲课视频

-4.2 软件过程模型

--讲课视频

-4.3 敏捷开发过程

--讲课视频

-4.4 微软公司开发过程

--邹欣经理自我介绍

--微软开发过程之一

--微软开发过程之二

-测验题--作业

第5章 团队开发管理

-5.1 团队组织与管理

--讲课视频

-5.2 项目沟通管理

--讲课视频

-5.3 软件项目计划

--讲课视频

-5.4 软件项目估算

--讲课视频

-测验题--作业

-讨论题

--讨论

第6章 敏捷开发与配置管理

-6.1 敏捷开发之Scrum

-- 敏捷开发之Scrum

--html

-6.2 用户故事与估算

--讲课视频

-6.3 团队协作工具Tower

--Tower工具介绍(1)

--Tower工具介绍(2)

-6.4 配置管理

--讲课视频

-6.5 配置管理工具Git

--讲课视频

-测验题--作业

-作业题--作业

第7章 需求获取

-7.1 需求工程师

--讲课视频

-7.2 需求定义

--讲课视频

-7.3 需求的类型

--讲课视频

--讲课视频(2)

-7.4 需求工程过程

--讲课视频

-7.5 需求的主要来源

--讲课视频

-7.6 需求获取技术

--讲课视频

--讲课视频二

--讲课视频三

-7.7 撰写需求文档

--讲课视频

-测验题--作业

-讨论题

--讨论

第8章 用例建模

-8.1 用例建模概念

--讲课视频

-8.2 用例建模过程

--讲课视频

-8.3 用例建模精讲

--讲课视频

-8.4 建模工具介绍

--讲课视频

-8.5 微信抢票应用案例

--讲课视频

-测验题--作业

-讨论题

--讨论

第9章 面向对象分析与设计

-9.1 面向对象分析

--讲课视频

-9.2 CRC卡片分拣法

--讲课视频-1

--讲课视频-2

-9.3 面向对象设计

--讲课视频-1

--讲课视频-2

-9.4 类图建模

--讲课视频-1

--讲课视频-2

-第9章 面向对象分析与设计--测验题

-讨论题

--讨论

第10章 行为建模

-10.1 顺序图概念

--讲课视频

-10.2 顺序图建模

--讲课视频

-10.3 顺序图风格

--讲义视频

-10.4 状态建模

--讲课视频

-10.5 状态图

--讲课视频

-10.6 状态图精讲

--讲义视频

-测验题--作业

-讨论题

--讨论

第11章 软件系统设计

-11.1 软件体系结构概念

--讲授视频

-11.2 软件设计原则

--讲授视频

-11.3 软件体系结构风格(一)

--讲授视频

-11.4 软件体系结构风格(二)

--讲授视频

-11.5 软件体系结构风格(三)

--讲授视频

-11.6 软件设计过程

--讲授视频

-11.7 Web系统架构设计

--讲授视频

-11.8 数据库选择策略

--讲授视频

-测验题--作业

-作业题

--html

--html

--html

-作业题--作业

第12章 软件交互设计

-12.1 交互设计概述

--讲授视频

-12.2 交互设计目标

--讲授视频

-12.3 GUI设计原则

--讲课视频

-12.4 KLM效率模型

--Video

-12.5 Fitts定律

--讲授视频

-12.6 交互设计过程

--讲授视频

-测验题--作业

第13章 软件系统测试

-13.1 软件测试概念

--讲课视频

-13.2 软件测试类型

--讲课视频

-13.3 软件功能测试

--讲课视频

-13.4 软件性能测试

--讲课视频

-测验题--作业

第14章 软件交付与维护

-14.1 软件部署与交付

--讲课视频

-14.2 软件演化与维护

--讲课视频

-测验题--作业

第15章 期末考试与总结

-第一部分:基础知识

-第二部分:编程与测试(选做)

--编程与测试(选做)

讲授视频笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。