软件工程——个人总结
一、回想开学初对于软件工程这门课的期望,总结本课程对你带来的提升:
1.学习和使用的新软件
Git
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
本次学习使用git主要用于在lintcode中提交代码,但是也学习到了它的基本代码和基本使用
2.学习和使用的新工具
Enterprise Architect
Enterprise Architect是一个全功能的、基于UML的visual CASE工具,主要用于设计、编写、构建并管理以目标为导向的软件系统。
Enterprise Architect在软件工程课中用来画Use case图、类图、顺序图等各种图的工具软件。在一些图的绘画中提供了很大的便利,同时兼容很多软件。
Markdown编辑器
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。
Markdown用于编写说明文档,并且以“README.MD”的文件名保存在软件的目录下面。在软件工程课中,书写各类文档提供了便利。
3.学习和掌握的新语言、新平台
C#
C# 是一个简单的、现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的。
在软件工程课的四则运算UI界面的绘制时,学习和使用的。它在UI界面的制作带了很多的方便,同时它对于我所熟悉使用的C++语言有着很好的兼容。对于编写代码有着很大的速度提升。
Bootstrap
Bootstrap,来自 Twitter,是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷。
基于微信平台的藏医药平台,在网页设计的部分采用了bookstrap的代码。
MVC开发
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
因为我们做的项目是基于微信的藏医药平台,所以在网页设计这块选择了MVC进行网页的开发。通过完成这个项目,也学习使用了一般的MVC开发。
4.完成的代码
大概在2000行左右吧,从最初的四则运算到最后的大作业。在最后的大作业时,边学边写的制作方法,产生了大量作废的代码,但是这也是一种的学习方法,在错误中摸索前进。
5.学习和掌握的新方法
需求分析
需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。
软件团队的模式
主治医生模式,明星模式,社区模式,业余剧团模式,秘密团队,交响乐团模式,爵士乐团模式,功能团队模式和官僚模式。不同的模式反应了不同的分工方式,造成了不一样的效果。
单元测试
单元测试是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
通过单元测试,可以解决减少软件可能会出现的各种bug。这对于提高程序的可执行性有着极大的作用。
白盒测试和黑盒测试
白盒测试[1] 又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
总结与展望
1记录自己在软件工程课程上的经验总结
在软件工程课程上,让我明白了真正的去开发一个软件是多么的不简单,它并不是简简单单的把我们自己的想法用代码的形式表达出来。在最初的开发,我们要进行文档的书写,去思考软件的需求,去思考用户的需求。在这门课程中,也让我们真正认识到团队在软件开发过程中发挥的真正作用,它不并是简单的人员组合,团队中的每个人都有着自己的责任。一个团队是要互相帮助,互相努力的。所以我们应该完善自己的代码规范。软件课程中明白一个真正的软件开发的过程,在自己开发的过程中明白了许多,学习到了许多。
2对于下一届的学弟学妹你有什么建议和告知呢?
在软件工程课上,是真正的将我们之前所学习到的知识实际运用,这门课程中,我们可以会发现一个软件的开发并不是想象的那么简单,一个团队的合作并不是将每个人简单的累加到一起。认真的学习这门课程会在其中发现许多的知识点,不只是在软件的开发上,更对往后的发展有着关键的作用。
3分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》团队合作的阶段,你们团队经历过么?最后到达了哪一阶段?
我所处团队的项目是藏医药的微信平台。团队合作之初,我们共同讨论对于项目的需求分析,用户分析,功能主体模块分析。进入开发阶段时,我们确定了团队分工,任务分配。在项目测试阶段,共同对项目功能的实现进行测试。同样的,在第一次的团队课程中,使用团队来完成任务是我们的第一次,在过程中会出现各种各样的问题,在分工的不充分讨论让我们有了一些歧义。没有将我们全部考虑的需求全部的实现,有着一些美中不足。
看完《构建之法》后的几个问题
1.在阅读第二章实践这一节中,书中建议代码的基本功联系使用最基本的编辑器而不是VS,但是通常情况下都是通过遇到一个陌生问题下,一面学习一面解决问题,使用更高级的编译程序可以简化程序,可以提高程序的可读性和以后的软件熟悉度,真的需要从基本开始打下代码基础和代码的风格吗?我们从最基本的学习中能收获到很多吗?
在之后的团队合作中,我们一起完成任务,一起编写代码,所以一些基本代码的规范对于团队之间的交流非常重要。
2.在第三章的学习中,以篮球运动员为一个例子,他们这个职业有着自我的数据,同样程序员也有着自我的代码风格,对于团队里的成员来说,或者对于不同的人来说,一个人代码风格的好坏有着基本定义,但是在细节方面可能因人而异,在学习过程中就存在这样的问题,阅读第五章在团队工作中一定也有着差异,在同一队中一个人说好,一个人可能会认为不好,真的需要为了团队中个别几个成员的交流来编写二种不同样子的代码吗?
代码的规范需要每个人成员来遵守,同样的,在团队中的要进行充分的交流,我们可以用交流来尽可能的增加代码的可读性。
3.阅读第八章在用户需求方面,除了我们对于用户的基本需求满足,我们也要对大众用户进行问卷调查或者是面对面的讨论软件的差异,在软件的需求方面,双方会有着一些歧义,但是又不想要失去任意一个潜在的用户,是否需要去考虑个别用户的特殊需求?
个别用户的需求可能是吸引部分潜在客户的关键因素,所以我们需要在发布之后进行用户的反馈进行软件的修改。
4.在用户功能定位时,如何定义用户的不合理的需求以及是否可以将他人需要收费的项目免费?
需要在软件需求分析中进行定义,在文档进行完整的规划,对于自己的功能进行分析。
5.第十二章用户体验,用户体验应该在最初设计时全面考虑还是通过用户使用软件进行反馈后修改,不用的用户有不一样的感觉该怎么处理?
在我看来,软件最好两者是两者兼容,同样的,可以在设计时进行一些问卷调查,对所要执行的软件功能进行一定的用户使用情况,在软件进行改善,尽可能的去完善用户的需求。