软件工程之路(一)——概论

前言

从本科阶段开始接触计算机,到现在也2年多了,但大都是自己盲目的学习走马观花一般,没有什么系统性。最近接触到Winform开发,在师兄的带领下学到了很多东西。然而地痞流氓般的半路出家终归不如系统学习过的人考虑的全面。这可能就是常说的有操作,没意识(活该青铜…)。邹欣老师的《构建之法——现代软件工程》是不可多得的一本好书,内容生动有趣,干货满满,可以说是相当惊艳了。把东西写下来一方面是把学到的以及体会整理一下,方便查阅,还有就是激励自己,不断学习,不断进步。

一些建议

个人与团队

软件工程的学习是一个循序渐进的过程,注重在过程中体会学习,实战比理论更重要。意识的培养不是空谈出来的,需要针对实例,看如何一步步进行开发得出经验教训提升自己的水平。

  • 软件开发分个人开发、团队开发。个人开发就比较简单了,只能是自我激励,不断总结。而如果是团队开发,考虑的可能要多一点,综合来说可以参照以下几点:
    • 人员分工——分配任务具体到个人有利于提高作业效率,防止南郭先生的出现。
    • 明确的规则——这个规则包括流程中的规则,过程中奖罚的规则,以及标准的制定。分工合作,不同人之间能顺利的完成交接,我认为这是衡量规划是否恰当的一个指标。
    • 截止期限——事实证明,你永远不知道你自己的潜力有多少,换句话说,人的潜力是无穷的,或者待开发的。这些行为需要一台发动机来驱动,如果发动机熄火了,但不代表车就跑不动了。开不了那就外力来推。对每一阶段的任务规定一个期限,并进行成果汇报或检核。这样的检查通常难以让人把任务堆到最后。
    • 注重用户体验——一个项目的开发,不以用户体验为主,那也是相当失败了。你用户体验贼烂,那你完了,口碑下降不说,你废大劲搞的东西没人用不就尴尬了。一问就是这玩意太难用了,不会用。那优化软件界面,做好与用户的交互,必要时还要有单独的文档说明,尽可能的傻瓜式操作,毕竟这群上帝们不是来帮你调bug的。
    • while(1) 总结、改进——开发的过程一方面是把自己的知识进行实体化,另一方面也可以不断提升自己。要做到及时总结,认真体会,汲取经验教训,进一步完善项目,包括功能拓展,bug修复等,都是需要好好琢磨的地方。

开发的流程可以抽象为下面两个阶段

Alpha阶段

  1. 开始维护以前开发出来的程序,理解它,然后!!理解用户的痛点。
  2. 找Bug,改Bug,重构小部分代码;一部分同学可以开发测试用例。
  3. 在现有版本的基础上做少部分增量开发,快速发布并收集用户反馈。

Beta阶段

  1. 根据Alpha版本的反馈,进一步分析需求,估计实现需求的难度(此时应该能理解客户需求是什么)。
  2. 设计→开发(重构)。
  3. 回归测试(用到上面开发的测试用例)。
  4. 发布,收集用户反馈,看看新的版本是否真的解决了用户的问题。
  • 循环进行Alpha、Beta阶段。一开始的开发过程较为艰难,从Alpha阶段入手,学习前人的方法,然后寻找bug,再做进一步开发。这有前人还是好的,大多数情况下都是从0开始,如何去设计也是个不小的问题,bug也是一直哔哔的闪。找bug的过程实则为深入理解这个项目的过程,那什么是bug呢?
  • 在开发过程中,我们首先获取到的是需求,有了需求我们才能去构思用什么方式实现,需要具备哪些功能,bug也就随之而来。
  • 对于bug,中文可以理解为缺陷,但bug并不代表就是错误,他可以理解为当用户提供了指令或其他情况下该软件产生了不符合设计初衷的一些行为。这样看的话,软件的开发又是一个不断拓展可实用功能的过程。

一个简单的程序

说是实现一个可以出30道加减法题目的程序。(大佬说一袋烟的功夫搞定,说实话太渣了,用了好几个小时才勉强过关。)开发还是要从需求入手,用户提了一点小小小小的要求:

  • 题目避免重复
  • 可定制数量和打印方式
  • 可以控制下列参数
  • 是否有乘除法
  • 是否有括号
  • 数值范围
  • 加减有无负数
  • 除法有无余数
  • 是否支持分数(真分数、假分数……)
  • 是否支持小数(精确到多少位)
  • 打印中每行的间隔
  • 用随机数来生成题目中的每一项,并可以指定范围。
str = random.Next(0, 20).ToString();//生成一个在0~20以内的随机数,20可从外部获取
  • 用checkedlistbox来控制题目中要用到几种算法,包括有无乘除法
    在这里插入图片描述
    该控件有一GetItemChecked方法,返回bool,检查某一项是否被选中。
  • DataTable类中包含一个comput方法,用以计算字符串型表达式。
  • 可以通过输入答案与标准答案的对比来判断结果的正确性。
  • 对已经做过的历史题目保存并显示出来。
  • 将当前生成题目与前面出现的题目进行对比,如果一样,就重新生成。
  • 如果答不出来可以跳过此题,提高容错率。

软件雏形如下
在这里插入图片描述

软件开发类比成制作飞机有着不同阶段

阶段
玩具阶段 纸飞机、航模,从思想上先进行转变,先有了这种想法
业余爱好阶段 有了兴趣就想着实现,比如用氦气球带着自己上了天
探索阶段 莱特兄弟的飞天梦,虽然很短暂,却是全人类大胆的一次尝试
成熟产业阶段 一个合格的产业机构,已经实现了从设计到实施的完整体系,包括种种保障,更加注重用户体验。

软件工程是什么

软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
——邹欣. 构建之法:现代软件工程.

软件的开发注重以下几点:

  • 研发出符合用户需求的软件:需求来自于实际,而不是自己想象出来的“需求”或者人云亦云的需求。
  • 通过一定的软件流程,在预计的时间内发布足够好的软件:这个软件不是为了应付而急忙赶出来的,而是应该经历了一定的软件流程,通过全体团队成员的努力,在任务计划内逐步完成的。
  • 通过一定方式展现所开发的软件是可以维护继续发展的:例如,对用户需求有详细的分析,包括对将来这类软件发展的趋势的分析。主要功能都有设计文档,源代码完整,有修改记录,并有最后版本。对于已知的bug和将来的工作都有详细的记录。

努力切实做到上述几点!!

猜你喜欢

转载自blog.csdn.net/qq_39623521/article/details/84530879