You are on page 1of 79

软件工程

Software Engineering

河南大学软件学院 殷向
周二 7-8 周二 9-10

10/24/2023 软件工程 2
投票 最多可选 1 项

你对软件开发和软件工程了解多少?

A 完全不了解
B 了解一点点
C 做过一些项目
D 对软件开发比较熟悉
10/24/2023
提交 软件工程 3
单选题 1分
此题未设置答案,请点击右侧设置按钮

什么是软件工程?

A 软件工程就是写程序

B 软件工程是用工程化的方法进行软件开发

C 软件工程就是对软件进行管理

D 软件工程是以做出软件为目的的

10/24/2023 软件工程 提交 4
课程介绍
工程科
☼ 课程地位: 学知识
与实

非常重要,是一门管理性质的
管理科
课程,也是一门交叉学科,应用于软 数学基 学知识
件开发与维护中。 本原理 与实
软件工程 践
☼ 课程难度: 知识与实践

理论性很强,比较难学,但学
应用领
会对以后的职业生涯具有很重要的指 计算机
域知识
科学基
与实
导意义。 践
本原理

10/24/2023 软件工程 5
课程目标

了解目前软件工程技术历史沿革与发展趋势,软件工程相关背景知识对工程实践和
复杂软件工程问题解决方案进行客观的分析和评价。

掌握软件工程的基本概念、基本原理、实用的开发方法和技术,能够综合运用所学
的软件工程知识解决复杂的软件问题。

掌握开发高质量软件的需求分析、软件设计,及软件开发和测试等基本理论和方法;
掌握基于 UML 建模以及 Web 应用程序开发的基本知识;能够在实际软件开发过程
中充分利用一切资源正确有效的获取需求、建立分析和设计的模型、完成编码和设
计合适的测试用例。
了解如何用工程化的方法开发软件项目和先进的软件项目管理方法,以及开发过程
中应遵循的流程、准则、标准和规范,通过项目实践提高实际的软件开发能力和工
程素养,培养团队协作意识和创新精神,提升综合素质。

10/24/2023 软件工程 6
基本目标

֍ 体验软件工程各阶段的主要任务,切实深入到软件开发
的整个过程。
֍ 了解制作一个软件要做什么,怎么做,以及开发软件用
到什么东西,注意吸取教训。

10/24/2023 软件工程 7
中国工程教育专业认证
֍ 中国工程教育专业认证简单来说就是我国工程教育的质量是否能在国
际社会得到认可,其认证基础是《华盛顿协议》,它是工程教育本科
专业学位互认协议,目前加入华盛顿协议的国家有 21 个。
֍ 核心理念:以学生为中心,成果导向,持续改进。
毕业要求 12 条:
1. 工程知识 7. 环境和可持续发展
2. 问题分析 8. 职业规范
3. 设计 / 开发解决方案 9. 个人和团队
4. 研究 10. 沟通
5. 使用现代工具 11. 项目管理
6. 工程与社会 12. 终身学习
10/24/2023 软件工程 8
学软件工程干什么?
֍不是学编程,不是做程序猿!
֍从较高的层次上确保工程优质、省钱、高效!
掌控工程、做 CIO 、架构师、分析师指导开发和运维。
做项目经理:掌控软件项目全局;
做产品经理:设计领先的产品;
做系统架构师:指引系统方向;
做系统分析师:激发需求;
做系统设计师:引导设计和编程;
做系统测评师:验证、检测系统品质;
做运维管理师:延伸系统生命。
10/24/2023 软件工程 9
10/24/2023 软件工程 10
现代软件研发对软件人才的需求

传统软件人才的特点 创新软件人才的特点

敢冒风险 敢冒风险
有雄心壮志 有雄心壮志
能学习,适应新环境 能学习,适应新环境
实事求是的作风 创新精神
有克服困难的毅力 如果对问题有兴趣,则有热情、有主动性

扎实的理论基础,尤其是数学 独立从事研究的能力

很强的编程能力 题目想的远、做的深

纪律、服从 对什么事都有主见

对许多事情都没有主见,即使有想
直截了当地沟通甚至批评和争论
法也不敢说

10/24/2023 软件工程 11
现代软件开发

֍传统软件开发和现代软件开发
֍软件团队与软件开发人员的培养

10/24/2023 软件工程 12
现代软件研发对软件人才提出的要求

֍专业基础和创新能力

֍具备主人翁精神

֍良好的团队精神

֍从错误中学习的能力

10/24/2023 软件工程 13
研发方法的差别

创新研发方法 非创新研发方法

想着做事情 坐着想事情

经过科学手段、大量的数据、可重复的 肤浅的、无用的、无法扩张的简单
深入研究 结果
不看别人的研究,或只抄袭别人的
研究、理解、借用别人的结果
研究成果
经过亲自的设计工程原型,证实对用户
理论的、没用的纸上谈兵
有用

承认失败,从头开始 不承认失败,永无止境地延续研究
10/24/2023 软件工程 14
学习任务

► 软件开发相关技术的学习
 提高开发能力、积累开发经验
► 软件工程知识体系的建立
 培养工程意识、建立管理理念
► 学习思维的提升
 从程序设计提升到系统的分析和设计
► 角色的转变
 从精于个人创作到善于团队合作

10/24/2023 软件工程 15
培养团队精神

10/24/2023 软件工程 16
培养创新意识

科技强国,树立自信
自主研发,振兴民族

10/24/2023 软件工程 17
学习要求

数学基础
计算机科学理论知识
先导
100%
要求 程序设计语言、开发工具、算法、数据库技术
基础
最好有一定的软件开发经验

10/24/2023 软件工程 18
学习要求

理解:
什么是软件工程

为什么需要软件工程 ( 产生背景 )
软件工程需要解决哪些问题
软件工程涉及哪些方面内容

10/24/2023 软件工程 19
学习要求

掌握:软件工程 运用:工程化思想进行软件开发
► 概念 ► 需求分析
► 技术 ► 软件设计
► 过程 ► 软件构造
► 方法 ► 软件测试
► 工具 ► 软件维护

10/24/2023 软件工程 20
怎么学

֍“ 教育是令人羡慕的东西,但是要记住:凡
是值得知道的,没有一个是能够教会的。”
—— 奥斯卡•王尔德( Oscar Wilder )

做中学( Learning By Doing )

10/24/2023 软件工程 21
怎么学

• 听:理解知识点和思想,无需死记硬背
• 想:根据所学知识,思考如何解决实际问题,
学习 总结经验教训
100%
方法
• 做:体会软件工程的原则、方法和技术,在
实践中提高
• 注意:培养抽象思维能力,培养独立解决问
题的能力,培养团队合作精神

10/24/2023 软件工程 22
上课形式——线上线下混合教学

֍ 课前:登录雨课堂云平台观看清华大学刘强的
课程视频,完成相应的作业和测试。
֍ 课中:面授 + 雨课堂互动 + 课堂测试
֍ 课后:根据项目进度分组完成项目

10/24/2023 软件工程 23
参考书
֍ 软件工程基础与实用教程——
基于架构与 MVC 模式的一体化
开发
作者:沈文轩等
出版社:清华大学出版社

֍构建之法—现代软件工程
作者:邹欣
出版社:人民邮电出版社

10/24/2023 软件工程 24
参考书
֍软件是这样“炼”成的—从软
件需求分析到软件架构设计
作者:王朔韬
出版社:清华大学出版社

֍人月神话
作者:(美)小弗雷德里克 · 布鲁克斯
( Frederick P.Brooks , Jr. )
出版社:清华大学出版社

10/24/2023 软件工程 25
课程考核方式

评审
项目
♥ 在线学习 (20%)
在线 测试
学习 ♥ 项目实习 (30%)
作业 考试 ♥ 期末考试 (50%)

10/24/2023 软件工程 26
课程实践项目要求
实践方式
小组合作,任务驱动
实践内容
课程 选择一个项目开发课题,用软件工程的思想指导其开
实习
发过程,完成相应的文档汇报。
提交内容
电子文档、软件源码
评价方法
按阶段递交,打分(文档完整性、合理性、规范性)

10/24/2023 软件工程 27
课题
֍基于微信平台的二次开发、
֍在线考试系统、
֍自动排课系统、
֍超市收银系统、
֍学籍管理系统、
֍超市库存管理系统、
֍学生公寓管理系统

10/24/2023 软件工程 28
课程实践项目要求
֍ 小组成员 6 人,负责人 1 人,自由分组,小组成员必须在
相邻的位置上机。组内分工由负责人指定。
֍ 小组共同讨论实习的课题(不能重复,有一定规模),一
周之后班长(课代表)将分组、课题、分工结果制作成
Excel 表格上交。
֍ 要求:小组定期组织讨论和汇报工作进度,按照实验要求
编写系统的相关文档和系统,并在期末提交一个完成的系
统及相关文档。
֍ 根据小组任务完成情况作为成绩考核标准,课程实习成绩
组成:组内打分 + 讨论汇报得分 + 项目得分。
10/24/2023 软件工程 29
要求

֍每个项目小组选出项目负责人或项目经理,由项
目经理召集项目组成员讨论、选定开发项目,项
目的选定必须考虑“范围、期限、成本、人员、
设备”等条件;项目经理负责完成“可行性研究
报告”、制定“项目开发计划”、管理项目并根
据项目进展情况对项目开发计划进行调整;对于
调整的项目开发计划必须存档;

10/24/2023 软件工程 30
֍项目开发计划必须由粗到细通过 GANT 图给
出,每项任务要落实到人且规定该任务的起止日
期和时间;明确每个阶段提交文档的日期和时间;
每个项目小组必须明确指定文档的审查小组和审
查人员以及审查结果的返回日期;审查小组和审
查人员不得是完成被审查内容的完成者;审查结
果至少包括:存在的问题、出现问题的所在文档
的位置及页码、具体建议等;每个阶段的审查结
果不得少于 10 个问题;
10/24/2023 软件工程 31
֍每个项目小组必须按照给定的文档规范标准提供下列文档,文档中

必须注明执笔者、完成者(签名)和完成日期,其中完成需求分析和
设计工作的人员不能相同,完成编码和审查 / 测试的人员不能相同;
文档包括:

֍程序代码及相应技术文档(项目开发计划、需求分析规格说明、

概要设计文档、详细设计文档、数据设计文档、项目测试报告),其
中,由于学生专业的原因,对于程序代码要求尽量提供。

10/24/2023 软件工程 32
本次课程速递

֍ 第 1 章 软件工程概述
1. 软件工程的概念
2. 软件的概念和特性

10/24/2023 软件工程 33
提问

֍什么是软件工程?

10/24/2023 软件工程 34
什么是软件工程

软件工程是一种系统的、有纪律的、可量化的方法在软件
开发、操作和维护中的应用。学科软件需求、设计、施工、
测试和维护。
学科
• 软件需求、设计、施工、测试和维护。
• 相关领域 :
• 计算机科学、计算机工程、管理学、数学、项目管理、质量管理、
软件人机工程学(可用性)、系统工程、工业设计、用户界面设

10/24/2023 软件工程 35
什么是软件工程?

任何生产活动都要按照目标化、
规范化、文档化、标准化进行,
这就是工程化。

• 目标化:工程化的目标是使投入
产出的效益最大化;
• 规范化:有明确的工作阶段、内
容和步骤;
• 文档化:有详细具体的工作规范
用工程化的方法来开发软件 化文档;
• 标准化:有明确的质量评价标准。

10/24/2023 软件工程 36
工程的含义

10/24/2023 软件工程 37
“ 工程” 在各种行业都有

֍构想

֍分析

֍建设

֍交付

֍运行

10/24/2023 软件工程 38
什么是软件工程?
֍FritzBauer 在 NATO (北大西洋公约组织)会议
上给出的定义:
֍软件工程:是为了经济地获得可靠的和能在实际机
器上高效运行的软件而建立和使用的好的工程原则。
֍我们进一步展开讨论的基础:
֍美国电气和电子工程师协会( Institute of
Electrical and Electronics Engineers , IEEE )
给出了一个更加综合的定义:

10/24/2023 软件工程 39
什么是软件工程?

