当前课程知识点:软件工程 > 第1章 初识软件工程 > 1.6 业界人士谈软件工程 > 海芯科技创始人施侃乐访谈
我们是一家专门从事于
3D打印的技术公司
我们致力于去做下一代的
智能3D打印的操作系统
和3D打印机
在我们整个的开发过程里面
有很多人
做了很多软件方面的研究
和开发的工作
而这里面最主要的一些工作
跟我们的软件工程
其实是息息相关的
我们就是这样的一家公司
提供3D打印机的操作系统
把3D打印这个概念
引入到我们的日常生活中来
让4岁以上的小孩子
就能够玩起来3D打印机
那么说到操作系统
这是一个软件的范畴
在制作整个3D打印的操作系统的
这个过程里面
我们涉及到软件工程的方方面面
在这里呢
我们也结合这样的课程
我们为大家介绍三点
我们在日常开发的过程中
涉及到了哪些方面
像我们公司
在100多个员工里面
有大部分是软件的开发人员
而这些开发人员里面
很大部分呢
很大部分我们的设计师
都是软件工程这门课的学生
我们在创业的
最开始的十几个创始人里面
大部分也都是刘强老师的学生
在开发软件的过程中
我们注意到
做一个软件
并不仅仅是把这个软件做出来
而更重要的
是把这个软件做成一个好用
能用和易用的软件
在这个开发过程里面
涉及到我们的平衡
那么就是软件的质量
和软件的开发周期
这两者之间的平衡
而软件工程
其实是解决这样的问题的一个
解决方案
软件工程里面
提供了很多开发的模型
包括我们的瀑布式的开发
我们的敏捷式的开发等等
而不管采用什么样的开发的流程
我们最主要是解决的是
面临特别大的市场的挑战
我们如何能够在最短的时间内
开发出最快捷 有效
和易用的软件来
我们做了全世界的第一款
基于3D打印机的操作系统
那么在开发这个过程中
其实我们遇到了
非常非常多的问题
在这些问题里面最主要的
是大量的软件开发的困难
如何让大家并行地一起工作
和一起解决
那么这就是软件工程里面
涉及到的项目管理
和项目协同这样方面的概念
软件工程
为我们提供了很多
项目管理的模型和方法
它教我们如何让很多人
一起开发这个软件
让一起开发的这个软件
还能够同时运行在同一台机器上
这是一件非常非常了不起的事
在书里面经常有人说
软件是这个世界上
最复杂的一件工程
为什么呢
因为软件体现在每个人
不同思维的耦合
那么我们在做这样一款
三维打印机上的操作系统的时候
事实上也遇到了这些问题
我们在打印机的
设计的这块的代码里面
有很多很多超过几十个的模块
那么我们有几十个开发人员
同时去写这样的程序
那么这个中间大家可以想象
遇到了哪些的问题
这中间包括我们工程方面的
代码的耦合
这就涉及到软件工程里面
提供的代码的管理
我们用Subversion的方式
来管理我们很多版本的代码
那也涉及到我们
这个软件开发的过程中
任务的管理
我们之前用track
现在用更多的先进的
这种管理方法
去管理我们的整个的任务和团队
让我们软件开发的进程
按照一步一步地往前推动
那么在这个整个的过程中
其实每一个环节都涉及到
我们软件工程的内容
而所以软件工程对我们来说
不仅仅是一个课程
而更重要的是实践的过程
和推动我们软件项目往前走的
一个必要的工具
那么第二者呢
我们也谈谈这个软件
大家都在说
这个软件是一个非常非常容易
出错的一个系统
当IBM去发布
它的第一款操作系统的时候
已知的Bug就成百上千
而我们的操作系统
事实上暴露在用户面前
这个中间涉及到的问题和Bug
非常非常的少
为什么呢
因为这几十年来
我们的软件工程
取得了长足的进展
而软件工程在这个过程中
管理的是一个什么事
就是让我们的软件的品质提高
让我们的软件出现的问题
越来越少
在我们整个开发
这个操作系统的过程中
我们涉及到如何用计算机
去跟我们的硬件系统耦合
大家都知道3D打印机
是一个硬件和软件
耦合在一起的这样的一个设备
如何通过它们之间的耦合
尽量地减少问题
而这些方面的问题
事实上非常难以调试
因为我们要涉及到
用我们的单片机
去控制我们的硬件系统
控制我们的每一个电机进行运转
那么还涉及到
我们有一个特别大的屏幕
这个屏幕上面的程序
如何去控制我们的单片机
那么这个中间每一个环节
都可能蕴含着非常非常多的错误
我们用什么方法去进行测试
去进行度量
那么是软件工程告诉我们的
软件工程里面
有一个非常重要的内容
就是如何进行软件的质量保证
和测试管理
对我们的开发工作而言
其实我们的开发团队
采用了三种层面的测试
那么这三种层面的测试
分别是我们的单元测试
我们的集成测试
和我们的用户的使用的测试
单元测试
就是让我们每一个开发人员
都能够在写好自己的那一个函数
写好自己那一个模块的同时
同时做好整个软件的问题的检测
和测试工作
那么这个其实依赖于本身
软件开发人员的个人的素质
但是呢
我们软件工程
是解决一个什么问题
是通过规范的方式
和制定规则
让我们每一个人发挥的效能
是相同的
让我们软件的开发
不依赖于我们每一个人的
具体的能力的强弱
让我们的软件的品质
是均一化的 可以保证的
那么当我们所有的人
都把自己的程序写好以后
把所有的内容放在一起
我们要做集成测试
我们的集成测试
其实非常复杂
那么包括我们的硬件的集成测试
硬件和软件的集成测试
和软件上层的集成测试
那么这个中间
还有大量的软件测试的方法
要等待我们去做
那么最终呢
我们要做消费者的
这个用户的使用测试
我们往往请很多的小孩子
请很多的非专业的用户
去尝试使用我们的软件
那么这个就好像是
最早年的时候
微软也请很多很多的消费者
来使用
提供很多很多的用户
测试的反馈
来使我们的整个的开发得到迭代
那么这块是用户测试
我们认为这一块非常非常的重要
如果没有软件工程
为我们铺设的这些方法
和道路的话
可能我们现在的软件开发
还停留在几十年前
做一个软件出现很多很多问题
这样的问题中
那么软件工程的开发
不是一个人的工作
它不是做一个小的程序
我们做一个软件
所谓的软件
就是很多人把自己的智慧
和代码集合在一起
这样的一种集成的体
软件的这种集成体开发的过程中
也涉及到很多的模式
有的朋友就在问
我们每一个人
都有自己的开发方式
每一个人都有自己的开发方法
那么在这些开发方法
使用的过程中
可能每一个人都有自己的习惯
软件工程是解决什么问题呢
就是让不同的开发人员
把自己的使用习惯
都归结成一些规则
让我们每一个人写出来的代码
都是同样的思维
同样的思路
看起来像一个人写的代码
那么这就是软件工程中间
有很多的模式
我们把这个模式叫做设计模式
我们公司里头
采用的很多开发方式
也正是因为使用了
这些标准的设计模式
使得所有人思考这个软件
想这个问题的方式
都得到了统一
因此所有人的代码
可以在这个方面得到一致化
得到统一
那么软件工程介绍了
十几种开发的模式
设计的模式
我们在软件工程的课里面
也会一一地学到
而想跟大家交流的是
这些设计模式
在我们实实在在的开发过程中
事实上都得到了特别广泛的应用
而正是因为我们
科学地使用了这些设计模式
才使得我们几十个
开发人员的工作
能够耦合在一起
能够最终做出我们的产品来
这是相当不容易的一个工作
从总体上来讲
我们做了几十年的
这种软件开发的研究
到现在来讲
从最开始的操作系统
到我们现在的
3D打印机上的操作系统
大家还会遇到各种
智能设备上的操作系统
还会遇到我们更多的
复杂的系统的软件
而这些软件的开发过程中
我们之所以能够做出这样的软件
之所以能够保证这些软件
能够健康 有效地运行
最重要的一点就是
我们采用了
科学的软件工程的管理方法
这些科学的管理方法
是让我们每一个开发人员的智慧
能够耦合在一起
能够让他们以规范的方式
互相配合
最后做出我们的软件来
那么在软件工程开发的过程中
人始终是最重要的
对于我们而言
整个开发过程中
人的几个基本的素质
我们认为是特别重要的
第一点
首先就是这个人
应该拥有极强的代码的阅读
和理解的能力
以及书写代码的这个能力
而第二点呢
其实对于整个行业
和这个软件发展来看更重要
就是每一个软件的工作人员
需要有一个极强的责任心
责任感
和对整个软件产业的敬畏之心
这种敬畏
不仅仅是包括对于
前人工作的敬畏
更重要的是对于我们用户的体验
用户的感知的敬畏
我们每一个软件的开发人员
要以满腔的热情
投入到书写代码的工作
测试的工作中去
而更重要的是
要从自己的开发工作中
自我反省 自我提升
在这个提升的过程中呢
不仅仅是要对自己的代码
自己的程序负责任
同时也需要对自己的代码和程序
为用户做出的这样的体验负责任
让我们每一个用户
使用到咱们的程序的时候
都表现出完美的体验和感受
那么第三点呢
我们认为
一个合格的软件工程师
应该具备的素质
就是职业的道德
这个中间包括
对代码的品质的保证
以及对整个公司的秘密的保护
等等等等
这些方面的素质
那么第四点我们认为很重要的是
每一个程序员
需要和其他的程序员
具有一个协同的能力
这中间包括人与人
是如何相处
人与人之间如何交换自己的代码
开发的心得
以及交流自己的开发的经验等等
那么这些每一个素质
对于我们的开发人员讲
都是不可或缺的
在我们的公司
也有非常多的开发人员
我们从
很多的开发人员的面试过程中
几乎是100个人员里面
能够选择一两个开发人员
加入到我们的团队里面去
而这些加入到公司的开发人员
至少具有以上的四种特质
我们认为这样的开发人员
是能够在软件开发的过程中
为整个公司做出贡献
和做出一个完整的软件的
最后
还是希望大家能够喜欢这门课
然后也希望
通过我们这个亲身的实践
告诉大家
软件工程不仅仅是一个学科
而更重要的是几十年来
软件开发的经验的总结
这些经验对于我们来说
极其的宝贵
这使得我们
可以让很大的软件设计的团队
耦合在一起
制作出大家日常生活中
用的各种各样的软件
当然
这个中间也包括
我们的3D打印的操作系统
希望大家喜欢这门课
也希望大家能够在这门课里面
学到很多的知识
谢谢大家
-1.1 软件无处不在
--讲课视频
-1.2 软件的本质特性
--讲授视频
-1.3 软件工程的产生与发展
--讲授视频
-1.4 软件工程的基本概念
--讲授视频
-1.5 软件质量实现
--讲授视频
-1.6 业界人士谈软件工程
-测验题--作业
-讨论题
--讨论题
-作业题
--第一张 作业题
-2.1 编程过程与规范
--讲课视频
-2.2 良好的编程实践
--讲课视频
-2.3 Python集成开发环境
--讲课视频
-2.4 代码静态检查
--讲课视频
-2.5 代码性能分析
--讲课视频
-2.6 结对编程实践
--讲课视频
-2.7 刘贺谈软件工程
--讲课视频
--讨论
-测验题--作业
-作业题
--第二章 作业题
-3.1 单元测试概述
--讲课视频
-3.2 黑盒测试方法
--黑盒测试方法
-3.3 白盒测试方法
--基本概念
--代码覆盖标准
--基本路径测试
-3.4 单元测试工具
--单元测试工具
--html
-测验题--作业
-作业题
--第三章 作业题
--作业题附件
-4.1 软件过程
--讲课视频
-4.2 软件过程模型
--讲课视频
-4.3 敏捷开发过程
--讲课视频
-4.4 微软公司开发过程
--邹欣经理自我介绍
--微软开发过程之一
--微软开发过程之二
-测验题--作业
-5.1 团队组织与管理
--讲课视频
-5.2 项目沟通管理
--讲课视频
-5.3 软件项目计划
--讲课视频
-5.4 软件项目估算
--讲课视频
-测验题--作业
-讨论题
--讨论
-6.1 敏捷开发之Scrum
-- 敏捷开发之Scrum
--html
-6.2 用户故事与估算
--讲课视频
-6.3 团队协作工具Tower
-6.4 配置管理
--讲课视频
-6.5 配置管理工具Git
--讲课视频
-测验题--作业
-作业题--作业
-7.1 需求工程师
--讲课视频
-7.2 需求定义
--讲课视频
-7.3 需求的类型
--讲课视频
--讲课视频(2)
-7.4 需求工程过程
--讲课视频
-7.5 需求的主要来源
--讲课视频
-7.6 需求获取技术
--讲课视频
--讲课视频二
--讲课视频三
-7.7 撰写需求文档
--讲课视频
-测验题--作业
-讨论题
--讨论
-8.1 用例建模概念
--讲课视频
-8.2 用例建模过程
--讲课视频
-8.3 用例建模精讲
--讲课视频
-8.4 建模工具介绍
--讲课视频
-8.5 微信抢票应用案例
--讲课视频
-测验题--作业
-讨论题
--讨论
-9.1 面向对象分析
--讲课视频
-9.2 CRC卡片分拣法
--讲课视频-1
--讲课视频-2
-9.3 面向对象设计
--讲课视频-1
--讲课视频-2
-9.4 类图建模
--讲课视频-1
--讲课视频-2
-第9章 面向对象分析与设计--测验题
-讨论题
--讨论
-10.1 顺序图概念
--讲课视频
-10.2 顺序图建模
--讲课视频
-10.3 顺序图风格
--讲义视频
-10.4 状态建模
--讲课视频
-10.5 状态图
--讲课视频
-10.6 状态图精讲
--讲义视频
-测验题--作业
-讨论题
--讨论
-11.1 软件体系结构概念
--讲授视频
-11.2 软件设计原则
--讲授视频
-11.3 软件体系结构风格(一)
--讲授视频
-11.4 软件体系结构风格(二)
--讲授视频
-11.5 软件体系结构风格(三)
--讲授视频
-11.6 软件设计过程
--讲授视频
-11.7 Web系统架构设计
--讲授视频
-11.8 数据库选择策略
--讲授视频
-测验题--作业
-作业题
--html
--html
--html
-作业题--作业
-12.1 交互设计概述
--讲授视频
-12.2 交互设计目标
--讲授视频
-12.3 GUI设计原则
--讲课视频
-12.4 KLM效率模型
--Video
-12.5 Fitts定律
--讲授视频
-12.6 交互设计过程
--讲授视频
-测验题--作业
-13.1 软件测试概念
--讲课视频
-13.2 软件测试类型
--讲课视频
-13.3 软件功能测试
--讲课视频
-13.4 软件性能测试
--讲课视频
-测验题--作业
-14.1 软件部署与交付
--讲课视频
-14.2 软件演化与维护
--讲课视频
-测验题--作业
-第一部分:基础知识
-第二部分:编程与测试(选做)