软件工程作业1——序章
软件工程作业1——序章
项目 | 内容 |
---|---|
这个作业属于 | 2020春季计算机学院软件工程(罗杰 任健) |
这个作业的要求是 | 个人博客作业 |
我在这个课程的目标是 | 掌握软件团队工程化方法,提高自我软件编程能力 |
这个作业在哪个具体方面帮助我实现目标 | 结合课程项目任务和时间点,阅读教材为实践规划蓝图 |
作业正文 | 如下 |
序章
- 当我看到第一次作业的4个问题的时候,第一反应是查什么搜索引擎用什么关键词来得到答案。
- 我们的课程三大主要项目个人、结对、团队是《构建之法》的课程实践,假如上一次的热身作业是一本书的“写在前面”,一次实践的展望与期冀,那这次作业就是课程的序章,未来十几周课程的实验指导书。通过课程项目任务和时间点,结合这本书和这次作业,要思考
- 我们未来会做些什么?课程目标是什么?
- 课程项目有哪些实践技巧?
- 未来我们可能会遇到哪些问题?
- 而接下来的疑问也是对第1和2点有什么不明白,通过阅读对第3点提出问题
阅读后的疑问
个人成长
- 问题一:在书本的2.3节个人开发流程 P35,有大学生和工程师PSP数据对比表(截图如下),阅读思考后有以下问题
- 大学生和程序工程师在PSP的需求分析、具体编码、测试环节时长区别产生的原因是什么?
- 最理想的PSP时长分配是什么?是工程师所花时间范式吗?
- 从大学生编程向工程师转变成长的过程中经历了什么?
- 当面对一个具体的项目时,我们对项目进度有什么预测和时间分配?
结对编程
- 问题二:书本4.5.2. 为什么要结对编程 P85,课程在第3周有结对编程项目,我有一些课程上的和结对编程方法的疑惑。
- 结对编程会是一项提升大多数项目质量的软件工程技巧吗?
- 结对编程在实际开发中并不常用,虽然在某些方面有奇用,比如Google的Jeff Dean & Sanjay Ghemawat,但似乎也只存在于某些默契度非常高的两位水平相同互补性程序员身上
- 两人之间的契合度,实践过程中对代码风格实现习惯的纷争,反复审核带来的开销,相比起双人的分模块确定接口开发,是否能提高质量和效率?
- 两位队友之间的磨合、督促的压力似乎对长期编程合作更有优势,我们课程为什么要用一个一周的项目来实践,能否得到一定的效果?
- 结对编程会是一项提升大多数项目质量的软件工程技巧吗?
团队合作
- 问题三:书本6.1. 敏捷流程介绍 P116,课程要求实现冲刺,连续10天每日例会记录,对此有一定困惑。
- 公司开发每日例会的间隔,一天一次是不是太频繁了?尤其是面对复杂的bug探测和研发问题时。
- 结合我自己实际科研项目经历,可不可以一周一次例会和一次项目进度督查,把更多时间留给个体探索和深入挖掘?
- 虽然科研和工程实现的工作性质相差很大,但一天一次的工作会是不是在团队交流上花费太多时间了?
- 问题四:书本6.5. 敏捷的问答 P128,敏捷的适用范围,如下表。
- 敏捷、计划、形式化这三种开发方法的适用范围?是不是可以理解为敏捷开发适用于现在迭代速度快的多数互联网公司开发,计划驱动适用于项目交付型开发,形式化的开发方法适用于大型军用或者安全要求性高的民用开发?
- 为什么我们课程要着重强调敏捷开发这种方法?而不是后两种?
-
问题五:第8章 需求分析 P157,我结合自己实际科创科研创新对于软件工程的需求分析有一些问题。
- 相比创新创业式的需求分析,软工方法的各种基于已有数据的分析方法(比如调查问卷、EyeTracking),具有多大的现实意义?是不是书本中的几个方法只针对软件开发中的产品迭代更新时的需求分析改善,而不在于产品创新?
- 需求分析,我在做科创项目的时候,最常被问到的一个问题就是,你的项目解决了什么痛点满足了什么需求,而且能开发出一款独特的、满足或者创造公众新需求的产品的公司,从产品研发来看已经成功,比如微信或者拼多多,或者阅读链接中的 对于三线城市的实践需求分析方法。
- 公司的创新性功能是不是大多数由PM在原始想法中提出?
- 假设软件工程的需求分析大多由PM提出,那么全方面的NABCD似乎在很多大的公司中是多个部分合作完成的,在软件工程开发里面讨论,是意味着软工开发需求分析人员也很需要和公司其他部门建立深入联系或者内嵌入其他部门吗?
- 相比创新创业式的需求分析,软工方法的各种基于已有数据的分析方法(比如调查问卷、EyeTracking),具有多大的现实意义?是不是书本中的几个方法只针对软件开发中的产品迭代更新时的需求分析改善,而不在于产品创新?
-
问题六:在书本9.3. PM做开发和测试之外的所有事情 P195
- 之前听说艺术行业的一句话“多快好省本身就是个悖论,多了没法快,好了没法省”,所以软件行业中,可能满足在多快好省中三选二吗?有具体的案例吗?而优秀PM在其中的作用和对PM的要求又是什么?
- 问题七:在书本11.5.5. 小强地狱 P250
- 小强地狱的方法是否在可行性上,对于不同层次的程序员值得分开讨论?
- 对于编程能力强的程序员团队,小强地狱是一项有效的平衡项目推进和bug消除的方式,但对于编程能力太弱的程序员团队,似乎很难在bug阈值设定、团队稳定开发和避免小bug导致“大怪物”之间权衡,很容易出现bug阈值设置太低导致程序员只能去debug,而影响稳定开发,设置过高之后,导致测试人员无法正常工作,甚至出现“大怪兽”,是不是这套软件工程方法或者说很多的工程方法的适用范围在编程能力相对较高的程序员上,而对于能力较弱的程序员反而累赘?
软件和软件工程词汇的出现
- 参考Wiki,软件(software)一词出现于1958年John Wilder Tukey的The Teaching of Concrete Mathematics 论文
In 2000, Fred Shapiro, a librarian at the Yale Law School, published a letter revealing that John Wilder Tukey's 1958 paper "The Teaching of Concrete Mathematics"[5][6] contained the earliest known usage of the term "software" found in a search of JSTOR's electronic archives, predating the OED's citation by two years.[7] This led many to credit Tukey with coining the term, particularly in obituaries published that same year,[8] although Tukey never claimed credit for any such coinage. In 1995, Paul Niquette claimed he had originally coined the term in October 1953, although he could not find any documents supporting his claim.[9] The earliest known publication of the term "software" in an engineering context was in August 1953 by Richard R. Carhart, in a Rand Corporation Research Memorandum.
- 参考课程作业的链接:就是她,写出了让阿姆斯壮成功登陆月球的代码!,软件工程一词出现于阿波罗登月计划期间(1961-1972),由Margaret Hamilton在计划期间提出。
软件工程发展的冷知识
- 参考了一篇有趣的博文,摘取其中两条
- 电脑病毒设计的初衷是为了证明,电脑可以被染上病毒
史上第一款电脑病毒,竟然是由防御技术专家Fred Cohen亲手设计出来的。他创造电脑病毒的目的仅仅是为了证明程序对电脑感染的可行性,从未希望借此对电脑造成任何危害。但这款程序却能够对电脑进行感染,并且能通过软盘等移动介质在不同计算机之间进行传播,因而命名为病毒。后来,他又创造出一种主动式电脑病毒,主要目的是帮助电脑用户找到未受感染可执行文件。
- Git使用SHA-1值不是为了安全,而是为了完整
Linux kernel开创者和Git的开发者——Linus说,Git使用了SHA-1并非是为了安全性,而是为了数据的完整性;它可以保证,在很多年后,你重新checkout某个commit时,一定是它多年前的当时的状态,完全一摸一样,完全值得信任。
源程序版本和项目管理软件
管理平台 | 优点 | 缺点 |
---|---|---|
github | 1. 开源代码、开源项目数量多 2. 入门难度低公开仓库免费。 3.分享平台用户多,可以交流程序的各种问题。 |
1.私有仓库访问有限制 2.上手容易,但想充分使用,需要大量学习时间。 |
gitlab | 1.私有库使用量大且免费 2.支持Gitlab + Docker + Jenkins协同运作 |
1.拓展功能需付费 2.某些功能需要二重验证 |
gitee | 国内代码托管平台,访问速度快 | 每个仓库有 1G 的容量限制 |
Apple Xcode | 1.可自动创建分类图表 2.提供自动撤消、重做和保存功能 |
更新版本后,一些插件可能会失效。 |
Bitbucket | 1.对于小型团队提供无限量的免费存储库,只限制 5 名成员 2.提交大文件速度快 3.有灵活的权限管控,可自定义域名,支持wiki |
1.使用群体和代码量不如GitHub 2.国内使用私有仓库的托管平台不如GitLab |
Mercurial | 1.版本控制工具(VCS)较好 2.服务器部署容易 3.适用于Windows |
分支管理不灵活,大团队使用不多 |
自我实践
-
git实践(之前计算器的作业)
- 之前做项目也在gitee上面分享过代码,但是操作和git似乎没有任何区别(有区别我没发现?)就不展示码云的实践图片了
- 之前做项目也在gitee上面分享过代码,但是操作和git似乎没有任何区别(有区别我没发现?)就不展示码云的实践图片了
-
Mercurial实践,在实践之前发现一份结合VS IDE使用的参考
- 简单的clone了一个仓库,然后自己创建上传了一个仓库
- 使用如下,感觉用起来和git差别不大
brew install mercurial # download on Mac OS
hg init # initialize repos
hg config --edit # set username & email
hg clone https://... # clone repos
# code ...
hg add .
hg commit -m "..." # commit
hg push