软件工程——个人总结
回想开学初对于软件工程这门课的期望,总结本课程对你带来的提升:
1、学习和使用的新软件:
花生壳,wamp,word、ppt
2、学习和使用的新工具
在设计界面的时候学会使用了Qt,界面美化过程中设计图片使用了photoShop
3、学习和掌握的新语言、新平台
数据库、新浪云、sqt、博客园
4、统计一下,你在这软件工程实践中,完成了多少行的代码
通过这一次的软件实践设计,粗略统计一下,大概完成了600多行代码
5、学习和掌握的新方法
软件设计时的团队分工、数据库的搭建、git实践、网页的编辑、软件测试
总结与展望
1、记录自己在软件工程课程上的经验总结
通过这次课程设计,我认识到了团队的力量是巨大的。每个人的力量可能是渺小的,但每个人都贡献出自己的能力的话会产生无穷的力量。在软件工程团队项目中我们要善于交流,积极表达自己的想法并多了解他人的想法,就会解决很多自己认为很困难的问题,让我明白了团队分工与合作协调的重要性。软件工程这门课以实验设计的课程,通过这一个学期的不断努力,不断测试,终于做出了这次软件课程设计。通过这次课程设计我学到很多专业知识和专业理论,让我受益匪浅,并且也锻炼了自己实践能力。也逐渐找到了这门课程的乐趣所在。
2、对于下一届的学弟学妹你有什么建议和告知呢?
学弟学妹们在选择项目的时候一定要切合自身实际,要了解自己的能力和所擅长所在,并且能够在实际中有用的项目。在选择好项目后,一定要尽早开始做,并且规定每个人每天每周的工作量,这样才不会最后期末答辩的时候手忙脚乱,不知所措。这样才有时间在后面对错误和不懂的地方进行尝试。
3、分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》团队合作的阶段,你们团队经历过么?最后到达了哪一阶段?
我们的团队最开始对所要选择的项目进行了讨论和分析,最后选择好了所做的项目。我们的团队所做的项目是基于微信的运动会报名系统,在项目开始后我们的组长对我们进行了分工,我们每个人都明确了自己的职责。在接下来的时间里,大家产生了一些分歧,而且有些同学有心无力,导致项目进展的很慢。后面经过我们不断地讨论和商量,项目的分工又一点一点明确下来。我们重新制定了详细的规定,大家也进行了一定的交流,互帮互助,因为我们都明白这不是一个人的事情,需要大家的共同的努力。通过我们共同的力量,我们的项目代码终于完成了,我们也明白这不是一个人的胜利,而是团队的胜利成果,通过这次项目设计我们也都是收获颇丰。
4、个性发挥,包括图文、照片和创意等
程序员 漫画两则
对第一次作业中的5个问题重新回答
1、当用户体验跟软件的维护性相违背时,应当如何取舍
在第17章“软件工程师的职业道德”中提到,软件工程师应以客户和雇主利益最大化的方式做事,与公众利益保持一致。可是当雇主的要求跟用户的需求冲突时,应当如何去取舍呢?有需求就有市场,当我们看到,学生不想尔雅这类的网上课程时,我们可以看到商机,我们可以选择去做刷课这类软件,所以我想问,这类程序是不是不应该做?
补充:我觉得我们作为程序员,应该有自己的职业道德,不能做违背道德和法律的事情,不能因为用户需求就违背做人的最基本的底线。
2、课本第45页提到软件工程师,那么设计师和工程师之间有什么区别以及怎样定义设计师与工程师的交互方式?
补充:在回答这个问题之前我们先得了解清楚设计师和工程师的区别,简单理解的说就是:在盖房子的时候,设计师是画图纸的,工程师是指挥的;在软件开发的时候,设计师是设计软件功能的,工程师则是写代码的。不同的工作性质导致了两者的思考方式的不同,工程师重要的思考习惯是从几个方面的信息中产生模式,通过模式产生出代码,因此,一个好的沟通模式是设计师尽可能提供足够的信息帮助工程师形成“模式”。这并不代表向工程师讲交互流程并不重要,而是我们需要结合“数据交互”和“人机交互”二者与工程师进行沟通。另一个方面,设计师往往喜欢从用户的角度讲述流程,而工程师所习惯关注地往往是“数据交互”而非“人机交互”,这也是设计师和工程师思考方式的不同之一。设计师主要是根据用户需求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档;组织和指导程序员编写、调试程序,并对软件进行优化和集成测试,开发出符合系统总体设计要求的高质量软件。工程师主要进行软件前期的项目需求的分析,然后对项目进行风险评估并试图解决这些风险,然后开始进行软件的开发,后期对软件的进度做相关的评估。
3、在需求分析阶段,我们要搞清楚:在问题领域的现实世界中,都有哪些实体,如何抽象出我们真正关心的属性,实体之间的关系是什么,在这个基础上,用户的需求是什么,软件是如何解决用户的需求的,怎样选择软件的侧重点,比如侧重用户,软件对硬件的依赖性,以及PC端还是移动端;那么在以上问题都解决的条件下,软件开发团队需要处理、了解这些信息,如书中所说:如果在处理的过程中有误解和遗失,就会导致开发过程中的问题发生,那么到底怎么表达才能更准确有效的交流?
补充:实体是结构化系统分析里的概念,客观存在并可相互区别的事物称之为实体。实体可以是具体的人、事、物,也可以是抽象的概念或联系。实体之间的关系有一对一、 一对多、 多对多。用户需求其实就是以一种展现方式,以方便快捷的解决用户所存在的问题。我们在设计软件的时候需要深入的了解用户的需求,在测试软件功能的时候需要用户不断的测试和体验,来给我们进行反馈,最终达成一个用户满意的软件,只有这样才能解决用户的需求。
4、课本第一章提到冒烟测试,那么什么是冒烟测试呢:
补充:对一个硬件或硬件组件进行更改或修复后,直接给设备加电。如果没有冒烟,则该组件就通过了测试。在软件中,“冒烟测试”这一术语描述的是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程。在检查了代码后,冒烟测试是确定和修复软件缺陷的最经济有效的方法。冒烟测试设计用于确认代码中的更改会按预期运行,且不会破坏整个版本的稳定性。冒烟测试(smoketest)在测试中发现问题,找到了一个Bug,然后开发人员会来修复这个Bug。这时想知道这次修复是否真的解决了程序的Bug,或者是否会对其它模块造成影响,就需要针对此问题进行专门测试,这个过程就被称为SmokeTest。在很多情况下,做SmokeTest是开发人员在试图解决一个问题的时候,造成了其它功能模块一系列的连锁反应,原因可能是只集中考虑了一开始的那个问题,而忽略其它的问题,这就可能引起了新的Bug。SmokeTest优点是节省测试时间,防止build失败。缺点是复盖率比较低。
冒烟测试是自由测试中的一种。
5、书中第五章讲到的团队精神跟集体主义有什么区别?
补充:在查阅资料和个人分析后我认为团队精神必须满足两个条件:一是合作创造的总体利益,必须大于每个个体单干的利益之和;二是每个个体获得的利益,必须大于他单干的利益,二者缺一不可。集体主义的荒谬,在于所谓的集体利益,不知道到底是谁的利益。如果真正是大家的共同利益,个体就不应该为集体无条件牺牲。因为个体无条件牺牲了,就说明集体的利益中,其实没有他的利益。