֍ 软件工程是 ① 将系统性的、规范化的、可定量的方法应用于软件
的开发、运行和维护,即工程化应用到软件上;
֍ ② 对①中所述方法的研究。

10/24/2023 软件工程 40
为何要搞工程 ?

֍因为需求复杂

→ 要满足不同类型用户的多种需求,并且能长时间提供
服务

֍因为系统太复杂

֍因为人们的生命,财产依赖于软件

10/24/2023 软件工程 41
软件工程要解决什么问题?

֍软件产品庞大而复杂
֍发展需要分析和综合
→ 分析 : 将一个大问题分解成更小的、可以理解的部分
抽象是关键
 抽象是关键
→ 综合 : 用较小的构建块构建(组合)
 组合是挑战

10/24/2023 软件工程 42
软件工程的主要内容

10/24/2023 软件工程 43
软件工程学科的基本内容
֍ 相对于其他学科而言,软件工程是一门比较年轻的学科,
它的思想体系和理论基础还有待进一步修整和完善。软
件工程学科包含的内容有:

10/24/2023 软件工程 44
软件工程和计算机科学的关系

֍计算机科学
→ 理论大多可以从形式上证明,和数学、离散数学、数理逻辑密切
相关。
→ 实践和数据及其它学科结合,把各种理论运用在“计算和通讯”
的场景中。
֍软件工程
→ 和人的行为,现实的需求息息相关。
→ 软件工程的研究目标(软件的开发 , 运营 , 和维护)都有“人”
出现,人是指项目需求的提供者,如软件的开发人员,软件的用
户。
10/24/2023 软件工程 45
不同的侧重点

10/24/2023 软件工程 46
计算机学院 VS 软件学院

如果你遇到一个:
֍计算机系的老师 / 学生
→ 你要问:你在计算机科学长期真理的研究方面,做出了哪些成
果?
→ 你发现了什么真理?
֍软件学院的老师 / 学生
→ 你要问:你在软件构建方面,有什么具体的,实用的贡献?
→ 你构建了什么有价值的软件?

10/24/2023 软件工程 47
调查:

֍大家用过的比较好的软件有哪些?

10/24/2023 软件工程 48
10/24/2023 软件工程 49
新冠肺炎疫情全球预测系统
http://covid-19.lzu.edu.cn/

10/24/2023 软件工程 50
10/24/2023 软件工程 51
海绵城市智慧管理系统

10/24/2023 软件工程 52
思考:

֍什么是软件?

֍软件和程序一样吗?

10/24/2023 软件工程 53
程序 VS. 软件
֍一个案例:小学老师要每周给学生出 300 道四则运算练习题。
֍这个程序有很多种实现方式:
→ C/C++
→ C#/VB.net/Java
→ Excel
→ Unix Shell
→ Emacs/Powershell/Vbscript
→ Perl
→ Python
1.两个运算符, 100 以内的数字,不需要写答案。
2.需要写答案,并且保证答案在 0..100 之间

10/24/2023 软件工程 54
软件:很多细节

֍这个老师发现你的程序很好用,其他老师都想要一份,有些新的要求:

1. 题目避免重复
2. 可扩展性
3. 可定制(数量 / 打印方式)
4. 具体定制:
I. 是否有乘除法,是否有括号,数值范围,加减有无负数
II. 除法有无余数,是否支持分数,打印中每行的间隔可调整
֍现在这就是一个稍微有些复杂的软件了。

10/24/2023 软件工程 55
更多需求

֍然后你发现全国的老师都有这个需求。
֍甚至有好些家长都想要这个。

。。。
֍校长希望你写一个网站满足大家的需求,希望能接受上
万个用户同时访问。

֍大家也可以估计一下完成这一软件服务需要的时间。

10/24/2023 软件工程 56
程序 VS. 软件

֍Program = data structure + algorithm


֍Software = Program + Software Engineering
֍Software Company =
Software + Business Model

10/24/2023 软件工程 57
软件的概念

֍什么是软件?

10/24/2023 软件工程 58
计算机硬件 VS 计算机软件
֍软件是逻辑产品,而不是物理产品,所以,软件具
֍有和硬件完全不同的特征
硬件 软件

