第一次个人博客作业
项目 | 内容 |
---|---|
作业所属课程 | 2020春季计算机学院软件工程(罗杰,任健) |
作业要求 | 个人博客作业 |
课程目标 | 学习软件工程,提高个人工程能力和团队协作能力 |
作业在哪些具体方面帮助个人实现目标 | 阅读教材进行相关思考,提出自己的疑惑 |
快速看完整部教材,列出你仍然不懂的5到10个问题,发布在你的个人博客上
问题一(2.3 个人开发流程)
PSP的目的是记录工程师如何实现需求的效率,而不是记录顾客对产品的满意度。工程师有可能很高效地开发出一个顾客不喜欢的软件(例如用户界面很差,功能未能解决用户实际问题,等等),那么这位工程师还是一个优秀的工程师么?
我们了解到一位工作经验丰富的软件工程师,会在开发软件的需求分析上花费较重比例的时间来做好软件的设计文档和准备工作,在软件工程中,用户的需求,包括用户期望框架和功能,这些都应该是工程师提前了解并考虑在内的,那么没有开发出顾客不喜欢的软件又怎么能称为“高效开发出”呢?
问题二(3.1 个人能力的衡量与发展)
软件项目的确需要创造性,需要一些意外,一些惊喜。但是,更多地是常规的,可重复的任务,软件工程的奠基人之一瓦茨·汉弗雷总结说,软件领域可以分为两个方面:一方面是技艺创新的大爆发;而另一方面是坚持不懈的工程工作,包括软件的改善、维护和测试等,这一方面占了90%—95%的比例。对于这些任务,一个成熟的软件工程师应该能够降低人物交付时间的标准方差。如果你能长时间稳定而按时地交付工作的结果,内部和外部的顾客就会对你的工作有信心,更喜欢和你合作。标准方差是六西格玛(Six Sigma)方法的核心概念,这也是杰克·韦尔奇在GE推行六西格玛的一大原因。
如果软件工程师为了达到这种和顾客的稳定合作关系,更多地去追逐常规,重复的任务,更在意的是交付工程任务的时间,这样长此以往地工作,是否会逐渐丧失本可以拥有的创新能力,或者说那些正在努力实现创新的软件工程师是否会因为无法短时间交付工程任务而放弃创新点?
问题三(4.5 结对编程)
每人在各自独立设计、实现软件的过程中不免要犯这样那样的错误。在结队编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。这样,程序中的错误就会少得多,程序的初始质量会高很多,这样会省下很多以后修改、测试的时间。
在结队的过程中,两个如果搭配好确实会使得任务完成得更出色,更高效。但是在以往的“结队”经历中,实际个人对另一方的任务完成情况总会有一丝不确定性,这就导致自己总习惯把握对方完成的项目情况,让自己心中有一定的把握,在理解他人做事的原理上,就会花费一时间;其次,结队的两个人必然会有实力的区别,如何去分配相应的工作和享受相应的成果,这是否也需要较为严密的规则制定?
问题四(8.3 获取用户需求——用户调研)
软件的功能和用户想要的一样么?不大一样。用户满意吗?不大满意,那用户到底想要啥?我们调研一下,然后开始新的循环······如何准确掌握用户需求?大家可以靠直觉,靠老板的命令,靠互联网上传来的各种信息,靠拷贝其他产品,靠其他不靠谱的手段······当然我们也可以靠一些经过实践证明行之有效的办法,其中许多具体做法既可以用在软件需求的收集阶段,也可以用在测试阶段。
软件工程师往往会在工程任务开始前花费一定时间在设计分析上,其中肯定包括对用户需求的考虑,但是如果顾客在一次次的新要求提出中,影响到软件的整体架构,需要工程师重新去考虑工程的整体完成方向,这是否会影响双方的效率,工程师应该如何应对?如果工程师从不同的方面去考虑用户需求,在这个过程中出现需求满足矛盾或者理解困难怎么办?
问题五(16.1 创新的迷思)
最近几年,我们整个社会似乎对创新很感兴趣,媒体上充斥了创新型的人才、创新型的学校、创新型的公司、创新型的社会,等等名词。有些城市还把“创新”当作城市的精神之一,还有城市要批量生产上千名顶级创新人才。
的确,近些年来,创新似乎是整个社会的发展方向,似乎只有冠上“创新”一词的公司,学校和技术,才有发展的可能,但是这些所谓的“创新”,真的是创新吗?我认为他们中的绝大多数,只是做到了新,而并未创造出来有价值的东西。这是一个追求高效,高速的社会,我们不断去完成下一个任务的过程中,或许会逐渐变得麻木,变得章程化,公司需要一个创新点,那好,我们按规矩给它一个新点子,至于这样的东西有没有价值,有待考证。创新我认为需要一定的环境来孵化,这需要我们突破常规的思维,现有的技术,在把握好先进的知识和视野下,去大胆想象,亲手实验。如何去培养一个具备创新能力的人才,我们需要更严谨的答案。
请问“软件”和“软件工程”这些词汇是如何出现的-何时,何地,何人?
软件(Software):软件一词最早出现在Richard R.Carhart在1953年八月发表的研究备忘录里;
软件工程(Software Engineering):软件工程最早由Margaret Hamilton提出。
软件工程发展的过程中有什么你觉得有趣的冷知识和故事?
1.电脑病毒的设计初衷并非是造成伤害
史上第一款电脑病毒,竟然是由防御技术专家Fred Cohen亲手设计出来的。他创造电脑病毒的目的仅仅是为了证明程序对电脑感染的可行性,从未希望借此对电脑造成任何危害。但这款程序却能够对电脑进行感染,并且能通过软盘等移动介质在不同计算机之间进行传播,因而命名为病毒。后来,他又创造出一种主动式电脑病毒,主要目的是帮助电脑用户找到未受感染可执行文件。
2.第一位程序员是位女性
也许最令人难以置信的是,历史上第一位程序员是位女性。她的名字是Ada Lovelace。在1843年,这位英国数学家Ada Lovelace,翻译了意大利工程师Luigi Menabreaw撰写的分析引擎文章。在翻译过程中,她把自己的理解都批注到每篇文章下,而这举动加快了计算机编程技术的发展。在这之后,她又设计出了第一种能够利用分析引擎计算伯努利数的算法,这也是第一个用电脑编写的算法。
3.第一台电脑为蒸汽驱动
作为公认的编程之父,Charles Babbage发明了世界上首批计算机之一。他将这台新设备称为分析引擎。其体积超过一栋房屋,由六台蒸汽机驱动并使用打孔卡进行编程。分析引擎有四大主要组成部分:1.转盘——相当于现代计算机中的CPU;2.存储——相当于现代计算机中的内存与存储介质;3.读取器——相当于输入机制;4.打印机——用于实现信息输出。
上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些,各有什么优缺点?
使用人数:
名称 | 使用人数 |
---|---|
GitHub | 31,000,000 |
Bitbucket | 5,000,000 |
Launchpad | 3,965,288 |
SourceForge | 3,700,000 |
GitLab | 100,000 |
GNU Savannah | 93,346 |
OSDN | 54,826 |
Ourproject.org | 6,353 |
Assembla | Unknown |
Buddy | Unknown |
CloudForge | Unknown |
Gitea | Unknown |
OW2 Consortium | Unknown |
Rosetta code | Unknown |
优缺点:
名称 | 优点 | 缺点 |
---|---|---|
Microsoft TFS | 是对敏捷,msf,cmmi等项目、过程管理、过程改善的支持。任务版上能将需求、项目进度一览无余,对于小团队而言,比甘特图更有用。 | 能应用起来的团队、公司的数量极少,多数真正用起来,也就是源代码管理这部分,这也仅仅是占TFS极小部分功能。 |
Git | 适合分布式开发,强调个体; 公共服务器压力和数据量都不会太大; 速度快、灵活; 任意两个开发者之间可以很容易的解决冲突; 离线工作。 | 资料少(起码中文资料很少); 学习周期相对而言比较长; 不符合常规思维; 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。 |
Mercurial | 有revset,扩展性,append only的存储结构 ,命令行简单,易于上手。 | 分支管理不灵活, 跨平台性能较差 。 |
GitHub | 适合分布式开发,强调个体;公共的服务器压力和数量都不会太大; 速度快, 成熟的架构,开发灵活; 任意两个开发者之间可以很容易的解决冲突; 离线工作,管理代码成本低,不需要依赖服务器; 部署方便。基本上下个命令就可以用; 良好的分支机制,可以让主干代码保持干净。 ;Git对程序源代码进行差异化的版本管理,代码库占极少的空间。易于代码的分支化管理。 | 资料少,学习成本比较大,学习周期比较长,要求人员素质比较高; 不符合常规思维; 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息;不支持中文,图形界面支持差,使用难度大,不易推广。 |
Bitbucket | 免费支持私有仓库, 支持 hg/git , 拥有灵活的权限管控,可自定义域名。 | 系统不够稳定 。 |
Trac | 有良好的扩充性,权限体系比较完备,非常灵活,可以随心所欲控制可以和SVN集成。 | 不支持多项目,需求和缺陷没有分离,用 wiki 来替代 Word 等工具编写文档对于产品策划来说门槛太高了,中文化不完整,不显示中文名,核心功能很少,不安装插件基本上没法用。 |
Bugzilla | 目前免费,支持中文版本。 | 只能管理缺陷 。 |
Apple XCode | 可以自动创建分类图表 ;编译速度快,操作快速轻松;自动提供撤消、重做和保存功能,无需编写任何编码。 | 更新版本后,某个插件可能会失效。 |
调查完目前流行的源程序版本管理软件和项目管理软件后,请你选择其中至少2个软件来进行动手实践。
使用github和git来实现一个远程仓库保存文件: