软件工程第一次结对作业
这个作业属于哪个课程 | 首页 - 软件工程2024 - 福州大学 - 班级博客 - 博客园 (cnblogs.com) |
---|---|
这个作业要求在哪里 | 2024秋软件工程结对作业(第一次之需求分析和原型设计) - 作业 - 软件工程2024 - 班级博客 - 博客园 (cnblogs.com) |
这个作业的目标 | 阅读构建之法,熟悉协作项目,根据需求设计原型 |
学号 | 042201520 |
协作伙伴 | 无 |
一、构建之法阅读成果
第3章 软件工程师的成长
在工作过程中,往往看不出软件工程师之间的区别,有时候高级工程师回家了,新手还在电脑前面干活。为什么一个高级工程师会比新手工资高那么多?除了比工作年头之外,软件工程师有什么更好的方法来衡量自己的能力和价值?在此章的阅读中,我们可以找到答案。
1.1 个人能力的衡量与发展
(1)IC在团队工作的流程
软件系统的绝大部分模块都是由个人开发或维护的。在软件工程的术语中,我们把这些单个的成员叫做Individ-ual Contributor(IC)。IC在团队中的流程是怎么样的呢?以开发人员为例,流程如下:
- 通过交流、实验、快速原型等方法,理解问题、需求或任务
- 提出多种解决办法并估计工作量
- 其中包括寻找以前的解决方案,因为很多工作是重复性的
- 与相关角色交流解决问题的提案,决定一个可行的方案
- 执行,把想法变成实际中能工作的代码,同时验证方案的可行性和其他特性(例如程序的效能等)
- 和团队的其他角色合作,在测试环境中测试实现方案,修复缺陷(Bug)。如果此方案有严重的问题,那么就考虑其他方案
- 在解决方案发布出去之后,对结果负责每个人的工作质量直接影响最终软件的质量
(2)初级工作师的成长
那么,初级软件工程师如何成长呢?我认为有下面几种成长。
- 积累软件开发相关的知识,提升技术技能(如对具体技术的掌握,动手能力)。例如:对Java、C/C++、C#的掌握,诊断/提高效能的技术,对设备驱动程序(Device Driver)、内核调试器(Kernel Debugger)的掌握;对于某一开发平台的掌握。
- 积累问题领域的知识和经验(例如:对医疗或金融行业的了解)。第一点和第二点都可以在很多简历上都可以看到,也可以比较容易地检测出来。随着经验的增长,一个工程师可以掌握更广泛、更深入的技术和问题领域的知识。
- 对通用的软件设计思想和软件工程思想的理解。这一方面就比较虚,什么是好的软件设计思想?什么是好的软件工程思想?一个工程师开了博客,转发了很多别人的文章,这算有思想么?另一个工程师坚持做任何设计都要画UML图,这算有思想么?
- 提升职业技能(区别于技术技能)。职业技能包括:自我管理的能力,表达和交流的能力,与人合作的能力,按质按量完成任务的执行力,这些能力在IT行业和其他行业都很重要。
- 实际成果。绝大部分软件工程师的工作成果都是可以公开的,你参与的产品用户评价如何,市场占有率如何,对用户有多大价值?你在其中起了什么作用?
(3)软件开发的工作量和质量
软件开发的工作量和质量怎么衡量呢?PSP认为有下列4个因素:
a . 项目/任务有多大?说明项目的大小,一般用代码行数(Line Of Code,LOC)来表示;也可以用功能点(Function Point)来表示。
b . 花了多少时间?可以用小时、天、月、年来表示。一组人所花费的时间可以用(人数×时间)来表示,例如某项目花费了10个人×月。
c . 质量如何?交付的代码中有多少缺陷?
交付有两个定义:
1.在代码完成(Code Complete)时,交付给测试人员
2.在软件最终发布时,交付给顾客可以用缺陷的数量来除以项目的大小。
d . 是否按时交付?
1.2 软件工程师的职业发展
就软件工程师这个职业而言,有很多证明个人能力的办法和模型,下面简单介绍几种。
1.考取国家级证书
好处 | 局限性 |
---|---|
国家认证,有一定的权威性和通用性 | 以答题/评分为主要考试形式,没有面对面的口试 |
任何人都可以参与 | 考试中每个人单独行动,不能考量团队合作能力 |
要考虑到通用性和稳定性,考题内容相对滞后于工业界的发展,部分内容相当滞后 |
2.职业成长
-
Steve McConnell
史蒂夫·迈克康奈尔(Steve McConnell)创立的公司(Construx Software)也为员工提供了一套成长路径。简介如下。首先,一个软件工程师需要具备一定的知识和能力。
知识:迈克康奈尔把相关的软件知识分为十大知识领域。
能力:一个工程师对这些知识的掌握分为如下四个阶段。
入门(Introductory);
熟练(Competency);
带头人(Leadership);
大师(Mastery)。
其次,工程师有职业成长级别(Professional De-velopment Ladder)。迈克康奈尔把工程师分为8个级别(8—15),一个工程师要从一个级别升到另一个级别,需要在各方面达到一定的要求。例如,要达到12级,工程师必须在三个知识领域达到“带头人”水平。例如要到达“工程管理(知识领域)的熟练(能力)”水平,工程师必须要做到以下几点。 阅读:4—6个经典文献的深入分析和阅读
工作经验:要参与并完成6个具体的项目
课程:要参加3个专门的课程有些级别 还要求工程师获得某种专业证书,以及在工业界、教育授课,发表论文,等等。
-
大公司版本
-
自我评估
1.3 软件工程师的职业发展
巴克斯顿说技能的反面是“Problem Solving”—“解决问题”
在实际解决问题的过程中,通过不断的练习,把那些低层次的问题都解决了,变成不用经过大脑的自动操作,然后才有时间和脑力来解决较高层次的问题。通过对低层次问题的熟练解决,我们便对更高层次的问题留有余力,而不是只盯着高层次问题反而忽略了最基础的问题。
第8章 需求分析(NABCD)
以下部分以具体作业实例来体现阅读成果
1.4 问题描述
客户现实困扰
在大学里,一些有想法的学生希望通过发起或参与跨专业的项目(创业、学术)来提升自己的综合能力,拓宽知识面和积累人脉。然而,在校园里要实现跨专业合作往往取决于自己积累的人脉,或者去请不同专业的老师帮忙介绍,这就导致合作的机会非常有限。
例如,对于一些需要多学科支持的项目(需要设计、编程和市场营销能力的创业项目),在偌大的校园中,学生们往往找不到志同道合的合作伙伴。
另外,不同专业之间的学生由于学校课程安排以及个人想法,可能在合作时间安排上、项目目标和沟通方式上可能存在差异,这进一步加大了合作的难度。同时,缺乏平台或资源来支持跨专业项目的持续发展。
1.5 问题分析(基于NABCD模型)
(1)N (Need,需求)
一些有想法的学生希望通过发起或参与跨专业的项目(创业、学术)来提升自己的综合能力,拓宽知识面和积累人脉,但苦于没有平台和资源等问题导致无法合作
(2)A(Approach,做法)
设计一个小程序提供平台,可以供学生与老师在参与项目时结合自身与他人的条件双向选择,以便更顺利的完成项目
(3) B(Benefit,好处)
提升自己的综合能力,拓宽知识面和积累人脉的同时,促进项目成功
(4) C(Competition,竞争)
通过增加小程序的简约性和便利性,与市面上的小程序或软件做出差异化,提升竞争力
(5) D(Delivery,推广)
以小程序的形式推广,便捷的同时也较容易上手
二、原型的建立与演示
本模型基于墨刀实现
https://modao.cc/proto/dfwVejwUskgsjjRQMx9ZD/sharing?view_mode=read_only #项目小程序-分享
2.1 用户登录界面
点开小程序,可以看到该程序是以学号/职工号作为账号登录的,简单易记
点击注册,即可选择身份
选择完身份后,教师与学生的注册界面大致相同,仅在学号/职工号上有所区别
注册完毕会回到登录界面,点击登录即可进入主界面
2.2 主界面
主界面下设三类,分为首页、项目、搜索
- 首页:会根据用户的学校及专业(专业需要进入个人信息填写)推荐项目
- 项目:展示用户已参与的项目,同时还有个人信息和项目添加的选项(右下角小圆标)
- 搜索:可以搜索项目
2.2.1 主界面-首页
点击项目,可查看项目的具体信息,点击右下角即可申请加入,
加入项目需要填写申请理由和联系方式,点击确认后返回主界面
同时在项目信息界面点击小人图标可以查看项目成员,点击成员会跳转到个人信息页面
2.2.2 主界面-项目
点击项目即可跳转到项目的界面
同样的点击项目即可进入项目信息界面,功能同上
点击右下角小人图标会进入用户的信息界面,在这里可以修改个人信息
点击右下角加号会进入项目相关的编辑,分别为创建项目、修改项目、项目消息、退出项目
四个选项的界面分别如下
2.2.3 主界面-搜索
为找到理想项目所设置的界面,点击项目同样可跳转项目信息界面
三、原型的分析与评估
3.1 原型功能分析
学生、老师通过创建项目,并对项目进行介绍以及留下项目的qq群,来吸引其他用户参与,抛弃了一般的聊天功能,而是让用户通过加入群聊来与成员交流(毕竟qq群比较方便且功能强大,一般用户大多不会使用小程序来交流通讯),这样既简化了页面设计和功能简约,同时也方便后续的代码实现
加入推荐项目功能,根据自己常常浏览的项目以及专业来对用户进行推荐,有些用户可能不知道自己具体想要参与什么项目,推荐项目这一主界面往往会给出他们可能喜欢的项目
用户信息界面只给出了必要的信息,同时用户可以自主选择联系方式,在保证能相互联系和了解基础的同时保障了用户的安全和隐私
3.2 原型功能框架图
3.3 原型评估
自我评估:界面比较简约,包含了最核心的需求的功能,但是感觉又太过简约,感觉功能较少但又说不出来少了啥
朋友评估:看上去风格很统一很舒服,可以多再加一些功能,考虑到这个项目完全由你一人完成,可以理解
四、结对过程
与陌生人结队本来应该是一次很令人高兴又担忧的事情,也许自己确实不够幸运吧,只感受到了后面一半
遇到个什么都没做的队友,即使我做了大部分事情,仅仅要求他按照我给他的任务来完成,也都是些简单活没有技术含量,他到最后一天仍旧没有给我任何反馈以及任何任务的完成情况
一场突如其来的的意外让本就没实力的我雪上加霜,很抱歉这次作业完全由我一人完成,希望老师酌情扣分T T
以下是最核心的结对过程,简单又令人难过
五、PSP表格
项目名称 | 项目信息 | 预估时间(min) | 实际时间(min) |
---|---|---|---|
学习 | 学习墨刀、阅读构筑之法 | 120 | 150 |
分析 | 需求分析、作业要求了解 | 30 | 20 |
设计 | 软件框架、原型设计 | 360 | 410 |
编写md | 编写md、设计md标题分级 | 60 | 40 |
测试 | 测试原型的界面跳转是否正确合理 | 60 | 30 |
大小度量、评估 | 对原型功能量进行度量,评估原型 | 30 | 30 |
过程改进 | 改进原型,风格调整 | 120 | 90 |
总结 | 对本次作业进行总结 | 20 | 30 |
总计时间 | 800 | 800 |
六、自我总结
这次作业是我第一次做结对作业,没想到会是这个结果...
不过没什么大碍,还是大致完成了任务,同时在阅读构建之法的过程中受益良多,尤其是《软件工程师的成长》这一章节让我知道了如何做一个优秀的软件工程师,有时候遇到“猪队友”也是难免的事,想必这也是我成为高级软件工程师所必须遇到的困难吧
同时对于墨刀原型设计软件的学习和使用让我感到十分有趣,感觉如果再做的细致一些的话都可以之间当软件使用了(当然这还是需要代码来实现的),对于这次作业总体还算比较满意,收获很大,教训也很大,还是要加把劲,努力使自己变得强大,这样遇到困难也能轻松应对^^