10/24/2023 软件工程 59
软件具有与硬件完全不同的特征

֍软件是开发产生的,而不是用传统方法制造。

֍软件不会像硬件一样有磨损。

֍很多软件不能通过已有构件组装,只能自己定义。

软件是逻辑产品,而不是物理产品,所以,
软件具有和硬件完全不同的特征

10/24/2023 软件工程 60
硬件、软件失效曲线图

硬件失效率随着时间改变的“浴缸曲线”

软件维护要比硬件维护复杂得多

10/24/2023 软件工程 61
软件的本质特性

֍软件的本质特性:
֍微软制作了 Word
1.0 ,大约有 25w 行代码,晚
交付了 4 年,不经思考软件的本质特性是什么?
֍见学堂云中清华大学刘强老师的慕课视频

1.2 软件的本质特性

10/24/2023 软件工程 62
软件的特性

֍复杂性

֍易变性

֍不可见性

֍一致性

10/24/2023 软件工程 63
软件的本质特性:复杂性

10/24/2023 软件工程 64
软件的本质特性:复杂性

搜索引擎建立了全球三十多个站点、百
֍Google
万台服务器,亚马逊拥有超过 28 个云计算中心,
在全球的服务器总数量超过 150 万台。阿里云是
国内最大的云计算平台,拥有百万台服务器。毫
不夸张地说软件是人类开发的最复杂的物体,足
以可见软件开发是非常困难的

10/24/2023 软件工程 65
软件的本质特性:一致性
֍ 软件不能独立存在,需要依附于一定的环境(如硬件、网络以及其
他软件);
֍ 软件必须遵从人为的惯例并适应已有的技术和系统;
֍ 软件需要随接口不同而改变,随时间推移而变化,而这些变化是不
同人设计的结果。

10/24/2023 软件工程 66
软件的本质特性:可变性

10/24/2023 软件工程 67
软件的本质特性:可变性

֍这个世界在变,唯一不变的就是一直在变。
֍人们总是认为软件是容易修改的,但忽视修改了
修改所带来的副作用
֍不断地修改最终导致软件的退化,从而结束其生
命周期

10/24/2023 软件工程 68
没有任何变化的软件一定是没用的,我们要以积极的态度和
有效的方法控制变更,使软件在演化的过程中保证高质量

10/24/2023 软件工程 69
•软件是一种 “看不见、摸不着” 的逻辑实体,不
具有空间的形体特征
•开发人员可以直接看到程序代码,但是源代码不
是软件本身
•软件是以机器代码的形式运行,但是开发人员无
法看到源代码使如何执行的

10/24/2023 软件工程 70
这种不可见行不仅限制了软件的设计过程,同时严重的阻碍了相互之间
的人与人的交流

10/24/2023 软件工程 71
思考:

֍程序有道德么?软件公司是否有道德?

10/24/2023 软件工程 72
10/24/2023 软件工程 73
爬虫有可能违法吗?

♥ 爬虫有可能违法,严重的甚至构成犯罪。什么样的爬虫是违法?
♥ 爬虫程序规避网站经营者设置的反爬虫措施或者破解服务器防
抓取措施,非法获取相关信息,情节严重的,有可能构成“非
法获取计算机信息系统数据罪”。爬虫程序干扰被访问的网站
或系统正常运营,后果严重的,触犯刑法,构成“破坏计算机
信息系统罪。”爬虫采集的信息属于公民个人信息的,有可能
构成非法获取公民个人信息的违法行为,情节严重的,有可能
构成“侵犯公民个人信息罪”。

10/24/2023 软件工程 74
10/24/2023 软件工程 75
做到知法守法
2017 年 6 月 1 日起施行

10/24/2023 软件工程 76
本课小结

• 课程介绍
课程目标、学习要求

• 软件工程的基本概念
• 软件
概念、特性

10/24/2023 软件工程 77
课后作业

֍完成课程项目分组和分工

֍选定课题(实验课)

֍集体讨论所选课题的功能需求

֍确定开发技术及工具

֍开始学习相关技术

10/24/2023 软件工程 78
谢谢聆听
Thank You !

10/24/2023 软件工程 79

You might also like