一.快速看完整部教材,列出你不懂的5-10个问题,发布在你的个人博客上。
1.书中2.3节说工程师在开发流程中相比学生会花费更多时间进行需求分析和测试。从网上一些相关人士的论述来看,需求分析可以明确功能,减少可能的改动,测试可以修正缺陷,同时改善软件质量。但编码质量差可能会导致要花费更多的时间进行测试。那么,用工程化的方法开发一个软件的时候,是否可以说需求分析,测试比编码更重要?是否应该将工作重心放在分析和测试上?
2.书中4.4节提到代码复审是指找出代码的错误,包括逻辑错误和算法错误。但是从百度百科和一些博客来看,这个过程更偏向于审查代码的质量和可读性。那么代码审查到底要做些什么?是两者都包含吗?
4.书中第九章提到项目经理是要协调团队内外,负责管理流程。那么,在接下来的团队项目中PM具体都要做些什么?和书上说的完全一样吗?
5.书中的第十一章提到设计文档包含流程图。除此以外,软件的设计文档还应该照顾到那些内容?要细化到什么程度?
6.开源项目可以给开发方带来什么样的好处?
7.书中的第十六章说明了如何去创新,书中的例子体现了有些时候比起技术,重视用户需求,然后针对需求进行创新更为有效。那么,软件工程领域的创新是否不太依赖技术?
8.从书中介绍的几种团队模式来看,功能团队模式看起来比较通用,而且有很多优点。那么,团队之间是否分工一定要明确,所有人都要有相近的工作量?
9.在软件工程中,了解底层知识是否和编程经验一样重要?软件工程师是否会经常用到编译,计算机硬件架构等偏底层的知识?
二.请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人?
软件(Software)一词最早出现于美国数学家John Tukey在1958年发表的论文"The Teaching of Concrete Mathematics"中。
软件工程最早出现在1968年德国的Garmisch,北大西洋公约组织首次举办的软件工程学术会议上。会上Peter Naur和Brian Randell提出了这一概念。
三.大家知道了软件和软件工程的起源,请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?
Ada Lovelace在19世纪为将要制成的分析机写了算法流程图,虽然最后没能做出实物,但她被视为第一个“写计算机软件的一部分”的人。
四.上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
名称 | 优点 | 缺点 |
Microsoft TFS | 功能强大的团队开发工具 | 使用和维护麻烦,硬件要求高 |
Git | 分支能力强大,开源,分布式管理 | 国内访问速度慢,对中文支持不好,学习曲线陡峭,不易上手 |
Mercurial | 跨平台,封装好,支持revset | 分支管理非常不灵活,社区差 |
GitHub | 基于web的git服务,可多人同时在线维护 | 企业使用付费较高 |
Bitbucket | 易学易用,支持中文,完全免费闭源,支持最多5人私有项目免费开发 | 作为同类产品性能比git差 |
Trac | 灵活,可定制性强,可集成SVN | 功能较弱 |
Bugzilla | 免费,支持中文,可定制 | 界面差,只能管理缺陷 |
Apple XCode | 编译速度极快,自动提供撤消、重做和保存功能 | 新版本可能不兼容旧插件 |
在给出的网站中,一年内使用bugzilla的项目有几千个,使用git的项目有1418个,使用Mercurial的项目有47个,使用Trac的项目有20个左右。
估计用户数:git和bugzilla都有一百万以上的用户,Mercuial和Trac使用人数有几千