购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 引言

目前,软件公司的架构通常有横纵两条线:横向分为市场部、产品部、研发部、测试部等部门;纵向按照软件项目来组织,从各个部门抽调合适的人选来完成软件项目。

金融系统中常用的“支付”功能看起来就是数字的加减:用户购买某个物品,对应的用户账户减去商品的金额,且商家账户加上对应的金额之后,就表示交易成功。但在实际环境中,很可能有多种意外产生。例如,用户点击了“支付”按钮,但由于网络问题,显示未支付成功,此时如果用户选择继续支付,很可能会造成重复支付,需要系统能够自动发现重复支付并发起自动退款。另外,还可能有多种支付渠道,相应地,这个系统也必须提供支持。因而,产品经理需要清楚这些需求,对交互场景有清晰的概念;开发人员要有并发处理的多线程开发经验,请求、响应关系要对应好;测试人员也要设计有针对性的用例,减少系统中的隐患。

在当前的互联网环境下,IT软件公司通常采用快速迭代式开发,即敏捷开发。确定开发意向以后,通过工具(如Axure)绘制好界面、设计好交互序列之后,就进行编程开发,一般2周内完成任务,再有2周时间来测试交付。后期继续维护软件系统,确保其可靠、稳定运行,根据需要打补丁或者升级系统等。

这与传统的软件工程课程教学有很大的差别,具体对比如表1.1所示。学生学习软件工程课程时理想与现实截然不同,需要正视这些问题并给出解决方案。大学的软件工程课程一般只涉及软件基础功能的实现,而要实现“工程”级的应用,得到可靠、稳定运行的软件产品,需要付出相当大的努力,尤其在软件生命周期的各个阶段中,特别需要关注很多领域相关的技术细节。

表1.1 学习软件工程课程时理想与现实的对比

因而,软件工程课程提倡的学习方法有:一是从切身经历学,即自己动手开发一个实用的(小)产品,解决实际问题,从而体会软件开发过程的各个阶段,包括学习并运用编程语言、工具、理论以及合作技巧来解决问题,总结自己和团队在各个阶段的得失;二是从间接经验学,通过实际使用和代码评审等方式分析已有项目中的得失;三是通过结对编程和代码复审等方式学习别人的长处,从团队中不同角色(产品经理、界面设计、开发、测试、维护等)得到启发,还可以通过项目交流、研讨、答辩等方式向别的团队学习;四是向老师、助教、社区、用户学习,例如软件产品的Alpha/Beta发布就是以用户为主的。

软件工程非常注重实践,以下三点是检查软件工程实践效果的清单:

●能够研发出符合用户需求的软件,即公开发布、有实际用户并保持一定的用户量和持续使用量(3天后能保持10~100个用户),可以是PC、Web、手机应用,而不是没有用户使用的软件;

●通过一系列工具、流程、团队合作,能够在预计的时间内发布“足够好”的软件,即有项目规划/需求/设计/实现/发布/维护并有定时的进度发布,而不是通过临时熬夜、胡乱拼凑、一人代劳、延迟交付等方式糊弄;

●通过数据展现软件是可以维护和继续演化的,而不是找不到源代码、代码无文档、代码不能编译、没有task/bug等项目演化的资料。 VewrGIwYhpABAX5GBNuyasPDU1G5IddP3IAJD1LVUl/xNlHH9XAWQLmypxY8McJy

点击中间区域
呼出菜单
上一章
目录
下一章
×